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},