| | |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | |
| | | GlassOptimizeMapper glassOptimizeMapper; |
| | | @Autowired |
| | | SysErrorService sysErrorService; |
| | | |
| | | @Value("${mesIp:localhost}") // 注入mesIp配置,默认值为10.153.19.31 |
| | | private String mesIp; |
| | | |
| | | RabbitMQUtil rabbitMQUtil; |
| | | //模拟计算 |
| | |
| | | |
| | | List<Map<String, Object>> objectMapList = (List<Map<String, Object>>) optimalResults.get("layouts"); |
| | | glassOptimizeMapper.addOptimizeLayout(objectMapList,projectId); |
| | | // 收集所有需要保存的玻璃明细数据 |
| | | List<Map<String, Object>> allGlassDetails = new ArrayList<>(); |
| | | |
| | | for(Map<String, Object> objectMap:objectMapList){ |
| | | List<Map<String, Object>> objectMap2 = (List<Map<String, Object>>) objectMap.get("glassDetails"); |
| | | //迭代玻璃明细集合处理余料和其他 |
| | |
| | | } |
| | | } |
| | | } |
| | | glassOptimizeMapper.addOptimizeDetail(objectMap2,projectId); |
| | | // 将当前批次的玻璃明细添加到总列表中 |
| | | allGlassDetails.addAll(objectMap2); |
| | | } |
| | | |
| | | glassOptimizeMapper.updateProjectOptimize(projectId, 1, optimalResults); |
| | | Map<String, Object> projectInfo = glassOptimizeMapper.getGlassProjectList(projectId); |
| | | if (projectInfo != null && Integer.parseInt(projectInfo.get("tempering_state").toString()) == 1) { |
| | | // tempering_state 为 1 时的处理逻辑 |
| | | glassOptimizeMapper.addOptimizeDetail(allGlassDetails,projectId); |
| | | List<OptimizeHeatDetail> optimizeHeatDetail = glassOptimizeMapper.selectOptimizeHeatDetail(projectId); |
| | | for (OptimizeHeatDetail projectdetail:optimizeHeatDetail){ |
| | | OptimizeDetail optimizeDetail=glassOptimizeMapper.selectOptimizeDetailById(projectId,projectdetail.getProcessId(), |
| | | projectdetail.getOrderSort(),projectdetail.getLayer()); |
| | | glassOptimizeMapper.updateOptimizeDetail(optimizeDetail.getId(),projectdetail.getLayoutId(),projectdetail.getSort()); |
| | | } |
| | | } else { |
| | | // tempering_state 为 0 时的处理逻辑 |
| | | glassOptimizeMapper.addOptimizeDetail(allGlassDetails,projectId); |
| | | } |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | } |
| | | map.put("optimizeState", Integer.parseInt(stringObjectMap.get("optimize_state").toString())); |
| | | map.put("data", dataList); |
| | | map.put("project", glassOptimizeMapper.selectProjectCount(projectNo)); |
| | | map.put("grindingTrimming", glassOptimizeMapper.getGrindingTrimming(username)); |
| | | return map; |
| | | } |
| | | |
| | |
| | | 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){ |
| | |
| | | } |
| | | //生产不可见 |
| | | 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 if (responseCode.equals(201)) { |
| | | // 当返回201时,抛出自定义异常或返回错误信息 |
| | | throw new RuntimeException(responseData.get("message").toString()); |
| | | } else { |
| | | return false; |
| | | } |
| | | } else { |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | //初始化工程 |
| | | else if(code==5){ |
| | |
| | | json = object.get("json").toString(); |
| | | } |
| | | if(type.equals("钢化")){ |
| | | glassOptimizeMapper.updateOptimizeConfig(json,1,username); |
| | | String existingConfig = glassOptimizeMapper.selectConfigByUserAndType(username, 1); |
| | | if (existingConfig == null) { |
| | | String configName = "钢化推荐"; |
| | | glassOptimizeMapper.insertOptimizeConfig(json,1,username,configName); |
| | | }else { |
| | | glassOptimizeMapper.updateOptimizeConfig(json,1,username); |
| | | } |
| | | } else if (type.equals("修边")) { |
| | | glassOptimizeMapper.updateOptimizeConfig(json,5,username); |
| | | String existingConfig = glassOptimizeMapper.selectConfigByUserAndType(username, 5); |
| | | if (existingConfig == null) { |
| | | String configName = "修边配置"; |
| | | glassOptimizeMapper.insertOptimizeConfig(json,5,username,configName); |
| | | }else { |
| | | glassOptimizeMapper.updateOptimizeConfig(json,5,username); |
| | | } |
| | | }else if (type.equals("磨量")) { |
| | | glassOptimizeMapper.updateOptimizeConfig(json,4,username); |
| | | String existingConfig = glassOptimizeMapper.selectConfigByUserAndType(username, 4); |
| | | if (existingConfig == null) { |
| | | String configName = "磨量配置"; |
| | | glassOptimizeMapper.insertOptimizeConfig(json,4,username,configName); |
| | | }else{ |
| | | glassOptimizeMapper.updateOptimizeConfig(json,4,username); |
| | | } |
| | | |
| | | } |
| | | return true; |
| | | |
| | |
| | | boolean saveState=false; |
| | | try { |
| | | // 1. 创建URL对象 |
| | | URL url = new URL("http://localhost:88/api/loadGlass/engineering/importEngineer"); |
| | | URL url = new URL("http://" + mesIp + ":88/api/loadGlass/engineering/importEngineer"); |
| | | |
| | | // 2. 打开连接 |
| | | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
| | |
| | | |
| | | public Map<String, Object> getMaterialInfoSv(String processId) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | List<Map<String, Object>> materialList = glassOptimizeMapper.getMaterialInfoSv(processId); |
| | | // List<Map<String, Object>> materialList = glassOptimizeMapper.getMaterialInfoSv(processId); |
| | | List<Map<String, Object>> layoutSet = glassOptimizeMapper.getLayoutSetSv(processId); |
| | | |
| | | // 创建一个Map来存储每个stock_code的总面积 |
| | | Map<String, Double> stockCodeAreaMap = new HashMap<>(); |
| | | // // 创建一个Map来存储每个stock_code的总面积 |
| | | // Map<String, Double> stockCodeAreaMap = new HashMap<>(); |
| | | // |
| | | // // 遍历layoutSet计算每个stock_code的总面积(面积*使用率) |
| | | // for (Map<String, Object> layout : layoutSet) { |
| | | // Object stockCodeObj = layout.get("stock_code"); |
| | | // Object widthObj = layout.get("width"); |
| | | // Object heightObj = layout.get("height"); |
| | | // Object usageRateObj = layout.get("usage_rate"); |
| | | // |
| | | // if (stockCodeObj != null && widthObj != null && heightObj != null && usageRateObj != null) { |
| | | // try { |
| | | // String stockCode = stockCodeObj.toString(); |
| | | // double width = Double.parseDouble(widthObj.toString()); |
| | | // double height = Double.parseDouble(heightObj.toString()); |
| | | // double usageRate = Double.parseDouble(usageRateObj.toString()); |
| | | // |
| | | // // 计算单条数据的面积(平方米) |
| | | // double area = (width * height * usageRate) / 1000000.0; |
| | | // |
| | | // // 累加到对应stock_code的总面积 |
| | | // stockCodeAreaMap.put(stockCode, stockCodeAreaMap.getOrDefault(stockCode, 0.0) + area); |
| | | // } catch (NumberFormatException e) { |
| | | // System.err.println("数据转换错误: " + e.getMessage()); |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // // 将计算出的总面积添加到materialList中对应的物料数据 |
| | | // for (Map<String, Object> material : materialList) { |
| | | // Object stockCodeObj = material.get("code"); |
| | | // if (stockCodeObj != null) { |
| | | // String stockCode = stockCodeObj.toString(); |
| | | // if (stockCodeAreaMap.containsKey(stockCode)) { |
| | | // material.put("totalArea", stockCodeAreaMap.get(stockCode)); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | // 遍历layoutSet计算每个stock_code的总面积(面积*使用率) |
| | | for (Map<String, Object> layout : layoutSet) { |
| | | Object stockCodeObj = layout.get("stock_code"); |
| | | Object widthObj = layout.get("width"); |
| | | Object heightObj = layout.get("height"); |
| | | Object usageRateObj = layout.get("usage_rate"); |
| | | |
| | | if (stockCodeObj != null && widthObj != null && heightObj != null && usageRateObj != null) { |
| | | try { |
| | | String stockCode = stockCodeObj.toString(); |
| | | double width = Double.parseDouble(widthObj.toString()); |
| | | double height = Double.parseDouble(heightObj.toString()); |
| | | double usageRate = Double.parseDouble(usageRateObj.toString()); |
| | | |
| | | // 计算单条数据的面积(平方米) |
| | | double area = (width * height * usageRate) / 1000000.0; |
| | | |
| | | // 累加到对应stock_code的总面积 |
| | | stockCodeAreaMap.put(stockCode, stockCodeAreaMap.getOrDefault(stockCode, 0.0) + area); |
| | | } catch (NumberFormatException e) { |
| | | System.err.println("数据转换错误: " + e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 将计算出的总面积添加到materialList中对应的物料数据 |
| | | for (Map<String, Object> material : materialList) { |
| | | Object stockCodeObj = material.get("code"); |
| | | if (stockCodeObj != null) { |
| | | String stockCode = stockCodeObj.toString(); |
| | | if (stockCodeAreaMap.containsKey(stockCode)) { |
| | | material.put("totalArea", stockCodeAreaMap.get(stockCode)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | map.put("materialList", materialList); |
| | | map.put("materialList", layoutSet); |
| | | return map; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | public Map<String, Object> getProjectState(String projectNo) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", glassOptimizeMapper.getProjectState(projectNo)); |
| | | return map; |
| | | } |
| | | |
| | | public Map<String, Object> issuingCancelProject(String projectNo){ |
| | | Map<String, Object> result = new HashMap<>(); |
| | | Map<String, Object> responseData = new HashMap<>(); |
| | | |
| | | try { |
| | | // 1. 创建URL对象 |
| | | URL url = new URL("http://" + mesIp + ":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"); |
| | | conn.setRequestProperty("Content-Type", "application/json"); |
| | | conn.setRequestProperty("Accept", "application/json"); |
| | | conn.setDoOutput(true); |
| | | |
| | | // 3. 准备请求体 - 将projectNo转换为engineerId格式 |
| | | String engineerId = projectNo; |
| | | // 如果传入的是JSON字符串,需要提取真正的projectNo值 |
| | | if (projectNo.startsWith("{") && projectNo.contains("\"projectNo\"")) { |
| | | try { |
| | | JSONObject jsonObject = JSONObject.parseObject(projectNo); |
| | | engineerId = jsonObject.getString("projectNo"); |
| | | } catch (Exception e) { |
| | | // 解析失败时使用原始值 |
| | | System.err.println("解析projectNo JSON失败: " + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | // 构建新的JSON请求体,使用engineerId字段 |
| | | String jsonInputString = "{\"engineerId\":\"" + engineerId + "\"}"; |
| | | System.out.println("engineerId: " + engineerId); |
| | | System.out.println("Request: " + jsonInputString); |
| | | |
| | | //发送请求 |
| | | try(OutputStream os = conn.getOutputStream()) { |
| | | byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8); |
| | | os.write(input, 0, input.length); |
| | | } |
| | | |
| | | // 获取响应 |
| | | try(BufferedReader br = new BufferedReader( |
| | | new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { |
| | | StringBuilder response = new StringBuilder(); |
| | | String responseLine; |
| | | while ((responseLine = br.readLine()) != null) { |
| | | response.append(responseLine.trim()); |
| | | } |
| | | String fullResponse = response.toString(); |
| | | System.out.println("Response: " + fullResponse); |
| | | |
| | | // 直接将响应内容解析为Map |
| | | responseData = JSONObject.parseObject(fullResponse, Map.class); |
| | | } |
| | | |
| | | //关闭连接 |
| | | conn.disconnect(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | // 异常情况下将异常信息放入data |
| | | responseData.put("error", e.getMessage()); |
| | | } |
| | | |
| | | // 构造最终返回结果 |
| | | result.put("data", responseData); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | |
| | | } |