增加客户不同意的图片以及原因上传

This commit is contained in:
cb 2025-09-04 15:13:42 +08:00
parent 464fab9fa1
commit c7953da901
6 changed files with 96 additions and 2 deletions

View File

@ -116,7 +116,7 @@ qiniu:
accessKey: 'QTNOppkvtufxTxLjt1V7YZwvzV2Rc6WLD5yXLBVY'
secretKey: 'V8SM9nkbO-dft4JmG7UaCH6RYxXdqzrvQ0zWO2W3'
bucketName: 'gqz'
mediaUrl: 'http://gqz.opsoul.com/'
mediaUrl: 'https://gqz.opsoul.com/'
adapay:
debug: true

View File

@ -137,6 +137,14 @@ public class AfterServiceRecord extends BaseEntity
@Excel(name = "师傅重发/补发方案")
private Integer workerResendPlan;
/** 客户不同意图片 */
@Excel(name = "客户不同意图片")
private String customerDisagreeImages;
/** 客户不同意理由 */
@Excel(name = "客户不同意理由")
private String customerDisagreeReason;
private boolean excludeAfterServiceFinished;
private List<AfterServiceImgs> imgsList;

View File

@ -249,4 +249,10 @@ public class OrderDetail extends BaseEntity {
* 师傅备注
*/
private String workerRemark;
/**
* 售后状态0-无售后1-售后纠纷
*/
@Excel(name = "售后状态0-无售后1-售后纠纷")
private Integer afterServiceStatus;
}

View File

@ -323,4 +323,10 @@ public class OrderMaster extends BaseEntity {
* 师傅备注
*/
private String workerRemark;
/**
* 售后状态0-无售后1-售后纠纷
*/
@Excel(name = "售后状态0-无售后1-售后纠纷")
private Integer afterServiceStatus;
}

View File

@ -209,6 +209,12 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
}
if (param.getCustomerFinalCheck()!=null ) {
// 检查是否已经被自动处理过防止重复退款
if (afterServiceRecord.getIsAutoProcessed() != null && afterServiceRecord.getIsAutoProcessed() == 1) {
log.warn("售后记录[{}]已被自动处理,不允许手动重复操作", afterServiceRecord.getId());
return AjaxResult.error("该售后记录已被系统自动处理,无法重复操作");
}
// 检查师傅是否已经重做完成
if (afterServiceRecord.getWorkerFeedbackResult() != null && afterServiceRecord.getWorkerFeedbackResult().equals(3L)) {
// 师傅已重做完成
@ -239,6 +245,15 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
} else {
// 客户不同意重做结果按之前的逻辑走可能需要退款
log.info("师傅重做完成后,客户不同意重做结果,按原逻辑处理");
// 客户不同意时保存不同意图片和理由
if (param.getCustomerDisagreeImages() != null) {
afterServiceRecord.setCustomerDisagreeImages(param.getCustomerDisagreeImages());
}
if (param.getCustomerDisagreeReason() != null) {
afterServiceRecord.setCustomerDisagreeReason(param.getCustomerDisagreeReason());
}
// 更新子单和主单的售后状态为售后纠纷
updateAfterServiceStatus(afterServiceRecord.getOrderDetailId(), 1);
// 继续执行下面的退款逻辑
}
}
@ -248,6 +263,15 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
afterServiceRecord.setCustomerFinalCheck(1L);
}else{
afterServiceRecord.setCustomerFinalCheck(0L);
// 客户不同意时保存不同意图片和理由
if (param.getCustomerDisagreeImages() != null) {
afterServiceRecord.setCustomerDisagreeImages(param.getCustomerDisagreeImages());
}
if (param.getCustomerDisagreeReason() != null) {
afterServiceRecord.setCustomerDisagreeReason(param.getCustomerDisagreeReason());
}
// 更新子单和主单的售后状态为售后纠纷
updateAfterServiceStatus(afterServiceRecord.getOrderDetailId(), 1);
}
afterServiceRecord.setRefundApplyTime(new Date());
// 售后客户回复通知
@ -314,6 +338,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
Assert.notNull(financialMaster, "找不到支付记录");
// 是否已付款,用于判断是否需要退款
boolean payReverse = PayStatus.PAID.getCode().equals(financialMaster.getPayStatus());
log.info("当前订单是否已支付: {}", payReverse);
// 申请退款金额
BigDecimal refundMoney;
if (ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())) {
@ -358,6 +383,9 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
// 发起支付撤销
if (payReverse) {
payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt);
}else{
BigDecimal newRefundMoney=BigDecimal.ZERO;
afterServiceRecord.setOriginalRefund(newRefundMoney);
}
} else {
// 如果退款金额 < 主单服务金额
@ -365,11 +393,16 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
afterServiceRecord.setOriginalRefund(refundMoney);
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
financialMaster.setServerMoney(financialMaster.getServerMoney().subtract(refundMoney));
financialMaster.setDiscountMoney(refundMoney);
financialMasterService.updateFinancialMaster(financialMaster);
String reverseAmt = AdapayUtils.bigDecimalToString(refundMoney);
// 发起支付撤销
if (payReverse) {
log.info("已支付[{}]退款 refundMoney: {}", orderDetail.getId(), reverseAmt);
payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt);
}else{
BigDecimal newRefundMoney=BigDecimal.ZERO;
afterServiceRecord.setOriginalRefund(newRefundMoney);
}
}
} else {
@ -392,6 +425,9 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (payReverse) {
String reverseAmt = AdapayUtils.bigDecimalToString(refundMoney);
payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt);
}else{
BigDecimal newRefundMoney=BigDecimal.ZERO;
afterServiceRecord.setOriginalRefund(newRefundMoney);
}
}
@ -619,4 +655,33 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
}
}
/**
* 更新子单和主单的售后状态
* @param orderDetailId 子单ID
* @param afterServiceStatus 售后状态0-无售后1-售后纠纷
*/
private void updateAfterServiceStatus(Long orderDetailId, Integer afterServiceStatus) {
try {
// 更新子单售后状态
OrderDetail orderDetail = new OrderDetail();
orderDetail.setId(orderDetailId);
orderDetail.setAfterServiceStatus(afterServiceStatus);
orderDetailService.updateOrderDetail(orderDetail);
// 获取主单ID并更新主单售后状态
OrderDetail detail = orderDetailService.selectById(orderDetailId);
if (detail != null && detail.getOrderMasterId() != null) {
OrderMaster orderMaster = new OrderMaster();
orderMaster.setId(detail.getOrderMasterId());
orderMaster.setAfterServiceStatus(afterServiceStatus);
orderMasterService.updateOrderMaster(orderMaster);
log.info("更新售后状态成功子单ID{}主单ID{},售后状态:{}",
orderDetailId, detail.getOrderMasterId(), afterServiceStatus);
}
} catch (Exception e) {
log.error("更新售后状态失败子单ID{},售后状态:{}", orderDetailId, afterServiceStatus, e);
}
}
}

