no message

This commit is contained in:
cb 2025-11-01 11:15:02 +08:00
parent 174f6b4a82
commit a36d9374dd
7 changed files with 166 additions and 41 deletions

View File

@ -1469,7 +1469,7 @@ public class OrderController extends BaseController {
@PostMapping("/app/mix/after/list") @PostMapping("/app/mix/after/list")
@ResponseBody @ResponseBody
public AjaxResult appMixAfterList(@RequestBody OrderListRequest orderListRequest) { public AjaxResult appMixAfterList(@RequestBody OrderListRequest orderListRequest) {
List<OrderListResponse> orderListResponses = new ArrayList<>(); List<OrderListResponse> orderListResponses = new ArrayList<>();
// 校验参数 // 校验参数
Assert.notNull(orderListRequest.getWorkerId(), "师傅id不能为空"); Assert.notNull(orderListRequest.getWorkerId(), "师傅id不能为空");
@ -1485,29 +1485,50 @@ public class OrderController extends BaseController {
OrderMaster orderMasterReq = new OrderMaster(); OrderMaster orderMasterReq = new OrderMaster();
BeanUtils.copyProperties(orderListRequest, orderMasterReq); BeanUtils.copyProperties(orderListRequest, orderMasterReq);
List<OrderListResponse> masterList = this.getMasterAfterList(orderMasterReq); List<OrderListResponse> masterList = this.getMasterAfterList(orderMasterReq);
// 查询售后记录
AfterServiceRecord afterServiceRecord = new AfterServiceRecord();
afterServiceRecord.setExcludeAfterServiceFinished(Boolean.TRUE);
List<AfterServiceRecord> afterServiceRecordList = afterServiceRecordService
.selectAfterServiceRecordList(afterServiceRecord);
// 按子单ID分组售后记录
Map<Long, List<AfterServiceRecord>> detailRecordMap = afterServiceRecordList.stream()
.collect(Collectors.groupingBy(record -> record.getOrderDetailId()));
// 获取有售后记录的子单ID列表
List<Long> detailIds = afterServiceRecordList.stream()
.map(AfterServiceRecord::getOrderDetailId)
.distinct()
.collect(Collectors.toList());
// 需要排除同个师傅的主单子单同时出现 // 需要排除同个师傅的主单子单同时出现
List<OrderListResponse> filteredMasterList = new ArrayList<OrderListResponse>(); List<OrderListResponse> filteredMasterList = masterList.stream()
for (OrderListResponse master : masterList) { .filter(master -> {
boolean isKeep = false; // 查询该主单下所有售后中的子单
// 查询该主单下所有售后中的子单 OrderDetail detailAfterListOfMasterQry = new OrderDetail();
OrderDetail detailAfterListOfMasterQry = new OrderDetail(); detailAfterListOfMasterQry.setOrderMasterCode(master.getOrderMasterCode());
detailAfterListOfMasterQry.setOrderMasterCode(master.getOrderMasterCode()); // 注意这里使用getDetailAfterListLite方法该方法只返回必要字段性能更好
List<OrderListResponse> detailAfterListOfMasters = this.getDetailAfterList(detailAfterListOfMasterQry); List<OrderListResponse> detailAfterList = this.getDetailAfterListLite(detailAfterListOfMasterQry, detailRecordMap,detailIds);
for (OrderListResponse detailAfterListOfMaster : detailAfterListOfMasters) { // List<OrderListResponse> detailAfterList = this.getDetailAfterList(detailAfterListOfMasterQry);
if (!detailAfterListOfMaster.getWorkerId().equals(orderListRequest.getWorkerId())) {
isKeep = true; // 检查是否有其他师傅的售后单
break; boolean hasOtherWorkerAfterService = detailAfterList.stream()
} .anyMatch(detail -> !detail.getWorkerId().equals(orderListRequest.getWorkerId()));
}
long count = detailAfterListOfMasters.stream() if (hasOtherWorkerAfterService) {
.filter(x -> (x.getAfterTimeout() != null && x.getAfterTimeout() == 1)).count(); // 检查是否有超时的售后单如果有则标记主单为超时
if (isKeep) { boolean hasTimeout = detailAfterList.stream()
if (count > 0) { .anyMatch(detail -> detail.getAfterTimeout() != null && detail.getAfterTimeout() == 1);
master.setAfterTimeout(1); if (hasTimeout) {
} master.setAfterTimeout(1);
filteredMasterList.add(master); }
} return true;
} }
return false;
})
.collect(Collectors.toList());
orderListResponses.addAll(filteredMasterList); orderListResponses.addAll(filteredMasterList);
// 根据更新时间倒序排列 // 根据更新时间倒序排列
@ -1924,6 +1945,80 @@ public class OrderController extends BaseController {
return orderListResponses; return orderListResponses;
} }
/**
* 轻量级售后订单查询方法
* 只返回必要字段提高查询性能
* @param orderDetail 查询条件
* @return 轻量级订单响应列表
*/
public List<OrderListResponse> getDetailAfterListLite(OrderDetail orderDetail,Map<Long, List<AfterServiceRecord>> detailRecordMap,List<Long> detailIds) {
// 设置查询条件
StringBuilder orderDetailIds = new StringBuilder();
detailIds.forEach(id -> orderDetailIds.append(id).append(","));
String ids = orderDetailIds.toString();
if (StringUtils.isNotEmpty(ids)) {
orderDetail.setOrderDetailIds(ids.substring(0, ids.length() - 1));
} else {
orderDetail.setOrderDetailIds("0");
}
// 查询订单详情
List<OrderDetail> orderDetailList = orderDetailService.selectOrderDetailList(orderDetail);
List<OrderListResponse> responseList = new ArrayList<>();
for (OrderDetail detail : orderDetailList) {
// 查询主单基本信息
OrderMaster orderMaster = orderMasterService.selectById(detail.getOrderMasterId());
if (orderMaster == null) continue;
// 查询师傅信息
Worker worker = workerService.selectById(detail.getWorkerId());
String workerName = "";
String workerId = "";
if (worker != null) {
workerId = worker.getWorkerId().toString();
}
// 检查是否显示售后记录和超时状态
List<AfterServiceRecord> currentDetailRecords = detailRecordMap.get(detail.getId());
int showAfterServiceRecord = 0;
Integer afterTimeout = null;
if (currentDetailRecords != null && !currentDetailRecords.isEmpty()) {
for (AfterServiceRecord record : currentDetailRecords) {
if (record.getAfterServiceStatus() != 1) {
showAfterServiceRecord = 1;
}
}
}
// 构建轻量级响应对象只设置必要字段
OrderListResponse response = new OrderListResponse();
response.setOrderDetailId(detail.getId());
response.setOrderMasterId(detail.getOrderMasterId());
response.setOrderDetailCode(detail.getCode());
response.setOrderMasterCode(detail.getOrderMasterCode());
response.setWorkerName(workerName);
response.setWorkerId(Long.valueOf(workerId)); // 必需字段用于hasOtherWorkerAfterService判断
response.setOrderStatus(detail.getOrderStatus());
response.setShowAfterServiceRecord(showAfterServiceRecord);
response.setAfterServiceRecordList(currentDetailRecords);
response.setAfterTimeout(afterTimeout); // 必需字段用于hasTimeout判断
responseList.add(response);
}
return responseList;
}
public List<OrderListResponse> getMasterList(OrderMaster orderMaster) { public List<OrderListResponse> getMasterList(OrderMaster orderMaster) {
List<OrderListResponse> orderListResponses = new ArrayList<>(); List<OrderListResponse> orderListResponses = new ArrayList<>();
// 如果查询的是未约未排状态只查询未全部派完的主单 // 如果查询的是未约未排状态只查询未全部派完的主单

View File

@ -1773,9 +1773,9 @@ public class OrderMasterController extends BaseController {
} }
} }
} }
if (totalPlatformRefundMoney.compareTo(BigDecimal.ZERO) > 0) { // if (totalPlatformRefundMoney.compareTo(BigDecimal.ZERO) > 0) {
totalPayMoney = totalPayMoney.subtract(totalPlatformRefundMoney); // totalPayMoney = totalPayMoney.subtract(totalPlatformRefundMoney);
} // }
BigDecimal leaderMoney = BigDecimal.ZERO; BigDecimal leaderMoney = BigDecimal.ZERO;

