Scheduler.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. //package com.cyksj.task;
  2. //
  3. //import cn.hutool.core.date.DateField;
  4. //import cn.hutool.core.date.DateTime;
  5. //import cn.hutool.core.date.DateUtil;
  6. //import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. //import com.cyksj.common.exception.BusinessRuntimeException;
  8. //import com.cyksj.common.util.Jsons;
  9. //import com.cyksj.dto.RedisKey;
  10. //import com.cyksj.mapper.*;
  11. //import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
  12. //import com.cyksj.model.dto.WxMpTemplateData;
  13. //import com.cyksj.model.dto.WxMpTemplateMessage;
  14. //import com.cyksj.model.entity.*;
  15. //import com.cyksj.redis.RedisService;
  16. //import com.cyksj.service.order.OrderDonService;
  17. //import com.cyksj.service.register.RegisterOrderDonService;
  18. //import com.cyksj.service.register.SpotifyService;
  19. //import com.cyksj.service.wechat.WeChatService;
  20. //import lombok.RequiredArgsConstructor;
  21. //import lombok.extern.slf4j.Slf4j;
  22. //import org.springframework.dao.DuplicateKeyException;
  23. //import org.springframework.scheduling.annotation.Scheduled;
  24. //import org.springframework.stereotype.Component;
  25. //import org.springframework.transaction.annotation.Transactional;
  26. //
  27. //import java.util.*;
  28. //import java.util.stream.Collectors;
  29. //
  30. //import static com.cyksj.common.constant.WeChatTemplateConst.EXPIRY_TEMPLATE;
  31. //
  32. //@Component
  33. //@Slf4j
  34. //@RequiredArgsConstructor
  35. //public class Scheduler {
  36. //
  37. // private final GoodsDonMapper donMapper;
  38. //
  39. // private final GroupsMapper groupsMapper;
  40. //
  41. // private final OrderDonService orderDonService;
  42. //
  43. // private final GroupsRelationMapper groupsRelationMapper;
  44. //
  45. // private final UserMapper userMapper;
  46. //
  47. // private final GoodsDonSkuMapper skuMapper;
  48. //
  49. // private final WeChatService weChatService;
  50. //
  51. // private final AccountMapper accountMapper;
  52. //
  53. // private final CustomerServiceMapper customerServiceMapper;
  54. //
  55. // private final SpotifyService spotifyService;
  56. //
  57. // private final RegisterOrderDonMapper registerOrderDonMapper;
  58. //
  59. // private final RedisService redisService;
  60. //
  61. // private final SysConfigMapper sysConfigMapper;
  62. //
  63. // private final DistributeWaitingSendPointsMapper distributeWaitingSendPointsMapper;
  64. //
  65. // private final RegisterOrderDonService registerOrderDonService;
  66. //
  67. // private final AppleAutoRegisterDataMapper appleAutoRegisterDataMapper;
  68. //
  69. // private final RealGoodsInterestUserMapper realGoodsInterestUserMapper;
  70. //
  71. //
  72. // /**
  73. // * 每5分钟清理过期账号
  74. // */
  75. // @Scheduled(cron = "0 0/5 * * * ?")
  76. // @Transactional(rollbackFor = Throwable.class)
  77. // public void clearExpiry() {
  78. // DateTime now = new DateTime();
  79. // List<GroupsRelation> expiryList = groupsRelationMapper.selectList(Wrappers.lambdaQuery(GroupsRelation.class).le(GroupsRelation::getExpiryTime, now));
  80. // log.info("定时清理过期账号start ===> 数量:{}", expiryList.size());
  81. // //过期账号清楚有效期
  82. // expiryList.forEach(relation -> delRelation(relation));
  83. // }
  84. //
  85. // @Scheduled(cron = "0 0 9 * * ?")
  86. // public void expiryWxMsg() throws Exception {
  87. // DateTime now = new DateTime();
  88. // DateTime zero = DateUtil.offset(now, DateField.HOUR, -9);
  89. // DateTime time = DateUtil.offset(zero, DateField.DAY_OF_MONTH, 5);
  90. // List<GroupsRelation> groupsRelations = groupsRelationMapper.selectList(Wrappers.lambdaQuery(GroupsRelation.class).le(GroupsRelation::getExpiryTime, time));
  91. // for (GroupsRelation relation : groupsRelations) {
  92. // User user = userMapper.selectById(relation.getUserId());
  93. // WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
  94. // .setToUser(user.getOpenId())
  95. // .setTemplateId(EXPIRY_TEMPLATE)
  96. // .setUrl(" ");
  97. //
  98. // /**
  99. // * 您的账号即将到期
  100. // * 账号名称:Netflix账号
  101. // * 平台:Netflix
  102. // * 失效日期:5天后
  103. // * 异常原因:账号即将到期
  104. // * 请尽快续费,以免影响使用
  105. // */
  106. // GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
  107. // GoodsDonSku donSku = skuMapper.selectById(groupsTrips.getSkuId());
  108. // GoodsDon goodsDon = donMapper.selectById(donSku.getGoodsId());
  109. // WxMpTemplateMessage.TemplateData data = templateMessage.getData();
  110. // data.setFirst(new WxMpTemplateData("您的账号即将到期"));
  111. // data.setKeyword1(new WxMpTemplateData(goodsDon.getTitle()));
  112. // data.setKeyword2(new WxMpTemplateData(goodsDon.getTitle()));
  113. // data.setKeyword3(new WxMpTemplateData(DateUtil.format(relation.getExpiryTime(), "yyyy-MM-dd HH:mm:ss")));
  114. // data.setKeyword4(new WxMpTemplateData("账号即将到期"));
  115. // data.setRemark(new WxMpTemplateData("请尽快续费,以免影响使用"));
  116. // log.info("发送账号即将到期消息至用户:{}", user.getId());
  117. // weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
  118. //
  119. // List<Account> accounts = accountMapper.selectList(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, time));
  120. // List<CustomerService> customerServices = customerServiceMapper.selectList(null);
  121. // if(!accounts.isEmpty()){
  122. // for (CustomerService customerService : customerServices) {
  123. // WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
  124. // .setToUser(customerService.getOpenId())
  125. // .setTemplateId(EXPIRY_TEMPLATE)
  126. // .setUrl(" ");
  127. // WxMpTemplateMessage.TemplateData data2 = manageMessage.getData();
  128. // data2.setFirst(new WxMpTemplateData("您有" + accounts.size() + "个主账号即将到期"));
  129. // data2.setKeyword1(new WxMpTemplateData("车队主账号"));
  130. // data2.setKeyword2(new WxMpTemplateData("车队主账号"));
  131. // data2.setKeyword3(new WxMpTemplateData("5天后"));
  132. // data2.setKeyword4(new WxMpTemplateData("账号即将到期"));
  133. // data2.setRemark(new WxMpTemplateData("请尽快登录后台-在账号管理中查看"));
  134. // log.info("发送账号即将到期消息至客服:{}", customerService.getNickName());
  135. // weChatService.sendTemplateMessage(weChatService.getAccessToken(),Jsons.toJson(manageMessage));
  136. // }
  137. // }
  138. // }
  139. //
  140. //
  141. // }
  142. //
  143. // private void delRelation(GroupsRelation relation) {
  144. // Date expireTime = relation.getExpiryTime();
  145. // relation.setStartTime(null);
  146. // relation.setExpiryTime(null);
  147. // relation.setUserId(0l);
  148. // relation.setStatus(GroupsRelation.Status.none);
  149. // relation.setIsHandle(false);
  150. // relation.setRenewStatus(false);
  151. // relation.setAccount(null);
  152. // Integer success = groupsRelationMapper.updateExpiryTime(relation, expireTime);
  153. // if (success == 1) {
  154. // log.info("开始清除过期子账号,座位号:{}", relation.getId());
  155. // int count = groupsMapper.incrAvailableNum(relation.getGroupsId());
  156. // if (count == 0) {
  157. // log.error("车位异常 groupId:{}", relation.getGroupsId());
  158. // throw new BusinessRuntimeException("车位异常");
  159. // }
  160. // }
  161. // }
  162. //
  163. //
  164. // /**
  165. // * 定时关闭订单
  166. // */
  167. // @Scheduled(cron = "0 0/5 * * * ?")
  168. // public void closeOrder() {
  169. // //获取为支付订单
  170. // DateTime now = new DateTime();
  171. // Date newDate = DateUtil.offset(now, DateField.MINUTE, -5);
  172. // List<OrderDon> list = orderDonService.list(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getStatus, OrderDon.Status.noPayment).le(OrderDon::getCreatedTime,newDate));
  173. // log.info("定时任务 关闭 订单数:{}",list.size());
  174. // list.forEach((orderDon)->{
  175. // orderDonService.closeOrder(orderDon.getId());
  176. // });
  177. // }
  178. //
  179. // /**
  180. // * spotify 注册
  181. // */
  182. // @Scheduled(cron = "0 0/5 * * * ?")
  183. // public void spotify() {
  184. // List<RegisterOrderDon> spotify = registerOrderDonMapper.selectList(Wrappers.lambdaQuery(RegisterOrderDon.class)
  185. // .select(RegisterOrderDon::getId)
  186. // .eq(RegisterOrderDon::getPlatform, "spotify")
  187. // .eq(RegisterOrderDon::getStatus, RegisterOrderDon.Status.hasPayment));
  188. // for (RegisterOrderDon orderDon : spotify) {
  189. // spotifyService.register(orderDon.getId());
  190. // }
  191. // }
  192. //
  193. // /**
  194. // * 每日免单重置
  195. // */
  196. // @Scheduled(cron = "0 0 0 * * ?")
  197. // public void freeReset() {
  198. // log.info("每日重置 spotify 免单账户数 [start]");
  199. // SysConfig register_free_num = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, "register_free_num"));
  200. // redisService.set(RedisKey.SPOTIFY_FREE_NUM, Long.parseLong(register_free_num.getSysValue()));
  201. // log.info("每日重置 spotify 免单账户数 [end] 数量:{}",register_free_num.getSysValue());
  202. // }
  203. //
  204. // /**
  205. // * 分销订单积分奖励分发
  206. // */
  207. // @Scheduled(cron = "0 0 0/2 * * ?")
  208. // @Transactional(rollbackFor = Throwable.class)
  209. // public void distributeOrdersSendPoints() {
  210. // List<DistributeWaitingSendPoints> waitingSendPoints = Optional.ofNullable(distributeWaitingSendPointsMapper.selectList(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class)
  211. // .eq(DistributeWaitingSendPoints::getSendStatus, DistributeWaitingSendPoints.Status.waiting)
  212. // .lt(DistributeWaitingSendPoints::getSendTime, DateTime.now())
  213. // .select(DistributeWaitingSendPoints::getId,
  214. // DistributeWaitingSendPoints::getOrderId,
  215. // DistributeWaitingSendPoints::getPoints,
  216. // DistributeWaitingSendPoints::getUserId,
  217. // DistributeWaitingSendPoints::getSharedId,
  218. // DistributeWaitingSendPoints::getSendTime))).orElse(new ArrayList<>());
  219. // log.info("查询分销订单积分分发记录开始,条数:{}=======》", waitingSendPoints.size());
  220. // waitingSendPoints.forEach(wait -> {
  221. // //积分待发人
  222. // Long sharedId = wait.getSharedId();
  223. // User user = userMapper.selectById(sharedId);
  224. // if (user == null) {
  225. // wait.setSendStatus(DistributeWaitingSendPoints.Status.not_exist);
  226. // log.info("分销订单,发送积分用户不存在");
  227. // distributeWaitingSendPointsMapper.updateById(wait);
  228. // } else {
  229. // wait.setSendStatus(DistributeWaitingSendPoints.Status.success);
  230. // log.info("更新用户积分开始=====>");
  231. // while (true) {
  232. // user = userMapper.selectById(sharedId);
  233. // if (user == null) {
  234. // break;
  235. // }
  236. // Integer update = userMapper.updatePoints(user.getId(), user.getPoints(), wait.getPoints());
  237. // if (update == 1) {
  238. // distributeWaitingSendPointsMapper.updateById(wait);
  239. // log.info("分销积分表订单id:{}发放积分success", wait.getOrderId());
  240. // break;
  241. // }
  242. // }
  243. // }
  244. // });
  245. // }
  246. //
  247. // /**
  248. // * 定时更新未支付AppleID自动注册订单
  249. // */
  250. // @Scheduled(cron = "0 0/5 * * * ?")
  251. // public void updateAppleAutoStatus() {
  252. // //获取为支付订单
  253. // DateTime now = new DateTime();
  254. // Date newDate = DateUtil.offset(now, DateField.MINUTE, -5);
  255. // List<Long> orderDons = appleAutoRegisterDataMapper.getAllNoPayOrders(newDate);
  256. // log.info("定时更新未支付AppleID自动注册订单 订单数:{}",orderDons.size());
  257. // orderDons.forEach((orderId)->{
  258. // registerOrderDonService.updateAppleAutoStatus(orderId);
  259. // });
  260. // }
  261. //
  262. // /**
  263. // * 实物订单意愿数据
  264. // */
  265. // @Scheduled(cron = "0 0/5 * * * ?")
  266. // public void realGoodsInterestUser() {
  267. // Optional.ofNullable(orderDonService.selectNoPaymentRealGoods()).ifPresent(list -> {
  268. // if (list.size() > 0) {
  269. // Map<String, List<RealGoodsInterestUser>> collect = list.stream().collect(Collectors.groupingBy(RealGoodsInterestUser::getGroupBy));
  270. // log.info("实物订单意愿数据同步开始");
  271. // collect.forEach((k, data) -> {
  272. // RealGoodsInterestUser realGoodsInterestUser = null;
  273. // if (data.size() == 0) {
  274. // realGoodsInterestUser = data.get(0);
  275. // } else {
  276. // List<RealGoodsInterestUser> high = data.stream().sorted(Comparator.comparing(RealGoodsInterestUser::getMoney).thenComparing(RealGoodsInterestUser::getOrderCreatedTime).reversed()).collect(Collectors.toList());
  277. // realGoodsInterestUser = high.get(0);
  278. // }
  279. // try {
  280. // realGoodsInterestUserMapper.insert(realGoodsInterestUser);
  281. // } catch (DuplicateKeyException e) {
  282. // log.info("重复插入用户相同实物商品记录");
  283. // }
  284. // });
  285. // log.info("实物订单意愿数据同步结束");
  286. // }
  287. // }
  288. // );
  289. // Integer update = orderDonService.updateHasPaymentInterestRealGoods();
  290. // orderDonService.updateHasPaymentInterestRealGoodsPayTime();
  291. // if (update > 0) {
  292. // log.info("更新用户记录:{}已购买实物意愿商品状态成功", update);
  293. // }
  294. // }
  295. //}