View File

@ -40,6 +40,8 @@
<result property="returnShipTime" column="return_ship_time" />
<result property="merchantReceiveTime" column="merchant_receive_time" />
<result property="workerResendPlan" column="worker_resend_plan" />
<result property="customerDisagreeImages" column="customer_disagree_images" />
<result property="customerDisagreeReason" column="customer_disagree_reason" />
</resultMap>
<sql id="selectAfterServiceRecordVo">
@ -47,7 +49,8 @@
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,
redo_complete_time, redo_complete_remark, redo_complete_images, is_auto_processed, 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
return_address, return_contact, return_phone, return_type, return_remark, return_images, return_tracking_number, return_ship_time, merchant_receive_time, worker_resend_plan,
customer_disagree_images, customer_disagree_reason
from after_service_record
</sql>
@ -110,6 +113,8 @@
<if test="returnShipTime != null">return_ship_time,</if>
<if test="merchantReceiveTime != null">merchant_receive_time,</if>
<if test="workerResendPlan != null">worker_resend_plan,</if>
<if test="customerDisagreeImages != null">customer_disagree_images,</if>
<if test="customerDisagreeReason != null">customer_disagree_reason,</if>
<if test="createBy != null">create_by,</if>
<if test="updateBy != null">update_by,</if>
<if test="remark != null">remark,</if>
@ -143,6 +148,8 @@
<if test="returnShipTime != null">#{returnShipTime},</if>
<if test="merchantReceiveTime != null">#{merchantReceiveTime},</if>
<if test="workerResendPlan != null">#{workerResendPlan},</if>
<if test="customerDisagreeImages != null">#{customerDisagreeImages},</if>
<if test="customerDisagreeReason != null">#{customerDisagreeReason},</if>
<if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="remark != null">#{remark},</if>
@ -182,6 +189,8 @@
<if test="returnShipTime != null">return_ship_time = #{returnShipTime},</if>
<if test="merchantReceiveTime != null">merchant_receive_time = #{merchantReceiveTime},</if>
<if test="workerResendPlan != null">worker_resend_plan = #{workerResendPlan},</if>
<if test="customerDisagreeImages != null">customer_disagree_images = #{customerDisagreeImages},</if>
<if test="customerDisagreeReason != null">customer_disagree_reason = #{customerDisagreeReason},</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>