Przeglądaj źródła

feat(order): 添加订单审核功能并优化数据查询

- 新增 isNeedCheck 字段用于标识订单是否需要审核
- 实现 selectOrderNoByIds 批量查询订单编号功能
- 优化订单列表查询性能,支持项目订单号显示
- 添加批量查询大小限制防止内存溢出
- 更新订单创建逻辑,默认设置需要审核状态
- 重构枚举导入方式,统一使用通配符导入
hurx 4 dni temu
rodzic
commit
fd61857622

+ 3 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/pc/PcOrderController.java

@@ -351,6 +351,9 @@ public class PcOrderController extends BaseController {
             // 设置审核状态为待审核
             mainBo.setCheckStatus("0");
 
+            //商城下单默认需要审核--如果设置审批流则不需要
+            mainBo.setIsNeedCheck(SysPlatformYesNo.YES.getCode());
+
             mainBo.setOrderSource(OrderSourceEnum.BEFORE_ADD.getCode());
 
             // 设置订单商品列表

+ 3 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/OrderMain.java

@@ -272,6 +272,9 @@ public class OrderMain extends TenantEntity {
     /*审核状态(0 待审核 1已通过 2已驳回)*/
     private String checkStatus;
 
+    /*是否需要审核(0 需要审核 1不需要)*/
+    private String isNeedCheck;
+
     /*分配状态(0待分配 1已分配 )*/
     private String assignmentStatus;
 

+ 3 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/bo/OrderMainBo.java

@@ -282,6 +282,9 @@ public class OrderMainBo extends BaseEntity {
     /*审核状态(0 待审核 1已通过 2已驳回)*/
     private String checkStatus;
 
+    /*是否需要审核(0 需要审核 1不需要)*/
+    private String isNeedCheck;
+
     /*分配状态(0待分配 1已分配 )*/
     private String assignmentStatus;
 

+ 8 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderMainVo.java

@@ -349,6 +349,9 @@ public class OrderMainVo implements Serializable {
     /*审核状态(0 待审核 1已通过 2已驳回)*/
     private String checkStatus;
 
+    /*是否需要审核(0 需要审核 1不需要)*/
+    private String isNeedCheck;
+
     /*分配状态(0待分配 1已分配 )*/
     private String assignmentStatus;
 
@@ -431,4 +434,9 @@ public class OrderMainVo implements Serializable {
 
     private Date updateTime;
 
+    /**
+     * 项目订单号
+     */
+    private String projectOrderNo;
+
 }

+ 4 - 4
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/IOrderMainService.java

@@ -11,10 +11,7 @@ import org.dromara.order.domain.bo.PcSubmitOrderBo;
 import org.dromara.order.domain.vo.*;
 import org.dromara.order.utils.kd100.domain.TrackData;
 
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 订单主信息Service接口
@@ -127,4 +124,7 @@ public interface IOrderMainService extends IService<OrderMain> {
     boolean setdeadline(Long id, Date deadline);
 
     boolean uploadInvoice(Long id, String invoice);
+
+    /*根据id查询订单编号*/
+    Map<Long, String> selectOrderNoByIds(Set<Long> ids);
 }

+ 34 - 5
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java

@@ -11,9 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
-import org.dromara.common.core.enums.AssigneeTypeConstants;
-import org.dromara.common.core.enums.OrderPayType;
-import org.dromara.common.core.enums.OrderStatus;
+import org.dromara.common.core.enums.*;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.api.ZhongcheException;
 import org.dromara.common.core.utils.MapstructUtils;
@@ -265,11 +263,14 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             Set<Long> customerIds = records.stream().map(OrderMainVo::getCustomerId).collect(Collectors.toSet());
             Set<Long> createUserIds = records.stream().map(OrderMainVo::getCreateBy).collect(Collectors.toSet());
             Set<Long> createDeptIds = records.stream().map(OrderMainVo::getCreateDept).collect(Collectors.toSet());
+            Set<Long> orderIds = records.stream().map(OrderMainVo::getParentOrderId).filter(Objects::nonNull).collect(Collectors.toSet());
 
             Map<Long, String> UserMap = remoteUserService.selectUserNamesByIds(createUserIds.stream().toList());
             Map<Long, String> deptMap = remoteDeptService.selectDeptNameByIds(createDeptIds);
             Map<Long, String> customerMap = remoteCustomerService.selectCustomerNameByIds(customerIds);
+            Map<Long, String> orderNoMap = selectOrderNoByIds(orderIds);
             records.forEach(orderMainVo -> {
+                orderMainVo.setProjectOrderNo(orderNoMap.get(orderMainVo.getParentOrderId()));
                 orderMainVo.setCreateName(UserMap.get(orderMainVo.getCreateBy()));
                 orderMainVo.setCreateDeptName(deptMap.get(orderMainVo.getCreateDept()));
                 orderMainVo.setCustomerName(customerMap.get(orderMainVo.getCustomerId()));
@@ -616,12 +617,15 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
                 log.info("成功初始化审批流程,订单ID: {}", orderId);
                 this.update(Wrappers.lambdaUpdate(OrderMain.class)
                     .eq(OrderMain::getId, orderId)
-                    .set(OrderMain::getOrderStatus, 1)); // 假设 1 代表某种特定状态,需确认枚举值
+                    .set(OrderMain::getOrderStatus, 1)// 假设 1 代表某种特定状态,需确认枚举值
+                    .set(OrderMain::getIsNeedCheck, SysPlatformYesNo.YES.getCode())
+                );
+
             } else {
                 log.info("失败初始化审批流程,订单ID: {}", orderId);
                 this.update(Wrappers.lambdaUpdate(OrderMain.class)
                     .eq(OrderMain::getId, orderId)
-                    .set(OrderMain::getCheckStatus, "1")
+                    .set(OrderMain::getCheckStatus, "1").set(OrderMain::getIsNeedCheck, SysPlatformYesNo.NO.getCode())
                 );
             }
 
@@ -1159,4 +1163,29 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             .update();
         return update;
     }
+
+    @Override
+    public Map<Long, String> selectOrderNoByIds(Set<Long> ids) {
+        if (ids == null || ids.isEmpty()) {
+            return Collections.emptyMap();
+        }
+
+        // 限制批量大小
+        if (ids.size() > 1000) {
+            throw new IllegalArgumentException("Batch size exceeds limit: " + ids.size());
+        }
+
+        List<OrderMain> orderMainList = baseMapper.selectByIds(ids);
+        Map<Long, String> resultMap = new HashMap<>(ids.size());
+
+        // 初始化所有请求的 ID 为 null
+        ids.forEach(id -> resultMap.put(id, null));
+
+        if (orderMainList != null) {
+            orderMainList.stream()
+                .filter(order -> order.getId() != null && order.getOrderNo() != null)
+                .forEach(order -> resultMap.put(order.getId(), order.getOrderNo()));
+        }
+        return resultMap;
+    }
 }