no message
This commit is contained in:
parent
6532c9d460
commit
a75d05bc9a
|
|
@ -153,6 +153,14 @@ public class AfterServiceRecord extends BaseEntity
|
||||||
@Excel(name = "师傅重发/补发物流单号")
|
@Excel(name = "师傅重发/补发物流单号")
|
||||||
private String workerResendTrackingNumber;
|
private String workerResendTrackingNumber;
|
||||||
|
|
||||||
|
/** 师傅收货状态:1-未发货,2-已发货在途,3-已收货,4-售后保障期 */
|
||||||
|
@Excel(name = "师傅收货状态:1-未发货,2-已发货在途,3-已收货,4-售后保障期")
|
||||||
|
private Integer workerReceiveStatus;
|
||||||
|
|
||||||
|
/** 师傅同意处理方式:1-即时退单退款,2-货物拦截后退单退款,3-快递返回货物后退单退款,4-退回货物后退单退款 */
|
||||||
|
@Excel(name = "师傅同意处理方式:1-即时退单退款,2-货物拦截后退单退款,3-快递返回货物后退单退款,4-退回货物后退单退款")
|
||||||
|
private Integer workerAgreeType;
|
||||||
|
|
||||||
/** 客户不同意图片 */
|
/** 客户不同意图片 */
|
||||||
@Excel(name = "客户不同意图片")
|
@Excel(name = "客户不同意图片")
|
||||||
private String customerDisagreeImages;
|
private String customerDisagreeImages;
|
||||||
|
|
|
||||||
|
|
@ -82,4 +82,12 @@ public interface AfterServiceRecordMapper {
|
||||||
* @return 超时的售后记录列表
|
* @return 超时的售后记录列表
|
||||||
*/
|
*/
|
||||||
List<AfterServiceRecord> selectCustomerConfirmTimeoutRecords();
|
List<AfterServiceRecord> selectCustomerConfirmTimeoutRecords();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询师傅重发补发超时的售后记录
|
||||||
|
* 倒计时4:师傅重发补发后,客户6天(快递/物流)或24小时(非快递)不操作
|
||||||
|
*
|
||||||
|
* @return 超时的售后记录列表
|
||||||
|
*/
|
||||||
|
List<AfterServiceRecord> selectWorkerResendTimeoutRecords();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -404,6 +404,21 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
||||||
return AjaxResult.success("重发/补发方案已提交,等待客户确认");
|
return AjaxResult.success("重发/补发方案已提交,等待客户确认");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 新增:处理师傅操作处理按键(收货状态和同意处理方式)
|
||||||
|
if (param.getWorkerReceiveStatus() != null && param.getWorkerAgreeType() != null) {
|
||||||
|
afterServiceRecord.setWorkerReceiveStatus(param.getWorkerReceiveStatus());
|
||||||
|
afterServiceRecord.setWorkerAgreeType(param.getWorkerAgreeType());
|
||||||
|
|
||||||
|
// 根据不同的状态和方式执行不同的业务逻辑
|
||||||
|
// handleWorkerProcessLogic(afterServiceRecord, orderDetail);
|
||||||
|
|
||||||
|
afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord);
|
||||||
|
|
||||||
|
log.info("商品售后-师傅处理操作已提交,记录ID:{},收货状态:{},同意方式:{}",
|
||||||
|
param.getId(), param.getWorkerReceiveStatus(), param.getWorkerAgreeType());
|
||||||
|
return AjaxResult.success("师傅处理操作已提交");
|
||||||
|
}
|
||||||
|
|
||||||
if (param.getCustomerFinalCheck()!=null ) {
|
if (param.getCustomerFinalCheck()!=null ) {
|
||||||
// 检查是否已经被自动处理过,防止重复退款
|
// 检查是否已经被自动处理过,防止重复退款
|
||||||
if (afterServiceRecord.getIsAutoProcessed() != null && afterServiceRecord.getIsAutoProcessed() == 1) {
|
if (afterServiceRecord.getIsAutoProcessed() != null && afterServiceRecord.getIsAutoProcessed() == 1) {
|
||||||
|
|
@ -977,4 +992,99 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
||||||
return afterServiceRecordMapper.selectWorkerResendTimeoutRecords();
|
return afterServiceRecordMapper.selectWorkerResendTimeoutRecords();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理师傅操作处理逻辑
|
||||||
|
* 根据不同的收货状态和同意处理方式执行不同的业务逻辑
|
||||||
|
*/
|
||||||
|
private void handleWorkerProcessLogic(AfterServiceRecord record, OrderDetail orderDetail) {
|
||||||
|
int receiveStatus = record.getWorkerReceiveStatus();
|
||||||
|
int agreeType = record.getWorkerAgreeType();
|
||||||
|
|
||||||
|
log.info("处理师傅操作逻辑,收货状态:{},同意方式:{},订单详情ID:{}",
|
||||||
|
receiveStatus, agreeType, orderDetail.getId());
|
||||||
|
|
||||||
|
switch (agreeType) {
|
||||||
|
case 1: // 即时退单退款
|
||||||
|
handleImmediateRefund(record, orderDetail);
|
||||||
|
break;
|
||||||
|
case 2: // 货物拦截后退单退款
|
||||||
|
handleInterceptAndRefund(record, orderDetail);
|
||||||
|
break;
|
||||||
|
case 3: // 快递返回货物后退单退款
|
||||||
|
handleReturnAndRefund(record, orderDetail);
|
||||||
|
break;
|
||||||
|
case 4: // 退回货物后退单退款
|
||||||
|
handleCustomerReturnAndRefund(record, orderDetail);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
log.warn("未知的师傅同意处理方式:{}", agreeType);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理即时退单退款
|
||||||
|
*/
|
||||||
|
private void handleImmediateRefund(AfterServiceRecord record, OrderDetail orderDetail) {
|
||||||
|
log.info("执行即时退单退款,记录ID:{},订单详情ID:{}", record.getId(), orderDetail.getId());
|
||||||
|
|
||||||
|
// 设置退款申请时间
|
||||||
|
record.setRefundApplyTime(new Date());
|
||||||
|
|
||||||
|
// 执行退款逻辑
|
||||||
|
try {
|
||||||
|
executeRefundLogic(record);
|
||||||
|
log.info("即时退单退款执行成功,记录ID:{}", record.getId());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("即时退单退款执行失败,记录ID:{},错误:{}", record.getId(), e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理货物拦截后退单退款
|
||||||
|
*/
|
||||||
|
private void handleInterceptAndRefund(AfterServiceRecord record, OrderDetail orderDetail) {
|
||||||
|
log.info("执行货物拦截后退单退款,记录ID:{},订单详情ID:{}", record.getId(), orderDetail.getId());
|
||||||
|
|
||||||
|
// TODO: 联系物流公司进行货物拦截
|
||||||
|
// 1. 获取物流单号
|
||||||
|
// 2. 调用物流API进行拦截
|
||||||
|
// 3. 拦截成功后执行退款
|
||||||
|
|
||||||
|
// 暂时先设置退款申请时间,实际拦截逻辑需要根据具体物流公司API实现
|
||||||
|
record.setRefundApplyTime(new Date());
|
||||||
|
|
||||||
|
log.info("货物拦截处理已启动,记录ID:{}", record.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理快递返回货物后退单退款
|
||||||
|
*/
|
||||||
|
private void handleReturnAndRefund(AfterServiceRecord record, OrderDetail orderDetail) {
|
||||||
|
log.info("执行快递返回货物后退单退款,记录ID:{},订单详情ID:{}", record.getId(), orderDetail.getId());
|
||||||
|
|
||||||
|
// TODO: 等待货物返回确认
|
||||||
|
// 1. 监控物流状态
|
||||||
|
// 2. 确认货物已返回
|
||||||
|
// 3. 执行退款
|
||||||
|
|
||||||
|
// 暂时不设置退款申请时间,等待货物返回确认
|
||||||
|
log.info("等待快递返回货物确认,记录ID:{}", record.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理客户退回货物后退单退款
|
||||||
|
*/
|
||||||
|
private void handleCustomerReturnAndRefund(AfterServiceRecord record, OrderDetail orderDetail) {
|
||||||
|
log.info("执行客户退回货物后退单退款,记录ID:{},订单详情ID:{}", record.getId(), orderDetail.getId());
|
||||||
|
|
||||||
|
// TODO: 等待客户退回货物确认
|
||||||
|
// 1. 通知客户退回货物
|
||||||
|
// 2. 确认货物已退回
|
||||||
|
// 3. 执行退款
|
||||||
|
|
||||||
|
// 暂时不设置退款申请时间,等待客户退回货物确认
|
||||||
|
log.info("等待客户退回货物确认,记录ID:{}", record.getId());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,8 @@
|
||||||
<result property="workerResendTime" column="worker_resend_time" />
|
<result property="workerResendTime" column="worker_resend_time" />
|
||||||
<result property="workerResendType" column="worker_resend_type" />
|
<result property="workerResendType" column="worker_resend_type" />
|
||||||
<result property="workerResendTrackingNumber" column="worker_resend_tracking_number" />
|
<result property="workerResendTrackingNumber" column="worker_resend_tracking_number" />
|
||||||
|
<result property="workerReceiveStatus" column="worker_receive_status" />
|
||||||
|
<result property="workerAgreeType" column="worker_agree_type" />
|
||||||
<result property="customerDisagreeImages" column="customer_disagree_images" />
|
<result property="customerDisagreeImages" column="customer_disagree_images" />
|
||||||
<result property="customerDisagreeReason" column="customer_disagree_reason" />
|
<result property="customerDisagreeReason" column="customer_disagree_reason" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
@ -53,7 +55,7 @@
|
||||||
worker_feedback_reason_type, worker_feedback_reason, refund, agreed_refund, original_refund,
|
worker_feedback_reason_type, worker_feedback_reason, refund, agreed_refund, original_refund,
|
||||||
customer_final_check, create_by, create_time, update_by, update_time, remark, refund_apply_time, customer_agree_redo,
|
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,
|
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,
|
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,
|
||||||
customer_disagree_images, customer_disagree_reason
|
customer_disagree_images, customer_disagree_reason
|
||||||
from after_service_record
|
from after_service_record
|
||||||
</sql>
|
</sql>
|
||||||
|
|
@ -121,6 +123,8 @@
|
||||||
<if test="workerResendTime != null">worker_resend_time,</if>
|
<if test="workerResendTime != null">worker_resend_time,</if>
|
||||||
<if test="workerResendType != null">worker_resend_type,</if>
|
<if test="workerResendType != null">worker_resend_type,</if>
|
||||||
<if test="workerResendTrackingNumber != null">worker_resend_tracking_number,</if>
|
<if test="workerResendTrackingNumber != null">worker_resend_tracking_number,</if>
|
||||||
|
<if test="workerReceiveStatus != null">worker_receive_status,</if>
|
||||||
|
<if test="workerAgreeType != null">worker_agree_type,</if>
|
||||||
<if test="customerDisagreeImages != null">customer_disagree_images,</if>
|
<if test="customerDisagreeImages != null">customer_disagree_images,</if>
|
||||||
<if test="customerDisagreeReason != null">customer_disagree_reason,</if>
|
<if test="customerDisagreeReason != null">customer_disagree_reason,</if>
|
||||||
<if test="createBy != null">create_by,</if>
|
<if test="createBy != null">create_by,</if>
|
||||||
|
|
@ -160,6 +164,8 @@
|
||||||
<if test="workerResendTime != null">#{workerResendTime},</if>
|
<if test="workerResendTime != null">#{workerResendTime},</if>
|
||||||
<if test="workerResendType != null">#{workerResendType},</if>
|
<if test="workerResendType != null">#{workerResendType},</if>
|
||||||
<if test="workerResendTrackingNumber != null">#{workerResendTrackingNumber},</if>
|
<if test="workerResendTrackingNumber != null">#{workerResendTrackingNumber},</if>
|
||||||
|
<if test="workerReceiveStatus != null">#{workerReceiveStatus},</if>
|
||||||
|
<if test="workerAgreeType != null">#{workerAgreeType},</if>
|
||||||
<if test="customerDisagreeImages != null">#{customerDisagreeImages},</if>
|
<if test="customerDisagreeImages != null">#{customerDisagreeImages},</if>
|
||||||
<if test="customerDisagreeReason != null">#{customerDisagreeReason},</if>
|
<if test="customerDisagreeReason != null">#{customerDisagreeReason},</if>
|
||||||
<if test="createBy != null">#{createBy},</if>
|
<if test="createBy != null">#{createBy},</if>
|
||||||
|
|
@ -205,6 +211,8 @@
|
||||||
<if test="workerResendTime != null">worker_resend_time = #{workerResendTime},</if>
|
<if test="workerResendTime != null">worker_resend_time = #{workerResendTime},</if>
|
||||||
<if test="workerResendType != null">worker_resend_type = #{workerResendType},</if>
|
<if test="workerResendType != null">worker_resend_type = #{workerResendType},</if>
|
||||||
<if test="workerResendTrackingNumber != null">worker_resend_tracking_number = #{workerResendTrackingNumber},</if>
|
<if test="workerResendTrackingNumber != null">worker_resend_tracking_number = #{workerResendTrackingNumber},</if>
|
||||||
|
<if test="workerReceiveStatus != null">worker_receive_status = #{workerReceiveStatus},</if>
|
||||||
|
<if test="workerAgreeType != null">worker_agree_type = #{workerAgreeType},</if>
|
||||||
<if test="customerDisagreeImages != null">customer_disagree_images = #{customerDisagreeImages},</if>
|
<if test="customerDisagreeImages != null">customer_disagree_images = #{customerDisagreeImages},</if>
|
||||||
<if test="customerDisagreeReason != null">customer_disagree_reason = #{customerDisagreeReason},</if>
|
<if test="customerDisagreeReason != null">customer_disagree_reason = #{customerDisagreeReason},</if>
|
||||||
<if test="createBy != null">create_by = #{createBy},</if>
|
<if test="createBy != null">create_by = #{createBy},</if>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue