massageTask.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package com.ylx.massage.task;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.ylx.common.constant.MassageConstants;
  6. import com.ylx.common.core.domain.entity.SysDept;
  7. import com.ylx.common.utils.StringUtils;
  8. import com.ylx.massage.domain.TJs;
  9. import com.ylx.massage.domain.TJsDay;
  10. import com.ylx.massage.domain.TOrder;
  11. import com.ylx.massage.domain.TSign;
  12. import com.ylx.massage.enums.JsStatusEnum;
  13. import com.ylx.massage.enums.OrderStatusEnum;
  14. import com.ylx.massage.service.*;
  15. import com.ylx.massage.utils.DateTimeUtils;
  16. import com.ylx.system.service.ISysDeptService;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Component;
  20. import javax.annotation.Resource;
  21. import java.math.BigDecimal;
  22. import java.util.Date;
  23. import java.util.List;
  24. /**
  25. * @author jianlong
  26. * @date 2024-04-19 14:11
  27. */
  28. @Slf4j
  29. @Component("massageTask")
  30. public class massageTask {
  31. @Resource
  32. private TOrderService orderService;
  33. @Resource
  34. private TJsService jsService;
  35. @Resource
  36. private TSignService signService;
  37. @Autowired
  38. private ISysDeptService deptService;
  39. @Autowired
  40. private TRechargeService rechargeService;
  41. @Resource
  42. private TJsDayService jsDayService;
  43. public void cancelOrder() {
  44. Date nowDate = new Date();
  45. log.info("开始执行取消订单任务当前时间,{}", nowDate);
  46. Date date = DateTimeUtils.addMinute(nowDate, -5);
  47. log.info("开始执行取消订单任务当前时间减5分钟,{}", date);
  48. long total = 1L;
  49. while (total > 0L) {
  50. total = extracted(date);
  51. }
  52. }
  53. private Long extracted(Date nowDate) {
  54. log.info("extracted 开始执行取消订单任务时间,{}", nowDate);
  55. LambdaQueryWrapper<TOrder> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
  56. objectLambdaQueryWrapper.eq(TOrder::getnStatus, OrderStatusEnum.WAIT_PAY.getCode()).
  57. le(TOrder::getDtCreateTime, nowDate).
  58. orderByAsc(TOrder::getDtCreateTime);
  59. Page<TOrder> page = new Page<>();
  60. page.setSize(MassageConstants.TWO_HUNDRED);
  61. Page<TOrder> resPage = orderService.page(page, objectLambdaQueryWrapper);
  62. if (CollectionUtil.isNotEmpty(resPage.getRecords())) {
  63. resPage.getRecords().forEach(order -> {
  64. TOrder newOrder = new TOrder();
  65. //todo 订单锁
  66. newOrder.setcId(order.getcId());
  67. newOrder.setnStatus(OrderStatusEnum.CANCEL.getCode());
  68. orderService.updateById(newOrder);
  69. log.info("取消超时未支付订单orderNo,{}", order.getOrderNo());
  70. });
  71. }
  72. return resPage.getTotal();
  73. }
  74. public void timeoutNotOrder() {
  75. Date nowDate = new Date();
  76. log.info("开始执行取消订单任务当前时间,{}", nowDate);
  77. Date date = DateTimeUtils.addMinute(nowDate, -10);
  78. log.info("开始执行取消订单任务当前时间减5分钟,{}", date);
  79. long total = 1L;
  80. while (total > 0L) {
  81. total = timeoutNotOrder(date);
  82. }
  83. }
  84. private Long timeoutNotOrder(Date nowDate) {
  85. log.info("extracted 开始执行取消订单任务时间,{}", nowDate);
  86. LambdaQueryWrapper<TOrder> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
  87. objectLambdaQueryWrapper.eq(TOrder::getnStatus, OrderStatusEnum.WAIT_JD.getCode()).
  88. le(TOrder::getPayTime, nowDate).
  89. orderByAsc(TOrder::getPayTime);
  90. Page<TOrder> page = new Page<>();
  91. page.setSize(MassageConstants.TWO_HUNDRED);
  92. Page<TOrder> resPage = orderService.page(page, objectLambdaQueryWrapper);
  93. if (CollectionUtil.isNotEmpty(resPage.getRecords())) {
  94. resPage.getRecords().forEach(order -> {
  95. //调用拒绝接单
  96. //todo 订单锁
  97. order.setReasonRefusal("超时未接单");
  98. orderService.jujue(order);
  99. });
  100. }
  101. return resPage.getTotal();
  102. }
  103. public void cancelNewJs() {
  104. Date nowDate = new Date();
  105. log.info("开始执行取消新技师标识任务当前时间,{}", nowDate);
  106. long total = 1L;
  107. while (total > 0L) {
  108. LambdaQueryWrapper<TJs> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
  109. Date date = DateTimeUtils.addDays(nowDate, -7);
  110. log.info("开始执行取新技师当前时间减7天,{}", date);
  111. objectLambdaQueryWrapper.eq(TJs::getnB2, MassageConstants.INTEGER_ONE).le(TJs::getcTime, date).orderByAsc(TJs::getcTime);
  112. Page<TJs> page = new Page<>();
  113. page.setSize(MassageConstants.TWO_HUNDRED);
  114. Page<TJs> page1 = jsService.page(page, objectLambdaQueryWrapper);
  115. if (CollectionUtil.isNotEmpty(page1.getRecords())) {
  116. page1.getRecords().forEach(tjs -> {
  117. TJs js = new TJs();
  118. js.setId(tjs.getId());
  119. js.setnB2(MassageConstants.INTEGER_ZERO);
  120. jsService.updateById(js);
  121. log.info("取消新技师标识,{}", js.getcOpenId() + js.getcName());
  122. });
  123. }
  124. total = page1.getTotal();
  125. }
  126. }
  127. public void cancelHotJs() {
  128. Date nowDate = new Date();
  129. log.info("开始执行取消技师热度标识任务当前时间,{}", nowDate);
  130. Date date = DateTimeUtils.addDays(nowDate, -3);
  131. long total = 1L;
  132. while (total > 0L) {
  133. LambdaQueryWrapper<TJs> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
  134. objectLambdaQueryWrapper.eq(TJs::getnB3, MassageConstants.INTEGER_ONE);
  135. Page<TJs> page = new Page<>();
  136. page.setSize(MassageConstants.TWO_HUNDRED);
  137. Page<TJs> page1 = jsService.page(page, objectLambdaQueryWrapper);
  138. if (CollectionUtil.isNotEmpty(page1.getRecords())) {
  139. page1.getRecords().forEach(tjs -> {
  140. List<TOrder> list = orderService.list(new LambdaQueryWrapper<TOrder>().eq(TOrder::getcJsId, tjs.getId()).ge(TOrder::getDtCreateTime, date));
  141. if (CollectionUtil.isEmpty(list) || list.size() < 3) {
  142. TJs js = new TJs();
  143. js.setId(tjs.getId());
  144. js.setnB3(MassageConstants.INTEGER_ZERO);
  145. jsService.updateById(js);
  146. log.info("取消热度技师标识,{}", js.getcOpenId() + js.getcName());
  147. }
  148. });
  149. }
  150. total = page1.getTotal();
  151. }
  152. }
  153. /**
  154. * 定时下岗
  155. * 12:01 查询前一天 是否有上岗记录
  156. * 如果有上岗记录 没有下岗记录
  157. * 插入一条(前一天)下岗记录(并计算在线时长) 和当天上岗记录
  158. *
  159. * @param date yyyy-MM-dd
  160. **/
  161. public void RegularLayoff(String date) {
  162. Date date2 = new Date();
  163. if (StringUtils.isNotBlank(date)) {
  164. date2 = DateTimeUtils.parseDate(date, DateTimeUtils.DATE_FORMAT);
  165. } else {
  166. date2 = DateTimeUtils.addDays(date2, -1);
  167. }
  168. Date startDate = DateTimeUtils.getStartDate(date2);
  169. Date endDate = DateTimeUtils.getEndDate(date2);
  170. long total = 1L;
  171. while (total > 0L) {
  172. Page<TSign> signPage = new Page<>();
  173. signPage.setSize(MassageConstants.TWO_HUNDRED);
  174. LambdaQueryWrapper<TSign> signLambdaQueryWrapper = new LambdaQueryWrapper<>();
  175. //上岗
  176. signLambdaQueryWrapper.isNull(TSign::getLayoffTime).ge(TSign::getSingTime, startDate).le(TSign::getSingTime, endDate);
  177. Page<TSign> page = signService.page(signPage, signLambdaQueryWrapper);
  178. if (CollectionUtil.isNotEmpty(page.getRecords())) {
  179. page.getRecords().forEach(sign -> {
  180. sign.setLayoffTime(endDate);
  181. Long layoff = DateTimeUtils.dateToStamp(sign.getLayoffTime());
  182. Long sing = DateTimeUtils.dateToStamp(sign.getSingTime());
  183. Long time = layoff - sing;
  184. time = time / 1000;
  185. time = time / 60;
  186. sign.setOnlineTime(time.intValue());
  187. signService.updateById(sign);
  188. });
  189. }
  190. total = page.getTotal();
  191. }
  192. //查询所有部门
  193. List<SysDept> sysDepts = deptService.selectDeptList(new SysDept());
  194. sysDepts.forEach(sysDept -> {
  195. //查询所有技师
  196. LambdaQueryWrapper<TJs> jsLambdaQueryWrapper = new LambdaQueryWrapper<>();
  197. jsLambdaQueryWrapper.eq(TJs::getnTong, JsStatusEnum.JS_PASS.getCode()).eq(TJs::getDeptId, sysDept.getDeptId());
  198. List<TJs> jsList = jsService.list(jsLambdaQueryWrapper);
  199. if (CollectionUtil.isNotEmpty(jsList)) {
  200. jsList.forEach(js -> {
  201. TJsDay tJsDay = new TJsDay();
  202. tJsDay.setDeptName(js.getCity());
  203. tJsDay.setDeptId(js.getDeptId());
  204. tJsDay.setOpenId(js.getcOpenId());
  205. tJsDay.setJsId(js.getId());
  206. tJsDay.setName(js.getcName());
  207. Integer onLine = signService.getOnLineTime(js.getId(), startDate, endDate);
  208. tJsDay.setOnLine(onLine);
  209. Integer orderNum = orderService.getOrderNum(js.getId(), startDate, endDate);
  210. tJsDay.setOrderNum(orderNum);
  211. Integer addNum = orderService.getAddNum(js.getId(), startDate, endDate);
  212. tJsDay.setAddNum(addNum);
  213. Integer upgradeNum = orderService.getUpgradeNum(js.getId(), startDate, endDate);
  214. tJsDay.setUpgradeNum(upgradeNum);
  215. BigDecimal turnover = orderService.getTurnover(js.getId(), startDate, endDate);
  216. tJsDay.setTurnover(turnover);
  217. BigDecimal recharge = rechargeService.getRecharge(js.getId(), startDate, endDate);
  218. tJsDay.setRecharge(recharge);
  219. tJsDay.setCountDate(DateTimeUtils.formatDate(startDate, DateTimeUtils.DATE_FORMAT));
  220. jsDayService.save(tJsDay);
  221. });
  222. }
  223. });
  224. }
  225. }