Compare commits
2 Commits
3fd8968a1a
...
a44ffd15cd
| Author | SHA1 | Date |
|---|---|---|
|
|
a44ffd15cd | |
|
|
7440a5d166 |
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue