chenlu
2025-09-22 7ee68df04b7a169d51ab95ad9955276c9aff6ee1
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -323,10 +323,33 @@
                        }
                    }
                }
                // 在保存之前处理 glassPoint 数据
                for (Map<String, Object> detail : objectMap2) {
                    if (detail.containsKey("glassPoint")) {
                        Object glassPointObj = detail.get("glassPoint");
                        if (glassPointObj != null) {
                            try {
                                // 如果 glassPointObj 已经是字符串,则不需要转换
                                if (!(glassPointObj instanceof String)) {
                                    // 将对象转换为 JSON 字符串
                                    String glassPointStr = mapper.writeValueAsString(glassPointObj);
                                    detail.put("glassPoint", glassPointStr);
                                }
                            } catch (Exception e) {
                                // 如果转换失败,记录错误并移除该字段
                                System.err.println("转换 glassPoint 失败: " + e.getMessage());
                                detail.remove("glassPoint");
                            }
                        } else {
                            // 如果 glassPointObj 为 null,移除该字段
                            detail.remove("glassPoint");
                        }
                    }
                }
                glassOptimizeMapper.addOptimizeDetail(objectMap2,projectId);
            }
            glassOptimizeMapper.updateProjectOptimizeStateMp(projectId,1);
            glassOptimizeMapper.updateProjectOptimize(projectId, 1, optimalResults);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
@@ -335,11 +358,71 @@
    }
    public Boolean updateOptimizeResult(Map<String, Object> object,String processId){
    public Boolean updateOptimizeResult(Map<String, Object> object, String processId) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            List<Map<String, Object>> objectMapList = (List<Map<String, Object>>) object.get("layouts");
            Map<String, Object> glassInfo = glassOptimizeMapper.getGlassInfo(processId);
            for (Map<String, Object> objectMap : objectMapList) {
                List<Map<String, Object>> objectMap2 = (List<Map<String, Object>>) objectMap.get("glassDetails");
                // 分离 glassDetails 为两部分
                List<Map<String, Object>> normalDetails = new ArrayList<>();  // isRemain 为 false 的部分
                List<Map<String, Object>> offCutDetails = new ArrayList<>();  // isRemain 为 true 的部分
                for (Map<String, Object> detail : objectMap2) {
                    boolean isRemain = false;
                    if (detail.containsKey("isRemain")) {
                        Object isRemainObj = detail.get("isRemain");
                        if (isRemainObj != null) {
                            if (isRemainObj instanceof Number) {
                                // 数字类型: 1表示true,0表示false
                                isRemain = ((Number) isRemainObj).intValue() == 1;
                            } else if (isRemainObj instanceof Boolean) {
                                // 布尔类型
                                isRemain = (Boolean) isRemainObj;
                            } else {
                                // 字符串类型: "1"/"true"表示true,"0"/"false"表示false
                                String isRemainStr = isRemainObj.toString().toLowerCase();
                                isRemain = "1".equals(isRemainStr) || "true".equals(isRemainStr);
                            }
                        }
                    }
                    if (isRemain) {
                        offCutDetails.add(detail);
                    } else {
                        normalDetails.add(detail);
                    }
                }
                // 保存所有数据到 optimize_detail
                if (!normalDetails.isEmpty()) {
                    for (Map<String, Object> detail : normalDetails) {
                        glassOptimizeMapper.updateNormalDetails(detail, processId);
                    }
                }
                // 例如对 remainDetails 部分先删除 offcut 再处理
                if (!offCutDetails.isEmpty()) {
                    glassOptimizeMapper.deleteOffcutDetails(processId);
                    if (glassInfo != null) {
                        String glassType = (String) glassInfo.get("glass_type");
                        String glassThickness = (String) glassInfo.get("glass_thickness");
                        // 余料存入optimizeoffcut
                        for (Map<String, Object> detail : offCutDetails) {
                            glassOptimizeMapper.addUpdateOffcut(detail, processId, glassType, glassThickness);
                        }
                    }
                }
            }
            // 更新优化结果文件
            String jsonString = mapper.writeValueAsString(object);
            glassOptimizeMapper.updateOptimizeResult(jsonString,processId);
            glassOptimizeMapper.updateOptimizeResult(jsonString, processId);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
@@ -372,6 +455,32 @@
        if (offsets != null) {
            allDetails.addAll(offsets);
        }
        // 解析 glassPoint 字符串
        ObjectMapper mapper = new ObjectMapper();
        for (Map<String, Object> detail : allDetails) {
            if (detail.containsKey("glassPoint")) {
                Object glassPointObj = detail.get("glassPoint");
                if (glassPointObj instanceof String) {
                    String glassPointStr = (String) glassPointObj;
                    if (glassPointStr != null && !glassPointStr.isEmpty() && !glassPointStr.equals("null")) {
                        try {
                            // 解析 JSON 字符串为对象
                            Object parsedGlassPoint = mapper.readValue(glassPointStr, Object.class);
                            detail.put("glassPoint", parsedGlassPoint);
                        } catch (Exception e) {
                            System.err.println("解析 glassPoint 失败: " + e.getMessage());
                            // 解析失败时保留原字符串或设置默认值
                            detail.put("glassPoint", new ArrayList<>());
                        }
                    } else {
                        // 空字符串或 null 时设置默认值
                        detail.put("glassPoint", new ArrayList<>());
                    }
                }
            }
        }
        // 按照stockId将明细分组并添加到对应的布局中
        if (layouts != null && !layouts.isEmpty()) {
            for (Map<String, Object> layout : layouts) {
@@ -563,7 +672,7 @@
    }
    //修改排版状态
    public Boolean updateProjectState(String projectNumber, Integer state,Integer states, Integer code) {
    public Boolean updateProjectState(String projectNumber, Integer state,Integer states, Integer code) throws JsonProcessingException {
        if (!projectNumber.isEmpty()) {
            //撤销模拟计算
            if(code==1){
@@ -582,7 +691,12 @@
            }
            //允许生产
            else if(code==3){
                glassOptimizeMapper.updateProjectStateMp(projectNumber, state);
                Boolean isSeccess = issuingProjects(projectNumber);
                if(isSeccess){
                    glassOptimizeMapper.updateProjectStateMp(projectNumber, state);
                }else{
                    return false;
                }
            }
            //生产不可见
            else if(code==4){