增加确认中倒计时的暂停以及开始

This commit is contained in:
cb 2025-09-04 16:25:46 +08:00
parent f12121c457
commit 190d2a2bed
7 changed files with 103 additions and 4 deletions

View File

@ -1099,7 +1099,7 @@ public class OrderMasterController extends BaseController {
BigDecimal totalChangeMoney = new BigDecimal(0);
BigDecimal paymentMoney = BigDecimal.ZERO;
if (financialMaster.getPayStatus() == 1) {
paymentMoney = paymentMoney.add(financialMaster.getTotalMoney());
paymentMoney = paymentMoney.add(financialMaster.getPayMoney());
}
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByMasterId(master.getId());
BigDecimal changePaymentMoney = financialChangeRecords.stream()

View File

@ -82,6 +82,11 @@ public class OrderDetail extends BaseEntity {
@Excel(name = "进入确认中时间", cellType = Excel.ColumnType.STRING)
private Date confirmStartTime;
/**
* 确认中倒计时剩余时间毫秒- 售后暂停时记录
*/
private Long confirmTimeoutRemainingTime;
// 商品归属师傅
private Worker goodsWorker;
// 接单师傅

View File

@ -125,6 +125,9 @@ public class AfterServiceTimeoutTask {
// 更新记录
afterServiceRecordService.updateAfterServiceRecord(record);
// 恢复确认中倒计时
afterServiceRecordService.resumeConfirmTimeout(record.getOrderDetailId());
log.info("客户确认超时自动处理完成售后记录ID{}", record.getId());
} catch (Exception e) {
log.error("处理客户确认超时异常售后记录ID{}", record.getId(), e);

View File

@ -87,6 +87,12 @@ public interface IAfterServiceRecordService {
*/
void executeRefundLogic(AfterServiceRecord afterServiceRecord);
/**
* 恢复确认中倒计时
* @param orderDetailId 子单ID
*/
void resumeConfirmTimeout(Long orderDetailId);
/**
* 师傅重发/补发操作
* 师傅端点击重发补发按钮保存重发/补发方案

View File

@ -121,6 +121,9 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
throw new BaseException("存在未完成的售后记录,请勿重复申请!");
}
int result = afterServiceRecordMapper.insertAfterServiceRecord(afterServiceRecord);
// 暂停确认中倒计时
pauseConfirmTimeout(afterServiceRecord.getOrderDetailId());
// 发一起一次售后发起通知
// 通知师傅新订单
try {
@ -241,6 +244,10 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
// }
afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord);
// 恢复确认中倒计时
resumeConfirmTimeout(afterServiceRecord.getOrderDetailId());
return AjaxResult.success("订单完成结束");
} else {
// 客户不同意重做结果按之前的逻辑走可能需要退款
@ -393,7 +400,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
afterServiceRecord.setOriginalRefund(refundMoney);
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
financialMaster.setServerMoney(financialMaster.getServerMoney().subtract(refundMoney));
financialMaster.setDiscountMoney(refundMoney);
// financialMaster.setDiscountMoney(financialMaster.getDiscountMoney().add(refundMoney));
financialMasterService.updateFinancialMaster(financialMaster);
String reverseAmt = AdapayUtils.bigDecimalToString(refundMoney);
// 发起支付撤销
@ -684,4 +691,77 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
}
}
/**
* 暂停确认中倒计时
* @param orderDetailId 子单ID
*/
private void pauseConfirmTimeout(Long orderDetailId) {
try {
OrderDetail orderDetail = orderDetailService.selectById(orderDetailId);
if (orderDetail != null && orderDetail.getOrderStatus() == OrderStatus.FINISH_CHECK.code()) {
// 计算剩余倒计时时间
long remainingTime = calculateConfirmTimeoutRemainingTime(orderDetail);
// 记录剩余时间
OrderDetail updateDetail = new OrderDetail();
updateDetail.setId(orderDetailId);
updateDetail.setConfirmTimeoutRemainingTime(remainingTime);
orderDetailService.updateOrderDetail(updateDetail);
log.info("暂停确认中倒计时子单ID{},剩余时间:{}毫秒", orderDetailId, remainingTime);
}
} catch (Exception e) {
log.error("暂停确认中倒计时失败子单ID{}", orderDetailId, e);
}
}
/**
* 恢复确认中倒计时
* @param orderDetailId 子单ID
*/
@Override
public void resumeConfirmTimeout(Long orderDetailId) {
try {
OrderDetail orderDetail = orderDetailService.selectById(orderDetailId);
if (orderDetail != null && orderDetail.getOrderStatus() == OrderStatus.FINISH_CHECK.code()) {
Long remainingTime = orderDetail.getConfirmTimeoutRemainingTime();
if (remainingTime != null && remainingTime > 0) {
// 设置新的确认中开始时间 = 当前时间 - 剩余时间
Date newConfirmStartTime = new Date(System.currentTimeMillis() + remainingTime);
OrderDetail updateDetail = new OrderDetail();
updateDetail.setId(orderDetailId);
updateDetail.setConfirmStartTime(newConfirmStartTime);
updateDetail.setConfirmTimeoutRemainingTime(null); // 清空剩余时间
orderDetailService.updateOrderDetail(updateDetail);
log.info("恢复确认中倒计时子单ID{},新确认开始时间:{},剩余时间:{}毫秒",
orderDetailId, newConfirmStartTime, remainingTime);
}
}
} catch (Exception e) {
log.error("恢复确认中倒计时失败子单ID{}", orderDetailId, e);
}
}
/**
* 计算确认中倒计时的剩余时间
* @param orderDetail 子单信息
* @return 剩余时间毫秒
*/
private long calculateConfirmTimeoutRemainingTime(OrderDetail orderDetail) {
if (orderDetail.getConfirmStartTime() == null) {
return 0;
}
long confirmStartTime = orderDetail.getConfirmStartTime().getTime();
long currentTime = System.currentTimeMillis();
// long timeoutDuration = 60 * 60 * 1000L; // 10分钟测试环境生产环境应该是60分钟
long elapsedTime = confirmStartTime-currentTime
// long remainingTime = timeoutDuration - elapsedTime;
return Math.max(0, elapsedTime); // 确保不为负数
}
}

View File

@ -34,6 +34,7 @@
<result property="handoverImages" column="handover_images"/>
<result property="handoverRemark" column="handover_remark"/>
<result property="confirmStartTime" column="confirm_start_time"/>
<result property="confirmTimeoutRemainingTime" column="confirm_timeout_remaining_time"/>
<result property="timeout" column="timeout_"/>
<result property="afterTimeout" column="after_timeout"/>
<result property="timeoutFineTimes" column="timeout_fine_times"/>

View File

@ -1412,11 +1412,15 @@ public class OrderServiceImpl implements OrderService {
for (OrderDetail orderDetail : orderDetails) {
try {
OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId());
if (orderMaster == null) {
continue;
}
AfterServiceRecord unfinished = afterServiceRecordService.unfinished(orderDetail.getId());
if (unfinished != null) {
log.debug("子订单[id={}, code={}]存在售后记录,跳过自动完成", orderDetail.getId(), orderDetail.getCode());
continue;
}
Date targetTime;
String logType = "已设置";