diff --git a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java index e12336c7..e8ff428f 100644 --- a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java +++ b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java @@ -114,6 +114,17 @@ public class OrderServiceImpl implements OrderService { @Override public void overTimeOrder(String orderStatus) { LocalTime nowT = LocalTime.now(); + //待上门订单通知 + List orders = orderDetailService.selectByStatus(timeoutOrderStatus); + log.info("扫描到{}条未完成的子订单", orders.size()); + for (OrderDetail order : orders) { + try { + checkTimeoutDoor(order); + } catch (Exception e) { + log.error("子单超时定时任务执行:单号:{},错误原因:{}", order.getCode(), e.getMessage()); + e.printStackTrace(); + } + } // 晚上19点后 - 早上8点前不需要执行定时器 if (nowT.getHour() < 8 || nowT.getHour() > 20) { return; @@ -132,8 +143,6 @@ public class OrderServiceImpl implements OrderService { } // 查询符合超时的子单 - List orders = orderDetailService.selectByStatus(timeoutOrderStatus); - log.info("扫描到{}条未完成的子订单", orders.size()); for (OrderDetail order : orders) { try { checkTimeout(order); @@ -320,6 +329,7 @@ public class OrderServiceImpl implements OrderService { List afterServiceRecord = afterServiceRecordService.selectAfterServiceRecordList(afterParam); if (CollectionUtil.isNotEmpty(afterServiceRecord) && (afterServiceRecord.get(0).getCustomerFinalCheck() == null || afterServiceRecord.get(0).getCustomerFinalCheck() != 1L)) { log.info("售后订单更新时间{},售后订单是否超时{}", afterServiceRecord.get(0).getUpdateTime(), afterTimeout); + log.info("师傅操作{},所有记录{}",afterServiceRecord.get(0).getWorkerFeedbackResult(),afterServiceRecord); // 查询一下售后单时间 Date afterTime = getOverTime(afterServiceRecord.get(0).getUpdateTime(), 30 * 60 * 1000); if (afterTime.before(now) && !afterTimeout) { @@ -350,74 +360,7 @@ public class OrderServiceImpl implements OrderService { } if (!timeout) { log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime()); - // 待上门超时 - if (order.getOrderStatus().equals(OrderStatus.GOING.code())) { - // 服务中状态要按预计上门时间计算4h超时 - Date overTime = DateUtils.addMilliseconds(order.getExpectTimeStart(), 30 * 60 * 1000); - - Date oneHourTime = DateUtils.addMilliseconds(order.getExpectTimeStart(), -60 * 60 * 1000); - - // 1. 定位到今日 00:00 - Date todayStart = DateUtils.truncate(order.getExpectTimeStart(), Calendar.DATE); - // 2. 增加 1 天 - Date tomorrowStart = DateUtils.addDays(todayStart, 1); - log.info("订单开始前一个小时 订单号:[{}]时间:{} 当前时间 {} 是否为同一时间小时{} 分钟{}", order.getId(), oneHourTime, now, oneHourTime.getHours(), oneHourTime.getMinutes()); - LocalTime currentTime = LocalTime.now(); // 当前系统时间 - if (overTime.before(now)) { - log.info("订单[{}]待上门状态超时30分钟", order.getId()); - OrderTimeoutRecord record = new OrderTimeoutRecord(order.getId(), order.getWorkerId(), order.getDeptId(), order.getOrderStatus()); - record.setPayMoney(getFineMoney(order)); - record.setFineStatus(0); -// orderFineRecordMapper.insert(record); - orderDetailService.updateTimeout(order.getId(), 1, 1); - // 超时未上门通知 - // 通知师傅新订单 - try { - // 推送公众号通知数据。 - Worker worker = workerService.selectById(order.getWorkerId()); - OrderMaster orderMaster = orderMasterService.selectById(order.getOrderMasterId()); - // 消息组装。 - Map paramsNew = new HashMap<>(); - // 订单编号 - paramsNew.put("thing9", "您有1条订单超时未上门/未服务"); - // 名称 - paramsNew.put("thing10", "进入【我的订单--待上门】处理"); - CustomerAddress address = customerAddressService.selectByCustomerAddressId(orderMaster.getAddressId()); - paramsNew.put("thing2", address.getName()); - // 预约时间 - paramsNew.put("time8", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); - WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.TIMEOUT_ORDER, paramsNew); - - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } - if (isInTimeRange(currentTime, oneHourTime.getHours(), oneHourTime.getMinutes())) { - log.info("订单[{}]约一小时上门服务", order.getId()); - try { - // 推送公众号通知数据。 - Worker worker = workerService.selectById(order.getWorkerId()); - OrderMaster orderMaster = orderMasterService.selectById(order.getOrderMasterId()); - // 消息组装。 - Map paramsNew = new HashMap<>(); - // 订单编号 - paramsNew.put("thing13", "您有订单约1小时后上门/服务"); - // 名称 - paramsNew.put("thing7", "进入【我的订单--待上门】查看和准备"); - CustomerAddress address = customerAddressService.selectByCustomerAddressId(orderMaster.getAddressId()); - paramsNew.put("thing9", address.getName()); - // 预约时间 - paramsNew.put("time27", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); - WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.ONEHOUR_ORDER, paramsNew); - - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } - - } - // 未超时的单 - else if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) { + if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) { // 服务中状态要按预计上门时间计算4h超时 // Date overTime = DateUtils.addMilliseconds(order.getUpdateTime(), 4 * 60 * 60 * 1000); Date overTime=calculateOverTime(order.getUpdateTime()); @@ -1308,4 +1251,83 @@ public class OrderServiceImpl implements OrderService { } return Date.from(overTime.atZone(java.time.ZoneId.systemDefault()).toInstant()); } + //单独处理待上门通知 + public void checkTimeoutDoor(OrderDetail order) { + log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order); + Date now = new Date(); + // 是否超时 + boolean timeout = ONE.equals(order.getTimeout()); + // 超时扣款次数 + Integer times = order.getTimeoutFineTimes(); + // 判断是否是售后订单 + AfterServiceRecord afterParam = new AfterServiceRecord(); + afterParam.setOrderDetailId(order.getId()); + if (!timeout) { + log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime()); + // 待上门超时 + if (order.getOrderStatus().equals(OrderStatus.GOING.code())) { + // 服务中状态要按预计上门时间计算4h超时 + Date overTime = DateUtils.addMilliseconds(order.getExpectTimeStart(), 30 * 60 * 1000); + + Date oneHourTime = DateUtils.addMilliseconds(order.getExpectTimeStart(), -60 * 60 * 1000); + log.info("待上门订单开始前一个小时 订单号:[{}]时间:{} 当前时间 {} 是否为同一时间小时{} 分钟{}", order.getId(), oneHourTime, now, oneHourTime.getHours(), oneHourTime.getMinutes()); + LocalTime currentTime = LocalTime.now(); // 当前系统时间 + if (overTime.before(now)) { + log.info("订单[{}]待上门状态超时30分钟", order.getId()); + OrderTimeoutRecord record = new OrderTimeoutRecord(order.getId(), order.getWorkerId(), order.getDeptId(), order.getOrderStatus()); + record.setPayMoney(getFineMoney(order)); + record.setFineStatus(0); +// orderFineRecordMapper.insert(record); + orderDetailService.updateTimeout(order.getId(), 1, 1); + // 超时未上门通知 + // 通知师傅新订单 + try { + // 推送公众号通知数据。 + Worker worker = workerService.selectById(order.getWorkerId()); + OrderMaster orderMaster = orderMasterService.selectById(order.getOrderMasterId()); + // 消息组装。 + Map paramsNew = new HashMap<>(); + // 订单编号 + paramsNew.put("thing9", "您有1条订单超时未上门/未服务"); + // 名称 + paramsNew.put("thing10", "进入【我的订单--待上门】处理"); + CustomerAddress address = customerAddressService.selectByCustomerAddressId(orderMaster.getAddressId()); + paramsNew.put("thing2", address.getName()); + // 预约时间 + paramsNew.put("time8", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); + WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.TIMEOUT_ORDER, paramsNew); + + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + if (isInTimeRange(currentTime, oneHourTime.getHours(), oneHourTime.getMinutes())) { + log.info("订单[{}]约一小时上门服务", order.getId()); + try { + // 推送公众号通知数据。 + Worker worker = workerService.selectById(order.getWorkerId()); + OrderMaster orderMaster = orderMasterService.selectById(order.getOrderMasterId()); + // 消息组装。 + Map paramsNew = new HashMap<>(); + // 订单编号 + paramsNew.put("thing13", "您有订单约1小时后上门/服务"); + // 名称 + paramsNew.put("thing7", "进入【我的订单--待上门】查看和准备"); + CustomerAddress address = customerAddressService.selectByCustomerAddressId(orderMaster.getAddressId()); + paramsNew.put("thing9", address.getName()); + // 预约时间 + paramsNew.put("time27", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); + WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.ONEHOUR_ORDER, paramsNew); + + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + + } + return; + } + + } + }