From fa7ff1971fe3eaef29bd12da015761789ce96ef3 Mon Sep 17 00:00:00 2001 From: cb <275647614@qq.com> Date: Fri, 18 Jul 2025 17:43:55 +0800 Subject: [PATCH] no message --- .../order/OrderDetailController.java | 39 +++++++++ .../com/ghy/order/domain/OrderDetail.java | 5 ++ .../ghy/order/service/OrderDetailService.java | 21 +++++ .../service/impl/OrderDetailServiceImpl.java | 84 ++++++++++++++++++- .../mapper/order/OrderDetailMapper.xml | 10 ++- 5 files changed, 156 insertions(+), 3 deletions(-) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java index 34d21d3f..ae64c86d 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java @@ -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()); + } + } } diff --git a/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java b/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java index 81ea73d0..a4ccc9c0 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java @@ -225,4 +225,9 @@ public class OrderDetail extends BaseEntity { private String isCall; + /** + * 延期次数,最大2次 + */ + private Integer delayCount; + } diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java index db8d1dd7..ca37da8b 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java @@ -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); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index 1215d437..f54425f6 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -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); + } } diff --git a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml index 028b5424..9ae2e953 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml @@ -36,6 +36,7 @@ + @@ -68,7 +69,8 @@ confirm_start_time, timeout_, timeout_fine_times, - after_timeout + after_timeout, + delay_count FROM order_detail @@ -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 @@ update_by = #{updateBy}, ledger_account_status = #{ledgerAccountStatus}, timeout_ = #{timeout}, + delay_count = #{delayCount}, update_time = SYSDATE() WHERE id = #{id} @@ -427,6 +431,7 @@ handover_images, handover_remark, confirm_start_time, + delay_count, expect_time_start, expect_time_end, work_begin_time, @@ -446,6 +451,7 @@ #{handoverImages}, #{handoverRemark}, #{confirmStartTime}, + #{delayCount}, #{expectTimeStart}, #{expectTimeEnd}, #{workBeginTime},