| | |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | | import com.stylefeng.guns.modular.account.controller.AppOrderController; |
| | | import com.stylefeng.guns.modular.account.util.Base64Util; |
| | | import com.stylefeng.guns.modular.cloudPayment.example.AllocationExample; |
| | | import com.stylefeng.guns.modular.cloudPayment.req.AllocationReq; |
| | | import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; |
| | | import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; |
| | | import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; |
| | | import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; |
| | | import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; |
| | | import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; |
| | | import com.stylefeng.guns.modular.system.model.UserInfo; |
| | | import com.stylefeng.guns.modular.system.service.IUserCouponRecordService; |
| | | import com.stylefeng.guns.modular.system.service.IUserInfoService; |
| | | import com.stylefeng.guns.modular.system.service.IUserMerchantCouponService; |
| | | import com.stylefeng.guns.modular.system.service.IUserTaxiCardService; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.SMSUtil; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; |
| | | import com.stylefeng.guns.modular.taxi.model.OrderTaxi; |
| | | import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; |
| | | import com.unionpay.upyzt.exception.UpyztException; |
| | | import com.unionpay.upyzt.resp.AllocationResp; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | |
| | | /** |
| | | * 定时任务工具类 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class TaskUtil { |
| | | |
| | | @Autowired |
| | | private IUserCouponRecordService userCouponRecordService; |
| | | |
| | | @Autowired |
| | | private IUserMerchantCouponService userMerchantCouponService; |
| | | |
| | | @Autowired |
| | | private AppOrderController appOrderController; |
| | | |
| | | @Autowired |
| | | private IOrderPrivateCarService orderPrivateCarService; |
| | | |
| | | |
| | | @Autowired |
| | | private IOrderCrossCityService orderCrossCityService; |
| | | |
| | | @Autowired |
| | | private IOrderLogisticsService orderLogisticsService; |
| | | |
| | | @Autowired |
| | | private IOrderTaxiService orderTaxiService; |
| | | |
| | | @Autowired |
| | | private ChinaMobileUtil chinaMobileUtil; |
| | | |
| | | |
| | | |
| | | /** |
| | | * 每隔一分钟去处理的定时任务 |
| | | */ |
| | | @Scheduled(fixedRate = 1000 * 60) |
| | | public void taskMinute(){ |
| | | try { |
| | | |
| | | //修改过期的优惠券 |
| | | userCouponRecordService.updateTimeOut(); |
| | | //修改过期的商家优惠券 |
| | | userMerchantCouponService.updateExpired(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 每天的凌晨执行的任务 |
| | | */ |
| | | @Scheduled(fixedRate = 1000 * 60) |
| | | public void taskDay(){ |
| | | try { |
| | | List<Integer> integers = Arrays.asList(8, 9, 10, 12); |
| | | // 获取快车的已完成订单 |
| | | List<OrderPrivateCar> status = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().in("state", integers)); |
| | | for (OrderPrivateCar orderPrivateCar : status) { |
| | | chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX(),10000l); |
| | | } |
| | | |
| | | // 获取出租车订单 |
| | | List<OrderTaxi> status1 = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().in("state", integers)); |
| | | for (OrderTaxi orderTaxi : status1) { |
| | | chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(),orderTaxi.getTelX(),10000l); |
| | | } |
| | | |
| | | // 获取跨城出行订单 |
| | | List<OrderCrossCity> status2 = orderCrossCityService.selectList(new EntityWrapper<OrderCrossCity>().eq("state", integers)); |
| | | for (OrderCrossCity orderCrossCity : status2) { |
| | | chinaMobileUtil.midAxbUnBindSend(orderCrossCity.getBindId(),orderCrossCity.getTelX(),10000l); |
| | | } |
| | | |
| | | // 获取小件物流订单 |
| | | List<OrderLogistics> status3 = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().eq("state", Arrays.asList(6,10))); |
| | | for (OrderLogistics orderLogistics : status3) { |
| | | chinaMobileUtil.midAxbUnBindSend(orderLogistics.getBindId(),orderLogistics.getTelX(),10000l); |
| | | chinaMobileUtil.midAxbUnBindSend(orderLogistics.getBindIdOne(),orderLogistics.getTelXOne(),10000l); |
| | | } |
| | | |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | // |
| | | // /** |
| | | // * 每月第一天的1点执行的任务 |
| | | // */ |
| | | // @Scheduled(cron = "0 0 1 1 * *") |
| | | // public void taskMonth(){ |
| | | // try { |
| | | // |
| | | // }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | |
| | | @Autowired |
| | | private IUserCouponRecordService userCouponRecordService; |
| | | |
| | | @Autowired |
| | | private IUserMerchantCouponService userMerchantCouponService; |
| | | |
| | | @Autowired |
| | | private AppOrderController appOrderController; |
| | | |
| | | @Autowired |
| | | private IOrderPrivateCarService orderPrivateCarService; |
| | | |
| | | |
| | | @Autowired |
| | | private IOrderCrossCityService orderCrossCityService; |
| | | |
| | | @Autowired |
| | | private IOrderLogisticsService orderLogisticsService; |
| | | |
| | | @Autowired |
| | | private IOrderTaxiService orderTaxiService; |
| | | |
| | | @Autowired |
| | | private ChinaMobileUtil chinaMobileUtil; |
| | | |
| | | @Autowired |
| | | private IUserInfoService userInfoService; |
| | | |
| | | |
| | | /** |
| | | * 每隔一分钟去处理的定时任务 |
| | | */ |
| | | @Scheduled(fixedRate = 1000 * 60) |
| | | public void taskMinute() { |
| | | try { |
| | | //修改过期的优惠券 |
| | | userCouponRecordService.updateTimeOut(); |
| | | //修改过期的商家优惠券 |
| | | userMerchantCouponService.updateExpired(); |
| | | //处理超时未支付的订单 |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 每天的凌晨执行的任务 |
| | | */ |
| | | @Scheduled(fixedRate = 1000 * 60) |
| | | public void taskDay() { |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 每天中午12点发送提醒短信 |
| | | */ |
| | | @Scheduled(cron = "0 0 12 * * ?") |
| | | public void taskMonth() { |
| | | try { |
| | | List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("isDelete", 1) |
| | | .eq("state", 7).eq("abnormal", 1) |
| | | .last(" and now() > DATE_ADD(endServiceTime, INTERVAL 24 HOUR)")); |
| | | for (OrderPrivateCar orderPrivateCar : orderPrivateCars) { |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | SendSmsRequest request = new SendSmsRequest(); |
| | | request.setDestAddress(userInfo.getPhone()); |
| | | request.setTemplateId("TPL202507300002"); |
| | | Map<String, String> templateParams = new HashMap<>(); |
| | | request.setTemplateParams(templateParams); |
| | | request.setSpId("Y86asr7J"); |
| | | SMSUtil.sendSms(request); |
| | | } |
| | | List<OrderTaxi> orderTaxis = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().eq("isDelete", 1) |
| | | .eq("state", 7).eq("abnormal", 1) |
| | | .last(" and now() > DATE_ADD(endServiceTime, INTERVAL 24 HOUR)")); |
| | | for (OrderTaxi orderTaxi : orderTaxis) { |
| | | UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); |
| | | SendSmsRequest request = new SendSmsRequest(); |
| | | request.setDestAddress(userInfo.getPhone()); |
| | | request.setTemplateId("TPL202507300002"); |
| | | Map<String, String> templateParams = new HashMap<>(); |
| | | request.setTemplateParams(templateParams); |
| | | request.setSpId("Y86asr7J"); |
| | | SMSUtil.sendSms(request); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 大于24小时未支付的订单 |
| | | */ |
| | | public void timoutNoPayment() { |
| | | List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("state", 7) |
| | | .eq("isDelete", 1).eq("recoveryOrder", 0).last(" and now() >= DATE_ADD(insertTime, INTERVAL 24 HOUR)")); |
| | | for (OrderPrivateCar orderPrivateCar : orderPrivateCars) { |
| | | //使用备付金进行支付订单 |
| | | TradePayOffData tradePayOffData = new TradePayOffData(); |
| | | tradePayOffData.setPartnerPayId("PR" + orderPrivateCar.getId()); |
| | | tradePayOffData.setTotalFee(Double.valueOf(orderPrivateCar.getOrderMoney() * 100).intValue() + ""); |
| | | tradePayOffData.setOrderDesc("完成订单"); |
| | | PayInfo payInfo = OrderUtil.tradePayOff(tradePayOffData); |
| | | String retCode = payInfo.getRetCode(); |
| | | if(!"000000".equals(retCode)){ |
| | | log.error("备付金支付失败:{}", payInfo.getRetMsg()); |
| | | continue; |
| | | } |
| | | PayInfoData data = payInfo.getData(); |
| | | String status = data.getStatus(); |
| | | if("3".equals(status)){ |
| | | log.error("备付金支付失败:{}", payInfo.getRetMsg()); |
| | | continue; |
| | | } |
| | | //copy原始订单后生成追缴单 |
| | | OrderPrivateCar orderPrivateCar1 = new OrderPrivateCar(); |
| | | BeanUtils.copyProperties(orderPrivateCar, orderPrivateCar1); |
| | | orderPrivateCar1.setId(null); |
| | | orderPrivateCar1.setRecoveryOrder(1); |
| | | |
| | | //修改原始订单为支付状态 |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPayType(5); |
| | | orderPrivateCar.setPayMoney(orderPrivateCar.getOrderMoney()); |
| | | orderPrivateCarService.updateById(orderPrivateCar); |
| | | orderPrivateCarService.insert(orderPrivateCar1); |
| | | } |
| | | } |
| | | } |