廖井涛
2025-11-05 565146c111d97b370595256344dbfabd57c04d6a
Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
5个文件已修改
129 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
@@ -266,7 +266,35 @@
};
const handleSimulationClick = () => {
const handleSimulationClick = async () => {
  try {
    const projectNumber = inputValue.value;
    if (!projectNumber) {
      ElMessage.warning('请输入工程号');
      return;
    }
    const res = await request.post(`/glassOptimize/getProjectState/${projectNumber}`);
    if (Number(res.code) === 200) {
      const projectData = res.data.data;
      // 检查 tempering_state 状态
      if (projectData.tempering_state === 1) {
        // 如果已完成模拟计算,提示用户并阻止继续执行
        ElMessage.warning('已完成模拟计算,不允许重复计算');
        return;
      }
    } else {
      ElMessage.warning(res.msg);
      return;
    }
  } catch (error) {
    ElMessage.error('检查工程状态失败,请稍后重试');
    console.error('检查工程状态失败:', error);
    return;
  }
  inputValues.project_no = inputValue.value;
  inputValues.chaos_pct = optionVal.value * 0.01; // 混排等级
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -446,31 +446,10 @@
};
const handleCommand = async (command) => {
  // 当选择模拟计算(command === 3)时,先检查 tempering_state 状态
  if (command === 3) {
    try {
      const res = await request.post(`/glassOptimize/getProjectState/${projectNo.value}`);
      if (Number(res.code) === 200) {
        const projectData = res.data.data;
    // 执行模拟计算
    await emit('changeDialog', command);
        // 检查 tempering_state 状态
        if (projectData.tempering_state === 1) {
          // 如果已完成模拟计算,提示用户并阻止打开
          ElMessage.warning('已完成模拟计算,不允许重复计算');
          return;
        } else if (projectData.tempering_state === 0) {
          // 如果未进行模拟计算,允许打开
          await emit('changeDialog', command);
        }
      } else {
        ElMessage.warning(res.msg);
        return;
      }
    } catch (error) {
      ElMessage.error('检查工程状态失败,请稍后重试');
      console.error('检查工程状态失败:', error);
      return;
    }
  } else {
    // 其他命令直接执行
    await emit('changeDialog', command);
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -214,7 +214,7 @@
    void addUpdateOffcut(Map<String, Object> detail, String processId, String glassType, String glassThickness, int stockId);
    void updateProjectOptimize(String projectId, Integer states, Map<String, Object> optimalResults);
    void updateProjectOptimize(String projectId, Integer states, Map<String, Object> optimalResults,double totalArea );
    List<Map<String, Object>> getReportDataProcessIdSv(String processId);
@@ -237,4 +237,6 @@
    Map<String, Object> getGlassProjectList(String projectId);
    Map<String, Object> getProjectState(String projectNo);
    void updateProjectTemperingId(String projectNumber);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -367,8 +367,22 @@
                // tempering_state 为 0 时的处理逻辑
                glassOptimizeMapper.addOptimizeDetail(allGlassDetails,projectId);
            }
            glassOptimizeMapper.updateProjectOptimize(projectId, 1, optimalResults);
            List<Map<String, Object>> materialStoreList = glassOptimizeMapper.materialStoreOptimizeUse(projectId);
            double totalUseArea = 0.0;
            for (Map<String, Object> material : materialStoreList) {
                if (material.containsKey("totalArea")) {
                    Object totalAreaObj = material.get("totalArea");
                    if (totalAreaObj != null) {
                        try {
                            double area = Double.parseDouble(totalAreaObj.toString());
                            totalUseArea += area;
                        } catch (NumberFormatException e) {
                            System.err.println("无法解析总面积数据: " + totalAreaObj);
                        }
                    }
                }
            }
            glassOptimizeMapper.updateProjectOptimize(projectId, 1, optimalResults, totalUseArea);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
@@ -718,6 +732,22 @@
                glassOptimizeMapper.deleteOptimizeHeatDetail(projectNumber);
                glassOptimizeMapper.deleteOptimizeHeatLayout(projectNumber);
                glassOptimizeMapper.updateProjectTemperingStateMp(projectNumber, states);
                Map<String, Object> temperingState = glassOptimizeMapper.getProjectState(projectNumber);
                if (temperingState != null && temperingState.containsKey("optimize_state")) {
                    Object optimizeStateObj = temperingState.get("optimize_state");
                    if (optimizeStateObj != null) {
                        try {
                            int optimizeState = Integer.parseInt(optimizeStateObj.toString());
                            if (optimizeState == 1) {
                                glassOptimizeMapper.updateProjectTemperingId(projectNumber);
                            }
                        } catch (NumberFormatException e) {
                            // 处理转换异常,记录日志或采取其他适当措施
                            System.err.println("解析 optimize_state 失败: " + e.getMessage());
                        }
                    }
                }
            }
            //撤销优化排版
            else if(code==2){
@@ -739,7 +769,22 @@
            }
            //生产不可见
            else if(code==4){
                glassOptimizeMapper.updateProjectStateMp(projectNumber, state);
                Map<String, Object> cancelResult = issuingCancelProject(projectNumber);
                // 获取返回结果中的data字段
                Map<String, Object> responseData = (Map<String, Object>) cancelResult.get("data");
                // 检查响应中的code字段,只有当code为200或202时才允许更新状态
                if (responseData != null && responseData.containsKey("code")) {
                    Object responseCode = responseData.get("code");
                    if (responseCode.equals(200) || responseCode.equals(202)) {
                        glassOptimizeMapper.updateProjectStateMp(projectNumber, state);
                    }else {
                        return false;
                    }
                } else {
                    return false;
                }
            }
            //初始化工程
            else if(code==5){
@@ -1198,6 +1243,7 @@
            // 1. 创建URL对象
//            URL url = new URL("http://10.153.19.31:88/api/loadGlass/engineering/importEngineer");
            URL url = new URL("http://localhost:88/api/loadGlass/engineering/importEngineer");
            // 2. 打开连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
@@ -1437,6 +1483,7 @@
//            URL url = new URL("http://10.153.19.31:88/api/loadGlass/engineering/optimizeCancelTask");
            URL url = new URL("http://localhost:88/api/loadGlass/engineering/optimizeCancelTask");
            // 2. 打开连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -582,7 +582,8 @@
               ou.right_trim as rightTrim,
               JSON_EXTRACT(ms.json, '$.thickness') AS thickness,
               JSON_EXTRACT(ms.json, '$.name') AS name,
               JSON_EXTRACT(ms.json, '$.model') AS model
               JSON_EXTRACT(ms.json, '$.model') AS model,
               (ou.width * ou.height * ou.use_count / 1000000.0) AS totalArea
        from pp.optimize_use ou
            left join mm.material_store ms on ou.raw_stock_code=ms.id where project_no=#{projectNumber} and state=1
    </select>
@@ -795,7 +796,9 @@
    <!--修改模拟计算工程状态-->
    <update id="updateProjectTemperingStateMp">
        update pp.optimize_project as p
        set p.tempering_state = #{states}
        set p.tempering_state = #{states},
            p.load_rate = NULL,
            p.furnaces_qty = NULL
        where p.project_no = #{projectNumber}
    </update>
@@ -1560,8 +1563,15 @@
            p.avg_cut_pct = #{optimalResults.avgCutRate},
            p.valid_cut_pct = #{optimalResults.validCutRate},
            p.last_cut_pct = #{optimalResults.lastCutRate},
            p.raw_stock_qty = #{optimalResults.totalQuantity}
            p.raw_stock_qty = #{optimalResults.totalQuantity},
            p.raw_stock_area = #{totalArea}
        where p.project_no = #{projectId}
    </update>
    <update id="updateProjectTemperingId">
        UPDATE pp.optimize_detail
        SET heat_layout_id = NULL,
            heat_layout_sort = NULL
        WHERE project_no = #{projectNumber}
    </update>
    <select id="simulatedTypesettingUsingOpt">
@@ -1810,6 +1820,7 @@
    <select id="selectOptimizeDetail">
        select
            opd.glass_id as glassId,
            opd.project_no as engineerId,