puzhibing
2023-08-16 d5b3e5a413bcfccba294793ee093722f31b2448a
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -2,16 +2,22 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.modular.system.model.TDriver;
import com.stylefeng.guns.modular.system.service.ITDriverService;
import com.stylefeng.guns.modular.system.service.ITLocationService;
import com.stylefeng.guns.modular.system.service.IUserCouponRecordService;
import com.stylefeng.guns.modular.system.enums.UserTypeEnum;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -22,24 +28,36 @@
    @Autowired
    private ITLocationService locationService;
    @Autowired
    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
    @Value("${pushMinistryOfTransport}")
    private boolean pushMinistryOfTransport;
    @Autowired
    private ITDriverService driverService;
    @Autowired
    private ITAppUserService appUserService;
    @Autowired
    private ITOrderService orderService;
    @Autowired
    private ITDriverWorkService tDriverWorkService;
    @Autowired
    private ITUserToCouponService userToCouponService;
    /**
     * 每隔一分钟去处理的定时任务
     * 每隔一分钟去处理的定时任务,过期优惠券
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskMinute(){
        try {
            // 查询所有优惠券
            List<TUserToCoupon> tUserToCoupons = userToCouponService.selectList(new EntityWrapper<TUserToCoupon>());
            List<TUserToCoupon> collect2 = tUserToCoupons.stream().filter(tUserToCoupon -> LocalDateTime.now().isAfter(DateUtil.dateToLocalDateTime(tUserToCoupon.getExpireTime()))).collect(Collectors.toList());
            for (TUserToCoupon userToCoupon : collect2) {
                Integer validCount = userToCoupon.getValidCount();
                userToCoupon.setExpireCount(validCount);
                userToCoupon.setValidCount(0);
            }
            if(collect2.size() > 0){
                userToCouponService.updateBatchById(collect2);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -52,28 +70,126 @@
    @Scheduled(cron = "0 0 0 * * *")
    public void taskDay(){
        try {
            locationService.updateFence();//更新线上电子围栏
//            locationService.updateFence();//更新线上电子围栏
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 每月第一天的1点执行的任务
     * 每半天检测用户是否有异常
     */
    @Scheduled(cron = "0 0 1 1 * *")
    public void taskMonth(){
    @Scheduled(cron = "0 0 0,12 * * ? ")
    public void queryUserIsException(){
        try {
            if(pushMinistryOfTransport){
                List<TDriver> tDrivers = driverService.selectList(new EntityWrapper<TDriver>().eq("authState", 2).ne("flag", 3));
                for(TDriver driver : tDrivers){
                    pushMinistryOfTransportUtil.baseInfoDriverStat(driver.getId());
            List<TAppUser> appUserList = appUserService.selectList(new EntityWrapper<TAppUser>().ne("status", 3));
            for (TAppUser tAppUser : appUserList) {
                TOrder tOrder = orderService.selectOne(new EntityWrapper<TOrder>()
                        .eq("userId", tAppUser.getId())
                        .orderBy("createTime",false)
                        .last("LIMIT 1"));
                int day;
                if(Objects.nonNull(tOrder)){
                    // 客户一个月未下单,状态异常
                    Period period = Period.between(DateUtil.dateToLocalDate(tOrder.getCreateTime()), LocalDate.now());
                    int month = Math.abs(period.getMonths());
                    if(month > 0){
                        tAppUser.setIsException(2);
                    }
                    day = Math.abs(period.getDays());
                }else {
                    Period period = Period.between(DateUtil.dateToLocalDate(tAppUser.getCreateTime()), LocalDate.now());
                    int month = Math.abs(period.getMonths());
                    if(month > 0){
                        tAppUser.setIsException(2);
                    }
                    day = Math.abs(period.getDays());
                }
                if(day > 29){
                    tAppUser.setIsException(2);
                }
            }
            if(appUserList.size() > 0){
                appUserService.updateBatchById(appUserList);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 每半天检测司机未上线天数是否有异常
     */
    @Scheduled(cron = "0 0 9,21 * * ? ")
    public void queryDriverIsException(){
        try {
            List<TDriver> driverList = driverService.selectList(new EntityWrapper<TDriver>().ne("status", 3)
                    .eq("approvalStatus",2));
            for (TDriver driver : driverList) {
                TDriverWork tDriverWork = tDriverWorkService.selectOne(new EntityWrapper<TDriverWork>()
                        .eq("driverId", driver.getId())
                        .orderBy("workTime", false)
                        .last("LIMIT 1"));
                if(Objects.nonNull(tDriverWork)){
                    // 如果是下班状态,计算未上线天数,,如果为上班状态,则设置为0
                    if(tDriverWork.getStatus() == 2){
                        Period period = Period.between(DateUtil.dateToLocalDate(tDriverWork.getOffWorkTime()), LocalDate.now());
                        int month = Math.abs(period.getMonths());
                        if(month > 0){
                            driver.setIsException(2);
                        }
                        int day = Math.abs(period.getDays());
                        if(day>14){
                            driver.setIsException(2);
                        }
                    }
                }else {
                    if(Objects.nonNull(driver.getApprovalTime())){
                        // 没有上班记录,计算审核时间
                        Period period = Period.between(DateUtil.dateToLocalDate(driver.getApprovalTime()), LocalDate.now());
                        int month = Math.abs(period.getMonths());
                        if(month > 0){
                            driver.setIsException(2);
                        }
                        int day = Math.abs(period.getDays());
                        if(day>14){
                            driver.setIsException(2);
                        }
                    }
                }
            }
            if(driverList.size() > 0){
                driverService.updateBatchById(driverList);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 每月检测司机有效订单是否有异常
     * 每月最后一天中午12点检测
     */
    @Scheduled(cron = "0 0 12 28-31 * ? ")
    public void queryDriverIsExceptionMonth(){
        try {
            List<TDriver> driverList = driverService.selectList(new EntityWrapper<TDriver>().ne("status", 3)
                    .eq("approvalStatus",2));
            for (TDriver driver : driverList) {
                // 15天未上线异常,当月有效订单低于30单,异常
                Integer count = orderService.getValidOrderCount(driver.getId(),new BigDecimal(14),new SimpleDateFormat("yyyy-MM").format(new Date()));
                if(count < 30){
                    driver.setIsException(2);
                }else {
                    driver.setIsException(1);
                }
            }
            if(driverList.size() > 0){
                driverService.updateBatchById(driverList);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}