增加售后倒计时 以及 师傅状态查询
This commit is contained in:
parent
47f717fcb2
commit
c84c39a28f
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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); // 自动处理
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 暂停确认中倒计时
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
<result property="workerResendImages" column="worker_resend_images" />
|
||||
<result property="customerDisagreeImages" column="customer_disagree_images" />
|
||||
<result property="customerDisagreeReason" column="customer_disagree_reason" />
|
||||
<result property="afterServiceStatus" column="after_service_status" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectAfterServiceRecordVo">
|
||||
|
|
@ -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
|
||||
</sql>
|
||||
|
||||
|
|
@ -136,6 +137,7 @@
|
|||
<if test="workerResendImages != null">worker_resend_images,</if>
|
||||
<if test="customerDisagreeImages != null">customer_disagree_images,</if>
|
||||
<if test="customerDisagreeReason != null">customer_disagree_reason,</if>
|
||||
<if test="afterServiceStatus != null">after_service_status,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="remark != null">remark,</if>
|
||||
|
|
@ -181,6 +183,7 @@
|
|||
<if test="workerResendImages != null">#{workerResendImages},</if>
|
||||
<if test="customerDisagreeImages != null">#{customerDisagreeImages},</if>
|
||||
<if test="customerDisagreeReason != null">#{customerDisagreeReason},</if>
|
||||
<if test="afterServiceStatus != null">#{afterServiceStatus},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="remark != null">#{remark},</if>
|
||||
|
|
@ -232,6 +235,7 @@
|
|||
<if test="workerResendImages != null">worker_resend_images = #{workerResendImages},</if>
|
||||
<if test="customerDisagreeImages != null">customer_disagree_images = #{customerDisagreeImages},</if>
|
||||
<if test="customerDisagreeReason != null">customer_disagree_reason = #{customerDisagreeReason},</if>
|
||||
<if test="afterServiceStatus != null">after_service_status = #{afterServiceStatus},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
<where>
|
||||
<if test="status != null">
|
||||
AND w.status = #{status}
|
||||
</if>
|
||||
<if test="deptId != null and deptId != ''">
|
||||
AND dept_id = #{deptId}
|
||||
</if>
|
||||
|
|
|
|||
Loading…
Reference in New Issue