diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java index f8d5113b..4669f2aa 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java @@ -1295,7 +1295,7 @@ public class OrderController extends BaseController { allList.addAll(masterList); List mateIds = allList.stream().map(OrderMaster::getId) .collect(Collectors.toList()); - logger.info("查询符合条件的主单条件{}总数{}allList的数量{}allist的主单id{}", orderMasterReq, count, allList.size(), mateIds); + // logger.info("查询符合条件的主单条件{}总数{}allList的数量{}allist的主单id{}", orderMasterReq, count, allList.size(), mateIds); // 超时查询需要排除同个师傅的主单子单同时出现 if (orderListRequest.getTimeout() != null && orderListRequest.getTimeout() == 1) { // 需要排除同个师傅的主单子单同时出现 @@ -2399,7 +2399,7 @@ public class OrderController extends BaseController { // 售后记录 AfterServiceRecord afterServiceRecord = new AfterServiceRecord(); afterServiceRecord.setOrderDetailId(detail.getId()); - afterServiceRecord.setExcludeAfterServiceFinished(true); + // afterServiceRecord.setExcludeAfterServiceFinished(true); List afterServiceRecordList =afterServiceRecordService.selectAfterServiceRecordList(afterServiceRecord); if (detail.getAfterServiceStatus()==2||detail.getAfterServiceStatus()==3) { diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java index 5254a95e..81e10544 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java @@ -7,6 +7,8 @@ import com.ghy.common.annotation.Log; import com.ghy.common.constant.UserConstants; import com.ghy.common.core.controller.BaseController; import com.ghy.common.core.domain.AjaxResult; +import com.ghy.common.core.page.PageDomain; +import com.ghy.common.core.page.TableSupport; import com.ghy.common.core.domain.entity.SysUser; import com.ghy.common.core.page.TableDataInfo; import com.ghy.common.enums.*; @@ -1012,6 +1014,8 @@ public class OrderMasterController extends BaseController { return voDataTable(orderListResponses, new ArrayList<>()); } } + + // 移除startPage()调用,查询所有数据 startPage(); // if (orderMaster.getOrderStatus()==OrderStatus.FINISH_CHECK.code()){ // orderMaster.setOrderStatuses(); @@ -1019,32 +1023,55 @@ public class OrderMasterController extends BaseController { if (orderMaster.getOrderType() != null && orderMaster.getOrderType() == 0&&orderMaster.getFrom().equals("customer")) { orderMaster.setExcludeGoodsOrder(true); } - List list = orderMasterService.selectOrderMasterList(orderMaster); - Long count=orderMasterService.selectOrderMasterCount(orderMaster); - - // 处理orderType为0的情况,额外查询原师傅ID相关的订单并添加到list中 + // 查询所有数据,不进行分页 + List list = orderMasterService.selectOrderMasterList(orderMaster); + + // 处理orderType为0的情况,额外查询原师傅ID相关的订单 OrderMaster origiOrderMaster = new OrderMaster(); if (orderMaster.getOrderType() == 0 && orderMaster.getWorkerId() != null && orderMaster.getWorkerId() != -1 && orderMaster.getIsMonitoredOrder() == true) { origiOrderMaster.setOriginalWorkerId(orderMaster.getWorkerId()); - // origiOrderMaster.setFrom(orderMaster.getFrom()); - // 修复:将原始请求的isMonitoredOrder属性复制到额外查询中,确保过滤条件一致 - // origiOrderMaster.setShowInMonitor(orderMaster.getIsMonitoredOrder()); origiOrderMaster.setOrderStatuses("0,1,2,3,4"); List originalList = orderMasterService.selectOrderMasterList(origiOrderMaster); - // 对额外查询的结果也应用相同的过滤条件 - list.addAll(originalList); - list.sort((o1, o2) -> { - if (o1.getUpdateTimeAlias() == null && o2.getUpdateTimeAlias() == null) return 0; - if (o1.getUpdateTimeAlias() == null) return 1; - if (o2.getUpdateTimeAlias() == null) return -1; - return o2.getUpdateTimeAlias().compareTo(o1.getUpdateTimeAlias()); - }); } + + // 合并数据后去重(根据订单ID) + Map uniqueOrderMap = new LinkedHashMap<>(); + for (OrderMaster order : list) { + uniqueOrderMap.put(order.getId(), order); + } + List uniqueList = new ArrayList<>(uniqueOrderMap.values()); + + // 按创建时间排序 + uniqueList.sort((o1, o2) -> { + if (o1.getUpdateTimeAlias() == null && o2.getUpdateTimeAlias() == null) return 0; + if (o1.getUpdateTimeAlias() == null) return 1; + if (o2.getUpdateTimeAlias() == null) return -1; + return o2.getUpdateTimeAlias().compareTo(o1.getUpdateTimeAlias()); + }); + + // 使用startPage()方式获取分页参数(从HTTP请求中获取) + // startPage(); + // 获取分页参数(从PageDomain中获取) + // PageDomain pageDomain = TableSupport.buildPageRequest(); + // Integer pageNum = pageDomain.getPageNum() != null ? pageDomain.getPageNum() : orderMaster.getPageNum(); + // Integer pageSize = pageDomain.getPageSize() != null ? pageDomain.getPageSize() : orderMaster.getPageSize(); + + // // 手动分页 + // int totalCount = uniqueList.size(); + // int startIndex = (pageNum - 1) * pageSize; + // int endIndex = Math.min(startIndex + pageSize, totalCount); + + // List pagedList; + // if (startIndex >= totalCount) { + // pagedList = new ArrayList<>(); + // } else { + // pagedList = uniqueList.subList(startIndex, endIndex); + // } - if (CollectionUtils.isEmpty(list)) { + if (CollectionUtils.isEmpty(uniqueList)) { return voDataTable(orderListResponses, new ArrayList<>()); } @@ -1053,7 +1080,7 @@ public class OrderMasterController extends BaseController { Set addressIds = new HashSet<>(); Set goodsIds = new HashSet<>(); - list.forEach(master -> { + uniqueList.forEach(master -> { if (master.getWorkerId() != null) { workerIds.add(master.getWorkerId()); } @@ -1086,7 +1113,7 @@ public class OrderMasterController extends BaseController { goodsList.forEach(goods -> goodsMap.put(goods.getGoodsId(), goods)); } - list.forEach(master -> { + uniqueList.forEach(master -> { // 子单 List detailList = orderDetailService.selectByOrderMasterId(master.getId()); @@ -1331,7 +1358,7 @@ public class OrderMasterController extends BaseController { } orderListResponses.add(orderListResponse); }); - return voDataTable(orderListResponses, list); + return voDataTable(orderListResponses, uniqueList); } @PostMapping("/app/count") diff --git a/ghy-common/src/main/java/com/ghy/common/utils/WechatMsgUtils.java b/ghy-common/src/main/java/com/ghy/common/utils/WechatMsgUtils.java index dbb674f6..0b0ab4bf 100644 --- a/ghy-common/src/main/java/com/ghy/common/utils/WechatMsgUtils.java +++ b/ghy-common/src/main/java/com/ghy/common/utils/WechatMsgUtils.java @@ -78,10 +78,10 @@ public class WechatMsgUtils { paramMap.put("page", "index"); paramMap.put("template_id", mesType.getTempCode()); paramMap.put("url",""); -// Map miniprogram=new HashMap<>(); -// miniprogram.put("appid","wx105ce607b514ff2a"); -// miniprogram.put("pagepath",wxStatusByWxMsgUrl); -// paramMap.put("miniprogram",miniprogram); + Map miniprogram=new HashMap<>(); + miniprogram.put("appid","wx105ce607b514ff2a"); + miniprogram.put("pagepath",wxStatusByWxMsgUrl); + paramMap.put("miniprogram",miniprogram); JSONObject jsonObject = new JSONObject(); for (Map.Entry objectEntry : dataMap.entrySet()) { JSONObject model = new JSONObject(); diff --git a/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java b/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java index 538012e7..4a14c1cf 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java @@ -379,4 +379,8 @@ public class OrderMaster extends BaseEntity { */ @Excel(name = "退款时是否已支付", cellType = Excel.ColumnType.NUMERIC, readConverterExp = "0=未支付,1=已支付") private Integer refundPayStatus; + + private Integer pageSize; + + private Integer pageNum; } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java index fcd6b26d..cc37c862 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.core.domain.AjaxResult; import com.ghy.common.core.text.Convert; +import org.apache.commons.lang3.StringUtils; import com.ghy.common.enums.OrderStatus; import com.ghy.common.enums.PayStatus; import com.ghy.common.enums.RefundType; @@ -623,6 +624,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService if (param.getUpdateBy() != null) { afterServiceRecord.setUpdateBy(param.getUpdateBy()); } + afterServiceRecord.setRedoCompleteTime(null); afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); log.info("商品售后-师傅重做/补做完成,记录ID:{},完成时间:{}", param.getId(), afterServiceRecord.getRedoCompleteTime()); return AjaxResult.success("重做/补做完成状态已更新"); @@ -1060,8 +1062,62 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteAfterServiceRecordByIds(String ids) { - return afterServiceRecordMapper.deleteAfterServiceRecordByIds(Convert.toStrArray(ids)); + String[] idArray = Convert.toStrArray(ids); + + // 1. 查询要删除的售后记录信息 + for (String id : idArray) { + + AfterServiceRecord afterServiceRecord = afterServiceRecordMapper.selectAfterServiceRecordById(id); + if (afterServiceRecord == null) { + continue; + } + + // 2. 检查对应子单是否处于售后纠纷状态 + OrderDetail orderDetail = orderDetailService.selectById(afterServiceRecord.getOrderDetailId()); + if (orderDetail != null && orderDetail.getAfterServiceStatus() != null && orderDetail.getAfterServiceStatus() == 1) { + // 3. 如果子单处于售后纠纷状态,将其更新为无售后 + orderDetail.setAfterServiceStatus(0); + orderDetailService.updateOrderDetail(orderDetail); + log.info("删除售后记录时更新子单售后状态为无售后,子单ID:{}", orderDetail.getId()); + } + + // 4. 检查对应的主单是否还有其他进行中的售后记录 + if (orderDetail != null && orderDetail.getOrderMasterId() != null) { + // 查询主单下所有子单 + List detailList = orderDetailService.selectByOrderMasterId(orderDetail.getOrderMasterId()); + if (detailList != null && !detailList.isEmpty()) { + // 获取所有子单的orderDetailId + List detailIds = detailList.stream().map(OrderDetail::getId).collect(java.util.stream.Collectors.toList()); + + // 查询这些子单下的所有售后记录(不包括当前要删除的记录) + AfterServiceRecord searchRecord = new AfterServiceRecord(); + searchRecord.setOrderDetailIds(StringUtils.join(detailIds, ",")); + List activeRecords = afterServiceRecordMapper.selectAfterServiceRecordList(searchRecord); + + // 过滤掉要删除的记录和已取消/已超时的记录 + boolean hasOtherActiveRecords = activeRecords.stream() + .filter(record -> !record.getId().toString().equals(id)) + .filter(record -> record.getAfterServiceStatus() != null) + .filter(record -> record.getAfterServiceStatus() != 2 && record.getAfterServiceStatus() != 3) + .findAny() + .isPresent(); + + // 5. 如果主单没有其他进行中的售后记录,且主单的售后状态为售后纠纷,则将其更新为无售后 + if (!hasOtherActiveRecords) { + OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); + if (orderMaster != null && orderMaster.getAfterServiceStatus() != null && orderMaster.getAfterServiceStatus() == 1) { + orderMaster.setAfterServiceStatus(0); + orderMasterService.updateOrderMaster(orderMaster); + log.info("删除售后记录时更新主单售后状态为无售后,主单ID:{},售后记录ID:{}", orderMaster.getId(), id); + } + } + } + } + } + // 6. 执行原始的删除操作 + return afterServiceRecordMapper.deleteAfterServiceRecordByIds(idArray); } /** @@ -1628,7 +1684,8 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService log.error("退回货物后退单退款执行失败,记录ID:{},错误:{}", param.getId(), e.getMessage()); } } - + afterServiceRecord.setCustomerFinalCheck(1L); + afterServiceRecord.setCustomerOperationTime(null); // 更新售后记录 afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); 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 c1bbe4b5..838488f7 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 @@ -178,7 +178,7 @@ public class OrderServiceImpl implements OrderService { // @Transactional(rollbackFor = Exception.class) public void checkTimeout(OrderMaster order) { - log.info("主单超时开始:单号:{}, 内容:{}", order.getCode(), order); + // log.info("主单超时开始:单号:{}, 内容:{}", order.getCode(), order); Date now = new Date(); // 待接单状态的超时逻辑 if (ZERO.equals(order.getOrderStatus())) { @@ -352,7 +352,7 @@ public class OrderServiceImpl implements OrderService { */ // @Transactional(rollbackFor = Exception.class) public void checkTimeout(OrderDetail order) { - log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order); + // log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order); Date now = new Date(); // 是否超时 boolean timeout = ONE.equals(order.getTimeout()); @@ -369,7 +369,7 @@ public class OrderServiceImpl implements OrderService { Date afterTime = getOverTime(afterServiceRecord.get(0).getUpdateTime(), 30 * 60 * 1000); //师傅没有操作 则正常进行售后超时计算 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) { log.info("售后订单[{}]超时30分钟", order.getId()); orderDetailService.updateAfterTimeout(order.getId(), 1, 0);