From c9d4ba37c1f681b12e24014013fa9a28734bad42 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 20 八月 2026 17:00:02 +0800
Subject: [PATCH] feat 功能修正

---
 yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/service/decision/BiForecastServiceImpl.java |   45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 44 insertions(+), 1 deletions(-)

diff --git a/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/service/decision/BiForecastServiceImpl.java b/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/service/decision/BiForecastServiceImpl.java
index 5455fb5..6f183d3 100644
--- a/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/service/decision/BiForecastServiceImpl.java
+++ b/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/service/decision/BiForecastServiceImpl.java
@@ -1,14 +1,22 @@
 package cn.iocoder.yudao.module.bi.service.decision;
 
+import cn.hutool.core.date.DateUtil;
+import cn.iocoder.yudao.module.bi.controller.admin.decision.vo.DecisionForecastWorkOrderCreateReqVO;
 import cn.iocoder.yudao.module.bi.dal.dataobject.decision.BiForecastDataDO;
 import cn.iocoder.yudao.module.bi.dal.mysql.decision.BiForecastDataMapper;
+import cn.iocoder.yudao.module.mes.api.workorder.MesProWorkOrderApi;
+import cn.iocoder.yudao.module.mes.api.workorder.dto.MesProWorkOrderCreateReqDTO;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.bi.enums.ErrorCodeConstants.BI_FORECAST_NOT_EXISTS;
 
 /**
  * 璐熻嵎棰勬祴 Service 瀹炵幇
@@ -21,8 +29,15 @@
 @Service
 public class BiForecastServiceImpl implements BiForecastService {
 
+    /**
+     * 宸ュ崟鏉ユ簮绫诲瀷锛氳礋鑽烽娴嬶紙涓庡瓧鍏� mes_pro_work_order_source_type 鐨� value=4 涓�鑷达級
+     */
+    private static final Integer WORK_ORDER_SOURCE_TYPE_FORECAST = 4;
+
     @Resource
     private BiForecastDataMapper forecastDataMapper;
+    @Resource
+    private MesProWorkOrderApi mesProWorkOrderApi;
 
     @Override
     public List<BiForecastDataDO> getForecastList(String forecastCode, LocalDateTime beginTime, LocalDateTime endTime) {
@@ -48,4 +63,32 @@
         forecastDataMapper.insert(forecast);
     }
 
-}
\ No newline at end of file
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createWorkOrderFromForecast(DecisionForecastWorkOrderCreateReqVO reqVO) {
+        // 1. 鏍¢獙棰勬祴鏁版嵁瀛樺湪
+        BiForecastDataDO forecast = forecastDataMapper.selectById(reqVO.getForecastId());
+        if (forecast == null) {
+            throw exception(BI_FORECAST_NOT_EXISTS);
+        }
+        // 2. 缁勮宸ュ崟 DTO 骞惰皟鐢� MES API 鍒涘缓锛堟棤浜у搧宸ュ崟锛岃烦 BOM锛�
+        MesProWorkOrderCreateReqDTO dto = new MesProWorkOrderCreateReqDTO();
+        dto.setCode(generateWorkOrderCode());
+        dto.setName(reqVO.getWorkOrderName() != null
+                ? reqVO.getWorkOrderName()
+                : ("璐熻嵎棰勬祴-" + forecast.getForecastName()));
+        dto.setType(reqVO.getWorkOrderType());
+        dto.setOrderSourceType(WORK_ORDER_SOURCE_TYPE_FORECAST);
+        dto.setOrderSourceCode(forecast.getForecastCode());
+        dto.setRequestDate(reqVO.getRequestDate());
+        dto.setQuantity(reqVO.getQuantity());
+        dto.setRemark(reqVO.getRemark());
+        return mesProWorkOrderApi.createWorkOrder(dto);
+    }
+
+    private String generateWorkOrderCode() {
+        return "GZ" + DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmss")
+                + String.format("%03d", (int) (Math.random() * 1000));
+    }
+
+}

--
Gitblit v1.9.3