TimedTaskUtils.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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. /**
  25. * 定时任务
  26. *
  27. * @author
  28. */
  29. @Slf4j
  30. @Component
  31. public class TimedTaskUtils {
  32. @Autowired
  33. private PartnerLiftingRecordService liftingRecordService;
  34. @Autowired
  35. private PartnerPartnerAccountMapper accountMapper;
  36. @Autowired
  37. private PartnerUserMapper partnerUserMapper;
  38. @Autowired
  39. private PartnerRuleService partnerRuleService;
  40. @Autowired
  41. private PartnerExpiredCommissionMapper expiredCommissionMapper;
  42. @Autowired
  43. private PartnerPremiumDetailsMapper premiumDetailsMapper;
  44. @Value("${partner.expireDays}")
  45. private Integer expireDays;
  46. /**
  47. * TODO 每天晚上 记录佣金过期记录
  48. */
  49. //@XxlJob("updateOrderDateNoon")
  50. @Scheduled(cron = "0 0 0 * * *")
  51. public void updateOrderDateNoon() {
  52. log.info("记录佣金过期定时任务开始执行:{}", expireDays);
  53. List<PartnerLiftingRecord> list = liftingRecordService.queryExpireDays(expireDays);
  54. for (PartnerLiftingRecord record : list) {
  55. //清空 当前用户抽成账户表
  56. PartnerPartnerAccount account = accountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class)
  57. .eq(PartnerPartnerAccount::getUserId, record.getUserId()).eq(PartnerPartnerAccount::getGrade, record.getOriginalLevel()));
  58. if (null == account){
  59. continue;
  60. }
  61. BigDecimal lockCommission = liftingRecordService.queryLockCommission(record.getUserId(), record.getOriginalLevel());
  62. PartnerExpiredCommission commission = getExpiredCommission(record,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. PartnerUser partnerUser = partnerUserMapper.selectOne(new LambdaQueryWrapper<PartnerUser>().eq(PartnerUser::getUserId, record.getUserId())
  70. .eq(PartnerUser::getGrade, record.getOriginalLevel()));
  71. // partnerUser.setIdentityTime(PartnerDateUtils.addDaysToday(new Date(),0));
  72. // partnerUserMapper.updateById(partnerUser);
  73. //更新单据状态
  74. premiumDetailsMapper.updateAppStatus(record.getOriginalLevel(), record.getUserId(), 2,partnerUser.getIdentityTime());
  75. }
  76. }
  77. private static PartnerExpiredCommission getExpiredCommission(PartnerLiftingRecord record, BigDecimal lockCommission) {
  78. PartnerExpiredCommission commission = new PartnerExpiredCommission();
  79. commission.setName(record.getName());
  80. commission.setMobile(record.getMobile());
  81. commission.setUserId(record.getUserId());
  82. commission.setDeptId(record.getDeptId());
  83. commission.setDeptName(record.getDeptName());
  84. commission.setGrade(record.getOriginalLevel());
  85. commission.setGradeAfter(record.getAfterChange());
  86. commission.setLockCommission(null == lockCommission ? new BigDecimal("0") : lockCommission);
  87. commission.setDowngradeTime(record.getCreateTime());
  88. commission.setExpiration(new Date());
  89. commission.setCreateTime(new Date());
  90. return commission;
  91. }
  92. /**
  93. * TODO: 更新降级考核时间
  94. */
  95. //@XxlJob("checkCommissionExpireTime")
  96. @Scheduled(cron = "0 0 0 * * *")
  97. public void checkCommissionExpireTime() {
  98. // TODO等级规则
  99. List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
  100. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  101. List<PartnerUser> partnerUsers = partnerUserMapper.queryDowngradedData();
  102. for (PartnerUser partnerUser : partnerUsers) {
  103. PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
  104. Integer khDays = rule.getKhDays();
  105. Date upgradeStartTime = getUpgradeStartTime(partnerUser);
  106. if (null == upgradeStartTime){
  107. continue;
  108. }
  109. System.out.println("开始时间:" + formatter.format(upgradeStartTime));
  110. // 生成结束时间
  111. Date upgradeEndTime = PartnerDateUtils.addDays(upgradeStartTime, khDays);
  112. System.out.println("结束时间:" + formatter.format(upgradeEndTime));
  113. if (PartnerDateUtils.isSameDay(upgradeEndTime)){
  114. // TODO考核条件 不满足时需锁定
  115. ExpiredCommissionUtils commissionUtils = SpringUtil.getBean(ExpiredCommissionUtils.class);
  116. boolean checked = commissionUtils.checkUpgradeConditions(partnerUser);
  117. if (!checked){
  118. //TODO 不满足
  119. commissionUtils.generateLockRecords(partnerUser);
  120. }
  121. //TODO 更新考核周期
  122. partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), PartnerDateUtils.addDaysToday(upgradeEndTime, 1),partnerUser.getGrade());
  123. }
  124. }
  125. update(partnerRuleEntities);
  126. }
  127. public void update(List<PartnerRuleEntity> partnerRuleEntities){
  128. QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
  129. queryWrapper.eq("identity_status", 0);
  130. queryWrapper.in("grade", 2,3,4);
  131. queryWrapper.orderByDesc("create_time");
  132. //queryWrapper.eq("user_id", "99140105M36012");
  133. List<PartnerUser> partnerUsers = partnerUserMapper.selectList(queryWrapper);
  134. for (PartnerUser filteredUser : partnerUsers) {
  135. PartnerRuleEntity rule = getRule(String.valueOf(filteredUser.getGrade()), partnerRuleEntities);
  136. Date upgradeStartTime = getUpgradeStartTime(filteredUser);
  137. if (null == upgradeStartTime){
  138. continue;
  139. }
  140. //TODO 更新考核周期
  141. updateUpgradeCycleTime(filteredUser,rule, upgradeStartTime);
  142. }
  143. }
  144. private Date getUpgradeStartTime(PartnerUser filteredUser){
  145. Date upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(filteredUser.getUserId(), filteredUser.getGrade());
  146. if (upgradeStartTime == null) {
  147. partnerUserMapper.updateUpgradeStartTime(filteredUser.getUserId(), filteredUser.getGrade());
  148. }
  149. return partnerUserMapper.selectUpgradeStartTime(filteredUser.getUserId(), filteredUser.getGrade());
  150. }
  151. public void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) {
  152. Integer khDays = rule.getKhDays();
  153. boolean today = false;
  154. while (!PartnerDateUtils.isWithinDays(upgradeTime, khDays)) {
  155. upgradeTime = PartnerDateUtils.addDaysToday(upgradeTime, khDays);
  156. today = true;
  157. }
  158. if (today){
  159. partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), upgradeTime,partnerUser.getGrade());
  160. }
  161. }
  162. public PartnerRuleEntity getRule(String grade,List<PartnerRuleEntity> partnerRuleEntities) {
  163. return partnerRuleEntities.stream().filter(partnerRuleEntity -> StringUtils.equals(partnerRuleEntity.getGrade(), grade)).findAny().orElse(null);
  164. }
  165. }