|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|