From c84c39a28f2d7404b3da48c7843ff047473ee043 Mon Sep 17 00:00:00 2001
From: cb <275647614@qq.com>
Date: Thu, 25 Sep 2025 15:53:14 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=94=AE=E5=90=8E=E5=80=92?=
=?UTF-8?q?=E8=AE=A1=E6=97=B6=20=E4=BB=A5=E5=8F=8A=20=E5=B8=88=E5=82=85?=
=?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ghy/order/domain/AfterServiceRecord.java | 20 ++++
.../order/quartz/AfterServiceTimeoutTask.java | 1 +
.../impl/AfterServiceRecordServiceImpl.java | 100 ++++++++++++------
.../mapper/order/AfterServiceRecordMapper.xml | 6 +-
.../resources/mapper/worker/WorkerMapper.xml | 3 +
5 files changed, 94 insertions(+), 36 deletions(-)
diff --git a/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java b/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java
index caaef4ce..b447eb12 100644
--- a/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java
+++ b/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java
@@ -60,6 +60,26 @@ public class AfterServiceRecord extends BaseEntity
@Excel(name = "本单退款金额")
private BigDecimal refund;
+ public BigDecimal getRefund() {
+ return refund;
+ }
+
+ public void setRefund(BigDecimal refund) {
+ this.refund = refund;
+ }
+
+ /** 售后状态:0-进行中,1-已完成,2-已取消,3-已超时 */
+ @Excel(name = "售后状态:0-进行中,1-已完成,2-已取消,3-已超时")
+ private Integer afterServiceStatus;
+
+ public Integer getAfterServiceStatus() {
+ return afterServiceStatus;
+ }
+
+ public void setAfterServiceStatus(Integer afterServiceStatus) {
+ this.afterServiceStatus = afterServiceStatus;
+ }
+
/** 协商后的退款金额 */
@Excel(name = "协商后的退款金额")
private BigDecimal agreedRefund;
diff --git a/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java b/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java
index e32bd277..5c6d754c 100644
--- a/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java
+++ b/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java
@@ -116,6 +116,7 @@ public class AfterServiceTimeoutTask {
(record.getWorkerFeedbackResult().equals(0L) || record.getWorkerFeedbackResult().equals(1L))) {
// 倒计时3:师傅拒绝或同意后客户36小时不操作自动取消售后
record.setCustomerFinalCheck(null);
+ record.setAfterServiceStatus(2); // 设置为已取消状态
// 售后单取消完成,不需要退款,不设置refundApplyTime
record.setIsAutoProcessed(1); // 自动处理
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 cefbe02f..a8b591d9 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
@@ -39,6 +39,7 @@ import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.math.BigDecimal;
+import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -72,6 +73,8 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
@Autowired
private CustomerAddressService customerAddressService;
+
+
/**
* 查询售后记录
*
@@ -123,6 +126,8 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
// 根据订单类型自动设置售后大类
setAfterServiceCategory(afterServiceRecord);
+
+
int result = afterServiceRecordMapper.insertAfterServiceRecord(afterServiceRecord);
// 暂停确认中倒计时
@@ -214,6 +219,22 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
return AjaxResult.success("重做/补做完成状态已更新");
}
+ // 新增:处理师傅反馈结果为0或1时,设置redoCompleteTime为当前时间+36小时
+ if (param.getWorkerFeedbackResult() != null && (param.getWorkerFeedbackResult().equals(0L) || param.getWorkerFeedbackResult().equals(1L))) {
+ afterServiceRecord.setWorkerFeedbackResult(param.getWorkerFeedbackResult());
+ // 设置当前时间推后36小时
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ calendar.add(Calendar.HOUR_OF_DAY, 36);
+ afterServiceRecord.setRedoCompleteTime(calendar.getTime());
+
+
+
+ afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord);
+ log.info("师傅反馈结果为{},记录ID:{},redoCompleteTime设置为:{}", param.getWorkerFeedbackResult(), param.getId(), afterServiceRecord.getRedoCompleteTime());
+ return AjaxResult.success("师傅反馈结果已更新");
+ }
+
if (param.getCustomerFinalCheck()!=null ) {
// 检查是否已经被自动处理过,防止重复退款
if (afterServiceRecord.getIsAutoProcessed() != null && afterServiceRecord.getIsAutoProcessed() == 1) {
@@ -227,6 +248,13 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (one.equals(param.getCustomerFinalCheck())) {
// 客户同意重做结果,订单完成结束,不执行退款
afterServiceRecord.setCustomerFinalCheck(1L);
+
+ // 如果redoCompleteTime字段有值,且师傅操作为0或1,且客户同意,则将其设置为null
+ if (afterServiceRecord.getRedoCompleteTime() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult().equals(0L) || afterServiceRecord.getWorkerFeedbackResult().equals(1L)))) {
+ afterServiceRecord.setRedoCompleteTime(null);
+ }
afterServiceRecord.setRefundApplyTime(new Date());
log.info("师傅重做完成后,客户同意重做结果,订单完成结束,不执行退款");
@@ -255,6 +283,12 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
} else {
// 客户不同意重做结果,按之前的逻辑走(可能需要退款)
log.info("师傅重做完成后,客户不同意重做结果,按原逻辑处理");
+ // 如果redoCompleteTime字段有值,且师傅操作为0或1,且客户不同意,则将其设置为null
+ if (afterServiceRecord.getRedoCompleteTime() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult().equals(0L) || afterServiceRecord.getWorkerFeedbackResult().equals(1L)))) {
+ afterServiceRecord.setRedoCompleteTime(null);
+ }
// 客户不同意时,保存不同意图片和理由
if (param.getCustomerDisagreeImages() != null) {
afterServiceRecord.setCustomerDisagreeImages(param.getCustomerDisagreeImages());
@@ -262,8 +296,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (param.getCustomerDisagreeReason() != null) {
afterServiceRecord.setCustomerDisagreeReason(param.getCustomerDisagreeReason());
}
- // 更新子单和主单的售后状态为售后纠纷
- updateAfterServiceStatus(afterServiceRecord.getOrderDetailId(), 1);
+
// 继续执行下面的退款逻辑
}
}
@@ -271,8 +304,22 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
// 师傅未重做完成,按原逻辑处理退款
if (one.equals(param.getCustomerFinalCheck())) {
afterServiceRecord.setCustomerFinalCheck(1L);
+
+ // 如果redoCompleteTime字段有值,且师傅操作为0或1,且客户同意,则将其设置为null
+ if (afterServiceRecord.getRedoCompleteTime() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult().equals(0L) || afterServiceRecord.getWorkerFeedbackResult().equals(1L)))) {
+ afterServiceRecord.setRedoCompleteTime(null);
+ }
}else{
afterServiceRecord.setCustomerFinalCheck(0L);
+
+ // 如果redoCompleteTime字段有值,且师傅操作为0或1,且客户不同意,则将其设置为null
+ if (afterServiceRecord.getRedoCompleteTime() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult().equals(0L) || afterServiceRecord.getWorkerFeedbackResult().equals(1L)))) {
+ afterServiceRecord.setRedoCompleteTime(null);
+ }
// 客户不同意时,保存不同意图片和理由
if (param.getCustomerDisagreeImages() != null) {
afterServiceRecord.setCustomerDisagreeImages(param.getCustomerDisagreeImages());
@@ -280,10 +327,10 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (param.getCustomerDisagreeReason() != null) {
afterServiceRecord.setCustomerDisagreeReason(param.getCustomerDisagreeReason());
}
- // 更新子单和主单的售后状态为售后纠纷
- updateAfterServiceStatus(afterServiceRecord.getOrderDetailId(), 1);
+
}
afterServiceRecord.setRefundApplyTime(new Date());
+
// 售后客户回复通知
// 通知师傅新订单
try {
@@ -456,6 +503,12 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
// 商品售后的处理逻辑
if (one.equals(param.getCustomerFinalCheck())) {
afterServiceRecord.setCustomerFinalCheck(1L);
+ // 如果redoCompleteTime字段有值,且师傅操作为0或1,且客户同意,则将其设置为null
+ if (afterServiceRecord.getRedoCompleteTime() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult().equals(0L) || afterServiceRecord.getWorkerFeedbackResult().equals(1L)))) {
+ afterServiceRecord.setRedoCompleteTime(null);
+ }
// 保存操作者和退款金额
if (param.getUpdateBy() != null) {
afterServiceRecord.setUpdateBy(param.getUpdateBy());
@@ -487,6 +540,12 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
} else {
afterServiceRecord.setCustomerFinalCheck(0L);
+ // 如果redoCompleteTime字段有值,且师傅操作为0或1,且客户不同意,则将其设置为null
+ if (afterServiceRecord.getRedoCompleteTime() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult() != null &&
+ (afterServiceRecord.getWorkerFeedbackResult().equals(0L) || afterServiceRecord.getWorkerFeedbackResult().equals(1L)))) {
+ afterServiceRecord.setRedoCompleteTime(null);
+ }
// 客户不同意时,保存不同意图片和理由
if (param.getCustomerDisagreeImages() != null) {
afterServiceRecord.setCustomerDisagreeImages(param.getCustomerDisagreeImages());
@@ -501,8 +560,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (param.getRefund() != null) {
afterServiceRecord.setRefund(param.getRefund());
}
- // 更新子单和主单的售后状态为售后纠纷
- updateAfterServiceStatus(afterServiceRecord.getOrderDetailId(), 1);
+
log.info("商品售后-客户不同意处理方案");
}
@@ -926,35 +984,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
* @param orderDetailId 子单ID
* @param afterServiceStatus 售后状态:0-无售后,1-售后纠纷
*/
- private void updateAfterServiceStatus(Long orderDetailId, Integer afterServiceStatus) {
- try {
- log.info("开始更新售后状态,子单ID:{},售后状态:{}", orderDetailId, afterServiceStatus);
-
- // 更新子单售后状态
- OrderDetail orderDetail = new OrderDetail();
- orderDetail.setId(orderDetailId);
- orderDetail.setAfterServiceStatus(afterServiceStatus);
- int updateResult = orderDetailService.updateOrderDetail(orderDetail);
- log.info("子单售后状态更新结果:{}", updateResult);
-
- // 获取主单ID并更新主单售后状态
- OrderDetail detail = orderDetailService.selectById(orderDetailId);
- if (detail != null && detail.getOrderMasterId() != null) {
- OrderMaster orderMaster = new OrderMaster();
- orderMaster.setId(detail.getOrderMasterId());
- orderMaster.setAfterServiceStatus(afterServiceStatus);
- int masterUpdateResult = orderMasterService.updateOrderMaster(orderMaster);
- log.info("主单售后状态更新结果:{}", masterUpdateResult);
-
- log.info("更新售后状态成功,子单ID:{},主单ID:{},售后状态:{}",
- orderDetailId, detail.getOrderMasterId(), afterServiceStatus);
- } else {
- log.warn("未找到子单或主单ID为空,子单ID:{}", orderDetailId);
- }
- } catch (Exception e) {
- log.error("更新售后状态失败,子单ID:{},售后状态:{}", orderDetailId, afterServiceStatus, e);
- }
- }
+
/**
* 暂停确认中倒计时
diff --git a/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml b/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml
index cbc54e14..bd7cd1f6 100644
--- a/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml
+++ b/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml
@@ -52,6 +52,7 @@
+
@@ -60,7 +61,7 @@
customer_final_check, create_by, create_time, update_by, update_time, remark, refund_apply_time, customer_agree_redo,
redo_complete_time, redo_complete_remark, redo_complete_images, is_auto_processed, after_service_category, after_service_type, return_status,
return_address, return_contact, return_phone, return_type, return_remark, return_images, return_tracking_number, return_ship_time, merchant_receive_time, worker_resend_plan, worker_resend_time, worker_resend_type, worker_resend_tracking_number, worker_receive_status, worker_agree_type, worker_receive_confirm, worker_resend_remark, worker_resend_images,
- customer_disagree_images, customer_disagree_reason
+ customer_disagree_images, customer_disagree_reason, after_service_status
from after_service_record
@@ -136,6 +137,7 @@
worker_resend_images,
customer_disagree_images,
customer_disagree_reason,
+ after_service_status,
create_by,
update_by,
remark,
@@ -181,6 +183,7 @@
#{workerResendImages},
#{customerDisagreeImages},
#{customerDisagreeReason},
+ #{afterServiceStatus},
#{createBy},
#{updateBy},
#{remark},
@@ -232,6 +235,7 @@
worker_resend_images = #{workerResendImages},
customer_disagree_images = #{customerDisagreeImages},
customer_disagree_reason = #{customerDisagreeReason},
+ after_service_status = #{afterServiceStatus},
create_by = #{createBy},
create_time = #{createTime},
update_by = #{updateBy},
diff --git a/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml b/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml
index 6f0a87a7..7065c768 100644
--- a/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml
+++ b/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml
@@ -64,6 +64,9 @@
LEFT JOIN worker_goods_category wgc ON wgc.worker_id = w.worker_id
LEFT JOIN worker_certification wc on w.worker_id = wc.worker_id
+
+ AND w.status = #{status}
+
AND dept_id = #{deptId}