Compare commits

...

2 Commits

Author SHA1 Message Date
cb a44ffd15cd Merge branch 'master' of https://git.opsoul.com/clunt/ghy-all 2025-04-19 14:42:26 +08:00
cb 7440a5d166 修改待上门的订单不受时间影响 2025-04-19 14:42:14 +08:00
1 changed files with 92 additions and 70 deletions

View File

@ -114,6 +114,17 @@ public class OrderServiceImpl implements OrderService {
@Override @Override
public void overTimeOrder(String orderStatus) { public void overTimeOrder(String orderStatus) {
LocalTime nowT = LocalTime.now(); LocalTime nowT = LocalTime.now();
//待上门订单通知
List<OrderDetail> 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点前不需要执行定时器 // 晚上19点后 - 早上8点前不需要执行定时器
if (nowT.getHour() < 8 || nowT.getHour() > 20) { if (nowT.getHour() < 8 || nowT.getHour() > 20) {
return; return;
@ -132,8 +143,6 @@ public class OrderServiceImpl implements OrderService {
} }
// 查询符合超时的子单 // 查询符合超时的子单
List<OrderDetail> orders = orderDetailService.selectByStatus(timeoutOrderStatus);
log.info("扫描到{}条未完成的子订单", orders.size());
for (OrderDetail order : orders) { for (OrderDetail order : orders) {
try { try {
checkTimeout(order); checkTimeout(order);
@ -320,6 +329,7 @@ public class OrderServiceImpl implements OrderService {
List<AfterServiceRecord> afterServiceRecord = afterServiceRecordService.selectAfterServiceRecordList(afterParam); List<AfterServiceRecord> afterServiceRecord = afterServiceRecordService.selectAfterServiceRecordList(afterParam);
if (CollectionUtil.isNotEmpty(afterServiceRecord) && (afterServiceRecord.get(0).getCustomerFinalCheck() == null || afterServiceRecord.get(0).getCustomerFinalCheck() != 1L)) { 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).getUpdateTime(), afterTimeout);
log.info("师傅操作{},所有记录{}",afterServiceRecord.get(0).getWorkerFeedbackResult(),afterServiceRecord);
// 查询一下售后单时间 // 查询一下售后单时间
Date afterTime = getOverTime(afterServiceRecord.get(0).getUpdateTime(), 30 * 60 * 1000); Date afterTime = getOverTime(afterServiceRecord.get(0).getUpdateTime(), 30 * 60 * 1000);
if (afterTime.before(now) && !afterTimeout) { if (afterTime.before(now) && !afterTimeout) {
@ -350,74 +360,7 @@ public class OrderServiceImpl implements OrderService {
} }
if (!timeout) { if (!timeout) {
log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime()); log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime());
// 待上门超时 if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) {
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<String, Object> 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<String, Object> 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())) {
// 服务中状态要按预计上门时间计算4h超时 // 服务中状态要按预计上门时间计算4h超时
// Date overTime = DateUtils.addMilliseconds(order.getUpdateTime(), 4 * 60 * 60 * 1000); // Date overTime = DateUtils.addMilliseconds(order.getUpdateTime(), 4 * 60 * 60 * 1000);
Date overTime=calculateOverTime(order.getUpdateTime()); Date overTime=calculateOverTime(order.getUpdateTime());
@ -1309,4 +1252,83 @@ public class OrderServiceImpl implements OrderService {
} }
return Date.from(overTime.atZone(java.time.ZoneId.systemDefault()).toInstant()); 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<String, Object> 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<String, Object> 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;
}
}
} }