package com.ylx.massage.task; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ylx.common.constant.MassageConstants; import com.ylx.common.core.domain.entity.SysDept; import com.ylx.common.utils.StringUtils; import com.ylx.massage.domain.TJs; import com.ylx.massage.domain.TJsDay; import com.ylx.massage.domain.TOrder; import com.ylx.massage.domain.TSign; import com.ylx.massage.enums.JsStatusEnum; import com.ylx.massage.enums.OrderStatusEnum; import com.ylx.massage.service.*; import com.ylx.massage.utils.DateTimeUtils; import com.ylx.system.service.ISysDeptService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @author jianlong * @date 2024-04-19 14:11 */ @Slf4j @Component("massageTask") public class massageTask { @Resource private TOrderService orderService; @Resource private TJsService jsService; @Resource private TSignService signService; @Autowired private ISysDeptService deptService; @Autowired private TRechargeService rechargeService; @Resource private TJsDayService jsDayService; public void cancelOrder() { Date nowDate = new Date(); log.info("开始执行取消订单任务当前时间,{}", nowDate); Date date = DateTimeUtils.addMinute(nowDate, -5); log.info("开始执行取消订单任务当前时间减5分钟,{}", date); long total = 1L; while (total > 0L) { total = extracted(date); } } private Long extracted(Date nowDate) { log.info("extracted 开始执行取消订单任务时间,{}", nowDate); LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); objectLambdaQueryWrapper.eq(TOrder::getnStatus, OrderStatusEnum.WAIT_PAY.getCode()). le(TOrder::getDtCreateTime, nowDate). orderByAsc(TOrder::getDtCreateTime); Page page = new Page<>(); page.setSize(MassageConstants.TWO_HUNDRED); Page resPage = orderService.page(page, objectLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(resPage.getRecords())) { resPage.getRecords().forEach(order -> { TOrder newOrder = new TOrder(); //todo 订单锁 newOrder.setcId(order.getcId()); newOrder.setnStatus(OrderStatusEnum.CANCEL.getCode()); orderService.updateById(newOrder); log.info("取消超时未支付订单orderNo,{}", order.getOrderNo()); }); } return resPage.getTotal(); } public void timeoutNotOrder() { Date nowDate = new Date(); log.info("开始执行取消订单任务当前时间,{}", nowDate); Date date = DateTimeUtils.addMinute(nowDate, -10); log.info("开始执行取消订单任务当前时间减5分钟,{}", date); long total = 1L; while (total > 0L) { total = timeoutNotOrder(date); } } private Long timeoutNotOrder(Date nowDate) { log.info("extracted 开始执行取消订单任务时间,{}", nowDate); LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); objectLambdaQueryWrapper.eq(TOrder::getnStatus, OrderStatusEnum.WAIT_JD.getCode()). le(TOrder::getPayTime, nowDate). orderByAsc(TOrder::getPayTime); Page page = new Page<>(); page.setSize(MassageConstants.TWO_HUNDRED); Page resPage = orderService.page(page, objectLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(resPage.getRecords())) { resPage.getRecords().forEach(order -> { //调用拒绝接单 //todo 订单锁 order.setReasonRefusal("超时未接单"); orderService.jujue(order); }); } return resPage.getTotal(); } public void cancelNewJs() { Date nowDate = new Date(); log.info("开始执行取消新技师标识任务当前时间,{}", nowDate); long total = 1L; while (total > 0L) { LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); Date date = DateTimeUtils.addDays(nowDate, -7); log.info("开始执行取新技师当前时间减7天,{}", date); objectLambdaQueryWrapper.eq(TJs::getnB2, MassageConstants.INTEGER_ONE).le(TJs::getcTime, date).orderByAsc(TJs::getcTime); Page page = new Page<>(); page.setSize(MassageConstants.TWO_HUNDRED); Page page1 = jsService.page(page, objectLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(page1.getRecords())) { page1.getRecords().forEach(tjs -> { TJs js = new TJs(); js.setId(tjs.getId()); js.setnB2(MassageConstants.INTEGER_ZERO); jsService.updateById(js); log.info("取消新技师标识,{}", js.getcOpenId() + js.getcName()); }); } total = page1.getTotal(); } } public void cancelHotJs() { Date nowDate = new Date(); log.info("开始执行取消技师热度标识任务当前时间,{}", nowDate); Date date = DateTimeUtils.addDays(nowDate, -3); long total = 1L; while (total > 0L) { LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); objectLambdaQueryWrapper.eq(TJs::getnB3, MassageConstants.INTEGER_ONE); Page page = new Page<>(); page.setSize(MassageConstants.TWO_HUNDRED); Page page1 = jsService.page(page, objectLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(page1.getRecords())) { page1.getRecords().forEach(tjs -> { List list = orderService.list(new LambdaQueryWrapper().eq(TOrder::getcJsId, tjs.getId()).ge(TOrder::getDtCreateTime, date)); if (CollectionUtil.isEmpty(list) || list.size() < 3) { TJs js = new TJs(); js.setId(tjs.getId()); js.setnB3(MassageConstants.INTEGER_ZERO); jsService.updateById(js); log.info("取消热度技师标识,{}", js.getcOpenId() + js.getcName()); } }); } total = page1.getTotal(); } } /** * 定时下岗 * 12:01 查询前一天 是否有上岗记录 * 如果有上岗记录 没有下岗记录 * 插入一条(前一天)下岗记录(并计算在线时长) 和当天上岗记录 * * @param date yyyy-MM-dd **/ public void RegularLayoff(String date) { Date date2 = new Date(); if (StringUtils.isNotBlank(date)) { date2 = DateTimeUtils.parseDate(date, DateTimeUtils.DATE_FORMAT); } else { date2 = DateTimeUtils.addDays(date2, -1); } Date startDate = DateTimeUtils.getStartDate(date2); Date endDate = DateTimeUtils.getEndDate(date2); long total = 1L; while (total > 0L) { Page signPage = new Page<>(); signPage.setSize(MassageConstants.TWO_HUNDRED); LambdaQueryWrapper signLambdaQueryWrapper = new LambdaQueryWrapper<>(); //上岗 signLambdaQueryWrapper.isNull(TSign::getLayoffTime).ge(TSign::getSingTime, startDate).le(TSign::getSingTime, endDate); Page page = signService.page(signPage, signLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(page.getRecords())) { page.getRecords().forEach(sign -> { sign.setLayoffTime(endDate); Long layoff = DateTimeUtils.dateToStamp(sign.getLayoffTime()); Long sing = DateTimeUtils.dateToStamp(sign.getSingTime()); Long time = layoff - sing; time = time / 1000; time = time / 60; sign.setOnlineTime(time.intValue()); signService.updateById(sign); }); } total = page.getTotal(); } //查询所有部门 List sysDepts = deptService.selectDeptList(new SysDept()); sysDepts.forEach(sysDept -> { //查询所有技师 LambdaQueryWrapper jsLambdaQueryWrapper = new LambdaQueryWrapper<>(); jsLambdaQueryWrapper.eq(TJs::getnTong, JsStatusEnum.JS_PASS.getCode()).eq(TJs::getDeptId, sysDept.getDeptId()); List jsList = jsService.list(jsLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(jsList)) { jsList.forEach(js -> { TJsDay tJsDay = new TJsDay(); tJsDay.setDeptName(js.getCity()); tJsDay.setDeptId(js.getDeptId()); tJsDay.setOpenId(js.getcOpenId()); tJsDay.setJsId(js.getId()); tJsDay.setName(js.getcName()); Integer onLine = signService.getOnLineTime(js.getId(), startDate, endDate); tJsDay.setOnLine(onLine); Integer orderNum = orderService.getOrderNum(js.getId(), startDate, endDate); tJsDay.setOrderNum(orderNum); Integer addNum = orderService.getAddNum(js.getId(), startDate, endDate); tJsDay.setAddNum(addNum); Integer upgradeNum = orderService.getUpgradeNum(js.getId(), startDate, endDate); tJsDay.setUpgradeNum(upgradeNum); BigDecimal turnover = orderService.getTurnover(js.getId(), startDate, endDate); tJsDay.setTurnover(turnover); BigDecimal recharge = rechargeService.getRecharge(js.getId(), startDate, endDate); tJsDay.setRecharge(recharge); tJsDay.setCountDate(DateTimeUtils.formatDate(startDate, DateTimeUtils.DATE_FORMAT)); jsDayService.save(tJsDay); }); } }); } }