no message

This commit is contained in:
cb 2025-08-01 15:40:43 +08:00
parent 1fe53780b9
commit 91cb050b47
1 changed files with 109 additions and 104 deletions

View File

@ -129,19 +129,19 @@ public class OrderServiceImpl implements OrderService {
if (nowT.getHour() < 8 || nowT.getHour() > 20) { if (nowT.getHour() < 8 || nowT.getHour() > 20) {
return; return;
} }
List<Integer> list=new ArrayList<>(); List<Integer> list = new ArrayList<>();
list.add(OrderStatus.FINISH_CHECK.code()); list.add(OrderStatus.FINISH_CHECK.code());
OrderMaster orderMasterFinishCheck = new OrderMaster(); OrderMaster orderMasterFinishCheck = new OrderMaster();
orderMasterFinishCheck.setOrderStatus(OrderStatus.FINISH_CHECK.code()); orderMasterFinishCheck.setOrderStatus(OrderStatus.FINISH_CHECK.code());
orderMasterFinishCheck.setWithdrawn(1); orderMasterFinishCheck.setWithdrawn(1);
List<OrderMaster> orderMasterFinish = orderMasterService.selectOrderMasterList(orderMasterFinishCheck); List<OrderMaster> orderMasterFinish = orderMasterService.selectOrderMasterList(orderMasterFinishCheck);
for (OrderMaster orderMaster:orderMasterFinish){ for (OrderMaster orderMaster : orderMasterFinish) {
log.info("满足完成条件的主订单{}",orderMaster); log.info("满足完成条件的主订单{}", orderMaster);
List<OrderDetail> orderDetailList=orderDetailService.selectByOrderMasterId(orderMaster.getId()); List<OrderDetail> orderDetailList = orderDetailService.selectByOrderMasterId(orderMaster.getId());
boolean allDrawCashStatusIs2 = orderDetailList != null boolean allDrawCashStatusIs2 = orderDetailList != null
&& orderDetailList.stream() && orderDetailList.stream()
.allMatch(detail -> detail.getDrawCashStatus() == 2); .allMatch(detail -> detail.getDrawCashStatus() == 2);
if (allDrawCashStatusIs2){ if (allDrawCashStatusIs2) {
orderMaster.setWithdrawn(2); orderMaster.setWithdrawn(2);
orderMaster.setOrderStatus(OrderStatus.FINISH.code()); orderMaster.setOrderStatus(OrderStatus.FINISH.code());
orderMasterService.updateOrderMaster(orderMaster); orderMasterService.updateOrderMaster(orderMaster);
@ -149,7 +149,6 @@ public class OrderServiceImpl implements OrderService {
} }
// 查询待接单状态的主单 // 查询待接单状态的主单
List<OrderMaster> orderMasters = orderMasterService.selectByStatus(orderMasterTimeoutStatus); List<OrderMaster> orderMasters = orderMasterService.selectByStatus(orderMasterTimeoutStatus);
log.info("扫描到{}条未完成的主订单", orderMasters.size()); log.info("扫描到{}条未完成的主订单", orderMasters.size());
@ -186,9 +185,9 @@ public class OrderServiceImpl implements OrderService {
Date overTime1h = getOverTime(createTime, 30 * 60 * 1000); Date overTime1h = getOverTime(createTime, 30 * 60 * 1000);
boolean flag; boolean flag;
if (order.getUpdateTime() != null) { if (order.getUpdateTime() != null) {
flag = getOverTime(order.getUpdateTime(), 45 * 60 * 1000).before(now); flag = getOverTime(order.getUpdateTime(), 8 * 60 * 60 * 1000).before(now);
} else { } else {
flag = getOverTime(createTime, 45 * 60 * 1000).before(now); flag = getOverTime(createTime, 8 * 60 * 60 * 1000).before(now);
log.info("判断时间:{},当前时间:{},结果:{}", getOverTime(createTime, 45 * 60 * 1000), now, flag); log.info("判断时间:{},当前时间:{},结果:{}", getOverTime(createTime, 45 * 60 * 1000), now, flag);
} }
// 是否已经超时 // 是否已经超时
@ -242,14 +241,14 @@ public class OrderServiceImpl implements OrderService {
boolean timeout = ONE.equals(order.getTimeout()); boolean timeout = ONE.equals(order.getTimeout());
Integer fineTimes = order.getTimeoutFineTimes(); Integer fineTimes = order.getTimeoutFineTimes();
if (!timeout) { if (!timeout) {
log.info("主订单是否未约未排[{}]派单工id{}", order.getIsCall(),order.getWorkerId()); log.info("主订单是否未约未排[{}]派单工id{}", order.getIsCall(), order.getWorkerId());
if (overTime30min.before(now)) { if (overTime30min.before(now)) {
// 30min未接单为超时 // 30min未接单为超时
log.info("主订单[{}]超时30分钟未排的参数{}", order.getId(),order.getHasDispatchedAll()); log.info("主订单[{}]超时30分钟未排的参数{}", order.getId(), order.getHasDispatchedAll());
orderMasterService.updateTimeout(order.getId(), 1); orderMasterService.updateTimeout(order.getId(), 1);
timeout = true; timeout = true;
//主单超时未约未排 //主单超时未约未排
if (order.getIsCall().equals("01")&&order.getHasDispatchedAll().equals(0)) { if (order.getIsCall().equals("01") && order.getHasDispatchedAll().equals(0)) {
log.info("主订单未约[{}]", order.getIsCall()); log.info("主订单未约[{}]", order.getIsCall());
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
@ -271,7 +270,7 @@ public class OrderServiceImpl implements OrderService {
} }
} }
//主订单未排 //主订单未排
else if (order.getHasDispatchedAll().equals(0)) { else if (order.getHasDispatchedAll().equals(0)) {
log.info("主订单未排[{}]", order.getIsCall()); log.info("主订单未排[{}]", order.getIsCall());
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
@ -322,9 +321,9 @@ public class OrderServiceImpl implements OrderService {
public boolean isInTimeRange(LocalTime now, int hour, int minute) { public boolean isInTimeRange(LocalTime now, int hour, int minute) {
LocalTime end = LocalTime.of(hour, minute, 59); // 17:30:59 LocalTime end = LocalTime.of(hour, minute, 59); // 17:30:59
if(minute==0){ if (minute == 0) {
minute=60; minute = 60;
hour=hour-1; hour = hour - 1;
} }
LocalTime start = LocalTime.of(hour, minute - 1, 59); // 17:29:59 LocalTime start = LocalTime.of(hour, minute - 1, 59); // 17:29:59
return !now.isBefore(start) && !now.isAfter(end); return !now.isBefore(start) && !now.isAfter(end);
@ -353,9 +352,9 @@ public class OrderServiceImpl implements OrderService {
// 查询一下售后单时间 // 查询一下售后单时间
Date afterTime = getOverTime(afterServiceRecord.get(0).getUpdateTime(), 30 * 60 * 1000); Date afterTime = getOverTime(afterServiceRecord.get(0).getUpdateTime(), 30 * 60 * 1000);
//师傅没有操作 则正常进行售后超时计算 //师傅没有操作 则正常进行售后超时计算
boolean WorkerFeedback=afterServiceRecord.get(0).getWorkerFeedbackResult()==null; boolean WorkerFeedback = afterServiceRecord.get(0).getWorkerFeedbackResult() == null;
log.info("师傅操作{},所有记录{},师傅是否进行操作{}",afterServiceRecord.get(0).getWorkerFeedbackResult(),afterServiceRecord,WorkerFeedback); log.info("师傅操作{},所有记录{},师傅是否进行操作{}", afterServiceRecord.get(0).getWorkerFeedbackResult(), afterServiceRecord, WorkerFeedback);
if (afterTime.before(now) && !afterTimeout&&WorkerFeedback) { if (afterTime.before(now) && !afterTimeout && WorkerFeedback) {
log.info("售后订单[{}]超时30分钟", order.getId()); log.info("售后订单[{}]超时30分钟", order.getId());
orderDetailService.updateAfterTimeout(order.getId(), 1, 0); orderDetailService.updateAfterTimeout(order.getId(), 1, 0);
// 售后超时通知 // 售后超时通知
@ -386,7 +385,7 @@ public class OrderServiceImpl implements OrderService {
if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) { 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());
log.info("订单[{}]服务中状态超时4小时 4小时后的时间", overTime); log.info("订单[{}]服务中状态超时4小时 4小时后的时间", overTime);
if (overTime.before(now)) { if (overTime.before(now)) {
log.info("订单[{}]服务中状态超时4小时 扣款", order.getId()); log.info("订单[{}]服务中状态超时4小时 扣款", order.getId());
@ -420,36 +419,36 @@ public class OrderServiceImpl implements OrderService {
} else if (timeoutOrderStatus.contains(order.getOrderStatus())) { } else if (timeoutOrderStatus.contains(order.getOrderStatus())) {
// 其它状态用update_time判断30min超时 // 其它状态用update_time判断30min超时
Date overTime = getOverTime(order.getUpdateTime(), 30 * 60 * 1000); Date overTime = getOverTime(order.getUpdateTime(), 30 * 60 * 1000);
if (overTime.before(now)&&order.getOrderStatus()!=OrderStatus.GOING.code()) { if (overTime.before(now) && order.getOrderStatus() != OrderStatus.GOING.code()) {
log.info("订单[{}]超时30分钟", order.getId()); log.info("订单[{}]超时30分钟", order.getId());
orderDetailService.updateTimeout(order.getId(), 1, 0); orderDetailService.updateTimeout(order.getId(), 1, 0);
// 判断是否约单 // 判断是否约单
OrderCallRecord param = new OrderCallRecord(); OrderCallRecord param = new OrderCallRecord();
param.setOrderId(order.getId()); param.setOrderId(order.getId());
List<OrderCallRecord> list = orderCallRecordService.selectOrderCallRecordList(param); List<OrderCallRecord> list = orderCallRecordService.selectOrderCallRecordList(param);
if (order.getOrderStatus()==OrderStatus.RECEIVE.code()){ if (order.getOrderStatus() == OrderStatus.RECEIVE.code()) {
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
// 消息组装 // 消息组装
Map<String, Object> paramsNew = new HashMap<>(); Map<String, Object> paramsNew = new HashMap<>();
// 订单编号 // 订单编号
paramsNew.put("thing9", "您帐号有1条新订单超时未接"); paramsNew.put("thing9", "您帐号有1条新订单超时未接");
// 名称 // 名称
paramsNew.put("thing10", "请进入【我的订单--新订单】操作处理"); paramsNew.put("thing10", "请进入【我的订单--新订单】操作处理");
OrderMaster orderMaster = orderMasterService.selectById(order.getOrderMasterId()); OrderMaster orderMaster = orderMasterService.selectById(order.getOrderMasterId());
CustomerAddress address = customerAddressService.selectByCustomerAddressId(orderMaster.getAddressId()); CustomerAddress address = customerAddressService.selectByCustomerAddressId(orderMaster.getAddressId());
paramsNew.put("thing2", address.getName()); paramsNew.put("thing2", address.getName());
// 预约时间 // 预约时间
paramsNew.put("time8", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); paramsNew.put("time8", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date()));
// 查师傅信息 // 查师傅信息
Worker worker = workerService.selectById(order.getWorkerId()); Worker worker = workerService.selectById(order.getWorkerId());
WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.TIMEOUT_ORDER, paramsNew); WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.TIMEOUT_ORDER, paramsNew);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
}
} }
}
// 超时预约通知 // 超时预约通知
else if (CollectionUtil.isEmpty(list)) { else if (CollectionUtil.isEmpty(list)) {
// 通知师傅新订单 // 通知师傅新订单
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
@ -698,7 +697,7 @@ public class OrderServiceImpl implements OrderService {
} }
} }
// 如果已经不存在"已完成""已取消"以外的子订单 就把主订单也改为完成 // 如果已经不存在"已完成""已取消"以外的子订单 就把主订单也改为完成
if (allFinish&&om.getWithdrawn()==null) { if (allFinish && om.getWithdrawn() == null) {
log.info("主订单自动完成[id={} code={}]", om.getId(), om.getCode()); log.info("主订单自动完成[id={} code={}]", om.getId(), om.getCode());
orderMasterService.finish(om.getId()); orderMasterService.finish(om.getId());
} }
@ -724,7 +723,7 @@ public class OrderServiceImpl implements OrderService {
orderListRequest.setIsMonitoredOrder(true); orderListRequest.setIsMonitoredOrder(true);
orderListRequest.setNeedImgs(false); orderListRequest.setNeedImgs(false);
long num = this.appMixOrderCount(orderListRequest); long num = this.appMixOrderCount(orderListRequest);
log.info("超时巡查超时数量{},超时师傅名称{}",num,worker.getName()); log.info("超时巡查超时数量{},超时师傅名称{}", num, worker.getName());
if (num > 0) { if (num > 0) {
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
@ -735,7 +734,7 @@ public class OrderServiceImpl implements OrderService {
// 名称 // 名称
paramsNew.put("thing7", "请进入【我的订单--超时单】迅速处理"); paramsNew.put("thing7", "请进入【我的订单--超时单】迅速处理");
paramsNew.put("character_string23", num ); paramsNew.put("character_string23", num);
// 预约时间 // 预约时间
paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date()));
@ -759,8 +758,8 @@ public class OrderServiceImpl implements OrderService {
orderDetail1.setDeptId(worker.getDeptId()); orderDetail1.setDeptId(worker.getDeptId());
orderDetail1.setWorkerId(worker.getWorkerId()); orderDetail1.setWorkerId(worker.getWorkerId());
orderDetail1.setShelveStatus(1); orderDetail1.setShelveStatus(1);
long num =orderDetailService.countOrderDetailList(orderDetail1); long num = orderDetailService.countOrderDetailList(orderDetail1);
log.info("搁置单巡查超时数量{},超时师傅名称{}",num,worker.getName()); log.info("搁置单巡查超时数量{},超时师傅名称{}", num, worker.getName());
if (num > 0) { if (num > 0) {
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
@ -770,7 +769,7 @@ public class OrderServiceImpl implements OrderService {
paramsNew.put("thing13", "您有《无法排单》需再次联系客户"); paramsNew.put("thing13", "您有《无法排单》需再次联系客户");
// 名称 // 名称
paramsNew.put("thing7", "请进入【我的订单--搁置单】操作处理"); paramsNew.put("thing7", "请进入【我的订单--搁置单】操作处理");
paramsNew.put("character_string23", num ); paramsNew.put("character_string23", num);
// 预约时间 // 预约时间
paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date()));
WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.DEFAULT_HANDLE_ORDER, paramsNew); WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.DEFAULT_HANDLE_ORDER, paramsNew);
@ -789,30 +788,30 @@ public class OrderServiceImpl implements OrderService {
orderDetail.setExpectTimeStart(Date.from(tomorrow.atZone(ZoneId.systemDefault()).toInstant())); orderDetail.setExpectTimeStart(Date.from(tomorrow.atZone(ZoneId.systemDefault()).toInstant()));
tomorrow = LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MAX); tomorrow = LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MAX);
orderDetail.setExpectTimeEnd(Date.from(tomorrow.atZone(ZoneId.systemDefault()).toInstant())); orderDetail.setExpectTimeEnd(Date.from(tomorrow.atZone(ZoneId.systemDefault()).toInstant()));
long tomorrowNum =orderDetailService.countOrderDetailList(orderDetail); long tomorrowNum = orderDetailService.countOrderDetailList(orderDetail);
log.info("明日单巡查超时数量{},超时师傅名称{}",tomorrowNum,worker.getName()); log.info("明日单巡查超时数量{},超时师傅名称{}", tomorrowNum, worker.getName());
if (tomorrowNum>0){ if (tomorrowNum > 0) {
log.info("订单[{}]明日订单通知", worker.getName()); log.info("订单[{}]明日订单通知", worker.getName());
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
// 消息组装 // 消息组装
Map<String, Object> paramsNew = new HashMap<>(); Map<String, Object> paramsNew = new HashMap<>();
// 订单编号 // 订单编号
paramsNew.put("thing13", "您有订单,明日待上门/待服务"); paramsNew.put("thing13", "您有订单,明日待上门/待服务");
// 名称 // 名称
paramsNew.put("thing7", "进入【我的订单--明日单】查看准备"); paramsNew.put("thing7", "进入【我的订单--明日单】查看准备");
paramsNew.put("character_string23", tomorrowNum ); paramsNew.put("character_string23", tomorrowNum);
// 预约时间 // 预约时间
paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date()));
WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.TOMORROW_ORDER, paramsNew); WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.TOMORROW_ORDER, paramsNew);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
orderListRequest = new OrderListRequest(); orderListRequest = new OrderListRequest();
orderListRequest.setDeptId(worker.getDeptId()); orderListRequest.setDeptId(worker.getDeptId());
orderListRequest.setWorkerId(worker.getWorkerId()); orderListRequest.setWorkerId(worker.getWorkerId());
orderListRequest.setIsMonitoredOrder(true); orderListRequest.setIsMonitoredOrder(true);
@ -820,8 +819,8 @@ public class OrderServiceImpl implements OrderService {
orderListRequest.setNeedImgs(false); orderListRequest.setNeedImgs(false);
AjaxResult afterListRes = this.appMixAfterList(orderListRequest); AjaxResult afterListRes = this.appMixAfterList(orderListRequest);
List<AfterServiceRecord> afterList = (List<AfterServiceRecord>) afterListRes.get("data"); List<AfterServiceRecord> afterList = (List<AfterServiceRecord>) afterListRes.get("data");
log.info("售后单巡查超时数量{},超时师傅名称{}",num,worker.getName()); log.info("售后单巡查超时数量{},超时师傅名称{}", num, worker.getName());
if (afterList.size()>0){ if (afterList.size() > 0) {
log.info("订单[{}]售后巡查订单通知", worker.getName()); log.info("订单[{}]售后巡查订单通知", worker.getName());
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
@ -831,7 +830,7 @@ public class OrderServiceImpl implements OrderService {
paramsNew.put("thing13", "售后巡查,您或您下级售后单未完成"); paramsNew.put("thing13", "售后巡查,您或您下级售后单未完成");
// 名称 // 名称
paramsNew.put("thing7", "请进入【我的订单--售后中】查看处理"); paramsNew.put("thing7", "请进入【我的订单--售后中】查看处理");
paramsNew.put("character_string23", afterList.size() ); paramsNew.put("character_string23", afterList.size());
// 预约时间 // 预约时间
paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date()));
WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.DEFAULT_HANDLE_ORDER, paramsNew); WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), worker.getWxOpenId(), WxMsgEnum.DEFAULT_HANDLE_ORDER, paramsNew);
@ -845,7 +844,6 @@ public class OrderServiceImpl implements OrderService {
} }
public long appMixOrderCount(OrderListRequest orderListRequest) { public long appMixOrderCount(OrderListRequest orderListRequest) {
long count = 0; long count = 0;
@ -856,7 +854,7 @@ public class OrderServiceImpl implements OrderService {
OrderDetail orderDetailReq = new OrderDetail(); OrderDetail orderDetailReq = new OrderDetail();
BeanUtils.copyProperties(orderListRequest, orderDetailReq); BeanUtils.copyProperties(orderListRequest, orderDetailReq);
List<OrderDetail> list = orderDetailService.selectOrderDetailList(orderDetailReq); List<OrderDetail> list = orderDetailService.selectOrderDetailList(orderDetailReq);
long size= list.stream() long size = list.stream()
.filter(order -> order.getOrderStatus() != 6) // 先过滤状态不等于6的订单 .filter(order -> order.getOrderStatus() != 6) // 先过滤状态不等于6的订单
.filter(order -> order.getOrderStatus() != 5).count(); .filter(order -> order.getOrderStatus() != 5).count();
count += size; count += size;
@ -876,7 +874,7 @@ public class OrderServiceImpl implements OrderService {
.map(OrderMaster::getId) // 再提取id .map(OrderMaster::getId) // 再提取id
.collect(Collectors.toList()) .collect(Collectors.toList())
); );
if (org.apache.commons.collections.CollectionUtils.isEmpty(countParam.getMasterIds())){ if (org.apache.commons.collections.CollectionUtils.isEmpty(countParam.getMasterIds())) {
return count; return count;
} }
List<OrderDetail> orderDetails = orderDetailService.selectOrderDetailList(countParam); List<OrderDetail> orderDetails = orderDetailService.selectOrderDetailList(countParam);
@ -919,13 +917,13 @@ public class OrderServiceImpl implements OrderService {
break; break;
} }
} }
if (isKeep|| org.apache.commons.collections.CollectionUtils.isEmpty(tmpDetailListOfMasters)) { if (isKeep || org.apache.commons.collections.CollectionUtils.isEmpty(tmpDetailListOfMasters)) {
filteredMasterList.add(master); filteredMasterList.add(master);
} }
} }
count += filteredMasterList.size(); count += filteredMasterList.size();
if (filteredMasterList.isEmpty()){ if (filteredMasterList.isEmpty()) {
count += masterList.size(); count += masterList.size();
} }
} else { } else {
@ -933,6 +931,7 @@ public class OrderServiceImpl implements OrderService {
} }
return count; return count;
} }
public AjaxResult appMixAfterList(@RequestBody OrderListRequest orderListRequest) { public AjaxResult appMixAfterList(@RequestBody OrderListRequest orderListRequest) {
List<OrderListResponse> orderListResponses = new ArrayList<>(); List<OrderListResponse> orderListResponses = new ArrayList<>();
@ -964,9 +963,9 @@ public class OrderServiceImpl implements OrderService {
break; break;
} }
} }
long count = detailAfterListOfMasters.stream().filter(x->(x.getAfterTimeout()!=null && x.getAfterTimeout() == 1)).count(); long count = detailAfterListOfMasters.stream().filter(x -> (x.getAfterTimeout() != null && x.getAfterTimeout() == 1)).count();
if (isKeep) { if (isKeep) {
if(count > 0){ if (count > 0) {
master.setAfterTimeout(1); master.setAfterTimeout(1);
} }
filteredMasterList.add(master); filteredMasterList.add(master);
@ -984,6 +983,7 @@ public class OrderServiceImpl implements OrderService {
return AjaxResult.success(orderListResponses); return AjaxResult.success(orderListResponses);
} }
public List<OrderListResponse> getMasterAfterList(OrderMaster orderMaster) { public List<OrderListResponse> getMasterAfterList(OrderMaster orderMaster) {
// 查所有售后的单 // 查所有售后的单
@ -1061,9 +1061,9 @@ public class OrderServiceImpl implements OrderService {
// 地址信息 // 地址信息
CustomerAddress customerAddress = addressService.selectByCustomerAddressId(master.getAddressId()); CustomerAddress customerAddress = addressService.selectByCustomerAddressId(master.getAddressId());
SysArea sysArea; SysArea sysArea;
if(customerAddress.getStreetId()!=null){ if (customerAddress.getStreetId() != null) {
sysArea = sysAreaService.selectById(customerAddress.getStreetId()); sysArea = sysAreaService.selectById(customerAddress.getStreetId());
}else { } else {
sysArea = sysAreaService.selectById(customerAddress.getCountryId()); sysArea = sysAreaService.selectById(customerAddress.getCountryId());
} }
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress(); String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
@ -1097,8 +1097,8 @@ public class OrderServiceImpl implements OrderService {
// orderListResponse.setChangeMoney(totalChangeMoney); // orderListResponse.setChangeMoney(totalChangeMoney);
orderListResponse.setWorkerName(worker == null ? "" : worker.getName()); orderListResponse.setWorkerName(worker == null ? "" : worker.getName());
orderListResponse.setWorkerPhone(worker == null ? "" : worker.getPhone()); orderListResponse.setWorkerPhone(worker == null ? "" : worker.getPhone());
orderListResponse.setCustomerName(StringUtils.isNotEmpty(master.getName())?master.getName():customerAddress.getName()); orderListResponse.setCustomerName(StringUtils.isNotEmpty(master.getName()) ? master.getName() : customerAddress.getName());
orderListResponse.setCustomerPhone(StringUtils.isNotEmpty(master.getPhone())?master.getPhone():customerAddress.getPhone()); orderListResponse.setCustomerPhone(StringUtils.isNotEmpty(master.getPhone()) ? master.getPhone() : customerAddress.getPhone());
orderListResponse.setServerTime(master.getRevTime()); orderListResponse.setServerTime(master.getRevTime());
orderListResponse.setExpectTimeStart(master.getExpectTimeStart()); orderListResponse.setExpectTimeStart(master.getExpectTimeStart());
orderListResponse.setExpectTimeEnd(master.getExpectTimeEnd()); orderListResponse.setExpectTimeEnd(master.getExpectTimeEnd());
@ -1158,7 +1158,7 @@ public class OrderServiceImpl implements OrderService {
if (worker != null) { if (worker != null) {
// 师傅实名信息 // 师傅实名信息
workerRealInfo = workerCertificationService.selectByWorkerId(orderMaster.getWorkerId()); workerRealInfo = workerCertificationService.selectByWorkerId(orderMaster.getWorkerId());
workerName = workerRealInfo == null ? worker.getName() : workerRealInfo.getSurname()+workerRealInfo.getName(); workerName = workerRealInfo == null ? worker.getName() : workerRealInfo.getSurname() + workerRealInfo.getName();
} }
// 消费者信息 // 消费者信息
@ -1183,9 +1183,9 @@ public class OrderServiceImpl implements OrderService {
// 地址信息 // 地址信息
CustomerAddress customerAddress = addressService.selectByCustomerAddressId(orderMaster.getAddressId()); CustomerAddress customerAddress = addressService.selectByCustomerAddressId(orderMaster.getAddressId());
SysArea sysArea; SysArea sysArea;
if(customerAddress.getStreetId()!=null){ if (customerAddress.getStreetId() != null) {
sysArea = sysAreaService.selectById(customerAddress.getStreetId()); sysArea = sysAreaService.selectById(customerAddress.getStreetId());
}else { } else {
sysArea = sysAreaService.selectById(customerAddress.getCountryId()); sysArea = sysAreaService.selectById(customerAddress.getCountryId());
} }
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress(); String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
@ -1231,8 +1231,8 @@ public class OrderServiceImpl implements OrderService {
orderListResponse.setWorkerId(detail.getWorkerId()); orderListResponse.setWorkerId(detail.getWorkerId());
orderListResponse.setWorkerName(workerName); orderListResponse.setWorkerName(workerName);
orderListResponse.setWorkerPhone(worker == null ? "" : worker.getPhone()); orderListResponse.setWorkerPhone(worker == null ? "" : worker.getPhone());
orderListResponse.setCustomerName(StringUtils.isNotEmpty(orderMaster.getName())?orderMaster.getName():customerAddress.getName()); orderListResponse.setCustomerName(StringUtils.isNotEmpty(orderMaster.getName()) ? orderMaster.getName() : customerAddress.getName());
orderListResponse.setCustomerPhone(StringUtils.isNotEmpty(orderMaster.getPhone())?orderMaster.getPhone():customerAddress.getPhone()); orderListResponse.setCustomerPhone(StringUtils.isNotEmpty(orderMaster.getPhone()) ? orderMaster.getPhone() : customerAddress.getPhone());
orderListResponse.setOrderStatus(detail.getOrderStatus()); orderListResponse.setOrderStatus(detail.getOrderStatus());
orderListResponse.setPayStatus(orderMaster.getPayStatus()); orderListResponse.setPayStatus(orderMaster.getPayStatus());
orderListResponse.setPayType(orderMaster.getPayType()); orderListResponse.setPayType(orderMaster.getPayType());
@ -1260,6 +1260,7 @@ public class OrderServiceImpl implements OrderService {
}); });
return orderListResponses; return orderListResponses;
} }
private boolean checkIsOnlyServer(Long orderMasterId, Long workId) { private boolean checkIsOnlyServer(Long orderMasterId, Long workId) {
// 找出原单的数量 // 找出原单的数量
List<OrderGoods> orderGoodsList = orderGoodsService.selectByOrderMasterId(orderMasterId); List<OrderGoods> orderGoodsList = orderGoodsService.selectByOrderMasterId(orderMasterId);
@ -1289,6 +1290,7 @@ public class OrderServiceImpl implements OrderService {
} }
return true; return true;
} }
/*判断超时4小时的时间 如果超过晚上八点则剩余的时间从第二天早上开始计时*/ /*判断超时4小时的时间 如果超过晚上八点则剩余的时间从第二天早上开始计时*/
public static Date calculateOverTime(Date updateTime) { public static Date calculateOverTime(Date updateTime) {
// 1. 增加4小时 // 1. 增加4小时
@ -1313,6 +1315,7 @@ 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) { public void checkTimeoutDoor(OrderDetail order) {
log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order); log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order);
@ -1333,7 +1336,7 @@ public class OrderServiceImpl implements OrderService {
Date oneHourTime = DateUtils.addMilliseconds(order.getExpectTimeStart(), -60 * 60 * 1000); Date oneHourTime = DateUtils.addMilliseconds(order.getExpectTimeStart(), -60 * 60 * 1000);
log.info("待上门订单开始前一个小时 订单号:[{}]时间:{} 当前时间 {} 是否为同一时间小时{} 分钟{}", order.getId(), oneHourTime, now, oneHourTime.getHours(), oneHourTime.getMinutes()); log.info("待上门订单开始前一个小时 订单号:[{}]时间:{} 当前时间 {} 是否为同一时间小时{} 分钟{}", order.getId(), oneHourTime, now, oneHourTime.getHours(), oneHourTime.getMinutes());
log.info("待上门订单[{}]服务中预计超时时间{},是否已经超时{}", order.getId(),overTime,overTime.before(now)); log.info("待上门订单[{}]服务中预计超时时间{},是否已经超时{}", order.getId(), overTime, overTime.before(now));
LocalTime currentTime = LocalTime.now(); // 当前系统时间 LocalTime currentTime = LocalTime.now(); // 当前系统时间
if (overTime.before(now)) { if (overTime.before(now)) {
log.info("订单[{}]待上门状态超时30分钟", order.getId()); log.info("订单[{}]待上门状态超时30分钟", order.getId());
@ -1364,7 +1367,7 @@ public class OrderServiceImpl implements OrderService {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
if (isInTimeRange(currentTime, oneHourTime.getHours(), oneHourTime.getMinutes())&&isSameYearMonthDay(now,oneHourTime)) { if (isInTimeRange(currentTime, oneHourTime.getHours(), oneHourTime.getMinutes()) && isSameYearMonthDay(now, oneHourTime)) {
log.info("订单[{}]约一小时上门服务", order.getId()); log.info("订单[{}]约一小时上门服务", order.getId());
try { try {
// 推送公众号通知数据 // 推送公众号通知数据
@ -1392,6 +1395,7 @@ public class OrderServiceImpl implements OrderService {
} }
} }
public static boolean isSameYearMonthDay(Date date1, Date date2) { public static boolean isSameYearMonthDay(Date date1, Date date2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 格式化为本地时间的字符串忽略时间部分 // 格式化为本地时间的字符串忽略时间部分
@ -1399,27 +1403,28 @@ public class OrderServiceImpl implements OrderService {
String dateStr2 = sdf.format(date2); String dateStr2 = sdf.format(date2);
return dateStr1.equals(dateStr2); return dateStr1.equals(dateStr2);
} }
@Override @Override
public void orderServerToFinishCheck() { public void orderServerToFinishCheck() {
List<OrderDetail> orderDetails = orderDetailService.selectByStatus(Collections.singletonList(OrderStatus.SERVER.code())); List<OrderDetail> orderDetails = orderDetailService.selectByStatus(Collections.singletonList(OrderStatus.SERVER.code()));
Date now = new Date(); Date now = new Date();
for (OrderDetail orderDetail : orderDetails) { for (OrderDetail orderDetail : orderDetails) {
try { try {
OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId());
if (orderMaster == null) { if (orderMaster == null) {
continue; continue;
} }
Date targetTime; Date targetTime;
String logType = "已设置"; String logType = "已设置";
// 优先使用已设置的确认截止时间 // 优先使用已设置的确认截止时间
if (orderDetail.getConfirmStartTime() != null) { if (orderDetail.getConfirmStartTime() != null) {
targetTime = orderDetail.getConfirmStartTime(); targetTime = orderDetail.getConfirmStartTime();
log.debug("订单[{}]使用已设置的确认截止时间:{}", orderDetail.getCode(), log.debug("订单[{}]使用已设置的确认截止时间:{}", orderDetail.getCode(),
com.ghy.common.utils.DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", targetTime)); com.ghy.common.utils.DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", targetTime));
} else { } else {
// 兼容旧数据重新计算确认截止时间 // 兼容旧数据重新计算确认截止时间
Date updateTime = orderDetail.getUpdateTime(); Date updateTime = orderDetail.getUpdateTime();
@ -1427,9 +1432,9 @@ public class OrderServiceImpl implements OrderService {
log.warn("订单[{}]更新时间为空,跳过处理", orderDetail.getCode()); log.warn("订单[{}]更新时间为空,跳过处理", orderDetail.getCode());
continue; continue;
} }
long waitTimeMillis; long waitTimeMillis;
// 根据发货类型判断等待时间 // 根据发货类型判断等待时间
if (orderMaster.getDeliveryType() == 2 || orderMaster.getDeliveryType() == 3) { if (orderMaster.getDeliveryType() == 2 || orderMaster.getDeliveryType() == 3) {
// 送货上门或自提8小时 // 送货上门或自提8小时
@ -1444,40 +1449,40 @@ public class OrderServiceImpl implements OrderService {
log.warn("订单[{}]发货类型未知[{}],跳过处理", orderDetail.getCode(), orderMaster.getDeliveryType()); log.warn("订单[{}]发货类型未知[{}],跳过处理", orderDetail.getCode(), orderMaster.getDeliveryType());
continue; continue;
} }
// 计算确认截止时间 // 计算确认截止时间
targetTime = new Date(updateTime.getTime() + waitTimeMillis); targetTime = new Date(updateTime.getTime() + waitTimeMillis);
// 回写到数据库避免下次重复计算 // 回写到数据库避免下次重复计算
OrderDetail updateOrderDetail = new OrderDetail(); OrderDetail updateOrderDetail = new OrderDetail();
updateOrderDetail.setId(orderDetail.getId()); updateOrderDetail.setId(orderDetail.getId());
updateOrderDetail.setConfirmStartTime(targetTime); updateOrderDetail.setConfirmStartTime(targetTime);
orderDetailService.updateOrderDetail(updateOrderDetail); orderDetailService.updateOrderDetail(updateOrderDetail);
log.info("订单[{}]补充设置确认截止时间,发货类型[{}],截止时间:{}", log.info("订单[{}]补充设置确认截止时间,发货类型[{}],截止时间:{}",
orderDetail.getCode(), logType, orderDetail.getCode(), logType,
com.ghy.common.utils.DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", targetTime)); com.ghy.common.utils.DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", targetTime));
} }
// 检查是否到达目标时间 // 检查是否到达目标时间
if (now.after(targetTime)&&orderMaster.getPayStatus()==1) { if (now.after(targetTime) && orderMaster.getPayStatus() == 1) {
log.info("订单[{}]确认截止时间已到,开始转为确认中状态", orderDetail.getCode()); log.info("订单[{}]确认截止时间已到,开始转为确认中状态", orderDetail.getCode());
orderDetail.setWorkFinishTime(new Date()); orderDetail.setWorkFinishTime(new Date());
orderDetailService.updateOrderDetail(orderDetail); orderDetailService.updateOrderDetail(orderDetail);
// 更新订单状态为确认中 // 更新订单状态为确认中
int result = orderDetailService.updateStatus(orderDetail.getId(), OrderStatus.FINISH_CHECK.code()); int result = orderDetailService.updateStatus(orderDetail.getId(), OrderStatus.FINISH_CHECK.code());
if (result > 0) { if (result > 0) {
log.info("订单[{}]状态已成功更新为确认中", orderDetail.getCode()); log.info("订单[{}]状态已成功更新为确认中", orderDetail.getCode());
} else { } else {
log.error("订单[{}]状态更新失败", orderDetail.getCode()); log.error("订单[{}]状态更新失败", orderDetail.getCode());
} }
} else { } else {
log.debug("订单[{}]尚未到达确认截止时间,截止时间:{}", log.debug("订单[{}]尚未到达确认截止时间,截止时间:{}",
orderDetail.getCode(), orderDetail.getCode(),
com.ghy.common.utils.DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", targetTime)); com.ghy.common.utils.DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", targetTime));
} }
} catch (Exception e) { } catch (Exception e) {
log.error("处理订单[{}]自动转确认中状态时发生异常", orderDetail.getCode(), e); log.error("处理订单[{}]自动转确认中状态时发生异常", orderDetail.getCode(), e);
} }