增加子单的售后纠纷处理

This commit is contained in:
cb 2025-09-06 17:44:40 +08:00
parent 7878cc61c1
commit e9ab52cb7e
5 changed files with 89 additions and 6 deletions

View File

@ -1527,6 +1527,59 @@ public class OrderDetailController extends BaseController {
return AjaxResult.success(orderDetailService.afterDetailOrderCount(orderDetail)); return AjaxResult.success(orderDetailService.afterDetailOrderCount(orderDetail));
} }
@GetMapping("/after/dispute/count")
@ResponseBody
public AjaxResult countAfterDisputeList(OrderDetail orderDetail) {
try {
logger.info("查询子单售后纠纷数量");
// 设置查询条件售后纠纷状态
orderDetail.setAfterServiceStatus(1);
// 设置部门权限
if (this.getSysUser().getDept().getParentId() != 101) {
orderDetail.setDeptId(this.getSysUser().getDept().getParentId());
}
return AjaxResult.success(orderDetailService.countOrderDetailList(orderDetail));
} catch (Exception e) {
logger.error("查询子单售后纠纷数量异常", e);
return AjaxResult.error("查询售后纠纷数量失败:" + e.getMessage());
}
}
@PostMapping("/after/records/byDetailId")
@ResponseBody
public AjaxResult getAfterServiceRecordsByDetailId(Long orderDetailId) {
try {
logger.info("查询子单[{}]的售后纠纷记录", orderDetailId);
// 直接查询该子单的售后纠纷记录
AfterServiceRecord queryRecord = new AfterServiceRecord();
queryRecord.setOrderDetailId(orderDetailId);
queryRecord.setCustomerFinalCheck(0L); // 客户不同意
queryRecord.setExcludeAfterServiceFinished(Boolean.TRUE); // 排除已完成的售后
List<AfterServiceRecord> disputeRecords = afterServiceRecordService.selectAfterServiceRecordList(queryRecord);
logger.info("子单[{}]找到{}条售后纠纷记录", orderDetailId, disputeRecords.size());
// 为每个售后记录添加子单信息
OrderDetail detail = orderDetailService.selectById(orderDetailId);
if (detail != null) {
disputeRecords.forEach(record -> {
record.setOrderDetailCode(detail.getCode());
});
}
return AjaxResult.success(disputeRecords);
} catch (Exception e) {
logger.error("查询子单[{}]售后纠纷记录异常", orderDetailId, e);
return AjaxResult.error("查询售后纠纷记录失败:" + e.getMessage());
}
}
@ResponseBody @ResponseBody
@Operation(summary = "获取当天订单统计数据", method = "GET") @Operation(summary = "获取当天订单统计数据", method = "GET")
@GetMapping(path = "/statistics/now", produces = MediaType.APPLICATION_JSON_VALUE) @GetMapping(path = "/statistics/now", produces = MediaType.APPLICATION_JSON_VALUE)

View File

