no message

This commit is contained in:
cb 2025-09-05 09:29:24 +08:00
parent 6532c9d460
commit a75d05bc9a
4 changed files with 135 additions and 1 deletions

View File

@ -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;

View File

@ -82,4 +82,12 @@ public interface AfterServiceRecordMapper {
* @return 超时的售后记录列表 * @return 超时的售后记录列表
*/ */
List<AfterServiceRecord> selectCustomerConfirmTimeoutRecords(); List<AfterServiceRecord> selectCustomerConfirmTimeoutRecords();
/**
* 查询师傅重发补发超时的售后记录
* 倒计时4师傅重发补发后客户6天快递/物流或24小时非快递不操作
*
* @return 超时的售后记录列表
*/
List<AfterServiceRecord> selectWorkerResendTimeoutRecords();
} }

View File

@ -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());
}
} }

View File

@ -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>