no message

This commit is contained in:
cb 2025-07-18 17:43:55 +08:00
parent 08c7cb32a9
commit fa7ff1971f
5 changed files with 156 additions and 3 deletions

View File

@ -1523,4 +1523,43 @@ public class OrderDetailController extends BaseController {
public AjaxResult statistics() {
return AjaxResult.success(orderDetailService.orderStatisticsReturn());
}
/**
* 延期到货接口
* 如果是待确认状态则变为服务中其他状态不变
* 将confirm_start_time增加3天
* 延期次数最多2次
*/
@PostMapping("/app/delay")
@ResponseBody
@Transactional(rollbackFor = Exception.class)
public AjaxResult delayOrder(@RequestBody OrderDetail orderDetail) {
logger.info("延期到货,orderDetailId={}", orderDetail.getId());
try {
return toAjax(orderDetailService.delayOrder(orderDetail.getId()));
} catch (Exception e) {
e.printStackTrace();
logger.error(ExceptionUtil.getExceptionMessage(e));
return AjaxResult.error("延期失败: " + e.getMessage());
}
}
/**
* 子订单退回接口
* 如果订单为服务类型(orderType=0)则退回到服务中状态
* 如果订单为商品类型(orderType=1)则退回到待排期状态
*/
@PostMapping("/app/return")
@ResponseBody
@Transactional(rollbackFor = Exception.class)
public AjaxResult returnOrder(@RequestBody OrderDetail orderDetail) {
logger.info("子订单退回,orderDetailId={}", orderDetail.getId());
try {
return toAjax(orderDetailService.returnOrder(orderDetail.getId()));
} catch (Exception e) {
e.printStackTrace();
logger.error(ExceptionUtil.getExceptionMessage(e));
return AjaxResult.error("退回失败: " + e.getMessage());
}
}
}

View File

@ -225,4 +225,9 @@ public class OrderDetail extends BaseEntity {
private String isCall;
/**
* 延期次数最大2次
*/
private Integer delayCount;
}

View File

@ -203,4 +203,25 @@ public interface OrderDetailService {
// 订单详情数据统计返回 根据时间统计当前日期天
OrderDetailStatisticsDTO orderStatisticsDisposeByNow();
/**
* 延期到货
* 如果是待确认状态则变为服务中其他状态不变
* 将confirm_start_time增加3天
* 延期次数最多2次
*
* @param orderDetailId 子订单ID
* @return 成功条数
*/
int delayOrder(Long orderDetailId);
/**
* 子订单退回
* 如果订单为服务类型(orderType=0)则退回到服务中状态
* 如果订单为商品类型(orderType=1)则退回到待排期状态
*
* @param orderDetailId 子订单ID
* @return 成功条数
*/
int returnOrder(Long orderDetailId);
}

View File

