增加商品售后的不同显示 以及后台重复处理的超时设置

This commit is contained in:
cb 2025-10-30 11:35:05 +08:00
parent aa7b8c7a5d
commit 174f6b4a82
4 changed files with 125 additions and 4 deletions

View File

@ -566,6 +566,7 @@ public class OrderDetailController extends BaseController {
orderListResponse.setHandoverRemark(detail.getHandoverRemark());
orderListResponse.setGoods(goods);
orderListResponse.setOrderType(detail.getOrderType());
orderListResponse.setAfterPlatformServiceStatus(detail.getAfterServiceStatus());
orderListResponse.setAddMoneyRemark(addMoneyRemark);
orderListResponse.setAddMoney(addMoneyTotal);

View File

@ -1026,6 +1026,37 @@
return;
}
// 直接获取订单详情来判断订单类型
getOrderDetailInfo(orderDetailId, function(orderDetail) {
showDisputeModalWithOrderInfo(orderDetailId, disputeRecords, orderDetail);
});
}
// 获取订单详情信息
function getOrderDetailInfo(orderDetailId, callback) {
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json",
url: prefix + "/app/detail",
data: JSON.stringify({id: orderDetailId}),
success: function(result) {
if (result.code == web_status.SUCCESS) {
callback(result.data);
} else {
callback(null);
}
},
error: function() {
callback(null);
}
});
}
// 根据订单信息显示售后纠纷处理弹窗
function showDisputeModalWithOrderInfo(orderDetailId, disputeRecords, orderDetail) {
var isGoodsOrder = orderDetail && orderDetail.orderType === 1; // 1表示商品订单
var modalContent = '<div class="modal-body">';
modalContent += '<div class="table-responsive">';
modalContent += '<table class="table table-bordered table-striped">';
@ -1041,7 +1072,14 @@
modalContent += '<tr>';
modalContent += '<td>' + (record.orderDetailCode || record.id) + '</td>';
modalContent += '<td>¥' + (record.refund || record.agreedRefund || 0) + '</td>';
modalContent += '<td>' + getWorkerFeedbackText(record.workerFeedbackResult) + '<br/><span style="color: #666; font-size: 12px;">反馈金额:¥' + (record.agreedRefund || 0) + '</span></td>';
// 师傅反馈列 - 如果是商品订单则增加workerAgreeType显示
var workerFeedbackContent = getWorkerFeedbackText(record.workerFeedbackResult) + '<br/><span style="color: #666; font-size: 12px;">反馈金额:¥' + (record.agreedRefund || 0) + '</span>';
if (isGoodsOrder && record.workerAgreeType) {
workerFeedbackContent += '<br/><span style="color: #007bff; font-size: 12px;">处理方式:' + getWorkerAgreeTypeText(record.workerAgreeType) + '</span>';
}
modalContent += '<td>' + workerFeedbackContent + '</td>';
modalContent += '<td>' + getCustomerCheckText(record.customerFinalCheck) + '</td>';
modalContent += '<td>';
modalContent += '<div style="margin-bottom: 8px;">';
@ -1059,6 +1097,15 @@
});
modalContent += '</tbody></table>';
// 如果是商品订单,在表格下方增加提示文字
if (isGoodsOrder) {
modalContent += '<div style="margin-top: 15px; padding: 10px; background-color: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px;">';
modalContent += '<i class="fa fa-exclamation-triangle" style="color: #856404; margin-right: 5px;"></i>';
modalContent += '<span style="color: #856404; font-weight: bold;">商品退款需确认是否存在退货,并确认退完与否再操作退款!同时确认子单款项金额是否符合退款要求!</span>';
modalContent += '</div>';
}
modalContent += '</div>';
modalContent += '</div>';
@ -1072,6 +1119,17 @@
});
}
// 获取师傅同意处理方式文本
function getWorkerAgreeTypeText(type) {
var typeMap = {
1: '即时退单退款',
2: '货物拦截后退单退款',
3: '快递返回货物后退单退款',
4: '退回货物后退单退款'
};
return typeMap[type] || '未知';
}
// 处理退款
function processRefund(recordId, orderDetailId) {
var refundAmount = $('#refundAmount_' + recordId).val();

View File

@ -1254,8 +1254,49 @@
});
}
// 获取订单详情信息
function getOrderDetailInfo(orderMasterId, callback) {
$.ajax({
type: "POST",
dataType: "json",
url: prefix + "/app/detail",
contentType: "application/json",
data: JSON.stringify({id: orderMasterId}),
success: function (result) {
if (result.code == web_status.SUCCESS) {
callback(result.data);
} else {
$.modal.msgError("获取订单详情失败:" + result.msg);
}
},
error: function() {
$.modal.msgError("获取订单详情失败,请重试!");
}
});
}
// 获取师傅同意类型文本
function getWorkerAgreeTypeText(type) {
var types = {
1: '同意',
2: '不同意',
3: '部分同意'
};
return types[type] || '未处理';
}
// 显示售后纠纷处理弹窗
function showAfterServiceDisputeModal(orderMasterId, afterServiceRecords) {
// 先获取订单详情以判断订单类型
getOrderDetailInfo(orderMasterId, function(orderDetail) {
showDisputeModalWithOrderInfo(orderMasterId, afterServiceRecords, orderDetail);
});
}
// 根据订单信息显示售后纠纷处理弹窗
function showDisputeModalWithOrderInfo(orderMasterId, afterServiceRecords, orderDetail) {
var isGoodsOrder = orderDetail && orderDetail.orderType === 1;
var html = '<div class="modal fade" id="afterServiceDisputeModal" tabindex="-1" role="dialog">';
html += '<div class="modal-dialog modal-lg" role="document">';
html += '<div class="modal-content">';
@ -1268,7 +1309,12 @@
if (afterServiceRecords && afterServiceRecords.length > 0) {
html += '<div class="table-responsive">';
html += '<table class="table table-bordered table-striped">';
html += '<thead><tr><th>子单号</th><th>申请退款金额</th><th>师傅反馈</th><th>客户确认</th><th>操作</th></tr></thead>';
// 根据订单类型决定表头
if (isGoodsOrder) {
html += '<thead><tr><th>子单号</th><th>申请退款金额</th><th>师傅反馈</th><th>师傅同意类型</th><th>客户确认</th><th>操作</th></tr></thead>';
} else {
html += '<thead><tr><th>子单号</th><th>申请退款金额</th><th>师傅反馈</th><th>客户确认</th><th>操作</th></tr></thead>';
}
html += '<tbody>';
afterServiceRecords.forEach(function(record) {
@ -1276,6 +1322,10 @@
html += '<td>' + (record.orderDetailCode || '') + '</td>';
html += '<td>¥' + (record.refund || record.agreedRefund || 0) + '</td>';
html += '<td>' + getWorkerFeedbackText(record.workerFeedbackResult) + '<br><small style="color: #999;">反馈金额:¥' + (record.agreedRefund || 0) + '</small></td>';
// 如果是商品订单,添加师傅同意类型列
if (isGoodsOrder) {
html += '<td>' + getWorkerAgreeTypeText(record.workerAgreeType) + '</td>';
}
html += '<td>' + getCustomerCheckText(record.customerFinalCheck) + '</td>';
html += '<td style="width: 280px;">';
html += '<div style="margin-bottom: 8px;">';
@ -1293,6 +1343,13 @@
});
html += '</tbody></table></div>';
// 如果是商品订单,添加提示文字
if (isGoodsOrder) {
html += '<div class="alert alert-warning" style="margin-top: 15px;">';
html += '<strong>提示:</strong>商品退款需确认是否存在退货,并确认退完与否再操作退款!同时确认子单款项金额是否符合退款要求!';
html += '</div>';
}
} else {
html += '<div class="alert alert-info">该订单暂无售后纠纷记录</div>';
}

View File

@ -276,6 +276,7 @@
AND customer_final_check IS NULL
AND (is_auto_processed IS NULL OR is_auto_processed = 0)
AND create_time &lt;= DATE_SUB(NOW(), INTERVAL 24 HOUR)
AND create_time &gt;= DATE_SUB(NOW(), INTERVAL 1470 MINUTE)
</select>
<!-- 查询客户确认超时的售后记录 -->
@ -288,11 +289,13 @@
AND (
-- 倒计时2师傅重做完成后客户36小时不操作
(worker_feedback_result = 3
AND redo_complete_time &lt;= DATE_SUB(NOW(), INTERVAL 36 HOUR))
AND redo_complete_time &lt;= DATE_SUB(NOW(), INTERVAL 36 HOUR)
AND redo_complete_time &gt;= DATE_SUB(NOW(), INTERVAL 2190 MINUTE))
OR
-- 倒计时3师傅拒绝或同意后客户36小时不操作
(worker_feedback_result IN (0, 1)
AND update_time &lt;= DATE_SUB(NOW(), INTERVAL 36 HOUR))
AND update_time &lt;= DATE_SUB(NOW(), INTERVAL 36 HOUR)
AND update_time &gt;= DATE_SUB(NOW(), INTERVAL 2190 MINUTE))
)
</select>
@ -305,6 +308,7 @@
AND (
-- 所有类型统一5天倒计时
worker_resend_time &lt;= DATE_SUB(NOW(), INTERVAL 4 DAY)
AND worker_resend_time &gt;= DATE_SUB(NOW(), INTERVAL 5790 MINUTE)
)
</select>
@ -314,6 +318,7 @@
<include refid="selectAfterServiceRecordVo"/>
WHERE customer_operation_time IS NOT NULL
AND customer_operation_time &lt;= DATE_SUB(NOW(), INTERVAL 6 DAY)
AND customer_operation_time &gt;= DATE_SUB(NOW(), INTERVAL 8670 MINUTE)
AND (worker_receive_confirm IS NULL OR worker_receive_confirm = 0)
AND after_service_status = 0
AND after_service_category = 2