@ -127,7 +127,7 @@
</a> </a>
<a class="btn btn-default btn-outline" onclick="selectConditionBtn(this, {orderStatusName : '售后纠纷', orderStatus: -1})"> <a class="btn btn-default btn-outline" onclick="selectConditionBtn(this, {orderStatusName : '售后纠纷', orderStatus: -1})">
售后纠纷 售后纠纷
(<span>0</span>) (<span id="afterServiceDisputeNum">0</span>)
</a> </a>
</div> </div>
<div class="flex-board"> <div class="flex-board">
@ -553,6 +553,20 @@
} }
} }
}) })
// 售后纠纷数量统计
$.ajax({
type: "GET",
dataType:"json",
url: prefix + '/after/dispute/count',
success: function (result) {
if (result.code == web_status.SUCCESS) {
$('#afterServiceDisputeNum').text(result.data);
} else {
$.modal.msgError("售后纠纷数量加载错误,请重试!")
}
}
})
}); });
function changeOrderMode(orderMode) { function changeOrderMode(orderMode) {

View File

@ -534,7 +534,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
boolean payReverse = PayStatus.PAID.getCode().equals(financialMaster.getPayStatus()); boolean payReverse = PayStatus.PAID.getCode().equals(financialMaster.getPayStatus());
log.info("当前订单是否已支付: {}", payReverse); log.info("当前订单是否已支付: {}", payReverse);
// 申请退款金额 // 申请退款金额
BigDecimal refundMoney; BigDecimal refundMoney=BigDecimal.ZERO;
if (ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())) { if (ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())) {
refundMoney = afterServiceRecord.getAgreedRefund(); refundMoney = afterServiceRecord.getAgreedRefund();
} else { } else {
@ -547,6 +547,9 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (isMaster) { if (isMaster) {
// 如果这是大师傅的子单 退款金额最大可以等于主单服务金额 // 如果这是大师傅的子单 退款金额最大可以等于主单服务金额
// 判断退款金额 >= 主单服务金额 // 判断退款金额 >= 主单服务金额
if (refundMoney==null){
refundMoney=BigDecimal.ZERO;
}
boolean refundAll = refundMoney.compareTo(financialMaster.getServerMoney()) > -1; boolean refundAll = refundMoney.compareTo(financialMaster.getServerMoney()) > -1;
log.info("refundAll: {}", refundAll); log.info("refundAll: {}", refundAll);
List<OrderDetail> orderDetails = orderDetailService.selectByOrderMasterId(orderMaster.getId()); List<OrderDetail> orderDetails = orderDetailService.selectByOrderMasterId(orderMaster.getId());
@ -876,11 +879,14 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
*/ */
private void updateAfterServiceStatus(Long orderDetailId, Integer afterServiceStatus) { private void updateAfterServiceStatus(Long orderDetailId, Integer afterServiceStatus) {
try { try {
log.info("开始更新售后状态子单ID{},售后状态:{}", orderDetailId, afterServiceStatus);
// 更新子单售后状态 // 更新子单售后状态
OrderDetail orderDetail = new OrderDetail(); OrderDetail orderDetail = new OrderDetail();
orderDetail.setId(orderDetailId); orderDetail.setId(orderDetailId);
orderDetail.setAfterServiceStatus(afterServiceStatus); orderDetail.setAfterServiceStatus(afterServiceStatus);
orderDetailService.updateOrderDetail(orderDetail); int updateResult = orderDetailService.updateOrderDetail(orderDetail);
log.info("子单售后状态更新结果:{}", updateResult);
// 获取主单ID并更新主单售后状态 // 获取主单ID并更新主单售后状态
OrderDetail detail = orderDetailService.selectById(orderDetailId); OrderDetail detail = orderDetailService.selectById(orderDetailId);
@ -888,10 +894,13 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
OrderMaster orderMaster = new OrderMaster(); OrderMaster orderMaster = new OrderMaster();
orderMaster.setId(detail.getOrderMasterId()); orderMaster.setId(detail.getOrderMasterId());
orderMaster.setAfterServiceStatus(afterServiceStatus); orderMaster.setAfterServiceStatus(afterServiceStatus);
orderMasterService.updateOrderMaster(orderMaster); int masterUpdateResult = orderMasterService.updateOrderMaster(orderMaster);
log.info("主单售后状态更新结果:{}", masterUpdateResult);
log.info("更新售后状态成功子单ID{}主单ID{},售后状态:{}", log.info("更新售后状态成功子单ID{}主单ID{},售后状态:{}",
orderDetailId, detail.getOrderMasterId(), afterServiceStatus); orderDetailId, detail.getOrderMasterId(), afterServiceStatus);
} else {
log.warn("未找到子单或主单ID为空子单ID{}", orderDetailId);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("更新售后状态失败子单ID{},售后状态:{}", orderDetailId, afterServiceStatus, e); log.error("更新售后状态失败子单ID{},售后状态:{}", orderDetailId, afterServiceStatus, e);

View File

@ -80,7 +80,8 @@
return_reason, return_reason,
return_reason_detail, return_reason_detail,
return_images, return_images,
worker_remark worker_remark,
after_service_status
FROM order_detail FROM order_detail
</sql> </sql>
@ -120,7 +121,8 @@
od.return_reason, od.return_reason,
od.return_reason_detail, od.return_reason_detail,
od.return_images, od.return_images,
od.worker_remark od.worker_remark,
od.after_service_status
FROM order_detail od FROM order_detail od
LEFT JOIN order_master om ON om.id = od.order_master_id LEFT JOIN order_master om ON om.id = od.order_master_id
LEFT JOIN customer_address ca ON ca.customer_address_id = om.address_id LEFT JOIN customer_address ca ON ca.customer_address_id = om.address_id
@ -323,6 +325,9 @@
<if test="orderDetailIds != null"> <if test="orderDetailIds != null">
AND od.id in ( ${orderDetailIds} ) AND od.id in ( ${orderDetailIds} )
</if> </if>
<if test="afterServiceStatus != null">
AND od.after_service_status = #{afterServiceStatus}
</if>
</where> </where>
order by od.create_time order by od.create_time
<trim suffixOverrides=","> <trim suffixOverrides=",">
@ -394,6 +399,7 @@
<if test="returnReasonDetail != null">return_reason_detail = #{returnReasonDetail},</if> <if test="returnReasonDetail != null">return_reason_detail = #{returnReasonDetail},</if>
<if test="returnImages != null">return_images = #{returnImages},</if> <if test="returnImages != null">return_images = #{returnImages},</if>
<if test="workerRemark != null">worker_remark = #{workerRemark},</if> <if test="workerRemark != null">worker_remark = #{workerRemark},</if>
<if test="afterServiceStatus != null">after_service_status = #{afterServiceStatus},</if>
update_time = SYSDATE() update_time = SYSDATE()
</set> </set>
WHERE id = #{id} WHERE id = #{id}

View File

@ -517,6 +517,7 @@
<if test="returnReasonDetail != null">return_reason_detail = #{returnReasonDetail},</if> <if test="returnReasonDetail != null">return_reason_detail = #{returnReasonDetail},</if>
<if test="returnImages != null">return_images = #{returnImages},</if> <if test="returnImages != null">return_images = #{returnImages},</if>
<if test="workerRemark != null">worker_remark = #{workerRemark},</if> <if test="workerRemark != null">worker_remark = #{workerRemark},</if>
<if test="afterServiceStatus != null">after_service_status = #{afterServiceStatus},</if>
update_time = SYSDATE() update_time = SYSDATE()
</set> </set>
WHERE id = #{id} WHERE id = #{id}