View File

@ -130,7 +130,7 @@ jim:
# 百度地图应用api # 百度地图应用api
baidu: baidu:
ak: 'ZQTgMW7W0GTuE7Ripb0HDp5TqRaOI6PZ' ak: 'i0sdnIsMmJVik7vJhfqMHA6DmS6d0fMB'
url: 'https://api.map.baidu.com/reverse_geocoding/v3/?ak=#AK#&output=json&coordtype=wgs84ll&location=' url: 'https://api.map.baidu.com/reverse_geocoding/v3/?ak=#AK#&output=json&coordtype=wgs84ll&location='
sms: sms:

View File

@ -166,6 +166,10 @@ public class AfterServiceRecord extends BaseEntity
@Excel(name = "师傅重发/补发方案") @Excel(name = "师傅重发/补发方案")
private Integer workerResendPlan; private Integer workerResendPlan;
/** 师傅选择重发/补发方案时间 */
@Excel(name = "师傅选择重发/补发方案时间")
private Date workerResendPlanTime;
/** 师傅重发/补发时间 */ /** 师傅重发/补发时间 */
@Excel(name = "师傅重发/补发时间", cellType = Excel.ColumnType.STRING) @Excel(name = "师傅重发/补发时间", cellType = Excel.ColumnType.STRING)
private Date workerResendTime; private Date workerResendTime;

