于杰
2025-08-12 9f46afb687555455e898bb4bf0f43a27a4b6cadb
解决调整版图后数据存储位置错位的问题
3个文件已修改
107 ■■■■■ 已修改文件
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -207,4 +207,10 @@
    List<Map<String, Object>> getOptimizeOffsetsInfo(String processId);
    int deleteOptimizeOffcut(String projectNumber);
    void updateNormalDetails(Map<String, Object> detail, String processId);
    void deleteOffcutDetails(String processId);
    void addUpdateOffcut(Map<String, Object> detail, String processId, String glassType, String glassThickness);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -357,11 +357,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();
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -1283,6 +1283,8 @@
            stock_id,
            width,
            height,
            realwidth,
            realheight,
            usage_rate,
            stock_code,
            up_trim,
@@ -1298,6 +1300,8 @@
            #{glass.stockId},
            #{glass.width},
            #{glass.height},
            #{glass.realWidth},
            #{glass.realHeight},
            #{glass.usageRate},
            #{glass.stockCode},
            #{glass.upTrim},
@@ -1369,6 +1373,26 @@
        #{glassThickness}
        )
    </insert>
    <insert id="addUpdateOffcut">
        INSERT INTO pp.optimize_offcut (
            project_no,
            stock_id,
            width,
            height,
            x_axis,
            y_axis,
            model,
            thickness
        ) VALUES (
                     #{processId},
                     1,
                     #{detail.width},
                     #{detail.height},
                     #{detail.x},
                     #{detail.y},
                     #{glassType},
                     #{glassThickness})
    </insert>
@@ -1468,6 +1492,14 @@
        UPDATE pp.flow_card
        SET rack = #{rackValue}
        WHERE process_id = #{processId} AND technology_number = #{technologyNumber}
    </update>
    <update id="updateNormalDetails">
        UPDATE pp.optimize_detail
        SET
            x_axis = #{detail.x},
            y_axis = #{detail.y}
        WHERE
            project_no = #{processId} AND polys_id = #{detail.polySort}
    </update>
    <select id="simulatedTypesettingUsingOpt">
@@ -1670,6 +1702,9 @@
        WHERE
            project_no = #{projectNumber}
    </delete>
    <delete id="deleteOffcutDetails">
        delete from pp.optimize_offcut where project_no = #{processId}
    </delete>
    <select id="selectOptimizeProject">
@@ -1798,6 +1833,8 @@
        SELECT
            width,
            height,
            realwidth,
            realheight,
            stock_id AS stockId,
            stock_code AS stockCode,
            usage_rate AS usageRate,