@ -499,7 +499,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
throw new BaseException("FinancialDetail is null!!!");
}
if (financialDetail.getPayStatus() != 1) {
throw new BaseException("订单不是已支付状态");
throw new BaseException("订单不是已支付状态");
}
final Long deptId = orderMaster.getDeptId();
Long financialMasterId = financialDetail.getFinancialMasterId();
@ -1433,4 +1433,86 @@ public class OrderDetailServiceImpl implements OrderDetailService {
}
return statisticsDTOByNow;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int delayOrder(Long orderDetailId) {
// 查询订单信息
OrderDetail orderDetail = orderDetailMapper.selectById(orderDetailId);
if (orderDetail == null) {
throw new BaseException("订单不存在");
}
// 检查延期次数
Integer delayCount = orderDetail.getDelayCount();
if (delayCount == null) {
delayCount = 0;
}
if (delayCount >= 2) {
throw new BaseException("延期次数已达上限最多只能延期2次");
}
// 检查订单状态是否允许延期
if (orderDetail.getOrderStatus() == null) {
throw new BaseException("订单状态异常");
}
// 更新延期次数
orderDetail.setDelayCount(delayCount + 1);
// 处理confirm_start_time增加3天
Date confirmStartTime = orderDetail.getConfirmStartTime();
if (confirmStartTime == null) {
confirmStartTime = new Date();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(confirmStartTime);
calendar.add(Calendar.DAY_OF_MONTH, 3);
orderDetail.setConfirmStartTime(calendar.getTime());
// 如果是待确认状态则变为服务中
if (OrderStatus.FINISH_CHECK.code()==orderDetail.getOrderStatus()) {
orderDetail.setOrderStatus(OrderStatus.SERVER.code());
}
// 更新订单
return orderDetailMapper.updateOrderDetail(orderDetail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int returnOrder(Long orderDetailId) {
// 查询订单信息
OrderDetail orderDetail = orderDetailMapper.selectById(orderDetailId);
if (orderDetail == null) {
throw new BaseException("订单不存在");
}
// 检查订单状态是否允许退回
if (orderDetail.getOrderStatus() == null) {
throw new BaseException("订单状态异常");
}
// 根据订单类型决定退回状态
Integer orderType = orderDetail.getOrderType();
if (orderType == null) {
throw new BaseException("订单类型异常");
}
// 根据订单类型设置退回状态
if (orderType == 0) {
// 服务订单退回到服务中状态
orderDetail.setOrderStatus(OrderStatus.SERVER.code());
} else if (orderType == 1) {
// 商品订单退回到待排期状态
orderDetail.setOrderStatus(OrderStatus.PLAIN.code());
} else {
throw new BaseException("不支持的订单类型");
}
// 清除超时状态
orderDetail.setTimeout(0);
// 更新订单
return orderDetailMapper.updateOrderDetail(orderDetail);
}
}

View File

@ -36,6 +36,7 @@
<result property="timeout" column="timeout_"/>
<result property="afterTimeout" column="after_timeout"/>
<result property="timeoutFineTimes" column="timeout_fine_times"/>
<result property="delayCount" column="delay_count"/>
</resultMap>
<sql id="selectOrderDetail">
@ -68,7 +69,8 @@
confirm_start_time,
timeout_,
timeout_fine_times,
after_timeout
after_timeout,
delay_count
FROM order_detail
</sql>
@ -103,7 +105,8 @@
od.draw_cash_status,
od.timeout_,
od.timeout_fine_times,
od.after_timeout
od.after_timeout,
od.delay_count
FROM order_detail od
LEFT JOIN order_master om ON om.id = od.order_master_id
LEFT JOIN customer_address ca ON ca.customer_address_id = om.address_id
@ -369,6 +372,7 @@
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="ledgerAccountStatus != null">ledger_account_status = #{ledgerAccountStatus},</if>
<if test="timeout != null">timeout_ = #{timeout},</if>
<if test="delayCount != null">delay_count = #{delayCount},</if>
update_time = SYSDATE()
</set>
WHERE id = #{id}
@ -427,6 +431,7 @@
<if test="handoverImages != null">handover_images,</if>
<if test="handoverRemark != null">handover_remark,</if>
<if test="confirmStartTime != null">confirm_start_time,</if>
<if test="delayCount != null">delay_count,</if>
<if test="expectTimeStart != null">expect_time_start,</if>
<if test="expectTimeEnd != null">expect_time_end,</if>
<if test="workBeginTime != null">work_begin_time,</if>
@ -446,6 +451,7 @@
<if test="handoverImages != null">#{handoverImages},</if>
<if test="handoverRemark != null">#{handoverRemark},</if>
<if test="confirmStartTime != null">#{confirmStartTime},</if>
<if test="delayCount != null">#{delayCount},</if>
<if test="expectTimeStart != null">#{expectTimeStart},</if>
<if test="expectTimeEnd != null">#{expectTimeEnd},</if>
<if test="workBeginTime != null">#{workBeginTime},</if>