删除售后单增加对纠纷单的处理,增加通知设置

This commit is contained in:
cb 2025-11-08 16:47:47 +08:00
parent f1df93ec25
commit d2db2a5547
6 changed files with 118 additions and 30 deletions

View File

@ -1295,7 +1295,7 @@ public class OrderController extends BaseController {
allList.addAll(masterList); allList.addAll(masterList);
List<Long> mateIds = allList.stream().map(OrderMaster::getId) List<Long> mateIds = allList.stream().map(OrderMaster::getId)
.collect(Collectors.toList()); .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) { if (orderListRequest.getTimeout() != null && orderListRequest.getTimeout() == 1) {
// 需要排除同个师傅的主单子单同时出现 // 需要排除同个师傅的主单子单同时出现
@ -2399,7 +2399,7 @@ public class OrderController extends BaseController {
// 售后记录 // 售后记录
AfterServiceRecord afterServiceRecord = new AfterServiceRecord(); AfterServiceRecord afterServiceRecord = new AfterServiceRecord();
afterServiceRecord.setOrderDetailId(detail.getId()); afterServiceRecord.setOrderDetailId(detail.getId());
afterServiceRecord.setExcludeAfterServiceFinished(true); // afterServiceRecord.setExcludeAfterServiceFinished(true);
List<AfterServiceRecord> afterServiceRecordList List<AfterServiceRecord> afterServiceRecordList
=afterServiceRecordService.selectAfterServiceRecordList(afterServiceRecord); =afterServiceRecordService.selectAfterServiceRecordList(afterServiceRecord);
if (detail.getAfterServiceStatus()==2||detail.getAfterServiceStatus()==3) { if (detail.getAfterServiceStatus()==2||detail.getAfterServiceStatus()==3) {

View File

@ -7,6 +7,8 @@ import com.ghy.common.annotation.Log;
import com.ghy.common.constant.UserConstants; import com.ghy.common.constant.UserConstants;
import com.ghy.common.core.controller.BaseController; import com.ghy.common.core.controller.BaseController;
import com.ghy.common.core.domain.AjaxResult; 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.domain.entity.SysUser;
import com.ghy.common.core.page.TableDataInfo; import com.ghy.common.core.page.TableDataInfo;
import com.ghy.common.enums.*; import com.ghy.common.enums.*;
@ -1012,6 +1014,8 @@ public class OrderMasterController extends BaseController {
return voDataTable(orderListResponses, new ArrayList<>()); return voDataTable(orderListResponses, new ArrayList<>());
} }
} }
// 移除startPage()调用查询所有数据
startPage(); startPage();
// if (orderMaster.getOrderStatus()==OrderStatus.FINISH_CHECK.code()){ // if (orderMaster.getOrderStatus()==OrderStatus.FINISH_CHECK.code()){
// orderMaster.setOrderStatuses(); // orderMaster.setOrderStatuses();
@ -1019,32 +1023,55 @@ public class OrderMasterController extends BaseController {
if (orderMaster.getOrderType() != null && orderMaster.getOrderType() == 0&&orderMaster.getFrom().equals("customer")) { if (orderMaster.getOrderType() != null && orderMaster.getOrderType() == 0&&orderMaster.getFrom().equals("customer")) {
orderMaster.setExcludeGoodsOrder(true); orderMaster.setExcludeGoodsOrder(true);
} }
// 查询所有数据不进行分页
List<OrderMaster> list = orderMasterService.selectOrderMasterList(orderMaster); List<OrderMaster> list = orderMasterService.selectOrderMasterList(orderMaster);
Long count=orderMasterService.selectOrderMasterCount(orderMaster);
// 处理orderType为0的情况额外查询原师傅ID相关的订单
// 处理orderType为0的情况额外查询原师傅ID相关的订单并添加到list中
OrderMaster origiOrderMaster = new OrderMaster(); OrderMaster origiOrderMaster = new OrderMaster();
if (orderMaster.getOrderType() == 0 && orderMaster.getWorkerId() != null if (orderMaster.getOrderType() == 0 && orderMaster.getWorkerId() != null
&& orderMaster.getWorkerId() != -1 && orderMaster.getIsMonitoredOrder() == true) { && orderMaster.getWorkerId() != -1 && orderMaster.getIsMonitoredOrder() == true) {
origiOrderMaster.setOriginalWorkerId(orderMaster.getWorkerId()); origiOrderMaster.setOriginalWorkerId(orderMaster.getWorkerId());
// origiOrderMaster.setFrom(orderMaster.getFrom());
// 修复将原始请求的isMonitoredOrder属性复制到额外查询中确保过滤条件一致
// origiOrderMaster.setShowInMonitor(orderMaster.getIsMonitoredOrder());
origiOrderMaster.setOrderStatuses("0,1,2,3,4"); origiOrderMaster.setOrderStatuses("0,1,2,3,4");
List<OrderMaster> originalList = orderMasterService.selectOrderMasterList(origiOrderMaster); List<OrderMaster> originalList = orderMasterService.selectOrderMasterList(origiOrderMaster);
// 对额外查询的结果也应用相同的过滤条件
list.addAll(originalList); list.addAll(originalList);
list.sort((o1, o2) -> { }
// 合并数据后去重根据订单ID
Map<Long, OrderMaster> uniqueOrderMap = new LinkedHashMap<>();
for (OrderMaster order : list) {
uniqueOrderMap.put(order.getId(), order);
}
List<OrderMaster> uniqueList = new ArrayList<>(uniqueOrderMap.values());
// 按创建时间排序
uniqueList.sort((o1, o2) -> {
if (o1.getUpdateTimeAlias() == null && o2.getUpdateTimeAlias() == null) return 0; if (o1.getUpdateTimeAlias() == null && o2.getUpdateTimeAlias() == null) return 0;
if (o1.getUpdateTimeAlias() == null) return 1; if (o1.getUpdateTimeAlias() == null) return 1;
if (o2.getUpdateTimeAlias() == null) return -1; if (o2.getUpdateTimeAlias() == null) return -1;
return o2.getUpdateTimeAlias().compareTo(o1.getUpdateTimeAlias()); return o2.getUpdateTimeAlias().compareTo(o1.getUpdateTimeAlias());
}); });
}
if (CollectionUtils.isEmpty(list)) { // 使用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<OrderMaster> pagedList;
// if (startIndex >= totalCount) {
// pagedList = new ArrayList<>();
// } else {
// pagedList = uniqueList.subList(startIndex, endIndex);
// }
if (CollectionUtils.isEmpty(uniqueList)) {
return voDataTable(orderListResponses, new ArrayList<>()); return voDataTable(orderListResponses, new ArrayList<>());
} }
@ -1053,7 +1080,7 @@ public class OrderMasterController extends BaseController {
Set<Long> addressIds = new HashSet<>(); Set<Long> addressIds = new HashSet<>();
Set<Long> goodsIds = new HashSet<>(); Set<Long> goodsIds = new HashSet<>();
list.forEach(master -> { uniqueList.forEach(master -> {
if (master.getWorkerId() != null) { if (master.getWorkerId() != null) {
workerIds.add(master.getWorkerId()); workerIds.add(master.getWorkerId());
} }
@ -1086,7 +1113,7 @@ public class OrderMasterController extends BaseController {
goodsList.forEach(goods -> goodsMap.put(goods.getGoodsId(), goods)); goodsList.forEach(goods -> goodsMap.put(goods.getGoodsId(), goods));
} }
list.forEach(master -> { uniqueList.forEach(master -> {
// 子单 // 子单
List<OrderDetail> detailList = orderDetailService.selectByOrderMasterId(master.getId()); List<OrderDetail> detailList = orderDetailService.selectByOrderMasterId(master.getId());
@ -1331,7 +1358,7 @@ public class OrderMasterController extends BaseController {
} }
orderListResponses.add(orderListResponse); orderListResponses.add(orderListResponse);
}); });
return voDataTable(orderListResponses, list); return voDataTable(orderListResponses, uniqueList);
} }
@PostMapping("/app/count") @PostMapping("/app/count")

View File

@ -78,10 +78,10 @@ public class WechatMsgUtils {
paramMap.put("page", "index"); paramMap.put("page", "index");
paramMap.put("template_id", mesType.getTempCode()); paramMap.put("template_id", mesType.getTempCode());
paramMap.put("url",""); paramMap.put("url","");
// Map<String, Object> miniprogram=new HashMap<>(); Map<String, Object> miniprogram=new HashMap<>();
// miniprogram.put("appid","wx105ce607b514ff2a"); miniprogram.put("appid","wx105ce607b514ff2a");
// miniprogram.put("pagepath",wxStatusByWxMsgUrl); miniprogram.put("pagepath",wxStatusByWxMsgUrl);
// paramMap.put("miniprogram",miniprogram); paramMap.put("miniprogram",miniprogram);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
for (Map.Entry<String, Object> objectEntry : dataMap.entrySet()) { for (Map.Entry<String, Object> objectEntry : dataMap.entrySet()) {
JSONObject model = new JSONObject(); JSONObject model = new JSONObject();

View File

@ -379,4 +379,8 @@ public class OrderMaster extends BaseEntity {
*/ */
@Excel(name = "退款时是否已支付", cellType = Excel.ColumnType.NUMERIC, readConverterExp = "0=未支付,1=已支付") @Excel(name = "退款时是否已支付", cellType = Excel.ColumnType.NUMERIC, readConverterExp = "0=未支付,1=已支付")
private Integer refundPayStatus; private Integer refundPayStatus;
private Integer pageSize;
private Integer pageNum;
} }

View File

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.adapay.model.AdapayStatusEnum;
import com.ghy.common.core.domain.AjaxResult; import com.ghy.common.core.domain.AjaxResult;
import com.ghy.common.core.text.Convert; import com.ghy.common.core.text.Convert;
import org.apache.commons.lang3.StringUtils;
import com.ghy.common.enums.OrderStatus; import com.ghy.common.enums.OrderStatus;
import com.ghy.common.enums.PayStatus; import com.ghy.common.enums.PayStatus;
import com.ghy.common.enums.RefundType; import com.ghy.common.enums.RefundType;
@ -623,6 +624,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (param.getUpdateBy() != null) { if (param.getUpdateBy() != null) {
afterServiceRecord.setUpdateBy(param.getUpdateBy()); afterServiceRecord.setUpdateBy(param.getUpdateBy());
} }
afterServiceRecord.setRedoCompleteTime(null);
afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord);
log.info("商品售后-师傅重做/补做完成记录ID{},完成时间:{}", param.getId(), afterServiceRecord.getRedoCompleteTime()); log.info("商品售后-师傅重做/补做完成记录ID{},完成时间:{}", param.getId(), afterServiceRecord.getRedoCompleteTime());
return AjaxResult.success("重做/补做完成状态已更新"); return AjaxResult.success("重做/补做完成状态已更新");
@ -1060,8 +1062,62 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
* @return 结果 * @return 结果
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public int deleteAfterServiceRecordByIds(String ids) { 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<OrderDetail> detailList = orderDetailService.selectByOrderMasterId(orderDetail.getOrderMasterId());
if (detailList != null && !detailList.isEmpty()) {
// 获取所有子单的orderDetailId
List<Long> detailIds = detailList.stream().map(OrderDetail::getId).collect(java.util.stream.Collectors.toList());
// 查询这些子单下的所有售后记录不包括当前要删除的记录
AfterServiceRecord searchRecord = new AfterServiceRecord();
searchRecord.setOrderDetailIds(StringUtils.join(detailIds, ","));
List<AfterServiceRecord> 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()); log.error("退回货物后退单退款执行失败记录ID{},错误:{}", param.getId(), e.getMessage());
} }
} }
afterServiceRecord.setCustomerFinalCheck(1L);
afterServiceRecord.setCustomerOperationTime(null);
// 更新售后记录 // 更新售后记录
afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord);

View File

@ -178,7 +178,7 @@ public class OrderServiceImpl implements OrderService {
// @Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
public void checkTimeout(OrderMaster order) { public void checkTimeout(OrderMaster order) {
log.info("主单超时开始:单号:{}, 内容:{}", order.getCode(), order); // log.info("主单超时开始:单号:{}, 内容:{}", order.getCode(), order);
Date now = new Date(); Date now = new Date();
// 待接单状态的超时逻辑 // 待接单状态的超时逻辑
if (ZERO.equals(order.getOrderStatus())) { if (ZERO.equals(order.getOrderStatus())) {
@ -352,7 +352,7 @@ public class OrderServiceImpl implements OrderService {
*/ */
// @Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
public void checkTimeout(OrderDetail order) { public void checkTimeout(OrderDetail order) {
log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order); // log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order);
Date now = new Date(); Date now = new Date();
// 是否超时 // 是否超时
boolean timeout = ONE.equals(order.getTimeout()); 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); 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);