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}