View File

@ -93,7 +93,8 @@ public class AfterServiceTimeoutTask {
/** /**
* 处理客户36小时不操作的情况 * 处理客户36小时不操作的情况
* 倒计时2师傅重做完成后客户36小时不操作自动同意完单 * 倒计时2师傅重做完成后客户36小时不操作自动同意完单
* 倒计时3师傅拒绝后客户36小时不操作自动取消售后 * 倒计时3师傅拒绝或同意后客户36小时不操作自动取消售后
* 倒计时4师傅选择重发/补发方案后客户36小时不操作自动取消售后
*/ */
private void processCustomerConfirmTimeout() { private void processCustomerConfirmTimeout() {
log.info("开始处理客户确认超时情况"); log.info("开始处理客户确认超时情况");
@ -136,6 +137,13 @@ public class AfterServiceTimeoutTask {
// } // }
log.info("师傅拒绝/同意后客户超时自动取消售后单取消完成售后记录ID{}", record.getId()); log.info("师傅拒绝/同意后客户超时自动取消售后单取消完成售后记录ID{}", record.getId());
}else if (record.getWorkerFeedbackResult() != null && record.getWorkerFeedbackResult().equals(2L)) {
// 倒计时4客户同意后36小时不操作自动同意完单
record.setCustomerFinalCheck(null);
record.setAfterServiceStatus(2); // 设置为已取消状态
record.setIsAutoProcessed(1); // 自动处理
log.info("客户同意后超时自动取消订单完成售后记录ID{}", record.getId());
} }
// 更新记录 // 更新记录
@ -155,8 +163,8 @@ public class AfterServiceTimeoutTask {
/** /**
* 师傅重发补发超时处理 * 师傅重发补发超时处理
* 快递/物流6天倒计时 *
* 非快递24小时倒计时 * 同意为4天
* 超时后自动按客户同意处理 * 超时后自动按客户同意处理
*/ */
@Scheduled(fixedRate = 5 * 60 * 1000) // 5分钟执行一次 @Scheduled(fixedRate = 5 * 60 * 1000) // 5分钟执行一次
@ -193,10 +201,10 @@ public class AfterServiceTimeoutTask {
/** /**
* 定时任务自动处理超时的师傅确认收货 * 定时任务自动处理超时的师傅确认收货
* 每天凌晨2点执行查询退货发货时间超过6天且师傅未确认收货的售后记录 * 查询退货发货时间超过6天且师傅未确认收货的售后记录
* 自动调用师傅确认收货方法进行退款处理 * 自动调用师傅确认收货方法进行退款处理
*/ */
@Scheduled(cron = "0 0 2 * * ?") @Scheduled(cron = "0 0 8,12,18 * * ?")
public void autoConfirmReceiveTask() { public void autoConfirmReceiveTask() {
try { try {
log.info("开始执行自动确认收货定时任务"); log.info("开始执行自动确认收货定时任务");

View File

@ -604,6 +604,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
afterServiceRecord.setRedoCompleteImages(param.getRedoCompleteImages()); afterServiceRecord.setRedoCompleteImages(param.getRedoCompleteImages());
} }
// 新增处理重发/补发相关字段 // 新增处理重发/补发相关字段
afterServiceRecord.setWorkerResendTime(new Date());
if (param.getWorkerResendType() != null) { if (param.getWorkerResendType() != null) {
afterServiceRecord.setWorkerResendType(param.getWorkerResendType()); afterServiceRecord.setWorkerResendType(param.getWorkerResendType());
} }
@ -666,6 +667,10 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
afterServiceRecord.setWorkerResendPlan(param.getWorkerResendPlan()); afterServiceRecord.setWorkerResendPlan(param.getWorkerResendPlan());
afterServiceRecord.setWorkerResendTime(new Date()); afterServiceRecord.setWorkerResendTime(new Date());
if (param.getWorkerFeedbackResult() != null && param.getWorkerFeedbackResult().equals(2L)) {
// afterServiceRecord.setWorkerFeedbackResult(2L);
afterServiceRecord.setWorkerResendPlanTime(new Date());
}
afterServiceRecord.setWorkerResendType(param.getWorkerResendType()); // 1-快递/物流2-送货上门3-自提 afterServiceRecord.setWorkerResendType(param.getWorkerResendType()); // 1-快递/物流2-送货上门3-自提
afterServiceRecord.setWorkerResendTrackingNumber(param.getWorkerResendTrackingNumber()); // 物流单号 afterServiceRecord.setWorkerResendTrackingNumber(param.getWorkerResendTrackingNumber()); // 物流单号
// 新增设置师傅重发/补发备注和图片 // 新增设置师傅重发/补发备注和图片
@ -693,10 +698,10 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
if (param.getWorkerReceiveStatus() != null && param.getWorkerAgreeType() != null) { if (param.getWorkerReceiveStatus() != null && param.getWorkerAgreeType() != null) {
afterServiceRecord.setWorkerReceiveStatus(param.getWorkerReceiveStatus()); afterServiceRecord.setWorkerReceiveStatus(param.getWorkerReceiveStatus());
afterServiceRecord.setWorkerAgreeType(param.getWorkerAgreeType()); afterServiceRecord.setWorkerAgreeType(param.getWorkerAgreeType());
Calendar calendar = Calendar.getInstance(); // Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date()); // calendar.setTime(new Date());
calendar.add(Calendar.HOUR_OF_DAY, 36); // calendar.add(Calendar.HOUR_OF_DAY, 36);
afterServiceRecord.setRedoCompleteTime(calendar.getTime()); afterServiceRecord.setRedoCompleteTime(new Date());
// 处理师傅反馈相关字段 // 处理师傅反馈相关字段
if (param.getWorkerFeedbackReasonType() != null) { if (param.getWorkerFeedbackReasonType() != null) {
afterServiceRecord.setWorkerFeedbackReasonType(param.getWorkerFeedbackReasonType()); afterServiceRecord.setWorkerFeedbackReasonType(param.getWorkerFeedbackReasonType());
@ -1158,6 +1163,8 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
} }
// 更新重发/补发方案 // 更新重发/补发方案
afterServiceRecord.setWorkerFeedbackResult(param.getWorkerFeedbackResult());
afterServiceRecord.setWorkerResendPlanTime(new Date());
afterServiceRecord.setWorkerResendPlan(param.getWorkerResendPlan()); afterServiceRecord.setWorkerResendPlan(param.getWorkerResendPlan());
afterServiceRecord.setUpdateBy(param.getUpdateBy()); afterServiceRecord.setUpdateBy(param.getUpdateBy());
@ -1262,6 +1269,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
} }
afterServiceRecord.setUpdateBy(param.getUpdateBy()); afterServiceRecord.setUpdateBy(param.getUpdateBy());
afterServiceRecord.setRedoCompleteTime(null);
// 设置客户操作时间 // 设置客户操作时间
afterServiceRecord.setCustomerOperationTime(new Date()); afterServiceRecord.setCustomerOperationTime(new Date());

View File

@ -44,6 +44,7 @@
<result property="returnShipTime" column="return_ship_time" /> <result property="returnShipTime" column="return_ship_time" />
<result property="merchantReceiveTime" column="merchant_receive_time" /> <result property="merchantReceiveTime" column="merchant_receive_time" />
<result property="workerResendPlan" column="worker_resend_plan" /> <result property="workerResendPlan" column="worker_resend_plan" />
<result property="workerResendPlanTime" column="worker_resend_plan_time" />
<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" />
@ -63,7 +64,7 @@
worker_feedback_reason_type, worker_feedback_reason, worker_feedback_images, refund, agreed_refund, platform_refund, original_refund, worker_feedback_reason_type, worker_feedback_reason, worker_feedback_images, refund, agreed_refund, platform_refund, original_refund,
customer_final_check, create_by, create_time, update_by, update_time, remark, refund_apply_time, customer_agree_redo, customer_operation_time, customer_final_check, create_by, create_time, update_by, update_time, remark, refund_apply_time, customer_agree_redo, customer_operation_time,
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, worker_receive_status, worker_agree_type, worker_receive_confirm, worker_resend_remark, worker_resend_images, 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_plan_time, 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, after_service_status, platform_handle_reason customer_disagree_images, customer_disagree_reason, after_service_status, platform_handle_reason
from after_service_record from after_service_record
</sql> </sql>
@ -132,6 +133,7 @@
<if test="returnShipTime != null">return_ship_time,</if> <if test="returnShipTime != null">return_ship_time,</if>
<if test="merchantReceiveTime != null">merchant_receive_time,</if> <if test="merchantReceiveTime != null">merchant_receive_time,</if>
<if test="workerResendPlan != null">worker_resend_plan,</if> <if test="workerResendPlan != null">worker_resend_plan,</if>
<if test="workerResendPlanTime != null">worker_resend_plan_time,</if>
<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>
@ -181,6 +183,7 @@
<if test="returnShipTime != null">#{returnShipTime},</if> <if test="returnShipTime != null">#{returnShipTime},</if>
<if test="merchantReceiveTime != null">#{merchantReceiveTime},</if> <if test="merchantReceiveTime != null">#{merchantReceiveTime},</if>
<if test="workerResendPlan != null">#{workerResendPlan},</if> <if test="workerResendPlan != null">#{workerResendPlan},</if>
<if test="workerResendPlanTime != null">#{workerResendPlanTime},</if>
<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>
@ -236,6 +239,7 @@
<if test="returnShipTime != null">return_ship_time = #{returnShipTime},</if> <if test="returnShipTime != null">return_ship_time = #{returnShipTime},</if>
<if test="merchantReceiveTime != null">merchant_receive_time = #{merchantReceiveTime},</if> <if test="merchantReceiveTime != null">merchant_receive_time = #{merchantReceiveTime},</if>
<if test="workerResendPlan != null">worker_resend_plan = #{workerResendPlan},</if> <if test="workerResendPlan != null">worker_resend_plan = #{workerResendPlan},</if>
<if test="workerResendPlanTime != null">worker_resend_plan_time = #{workerResendPlanTime},</if>
<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>
@ -282,6 +286,7 @@
<!-- 查询客户确认超时的售后记录 --> <!-- 查询客户确认超时的售后记录 -->
<!-- 倒计时2师傅重做完成后客户36小时不操作 --> <!-- 倒计时2师傅重做完成后客户36小时不操作 -->
<!-- 倒计时3师傅拒绝后客户36小时不操作 --> <!-- 倒计时3师傅拒绝后客户36小时不操作 -->
<!-- 倒计时4师傅选择重发/补发方案后客户36小时不操作 -->
<select id="selectCustomerConfirmTimeoutRecords" resultMap="AfterServiceRecordResult"> <select id="selectCustomerConfirmTimeoutRecords" resultMap="AfterServiceRecordResult">
<include refid="selectAfterServiceRecordVo"/> <include refid="selectAfterServiceRecordVo"/>
WHERE customer_final_check IS NULL WHERE customer_final_check IS NULL
@ -290,12 +295,17 @@
-- 倒计时2师傅重做完成后客户36小时不操作 -- 倒计时2师傅重做完成后客户36小时不操作
(worker_feedback_result = 3 (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)) AND redo_complete_time &gt;= DATE_SUB(NOW(), INTERVAL 2220 MINUTE))
OR OR
-- 倒计时3师傅拒绝或同意后客户36小时不操作 -- 倒计时3师傅拒绝或同意后客户36小时不操作
(worker_feedback_result IN (0, 1) (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)) AND update_time &gt;= DATE_SUB(NOW(), INTERVAL 2220 MINUTE))
OR
-- 倒计时4师傅选择重发/补发方案后客户36小时不操作
(worker_resend_plan_time IS NOT NULL
AND worker_resend_plan_time &lt;= DATE_SUB(NOW(), INTERVAL 36 HOUR)
AND worker_resend_plan_time &gt;= DATE_SUB(NOW(), INTERVAL 2220 MINUTE))
) )
</select> </select>
@ -306,7 +316,7 @@
AND customer_final_check IS NULL AND customer_final_check IS NULL
AND (is_auto_processed IS NULL OR is_auto_processed = 0) AND (is_auto_processed IS NULL OR is_auto_processed = 0)
AND ( AND (
-- 所有类型统一:5天倒计时 -- 所有类型统一:4天倒计时
worker_resend_time &lt;= DATE_SUB(NOW(), INTERVAL 4 DAY) worker_resend_time &lt;= DATE_SUB(NOW(), INTERVAL 4 DAY)
AND worker_resend_time &gt;= DATE_SUB(NOW(), INTERVAL 5790 MINUTE) AND worker_resend_time &gt;= DATE_SUB(NOW(), INTERVAL 5790 MINUTE)
) )
@ -318,7 +328,7 @@
<include refid="selectAfterServiceRecordVo"/> <include refid="selectAfterServiceRecordVo"/>
WHERE customer_operation_time IS NOT NULL WHERE customer_operation_time IS NOT NULL
AND customer_operation_time &lt;= DATE_SUB(NOW(), INTERVAL 6 DAY) AND customer_operation_time &lt;= DATE_SUB(NOW(), INTERVAL 6 DAY)
AND customer_operation_time &gt;= DATE_SUB(NOW(), INTERVAL 8670 MINUTE) AND customer_operation_time &gt;= DATE_SUB(NOW(), INTERVAL 7 DAY)
AND (worker_receive_confirm IS NULL OR worker_receive_confirm = 0) AND (worker_receive_confirm IS NULL OR worker_receive_confirm = 0)
AND after_service_status = 0 AND after_service_status = 0
AND after_service_category = 2 AND after_service_category = 2