|
@@ -4,37 +4,35 @@ import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
import cn.hutool.core.date.DatePattern;
|
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
-import cn.hutool.core.text.StrPool;
|
|
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.kxs.common.core.constant.SecurityConstants;
|
|
import com.kxs.common.core.constant.SecurityConstants;
|
|
|
import com.kxs.common.core.constant.enums.ErrorTypeEnum;
|
|
import com.kxs.common.core.constant.enums.ErrorTypeEnum;
|
|
|
|
|
+import com.kxs.common.core.constant.enums.KindTypeEnum;
|
|
|
import com.kxs.common.core.exception.GlobalCustomerException;
|
|
import com.kxs.common.core.exception.GlobalCustomerException;
|
|
|
import com.kxs.common.core.util.R;
|
|
import com.kxs.common.core.util.R;
|
|
|
import com.kxs.common.core.util.RetOps;
|
|
import com.kxs.common.core.util.RetOps;
|
|
|
-import com.kxs.common.core.util.SysUtils;
|
|
|
|
|
import com.kxs.common.security.util.SecurityUtils;
|
|
import com.kxs.common.security.util.SecurityUtils;
|
|
|
import com.kxs.system.api.dto.kxsapp.camp.CampOpenNumStatDTO;
|
|
import com.kxs.system.api.dto.kxsapp.camp.CampOpenNumStatDTO;
|
|
|
import com.kxs.system.api.dto.kxsapp.camp.PrizePoolDTO;
|
|
import com.kxs.system.api.dto.kxsapp.camp.PrizePoolDTO;
|
|
|
-import com.kxs.system.api.feign.RemoteOldService;
|
|
|
|
|
import com.kxs.system.api.model.KxsCamp;
|
|
import com.kxs.system.api.model.KxsCamp;
|
|
|
|
|
+import com.kxs.system.api.model.KxsCampBonusLog;
|
|
|
import com.kxs.system.api.model.KxsCampUser;
|
|
import com.kxs.system.api.model.KxsCampUser;
|
|
|
-import com.kxs.system.api.vo.admin.CampUserExcelVO;
|
|
|
|
|
|
|
+import com.kxs.system.api.vo.admin.camp.CampUserExcelVO;
|
|
|
import com.kxs.system.api.vo.kxsapp.camp.CampGetByIdVO;
|
|
import com.kxs.system.api.vo.kxsapp.camp.CampGetByIdVO;
|
|
|
import com.kxs.system.api.vo.kxsapp.camp.CampPageVO;
|
|
import com.kxs.system.api.vo.kxsapp.camp.CampPageVO;
|
|
|
import com.kxs.system.biz.constant.enums.CampStatusEnum;
|
|
import com.kxs.system.biz.constant.enums.CampStatusEnum;
|
|
|
import com.kxs.system.biz.constant.enums.SysErrorTypeEnum;
|
|
import com.kxs.system.biz.constant.enums.SysErrorTypeEnum;
|
|
|
import com.kxs.system.biz.mapper.KxsCampMapper;
|
|
import com.kxs.system.biz.mapper.KxsCampMapper;
|
|
|
|
|
+import com.kxs.system.biz.service.KxsCampBonusLogService;
|
|
|
import com.kxs.system.biz.service.KxsCampService;
|
|
import com.kxs.system.biz.service.KxsCampService;
|
|
|
import com.kxs.system.biz.service.KxsCampUserService;
|
|
import com.kxs.system.biz.service.KxsCampUserService;
|
|
|
import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
|
-import com.kxs.user.api.model.KxsLeader;
|
|
|
|
|
import com.kxs.user.api.model.KxsUser;
|
|
import com.kxs.user.api.model.KxsUser;
|
|
|
import com.pig4cloud.plugin.excel.vo.ErrorMessage;
|
|
import com.pig4cloud.plugin.excel.vo.ErrorMessage;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
@@ -61,12 +59,10 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
|
|
|
|
|
private final RemoteKxsUserService remoteKxsUserService;
|
|
private final RemoteKxsUserService remoteKxsUserService;
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- private final RemoteOldService remoteOldService;
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
private final KxsCampUserService kxsCampUserService;
|
|
private final KxsCampUserService kxsCampUserService;
|
|
|
|
|
|
|
|
|
|
+ private final KxsCampBonusLogService campBonusLogService;
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public R addData(KxsCamp param) {
|
|
public R addData(KxsCamp param) {
|
|
@@ -89,7 +85,7 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
return R.failed(SysErrorTypeEnum.PARAM_ERROR.getDescription());
|
|
return R.failed(SysErrorTypeEnum.PARAM_ERROR.getDescription());
|
|
|
}
|
|
}
|
|
|
KxsCamp kxsCamp = baseMapper.selectById(param.getId());
|
|
KxsCamp kxsCamp = baseMapper.selectById(param.getId());
|
|
|
- Optional.ofNullable(kxsCamp).orElseThrow(()-> new GlobalCustomerException(SysErrorTypeEnum.NOT_DATA.getDescription()));
|
|
|
|
|
|
|
+ Optional.ofNullable(kxsCamp).orElseThrow(() -> new GlobalCustomerException(SysErrorTypeEnum.NOT_DATA.getDescription()));
|
|
|
|
|
|
|
|
R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getCreateUserId(), SecurityConstants.FROM_IN);
|
|
R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getCreateUserId(), SecurityConstants.FROM_IN);
|
|
|
KxsUser user = RetOps.of(kxsUserR)
|
|
KxsUser user = RetOps.of(kxsUserR)
|
|
@@ -120,8 +116,8 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
.getData()
|
|
.getData()
|
|
|
.orElse(null);
|
|
.orElse(null);
|
|
|
KxsCamp kxsCamp = baseMapper.selectById(excel.getCampId());
|
|
KxsCamp kxsCamp = baseMapper.selectById(excel.getCampId());
|
|
|
- Optional.ofNullable(kxsCamp).orElseThrow(()-> new GlobalCustomerException(excel.getCampId() + "训练营编号不存在,请重新上传!"));
|
|
|
|
|
- if(Objects.equals(kxsCamp.getStatus(), CampStatusEnum.STATUS_END.getType())){
|
|
|
|
|
|
|
+ Optional.ofNullable(kxsCamp).orElseThrow(() -> new GlobalCustomerException(excel.getCampId() + "训练营编号不存在,请重新上传!"));
|
|
|
|
|
+ if (Objects.equals(kxsCamp.getStatus(), CampStatusEnum.STATUS_END.getType())) {
|
|
|
throw new GlobalCustomerException(excel.getCampId() + "训练营已结束,不允许导入!");
|
|
throw new GlobalCustomerException(excel.getCampId() + "训练营已结束,不允许导入!");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -143,6 +139,7 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
if (CollUtil.isEmpty(errorMsg)) {
|
|
if (CollUtil.isEmpty(errorMsg)) {
|
|
|
KxsCampUser campUser = new KxsCampUser();
|
|
KxsCampUser campUser = new KxsCampUser();
|
|
|
campUser.setCampId(excel.getCampId());
|
|
campUser.setCampId(excel.getCampId());
|
|
|
|
|
+ campUser.setGroupId(excel.getGroupId());
|
|
|
campUser.setUserId(user.getId());
|
|
campUser.setUserId(user.getId());
|
|
|
campUser.setUsername(user.getUsername());
|
|
campUser.setUsername(user.getUsername());
|
|
|
campUser.setUserCode(user.getUserCode());
|
|
campUser.setUserCode(user.getUserCode());
|
|
@@ -188,94 +185,103 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
|
|
|
|
|
log.info("开始处理兑换券下单订单号:{}统计到训练营奖金池", param.getOrderNo());
|
|
log.info("开始处理兑换券下单订单号:{}统计到训练营奖金池", param.getOrderNo());
|
|
|
|
|
|
|
|
- if(param.getProductId() == 27 || param.getProductId() == 28 || param.getProductId() == 39 || param.getProductId() == 40 ){
|
|
|
|
|
- //查询此用户是否参加进行中的训练营
|
|
|
|
|
- KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId());
|
|
|
|
|
- if (kxsCamp != null) {
|
|
|
|
|
- //给训练营加金额
|
|
|
|
|
- kxsCamp.setOrderNum(kxsCamp.getOrderNum() + 1);
|
|
|
|
|
- baseMapper.updateById(kxsCamp);
|
|
|
|
|
-
|
|
|
|
|
- //给创客团队加金额
|
|
|
|
|
- KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
|
|
|
|
|
- .eq(KxsCampUser::getCampId, kxsCamp.getId())
|
|
|
|
|
- .eq(KxsCampUser::getUserId, param.getUserId()));
|
|
|
|
|
- kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
|
|
|
|
|
- kxsCampUserService.updateById(kxsCampUser);
|
|
|
|
|
- log.info("用户{}参加训练营{},订单ID{}, 订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getOrderNum());
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- //查找此用户上级倒序后参加了训练营,把奖金加入到自己和训练营里
|
|
|
|
|
- R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
|
|
|
|
|
- KxsUser user = RetOps.of(kxsUserR)
|
|
|
|
|
- .getData()
|
|
|
|
|
- .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
|
|
|
|
|
- //下单用户的上级路径
|
|
|
|
|
- String[] pidPaths = user.getPidPath().split(StrPool.COMMA);
|
|
|
|
|
- //翻转上级从最近的开始查询
|
|
|
|
|
- Arrays.sort(pidPaths, Collections.reverseOrder());
|
|
|
|
|
- KxsCampUser kxsCampUser = baseMapper.selectParentUsersCamp(pidPaths);
|
|
|
|
|
- if (kxsCampUser != null) {
|
|
|
|
|
- //给训练营加金额
|
|
|
|
|
- kxsCamp = baseMapper.selectById(kxsCampUser.getCampId());
|
|
|
|
|
- kxsCamp.setOrderNum(kxsCamp.getOrderNum() + 1);
|
|
|
|
|
- baseMapper.updateById(kxsCamp);
|
|
|
|
|
-
|
|
|
|
|
- //给创客团队加金额
|
|
|
|
|
- kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
|
|
|
|
|
- kxsCampUserService.updateById(kxsCampUser);
|
|
|
|
|
- log.info("用户{}的上级{}参加训练营{},订单ID{},订单数{}", param.getUserId(), kxsCampUser.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getOrderNum());
|
|
|
|
|
- }
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- //下单组数
|
|
|
|
|
- BigDecimal number = NumberUtil.div(param.getTotalPrice(), 600);
|
|
|
|
|
- //订单奖金
|
|
|
|
|
- BigDecimal amount = NumberUtil.mul(number, 60);
|
|
|
|
|
//查询此用户是否参加进行中的训练营
|
|
//查询此用户是否参加进行中的训练营
|
|
|
KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId());
|
|
KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId());
|
|
|
- if (kxsCamp != null) {
|
|
|
|
|
|
|
+ R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
|
|
|
|
|
+ KxsUser user = RetOps.of(kxsUserR)
|
|
|
|
|
+ .getData()
|
|
|
|
|
+ .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
|
|
|
|
|
+ if (kxsCamp == null) {
|
|
|
|
|
+ kxsCamp = baseMapper.selectUserCamp(user.getPid());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsCamp == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ //大小盟主订单、盟主券续费的商品
|
|
|
|
|
+ if (param.getProductId() == 27 || param.getProductId() == 28 || param.getProductId() == 39 || param.getProductId() == 40) {
|
|
|
//给训练营加金额
|
|
//给训练营加金额
|
|
|
- kxsCamp.setBonusPool(NumberUtil.add(kxsCamp.getBonusPool(), amount));
|
|
|
|
|
- kxsCamp.setOrderNum(kxsCamp.getOrderNum() + number.intValue());
|
|
|
|
|
|
|
+ kxsCamp.setOrderNum(kxsCamp.getOrderNum() + 1);
|
|
|
baseMapper.updateById(kxsCamp);
|
|
baseMapper.updateById(kxsCamp);
|
|
|
|
|
|
|
|
//给创客团队加金额
|
|
//给创客团队加金额
|
|
|
KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
|
|
KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
|
|
|
.eq(KxsCampUser::getCampId, kxsCamp.getId())
|
|
.eq(KxsCampUser::getCampId, kxsCamp.getId())
|
|
|
.eq(KxsCampUser::getUserId, param.getUserId()));
|
|
.eq(KxsCampUser::getUserId, param.getUserId()));
|
|
|
- kxsCampUser.setTeamOrderPool(NumberUtil.add(kxsCampUser.getTeamOrderPool(), amount));
|
|
|
|
|
- kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + number.intValue());
|
|
|
|
|
|
|
+ kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
|
|
|
kxsCampUserService.updateById(kxsCampUser);
|
|
kxsCampUserService.updateById(kxsCampUser);
|
|
|
- log.info("用户{}参加训练营{},订单ID{}, 奖金池{},订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getBonusPool(), kxsCamp.getOrderNum());
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- //查找此用户上级倒序后参加了训练营,把奖金加入到自己和训练营里
|
|
|
|
|
- R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
|
|
|
|
|
- KxsUser user = RetOps.of(kxsUserR)
|
|
|
|
|
- .getData()
|
|
|
|
|
- .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
|
|
|
|
|
- //下单用户的上级路径
|
|
|
|
|
- String[] pidPaths = user.getPidPath().split(StrPool.COMMA);
|
|
|
|
|
- //翻转上级从最近的开始查询
|
|
|
|
|
- Arrays.sort(pidPaths, Collections.reverseOrder());
|
|
|
|
|
- KxsCampUser kxsCampUser = baseMapper.selectParentUsersCamp(pidPaths);
|
|
|
|
|
- if (kxsCampUser != null) {
|
|
|
|
|
|
|
+ log.info("用户/上级{}参加训练营{},订单ID{}, 订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getOrderNum());
|
|
|
|
|
+
|
|
|
|
|
+ KxsCampBonusLog kxsCampBonusLog = new KxsCampBonusLog();
|
|
|
|
|
+ kxsCampBonusLog.setCampId(kxsCamp.getId());
|
|
|
|
|
+ kxsCampBonusLog.setCampUserId(kxsCampUser.getUserId());
|
|
|
|
|
+ kxsCampBonusLog.setGroupId(kxsCampUser.getGroupId());
|
|
|
|
|
+ kxsCampBonusLog.setSourceId(user.getId());
|
|
|
|
|
+ kxsCampBonusLog.setUsername(user.getUsername());
|
|
|
|
|
+ kxsCampBonusLog.setUserCode(user.getUserCode());
|
|
|
|
|
+ kxsCampBonusLog.setRemark("商城下单");
|
|
|
|
|
+ kxsCampBonusLog.setSourceNum(1);
|
|
|
|
|
+ kxsCampBonusLog.setKind(KindTypeEnum.ADD.getType());
|
|
|
|
|
+ //27|39 大盟主下单和续费
|
|
|
|
|
+ kxsCampBonusLog.setSourceType(param.getProductId() == 27 || param.getProductId() == 39 ? 4 : 3);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ campBonusLogService.save(kxsCampBonusLog);
|
|
|
|
|
+ }else{
|
|
|
|
|
+
|
|
|
|
|
+ //下单组数
|
|
|
|
|
+ BigDecimal number = new BigDecimal(param.getBuyCount());
|
|
|
|
|
+ //订单奖金
|
|
|
|
|
+ BigDecimal amount = NumberUtil.mul(number, 60);
|
|
|
//给训练营加金额
|
|
//给训练营加金额
|
|
|
- kxsCamp = baseMapper.selectById(kxsCampUser.getCampId());
|
|
|
|
|
kxsCamp.setBonusPool(NumberUtil.add(kxsCamp.getBonusPool(), amount));
|
|
kxsCamp.setBonusPool(NumberUtil.add(kxsCamp.getBonusPool(), amount));
|
|
|
kxsCamp.setOrderNum(kxsCamp.getOrderNum() + number.intValue());
|
|
kxsCamp.setOrderNum(kxsCamp.getOrderNum() + number.intValue());
|
|
|
baseMapper.updateById(kxsCamp);
|
|
baseMapper.updateById(kxsCamp);
|
|
|
|
|
|
|
|
//给创客团队加金额
|
|
//给创客团队加金额
|
|
|
|
|
+ KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
|
|
|
|
|
+ .eq(KxsCampUser::getCampId, kxsCamp.getId())
|
|
|
|
|
+ .eq(KxsCampUser::getUserId, param.getUserId()));
|
|
|
kxsCampUser.setTeamOrderPool(NumberUtil.add(kxsCampUser.getTeamOrderPool(), amount));
|
|
kxsCampUser.setTeamOrderPool(NumberUtil.add(kxsCampUser.getTeamOrderPool(), amount));
|
|
|
kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + number.intValue());
|
|
kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + number.intValue());
|
|
|
kxsCampUserService.updateById(kxsCampUser);
|
|
kxsCampUserService.updateById(kxsCampUser);
|
|
|
- log.info("用户{}的上级{}参加训练营{},订单ID{},奖金池{},订单数{}", param.getUserId(), kxsCampUser.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getBonusPool(), kxsCamp.getOrderNum());
|
|
|
|
|
|
|
+
|
|
|
|
|
+ KxsCampBonusLog kxsCampBonusLog = new KxsCampBonusLog();
|
|
|
|
|
+ kxsCampBonusLog.setCampId(kxsCamp.getId());
|
|
|
|
|
+ kxsCampBonusLog.setCampUserId(kxsCampUser.getUserId());
|
|
|
|
|
+ kxsCampBonusLog.setGroupId(kxsCampUser.getGroupId());
|
|
|
|
|
+ kxsCampBonusLog.setSourceId(user.getId());
|
|
|
|
|
+ kxsCampBonusLog.setUsername(user.getUsername());
|
|
|
|
|
+ kxsCampBonusLog.setUserCode(user.getUserCode());
|
|
|
|
|
+ kxsCampBonusLog.setRemark("商城下单");
|
|
|
|
|
+ kxsCampBonusLog.setSourceNum(1);
|
|
|
|
|
+ kxsCampBonusLog.setKind(KindTypeEnum.ADD.getType());
|
|
|
|
|
+ if (param.getProductId() == 10) {
|
|
|
|
|
+ kxsCampBonusLog.setSourceType(0); //电签券
|
|
|
|
|
+ } else if (param.getProductId() == 11) {
|
|
|
|
|
+ kxsCampBonusLog.setSourceType(1); //大机券
|
|
|
|
|
+ } else if(param.getProductId() != 10000){
|
|
|
|
|
+ kxsCampBonusLog.setSourceType(2); //组合包
|
|
|
|
|
+ }
|
|
|
|
|
+ //盟主兑换券特殊处理,总共不能超过5组进入训练营的统计
|
|
|
|
|
+ if(param.getProductId() == 10000){
|
|
|
|
|
+ long count = campBonusLogService.count(Wrappers.<KxsCampBonusLog>query()
|
|
|
|
|
+ .select("SUM(source_num)")
|
|
|
|
|
+ .eq("camp_id", kxsCamp.getId())
|
|
|
|
|
+ .eq("source_id", user.getId())
|
|
|
|
|
+ .eq("source_type", 8));
|
|
|
|
|
+ if(count >= 5){
|
|
|
|
|
+ throw new GlobalCustomerException("用户"+user.getId()+"盟主兑换券已经兑换过5组,无法继续加入统计");
|
|
|
|
|
+ }
|
|
|
|
|
+ long subCount = 5 - count;
|
|
|
|
|
+ kxsCampBonusLog.setSourceNum(param.getBuyCount() > subCount ? (int) subCount : param.getBuyCount());
|
|
|
|
|
+ kxsCampBonusLog.setSourceType(8);
|
|
|
|
|
+ kxsCampBonusLog.setRemark("盟主兑换");
|
|
|
|
|
+ }
|
|
|
|
|
+ campBonusLogService.save(kxsCampBonusLog);
|
|
|
|
|
+ log.info("用户/上级{}参加训练营{},订单ID{}, 奖金池{},订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getBonusPool(), kxsCamp.getOrderNum());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -288,61 +294,53 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
LocalDateTime bindTime = LocalDateTimeUtil.parse(param.getBindTime(), DatePattern.UTC_SIMPLE_PATTERN);
|
|
LocalDateTime bindTime = LocalDateTimeUtil.parse(param.getBindTime(), DatePattern.UTC_SIMPLE_PATTERN);
|
|
|
//查询当前用户参加的训练营
|
|
//查询当前用户参加的训练营
|
|
|
KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId().intValue());
|
|
KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId().intValue());
|
|
|
- if (kxsCamp != null) {
|
|
|
|
|
- //判断绑定时间
|
|
|
|
|
- if(kxsCamp.getStartTime().isAfter(bindTime)){
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- //给训练营加金额
|
|
|
|
|
- kxsCamp.setOpenNum(kxsCamp.getOpenNum() + (param.getActType() == 4 ? 2 : 1));
|
|
|
|
|
- baseMapper.updateById(kxsCamp);
|
|
|
|
|
-
|
|
|
|
|
- //给创客团队加金额
|
|
|
|
|
- KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
|
|
|
|
|
- .eq(KxsCampUser::getCampId, kxsCamp.getId())
|
|
|
|
|
- .eq(KxsCampUser::getUserId, param.getUserId()));
|
|
|
|
|
-
|
|
|
|
|
- switch (param.getActType()){
|
|
|
|
|
- case 1 -> kxsCampUser.setTeamPosNum(kxsCampUser.getTeamPosNum() + 1);
|
|
|
|
|
- case 2 -> kxsCampUser.setTeamGdNum(kxsCampUser.getTeamGdNum() + 1);
|
|
|
|
|
- case 3 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 1);
|
|
|
|
|
- case 4 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 2);
|
|
|
|
|
- }
|
|
|
|
|
- kxsCampUser.setTeamOpenNum(kxsCampUser.getTeamPosNum() + kxsCampUser.getTeamGdNum() + kxsCampUser.getTeamLkbNum());
|
|
|
|
|
- kxsCampUserService.updateById(kxsCampUser);
|
|
|
|
|
- log.info("用户{}参加训练营{},开机数+1", param.getUserId(), kxsCamp.getId());
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- //查找此用户上级倒序后参加了训练营,把奖金加入到自己和训练营里
|
|
|
|
|
R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
|
|
R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
|
|
|
KxsUser user = RetOps.of(kxsUserR)
|
|
KxsUser user = RetOps.of(kxsUserR)
|
|
|
.getData()
|
|
.getData()
|
|
|
.orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
|
|
.orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
|
|
|
- //下单用户的上级路径
|
|
|
|
|
- String[] pidPaths = user.getPidPath().split(StrPool.COMMA);
|
|
|
|
|
- //翻转上级从最近的开始查询
|
|
|
|
|
- Arrays.sort(pidPaths, Collections.reverseOrder());
|
|
|
|
|
- KxsCampUser kxsCampUser = baseMapper.selectParentUsersCamp(pidPaths);
|
|
|
|
|
- if (kxsCampUser != null) {
|
|
|
|
|
- kxsCamp = baseMapper.selectById(kxsCampUser.getCampId());
|
|
|
|
|
- //判断绑定时间
|
|
|
|
|
- if(kxsCamp.getStartTime().isAfter(bindTime)){
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- kxsCamp.setOpenNum(kxsCamp.getOpenNum() + (param.getActType() == 4 ? 2 : 1));
|
|
|
|
|
- baseMapper.updateById(kxsCamp);
|
|
|
|
|
-
|
|
|
|
|
- //给创客团队加金额
|
|
|
|
|
- switch (param.getActType()){
|
|
|
|
|
- case 1 -> kxsCampUser.setTeamPosNum(kxsCampUser.getTeamPosNum() + 1);
|
|
|
|
|
- case 2 -> kxsCampUser.setTeamGdNum(kxsCampUser.getTeamGdNum() + 1);
|
|
|
|
|
- case 3 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 1);
|
|
|
|
|
- case 4 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 2);
|
|
|
|
|
- }
|
|
|
|
|
- kxsCampUser.setTeamOpenNum(kxsCampUser.getTeamPosNum() + kxsCampUser.getTeamGdNum() + kxsCampUser.getTeamLkbNum());
|
|
|
|
|
- kxsCampUserService.updateById(kxsCampUser);
|
|
|
|
|
- log.info("用户{}的上级{}参加训练营{},开机数+1", param.getUserId(), kxsCampUser.getUserId(), kxsCamp.getId());
|
|
|
|
|
|
|
+ if (kxsCamp == null) {
|
|
|
|
|
+ kxsCamp = baseMapper.selectUserCamp(user.getPid());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsCamp == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ //判断绑定时间
|
|
|
|
|
+ if (kxsCamp.getStartTime().isAfter(bindTime)) {
|
|
|
|
|
+ return;
|
|
|
}
|
|
}
|
|
|
|
|
+ //给训练营加金额
|
|
|
|
|
+ kxsCamp.setOpenNum(kxsCamp.getOpenNum() + (param.getActType() == 4 ? 2 : 1));
|
|
|
|
|
+ baseMapper.updateById(kxsCamp);
|
|
|
|
|
+
|
|
|
|
|
+ //给创客团队加金额
|
|
|
|
|
+ KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
|
|
|
|
|
+ .eq(KxsCampUser::getCampId, kxsCamp.getId())
|
|
|
|
|
+ .eq(KxsCampUser::getUserId, param.getUserId()));
|
|
|
|
|
+
|
|
|
|
|
+ switch (param.getActType()) {
|
|
|
|
|
+ case 1 -> kxsCampUser.setTeamPosNum(kxsCampUser.getTeamPosNum() + 1);
|
|
|
|
|
+ case 2 -> kxsCampUser.setTeamGdNum(kxsCampUser.getTeamGdNum() + 1);
|
|
|
|
|
+ case 3 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 1);
|
|
|
|
|
+ case 4 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 2);
|
|
|
|
|
+ }
|
|
|
|
|
+ kxsCampUser.setTeamOpenNum(kxsCampUser.getTeamPosNum() + kxsCampUser.getTeamGdNum() + kxsCampUser.getTeamLkbNum());
|
|
|
|
|
+ kxsCampUserService.updateById(kxsCampUser);
|
|
|
|
|
+
|
|
|
|
|
+ KxsCampBonusLog kxsCampBonusLog = new KxsCampBonusLog();
|
|
|
|
|
+ kxsCampBonusLog.setCampId(kxsCamp.getId());
|
|
|
|
|
+ kxsCampBonusLog.setSourceId(user.getId());
|
|
|
|
|
+ kxsCampBonusLog.setUsername(user.getUsername());
|
|
|
|
|
+ kxsCampBonusLog.setUserCode(user.getUserCode());
|
|
|
|
|
+ kxsCampBonusLog.setRemark("开通商户");
|
|
|
|
|
+ kxsCampBonusLog.setSourceNum(1);
|
|
|
|
|
+ kxsCampBonusLog.setKind(KindTypeEnum.ADD.getType());
|
|
|
|
|
+ switch (param.getActType()) {
|
|
|
|
|
+ case 1 -> kxsCampBonusLog.setSourceType(5);
|
|
|
|
|
+ case 2 -> kxsCampBonusLog.setSourceType(6);
|
|
|
|
|
+ case 3, 4 -> kxsCampBonusLog.setSourceType(7);
|
|
|
|
|
+ }
|
|
|
|
|
+ campBonusLogService.save(kxsCampBonusLog);
|
|
|
|
|
+ log.info("用户{}参加训练营{},开机数+1", param.getUserId(), kxsCamp.getId());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -354,102 +352,30 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
|
- @Async
|
|
|
|
|
- public void poweronQuantityStatistics() {
|
|
|
|
|
- //查询正在进行中的活动
|
|
|
|
|
- List<KxsCamp> list = baseMapper.selectList(Wrappers.<KxsCamp>lambdaQuery().eq(KxsCamp::getStatus, CampStatusEnum.STATUS_NORMAL.getType()));
|
|
|
|
|
- //查询活动参与的创客
|
|
|
|
|
- for (KxsCamp kxsCamp : list) {
|
|
|
|
|
-
|
|
|
|
|
- List<KxsCampUser> campUsers = kxsCampUserService.list(Wrappers.<KxsCampUser>lambdaQuery().eq(KxsCampUser::getCampId, kxsCamp.getId()));
|
|
|
|
|
- //清除参与创客的所有统计数据然后封装在map里方便统计
|
|
|
|
|
- Map<Integer, KxsCampUser> campUsersMap = new HashMap<>();
|
|
|
|
|
- for (KxsCampUser campUser : campUsers) {
|
|
|
|
|
- KxsCampUser kxsCampUser = new KxsCampUser();
|
|
|
|
|
- BeanUtil.copyProperties(campUser, kxsCampUser);
|
|
|
|
|
- kxsCampUser.setTeamLeaderNum(0);
|
|
|
|
|
- kxsCampUser.setTeamOpenNum(0);
|
|
|
|
|
- campUsersMap.put(campUser.getUserId(), kxsCampUser);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- //转换为userID集合
|
|
|
|
|
- List<Integer> userIds = campUsers.stream().map(KxsCampUser::getUserId).toList();
|
|
|
|
|
-
|
|
|
|
|
- /*
|
|
|
|
|
- * 查询活动区间开通的大盟主添加到奖金池
|
|
|
|
|
- */
|
|
|
|
|
- R<List<KxsLeader>> leadersR = remoteKxsUserService.getDateBetweenLeaders(LocalDateTimeUtil.format(kxsCamp.getStartTime(), DatePattern.NORM_DATETIME_PATTERN)
|
|
|
|
|
- , SecurityConstants.FROM_IN);
|
|
|
|
|
- List<KxsLeader> leaders = RetOps.of(leadersR)
|
|
|
|
|
- .getData()
|
|
|
|
|
- .orElse(Collections.emptyList());
|
|
|
|
|
- for (KxsLeader leader : leaders) {
|
|
|
|
|
- //如果是参与者自己下的单
|
|
|
|
|
- if (userIds.contains(leader.getUserId())) {
|
|
|
|
|
-
|
|
|
|
|
- //刷新参与创客的团队累计
|
|
|
|
|
- KxsCampUser kxsCampUser = campUsersMap.get(leader.getUserId());
|
|
|
|
|
- kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
|
|
|
|
|
- kxsCampUserService.update(Wrappers.<KxsCampUser>lambdaUpdate().eq(KxsCampUser::getId, kxsCampUser.getId()).set(KxsCampUser::getTeamLeaderNum, kxsCampUser.getTeamLeaderNum()));
|
|
|
|
|
- this.update(Wrappers.<KxsCamp>lambdaUpdate().eq(KxsCamp::getId, kxsCamp.getId()).set(KxsCamp::getOrderNum, kxsCamp.getOrderNum() + 1));
|
|
|
|
|
- log.info("参与者{}自己下单盟主,进入到{}订单统计", leader.getUserId(), kxsCamp.getTitle());
|
|
|
|
|
- continue;
|
|
|
|
|
- }
|
|
|
|
|
- //查询此盟主的上级
|
|
|
|
|
- R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(leader.getUserId(), SecurityConstants.FROM_IN);
|
|
|
|
|
- KxsUser user = RetOps.of(kxsUserR)
|
|
|
|
|
- .getData()
|
|
|
|
|
- .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
|
|
|
|
|
- //下单用户的上级路径
|
|
|
|
|
- String[] pidPaths = user.getPidPath().split(",");
|
|
|
|
|
- //通过用户的pidPath倒序查找最近所属的上级
|
|
|
|
|
- Integer userId = SysUtils.checkUserIsChildren(pidPaths, userIds);
|
|
|
|
|
- if (userId != null) {
|
|
|
|
|
- //刷新参与创客的团队累计
|
|
|
|
|
- KxsCampUser kxsCampUser = campUsersMap.get(userId);
|
|
|
|
|
- kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
|
|
|
|
|
- kxsCampUserService.update(Wrappers.<KxsCampUser>lambdaUpdate().eq(KxsCampUser::getId, kxsCampUser.getId()).set(KxsCampUser::getTeamLeaderNum, kxsCampUser.getTeamLeaderNum()));
|
|
|
|
|
-
|
|
|
|
|
- log.info("创客{}的上级{}参与训练营,进入到{}订单统计", leader.getUserId(), userId, kxsCamp.getTitle());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- //刷新训练营统计
|
|
|
|
|
- int leaderNum = 0;
|
|
|
|
|
- List<KxsCampUser> users = kxsCampUserService.list(Wrappers.<KxsCampUser>lambdaQuery().eq(KxsCampUser::getCampId, kxsCamp.getId()));
|
|
|
|
|
- for (KxsCampUser user : users) {
|
|
|
|
|
- leaderNum = leaderNum + user.getTeamLeaderNum();
|
|
|
|
|
- }
|
|
|
|
|
- kxsCamp.setOrderNum(kxsCamp.getOrderNum() + leaderNum);
|
|
|
|
|
- baseMapper.updateById(kxsCamp);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public R changeStatus(KxsCamp param) {
|
|
public R changeStatus(KxsCamp param) {
|
|
|
|
|
|
|
|
- if(!Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType()) && !Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())){
|
|
|
|
|
|
|
+ if (!Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType()) && !Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())) {
|
|
|
return R.failed(SysErrorTypeEnum.PARAM_ERROR.getDescription());
|
|
return R.failed(SysErrorTypeEnum.PARAM_ERROR.getDescription());
|
|
|
}
|
|
}
|
|
|
KxsCamp camp = baseMapper.selectById(param.getId());
|
|
KxsCamp camp = baseMapper.selectById(param.getId());
|
|
|
- Optional.ofNullable(camp).orElseThrow(()-> new GlobalCustomerException("训练营不存在"));
|
|
|
|
|
|
|
+ Optional.ofNullable(camp).orElseThrow(() -> new GlobalCustomerException("训练营不存在"));
|
|
|
|
|
|
|
|
- if(Objects.equals(camp.getStatus(), CampStatusEnum.STATUS_END.getType())){
|
|
|
|
|
|
|
+ if (Objects.equals(camp.getStatus(), CampStatusEnum.STATUS_END.getType())) {
|
|
|
return R.failed("已结束的训练营无法再次开启");
|
|
return R.failed("已结束的训练营无法再次开启");
|
|
|
}
|
|
}
|
|
|
- if(Objects.equals(camp.getStatus(), param.getStatus())){
|
|
|
|
|
|
|
+ if (Objects.equals(camp.getStatus(), param.getStatus())) {
|
|
|
return R.failed("训练营已开启");
|
|
return R.failed("训练营已开启");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
camp.setStatus(param.getStatus());
|
|
camp.setStatus(param.getStatus());
|
|
|
|
|
|
|
|
//开启活动刷新实际开始时间
|
|
//开启活动刷新实际开始时间
|
|
|
- if(Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType())){
|
|
|
|
|
|
|
+ if (Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType())) {
|
|
|
camp.setStartTime(LocalDateTime.now());
|
|
camp.setStartTime(LocalDateTime.now());
|
|
|
}
|
|
}
|
|
|
//结束活动刷新实际结束时间
|
|
//结束活动刷新实际结束时间
|
|
|
- if(Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())){
|
|
|
|
|
|
|
+ if (Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())) {
|
|
|
camp.setEndTime(LocalDateTime.now());
|
|
camp.setEndTime(LocalDateTime.now());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -457,28 +383,5 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-// private <T> void statusChange(T campT, LocalDateTime now) {
|
|
|
|
|
-// if (campT instanceof KxsCamp camp) {
|
|
|
|
|
-// if (camp.getEndTime().isBefore(now)) {
|
|
|
|
|
-// camp.setStatus(CampStatusEnum.STATUS_END.getType());
|
|
|
|
|
-// } else if (LocalDateTimeUtil.isIn(now, camp.getStartTime(), camp.getEndTime(), false, false)) {
|
|
|
|
|
-// camp.setStatus(CampStatusEnum.STATUS_NORMAL.getType());
|
|
|
|
|
-// } else {
|
|
|
|
|
-// camp.setStatus(CampStatusEnum.STATUS_CLOSE.getType());
|
|
|
|
|
-// }
|
|
|
|
|
-// }
|
|
|
|
|
-// if (campT instanceof CampPageVO camp) {
|
|
|
|
|
-// if (camp.getEndTime().isBefore(now)) {
|
|
|
|
|
-// camp.setStatus(CampStatusEnum.STATUS_END.getType());
|
|
|
|
|
-// } else if (LocalDateTimeUtil.isIn(now, camp.getStartTime(), camp.getEndTime(), false, false)) {
|
|
|
|
|
-// camp.setStatus(CampStatusEnum.STATUS_NORMAL.getType());
|
|
|
|
|
-// } else {
|
|
|
|
|
-// camp.setStatus(CampStatusEnum.STATUS_CLOSE.getType());
|
|
|
|
|
-// }
|
|
|
|
|
-// }
|
|
|
|
|
-// }
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|