TimedTaskUtils.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package com.ydtech.modules.partner.utils;
  2. import cn.hutool.extra.spring.SpringUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.xxl.job.core.handler.annotation.XxlJob;
  6. import com.ydtech.modules.partner.dao.PartnerExpiredCommissionMapper;
  7. import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
  8. import com.ydtech.modules.partner.dao.PartnerPremiumDetailsMapper;
  9. import com.ydtech.modules.partner.dao.PartnerUserMapper;
  10. import com.ydtech.modules.partner.model.*;
  11. import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
  12. import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
  13. import com.ydtech.modules.partner.service.PartnerRuleService;
  14. import com.ydtech.utils.StringUtils;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.scheduling.annotation.Scheduled;
  19. import org.springframework.stereotype.Component;
  20. import java.math.BigDecimal;
  21. import java.text.SimpleDateFormat;
  22. import java.util.Date;
  23. import java.util.List;
  24. import java.util.Objects;
  25. /**
  26. * 定时任务
  27. *
  28. * @author
  29. */
  30. @Slf4j
  31. @Component
  32. public class TimedTaskUtils {
  33. @Autowired
  34. private PartnerLiftingRecordService liftingRecordService;
  35. @Autowired
  36. private PartnerPartnerAccountMapper accountMapper;
  37. @Autowired
  38. private PartnerUserMapper partnerUserMapper;
  39. @Autowired
  40. private PartnerRuleService partnerRuleService;
  41. @Autowired
  42. private PartnerExpiredCommissionMapper expiredCommissionMapper;
  43. @Autowired
  44. private PartnerPremiumDetailsMapper premiumDetailsMapper;
  45. @Value("${partner.expireDays}")
  46. private Integer expireDays;
  47. /**
  48. * TODO 每天晚上 记录佣金过期记录
  49. */
  50. //@XxlJob("updateOrderDateNoon")
  51. @Scheduled(cron = "0 0 0 * * *")
  52. public void updateOrderDateNoon() {
  53. log.info("记录佣金过期定时任务开始执行:{}", expireDays);
  54. List<PartnerUser> partnerUserList = partnerUserMapper.queryExpiredRecords(expireDays);
  55. for (PartnerUser partnerUser : partnerUserList) {
  56. PartnerPartnerAccount account = accountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class)
  57. .eq(PartnerPartnerAccount::getUserId, partnerUser.getUserId()).eq(PartnerPartnerAccount::getGrade, partnerUser.getGrade()));
  58. if (null == account) {
  59. continue;
  60. }
  61. BigDecimal lockCommission = liftingRecordService.queryLockCommission(partnerUser.getUserId(), String.valueOf(partnerUser.getGrade()));
  62. PartnerExpiredCommission commission = getExpiredUserCommission(partnerUser,lockCommission);
  63. expiredCommissionMapper.insert(commission);
  64. if (null != lockCommission){
  65. account.setExpiredAmount(account.getExpiredAmount().add(lockCommission));
  66. accountMapper.updateById(account);
  67. }
  68. //liftingRecordService.updateAuditStatusById(record);
  69. //更新单据状态
  70. premiumDetailsMapper.updateAppStatus(String.valueOf(partnerUser.getGrade()), partnerUser.getUserId(), 2,partnerUser.getUpgradeCycleStartTime(),partnerUser.getExpiredTime());
  71. }
  72. // List<PartnerLiftingRecord> list = liftingRecordService.queryExpireDays(expireDays);
  73. //
  74. // for (PartnerLiftingRecord record : list) {
  75. // //清空 当前用户抽成账户表
  76. // PartnerPartnerAccount account = accountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class)
  77. // .eq(PartnerPartnerAccount::getUserId, record.getUserId()).eq(PartnerPartnerAccount::getGrade, record.getOriginalLevel()));
  78. // if (null == account){
  79. // continue;
  80. // }
  81. // BigDecimal lockCommission = liftingRecordService.queryLockCommission(record.getUserId(), record.getOriginalLevel());
  82. // PartnerExpiredCommission commission = getExpiredCommission(record,lockCommission);
  83. // expiredCommissionMapper.insert(commission);
  84. // if (null != lockCommission){
  85. // account.setExpiredAmount(account.getExpiredAmount().add(lockCommission));
  86. // accountMapper.updateById(account);
  87. // }
  88. // liftingRecordService.updateAuditStatusById(record);
  89. // PartnerUser partnerUser = partnerUserMapper.selectOne(new LambdaQueryWrapper<PartnerUser>().eq(PartnerUser::getUserId, record.getUserId())
  90. // .eq(PartnerUser::getGrade, record.getOriginalLevel()));
  91. //// partnerUser.setIdentityTime(PartnerDateUtils.addDaysToday(new Date(),0));
  92. // partnerUser.setExpiredTime(PartnerDateUtils.addDaysToday(new Date(),0));
  93. // partnerUserMapper.updateById(partnerUser);
  94. // //更新单据状态
  95. // premiumDetailsMapper.updateAppStatus(record.getOriginalLevel(), record.getUserId(), 2,partnerUser.getIdentityTime());
  96. // }
  97. checkCommissionExpireTime();
  98. }
  99. private static PartnerExpiredCommission getExpiredUserCommission(PartnerUser record, BigDecimal lockCommission) {
  100. PartnerExpiredCommission commission = new PartnerExpiredCommission();
  101. commission.setName(record.getName());
  102. commission.setMobile(record.getMobile());
  103. commission.setUserId(record.getUserId());
  104. commission.setDeptId(record.getDeptId());
  105. commission.setDeptName(record.getDeptName());
  106. commission.setGrade(String.valueOf(record.getGrade()));
  107. commission.setGradeAfter(String.valueOf(record.getGrade() + 1));
  108. commission.setLockCommission(null == lockCommission ? new BigDecimal("0") : lockCommission);
  109. commission.setDowngradeTime(record.getCreateTime());
  110. commission.setExpiration(new Date());
  111. commission.setCreateTime(new Date());
  112. return commission;
  113. }
  114. private static PartnerExpiredCommission getExpiredCommission(PartnerLiftingRecord record, BigDecimal lockCommission) {
  115. PartnerExpiredCommission commission = new PartnerExpiredCommission();
  116. commission.setName(record.getName());
  117. commission.setMobile(record.getMobile());
  118. commission.setUserId(record.getUserId());
  119. commission.setDeptId(record.getDeptId());
  120. commission.setDeptName(record.getDeptName());
  121. commission.setGrade(record.getOriginalLevel());
  122. commission.setGradeAfter(record.getAfterChange());
  123. commission.setLockCommission(null == lockCommission ? new BigDecimal("0") : lockCommission);
  124. commission.setDowngradeTime(record.getCreateTime());
  125. commission.setExpiration(new Date());
  126. commission.setCreateTime(new Date());
  127. return commission;
  128. }
  129. /**
  130. * TODO: 更新降级考核时间
  131. */
  132. public void checkCommissionExpireTime() {
  133. // TODO等级规则
  134. List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
  135. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  136. List<PartnerUser> partnerUsers = partnerUserMapper.queryDowngradedData();
  137. for (PartnerUser partnerUser : partnerUsers) {
  138. PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
  139. Integer khDays = rule.getKhDays();
  140. Date upgradeStartTime = getUpgradeStartTime(partnerUser);
  141. if (null == upgradeStartTime){
  142. continue;
  143. }
  144. System.out.println("开始时间:" + formatter.format(upgradeStartTime));
  145. // 生成结束时间
  146. Date upgradeEndTime = PartnerDateUtils.addDays(upgradeStartTime, khDays);
  147. System.out.println("结束时间:" + formatter.format(upgradeEndTime));
  148. if (PartnerDateUtils.isSameDay(upgradeEndTime)){
  149. // TODO考核条件 不满足时需锁定
  150. ExpiredCommissionUtils commissionUtils = SpringUtil.getBean(ExpiredCommissionUtils.class);
  151. boolean checked = commissionUtils.checkUpgradeConditions(partnerUser);
  152. if (!checked){
  153. //TODO 不满足
  154. commissionUtils.generateLockRecords(partnerUser);
  155. }
  156. //TODO 更新考核周期
  157. partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), PartnerDateUtils.addDaysToday(upgradeEndTime, 1),partnerUser.getGrade(),PartnerDateUtils.addDaysToday(upgradeEndTime,khDays));
  158. }
  159. }
  160. update(partnerRuleEntities);
  161. }
  162. public void update(List<PartnerRuleEntity> partnerRuleEntities){
  163. QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
  164. queryWrapper.eq("identity_status", 0);
  165. queryWrapper.in("grade", 2,3,4);
  166. queryWrapper.orderByDesc("create_time");
  167. //queryWrapper.eq("user_id", "99140105M36012");
  168. List<PartnerUser> partnerUsers = partnerUserMapper.selectList(queryWrapper);
  169. for (PartnerUser filteredUser : partnerUsers) {
  170. PartnerRuleEntity rule = getRule(String.valueOf(filteredUser.getGrade()), partnerRuleEntities);
  171. Date upgradeStartTime = getUpgradeStartTime(filteredUser);
  172. if (null == upgradeStartTime){
  173. continue;
  174. }
  175. //TODO 更新考核周期
  176. updateUpgradeCycleTime(filteredUser,rule, upgradeStartTime);
  177. }
  178. }
  179. private Date getUpgradeStartTime(PartnerUser filteredUser){
  180. Date upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(filteredUser.getUserId(), filteredUser.getGrade());
  181. if (upgradeStartTime == null) {
  182. partnerUserMapper.updateUpgradeStartTime(filteredUser.getUserId(), filteredUser.getGrade());
  183. }
  184. return partnerUserMapper.selectUpgradeStartTime(filteredUser.getUserId(), filteredUser.getGrade());
  185. }
  186. public void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) {
  187. Integer khDays = rule.getKhDays();
  188. boolean today = false;
  189. while (!PartnerDateUtils.isWithinDays(upgradeTime, khDays)) {
  190. upgradeTime = PartnerDateUtils.addDaysToday(upgradeTime, khDays);
  191. today = true;
  192. }
  193. if (today){
  194. partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), upgradeTime,partnerUser.getGrade(), PartnerDateUtils.addDaysToday(upgradeTime,khDays));
  195. }
  196. }
  197. public PartnerRuleEntity getRule(String grade,List<PartnerRuleEntity> partnerRuleEntities) {
  198. return partnerRuleEntities.stream().filter(partnerRuleEntity -> StringUtils.equals(partnerRuleEntity.getGrade(), grade)).findAny().orElse(null);
  199. }
  200. }