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,