init
This commit is contained in:
@@ -5,6 +5,8 @@ public class RedisHttpConstant {
|
||||
public static final String SYSTEM_CONFIG = REDIS_P + "system-config";
|
||||
|
||||
public static final String RESET_PASSWORD_CHECK_REDIS = REDIS_P + "resetPasswordCheck:%s";
|
||||
|
||||
public static final String CODE_REDIS = REDIS_P + "codeIncs:%s:%s";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,9 @@ import com.ruoyi.common.core.validate.AddGroup;
|
||||
import com.ruoyi.common.core.validate.EditGroup;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import com.ruoyi.xq.dto.admin.activity.ActivityShopAdminUpdateReq;
|
||||
import com.ruoyi.xq.dto.admin.activity.ActivityShopAdminVo;
|
||||
import com.ruoyi.xq.enums.activity.ActivityShopStatusEnum;
|
||||
import com.ruoyi.xq.service.ActivityShopService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -20,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 相亲会
|
||||
@@ -41,9 +44,14 @@ public class ActivityShopController extends BaseController {
|
||||
*/
|
||||
@SaCheckPermission("xq:activityShop:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ActivityShop> list(ActivityShop bo, PageQuery pageQuery) {
|
||||
public TableDataInfo<ActivityShopAdminVo> list(ActivityShop bo, PageQuery pageQuery) {
|
||||
Page<ActivityShop> page = activityShopService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
|
||||
return TableDataInfo.build(page);
|
||||
TableDataInfo<ActivityShopAdminVo> build = TableDataInfo.build(page, ActivityShopAdminVo::new);
|
||||
List<ActivityShopAdminVo> rows = build.getRows();
|
||||
for (ActivityShopAdminVo row : rows) {
|
||||
row.setOpenStatus(ActivityShopStatusEnum.getEnumByTime(row.getStartTime(), row.getEndTime()).getCode());
|
||||
}
|
||||
return build;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +75,7 @@ public class ActivityShopController extends BaseController {
|
||||
@Log(title = "相亲会", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ActivityShop bo) {
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ActivityShopAdminUpdateReq bo) {
|
||||
activityShopService.updateData(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@@ -10,9 +10,7 @@ import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.xq.domain.ActivityOrder;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppInfo;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppList;
|
||||
import com.ruoyi.xq.dto.app.activity.CreateOrderReq;
|
||||
import com.ruoyi.xq.dto.app.activity.*;
|
||||
import com.ruoyi.xq.dto.app.common.IdReq;
|
||||
import com.ruoyi.xq.dto.app.pay.OrderCreateVo;
|
||||
import com.ruoyi.xq.service.ActivityOrderService;
|
||||
@@ -26,7 +24,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
@Validated
|
||||
@RestController
|
||||
@Tag(name = "相亲会相关接口")
|
||||
@RequestMapping("/xq/activity/matchmaking")
|
||||
@RequestMapping("/api/activity/matchmaking")
|
||||
public class ActivityMatchmakingController {
|
||||
|
||||
@Autowired
|
||||
@@ -54,13 +52,22 @@ public class ActivityMatchmakingController {
|
||||
return R.ok(info);
|
||||
}
|
||||
|
||||
@PostMapping("/join")
|
||||
@Operation(summary = "参加相亲会")
|
||||
@Log(title = "参加相亲会", businessType = BusinessType.OTHER)
|
||||
public R<ActivityShopAppInfo> join(@RequestBody IdReq idReq){
|
||||
@PostMapping("/checkJoin")
|
||||
@Operation(summary = "参加相亲会-检测")
|
||||
@Log(title = "参加相亲会-检测", businessType = BusinessType.OTHER)
|
||||
public R<JoinResp> join(@RequestBody IdReq idReq){
|
||||
Long userId = LoginHelper.getUserId();
|
||||
activityShopService.join(userId,idReq.getId());
|
||||
return R.ok();
|
||||
JoinResp join = activityShopService.checkJoin(userId, idReq.getId());
|
||||
return R.ok(join);
|
||||
}
|
||||
|
||||
@PostMapping("/freeJoin")
|
||||
@Operation(summary = "参加相亲会(免费)")
|
||||
@Log(title = "参加相亲会(免费)", businessType = BusinessType.OTHER)
|
||||
public R<JoinResp> freeJoin(@RequestBody FreeJoinReq req){
|
||||
req.setUserId(LoginHelper.getUserId());
|
||||
JoinResp join = activityShopService.join(req);
|
||||
return R.ok(join);
|
||||
}
|
||||
|
||||
@PostMapping("/create/order")
|
||||
|
||||
@@ -54,6 +54,7 @@ public class ActivityOrder implements Serializable {
|
||||
* 活动标题
|
||||
*/
|
||||
private String activityTitle;
|
||||
private String activityCode;
|
||||
private String activityMobile;
|
||||
/**
|
||||
* 订单说明
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.ruoyi.xq.dto.admin.activity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class ActivityShopAdminUpdateReq {
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 活动标题
|
||||
*/
|
||||
private String activityTitle;
|
||||
/**
|
||||
* 活动展示图片
|
||||
*/
|
||||
private String activityBanner;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
/**
|
||||
* 城市名称
|
||||
*/
|
||||
private String cityName;
|
||||
/**
|
||||
* 城市编码
|
||||
*/
|
||||
private Integer cityCode;
|
||||
/**
|
||||
* 详细地址
|
||||
*/
|
||||
private String address;
|
||||
/**
|
||||
* 活动详细说明
|
||||
*/
|
||||
private String activityText;
|
||||
/**
|
||||
* 女生人数上限
|
||||
*/
|
||||
private Integer womenMaxNum;
|
||||
/**
|
||||
* 男生人数上限
|
||||
*/
|
||||
private Integer manMaxNum;
|
||||
/**
|
||||
* 女生参与价格
|
||||
*/
|
||||
private BigDecimal joinWomenPrice;
|
||||
/**
|
||||
* 男生参与价格
|
||||
*/
|
||||
private BigDecimal joinManPrice;
|
||||
/**
|
||||
* 必须强制会员参与
|
||||
*/
|
||||
private Integer mustVip;
|
||||
/**
|
||||
* 必须强制实名用户参与
|
||||
*/
|
||||
private Integer mustAuth;
|
||||
/**
|
||||
* 费用说明
|
||||
*/
|
||||
private String priceText;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.ruoyi.xq.dto.admin.activity;
|
||||
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ActivityShopAdminVo extends ActivityShop {
|
||||
@Schema(description = "状态 0-未开始 1-已开始 2-已结束")
|
||||
private Integer openStatus;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.ruoyi.xq.dto.app.activity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class FreeJoinReq {
|
||||
@Schema(description = "相亲会ID")
|
||||
private Long activityId;
|
||||
|
||||
@Schema(description = "手机号")
|
||||
private String mobile;
|
||||
|
||||
@Schema(hidden = true)
|
||||
private Long userId;
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import java.math.BigDecimal;
|
||||
@Data
|
||||
public class JoinResp {
|
||||
|
||||
@Schema(description = "是否成功加入")
|
||||
@Schema(description = "是否允许加入")
|
||||
private boolean joinSuccess;
|
||||
@Schema(description = "失败原因 1-未实名认证 2-未开启VIP 3-需要支付 99-其他")
|
||||
private Integer failCode;
|
||||
|
||||
33
ruoyi-xq/src/main/java/com/ruoyi/xq/kit/CodeKit.java
Normal file
33
ruoyi-xq/src/main/java/com/ruoyi/xq/kit/CodeKit.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package com.ruoyi.xq.kit;
|
||||
|
||||
import com.ruoyi.xq.constant.RedisHttpConstant;
|
||||
import org.redisson.api.RAtomicLong;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Component
|
||||
public class CodeKit {
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
|
||||
public String nextCode(String prefix){
|
||||
String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||
String key = String.format(RedisHttpConstant.CODE_REDIS, prefix, date);
|
||||
RAtomicLong atomicLong = redissonClient.getAtomicLong(key);
|
||||
long num = atomicLong.incrementAndGet();
|
||||
atomicLong.expire(Duration.ofDays(2));
|
||||
String code = String.format("%s%s%04d", prefix, date, num);
|
||||
return code;
|
||||
}
|
||||
public String nextCodeActivity(){
|
||||
return nextCode("AC");
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import com.ruoyi.xq.dto.admin.activity.ActivityShopAdminUpdateReq;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppInfo;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppList;
|
||||
import com.ruoyi.xq.dto.app.activity.FreeJoinReq;
|
||||
import com.ruoyi.xq.dto.app.activity.JoinResp;
|
||||
|
||||
/**
|
||||
@@ -24,13 +26,17 @@ public interface ActivityShopService extends IService<ActivityShop> {
|
||||
|
||||
ActivityShopAppInfo info(Long activityId, String activityCode);
|
||||
|
||||
JoinResp join(Long userId, Long activityId);
|
||||
JoinResp join(FreeJoinReq req);
|
||||
|
||||
JoinResp checkJoin(Long userId, Long id);
|
||||
|
||||
void saveData(ActivityShop bo);
|
||||
|
||||
void updateData(ActivityShop bo);
|
||||
void updateData(ActivityShopAdminUpdateReq bo);
|
||||
|
||||
void updateDataUser(ActivityShop bo);
|
||||
|
||||
void removeDataByIds(Long[] ids);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.xq.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import com.ruoyi.xq.domain.ActivityUser;
|
||||
|
||||
/**
|
||||
@@ -13,5 +14,9 @@ public interface ActivityUserService extends IService<ActivityUser> {
|
||||
|
||||
void joinActivity(String orderNo);
|
||||
|
||||
void joinActivity(Long activityId,String mobile,Long userId);
|
||||
|
||||
Long countByActivityIdAndGender(Long id, Integer gender);
|
||||
|
||||
boolean checkJoin(Long userId, Long activityId);
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ public class ActivityOrderServiceImpl extends ServiceImpl<ActivityOrderMapper,Ac
|
||||
order.setTraceId(traceId);
|
||||
order.setActivityId(activityShop.getId());
|
||||
order.setActivityTitle(activityShop.getActivityTitle());
|
||||
order.setActivityCode(activityShop.getActivityCode());
|
||||
order.setActivityMobile(req.getMobile());
|
||||
order.setOrderName("报名相亲会");
|
||||
order.setOrderNo(orderNo);
|
||||
|
||||
@@ -5,14 +5,18 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.BeanConvertUtil;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.xq.domain.*;
|
||||
import com.ruoyi.xq.dto.admin.activity.ActivityShopAdminUpdateReq;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppInfo;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppList;
|
||||
import com.ruoyi.xq.dto.app.activity.FreeJoinReq;
|
||||
import com.ruoyi.xq.dto.app.activity.JoinResp;
|
||||
import com.ruoyi.xq.enums.activity.ActivityShopStatusEnum;
|
||||
import com.ruoyi.xq.enums.common.AuditEnum;
|
||||
import com.ruoyi.xq.enums.userinfo.UserGenderEnum;
|
||||
import com.ruoyi.xq.kit.CodeKit;
|
||||
import com.ruoyi.xq.mapper.ActivityShopMapper;
|
||||
import com.ruoyi.xq.service.*;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
@@ -20,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -112,11 +117,21 @@ public class ActivityShopServiceImpl extends ServiceImpl<ActivityShopMapper,Acti
|
||||
return appInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JoinResp join(FreeJoinReq req) {
|
||||
JoinResp joinResp = this.checkJoin(req.getUserId(), req.getActivityId());
|
||||
if(!joinResp.isJoinSuccess()){
|
||||
return joinResp;
|
||||
}
|
||||
activityUserService.joinActivity(req.getActivityId(),req.getMobile(),req.getUserId());
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 1-未实名认证 2-未开启VIP 3-需要支付
|
||||
*/
|
||||
@Override
|
||||
public JoinResp join(Long userId, Long activityId) {
|
||||
public JoinResp checkJoin(Long userId, Long activityId) {
|
||||
ActivityShop activityShop = this.getById(activityId);
|
||||
if(activityShop == null){
|
||||
throw new ServiceException("活动不存在");
|
||||
@@ -126,6 +141,29 @@ public class ActivityShopServiceImpl extends ServiceImpl<ActivityShopMapper,Acti
|
||||
throw new ServiceException("用户异常");
|
||||
}
|
||||
// 检测是否已经加入
|
||||
boolean join = activityUserService.checkJoin(userId,activityId);
|
||||
if(join){
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(99);
|
||||
resp.setFailText("您已经参加该活动");
|
||||
return resp;
|
||||
}
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
if(now.isBefore(activityShop.getStartTime())){
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(99);
|
||||
resp.setFailText("活动还未开始");
|
||||
return resp;
|
||||
}
|
||||
if(now.isAfter(activityShop.getEndTime())){
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(99);
|
||||
resp.setFailText("活动已经结束");
|
||||
return resp;
|
||||
}
|
||||
// 人数检测
|
||||
if(UserGenderEnum.MAN.getCode().equals(user.getGender())){
|
||||
if(activityShop.getManMaxNum() <= activityShop.getJoinManNum() + activityShop.getHandManNum()){
|
||||
@@ -191,17 +229,19 @@ public class ActivityShopServiceImpl extends ServiceImpl<ActivityShopMapper,Acti
|
||||
throw new ServiceException("用户异常");
|
||||
}
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(99);
|
||||
resp.setFailText("加入失败");
|
||||
resp.setJoinSuccess(true);
|
||||
return resp;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private AreaCodeService areaCodeService;
|
||||
@Autowired
|
||||
private CodeKit codeKit;
|
||||
|
||||
@Override
|
||||
public void saveData(ActivityShop bo) {
|
||||
String code = codeKit.nextCodeActivity();
|
||||
bo.setActivityCode(code);
|
||||
if(bo.getStartTime().isAfter(bo.getEndTime())){
|
||||
throw new ServiceException("开始时间不能大于结束时间");
|
||||
}
|
||||
@@ -211,19 +251,14 @@ public class ActivityShopServiceImpl extends ServiceImpl<ActivityShopMapper,Acti
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateData(ActivityShop bo) {
|
||||
public void updateData(ActivityShopAdminUpdateReq bo) {
|
||||
if(bo.getStartTime().isAfter(bo.getEndTime())){
|
||||
throw new ServiceException("开始时间不能大于结束时间");
|
||||
}
|
||||
ActivityShop update = BeanConvertUtil.convertTo(bo, ActivityShop::new);
|
||||
AreaCode areaCode = areaCodeService.getById(bo.getCityCode());
|
||||
bo.setCityName(areaCode.getName());
|
||||
bo.setCreateTime(null);
|
||||
bo.setUpdateTime(null);
|
||||
bo.setHandManNum(null);
|
||||
bo.setHandWomenNum(null);
|
||||
bo.setJoinManNum(null);
|
||||
bo.setJoinWomenNum(null);
|
||||
this.updateById(bo);
|
||||
update.setCityName(areaCode.getName());
|
||||
this.updateById(update);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,7 +3,9 @@ package com.ruoyi.xq.service.impl;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.xq.domain.ActivityOrder;
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import com.ruoyi.xq.domain.ActivityUser;
|
||||
import com.ruoyi.xq.dto.common.user.MinUser;
|
||||
import com.ruoyi.xq.mapper.ActivityUserMapper;
|
||||
import com.ruoyi.xq.service.ActivityOrderService;
|
||||
import com.ruoyi.xq.service.ActivityShopService;
|
||||
@@ -44,8 +46,28 @@ public class ActivityUserServiceImpl extends ServiceImpl<ActivityUserMapper, Act
|
||||
activityShopService.resetActivityShopUser(activityOrder.getActivityId(), activityOrder.getGender());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void joinActivity(Long activityId,String mobile,Long userId) {
|
||||
ActivityShop activityShop = activityShopService.getById(activityId);
|
||||
MinUser minUser = userService.getMinUserById(userId);
|
||||
ActivityUser activityUser = new ActivityUser();
|
||||
activityUser.setActivityId(activityShop.getId());
|
||||
activityUser.setUserId(minUser.getId());
|
||||
activityUser.setUsercode(minUser.getUsercode());
|
||||
activityUser.setGender(minUser.getGender());
|
||||
activityUser.setMobile(mobile);
|
||||
activityUser.setPay(0);
|
||||
this.save(activityUser);
|
||||
activityShopService.resetActivityShopUser(activityId, minUser.getGender());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long countByActivityIdAndGender(Long activityId, Integer gender) {
|
||||
return this.count(Wrappers.lambdaQuery(ActivityUser.class).eq(ActivityUser::getActivityId, activityId).eq(ActivityUser::getGender, gender));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkJoin(Long userId, Long activityId) {
|
||||
return this.exists(Wrappers.lambdaQuery(ActivityUser.class).eq(ActivityUser::getActivityId, activityId).eq(ActivityUser::getUserId, userId));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user