修改优化数据查询位置,从原来的单一表改成三个表,包括前端修改和撤销逻辑修改
5个文件已修改
206 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
@@ -33,6 +33,7 @@
// 添加用于存储库存数据的响应式变量
const inventoryData = ref([]);
const optimizeLayouts = ref(null);
// 从 localStorage 读取库存数据
const loadInventoryData = () => {
@@ -88,10 +89,41 @@
      });
};
const selectOptimizeInfo = () => {
  request.post(`/glassOptimize/getOptimizeInfo/${processId}`)
      .then((res) => {
        if ((res.code === 200 || res.code === '200') && res.data && res.data.layouts) {
          try {
            // 正确赋值给外层的响应式变量
            optimizeLayouts.value = res.data;
            console.log("布局数据:", optimizeLayouts.value);
            // 验证layouts数据
            if (res.data.layouts && res.data.layouts.length > 0) {
              console.log("layouts数组:", res.data.layouts);
            }
          } catch (error) {
            console.error("数据解析失败:", error);
            ElMessage.error("数据解析失败: " + error.message);
          }
        } else {
          ElMessage.warning("未找到优化数据");
        }
      })
      .catch((error) => {
        console.error("请求失败:", error);
        ElMessage.error(t('basicData.msg.requestFailed'));
      });
};
onMounted(() => {
  // 读取库存数据
  loadInventoryData();
  selectLayout();
  selectOptimizeInfo();
});
const submitLayouts = async () => {
@@ -101,7 +133,7 @@
      ElMessage.warning('没有可保存的数据');
      return;
    }
    console.log("提交数据:", layoutCutData.value);
    console.log("提交数据:", optimizeLayouts);
    const response = await requestOptimize.post('api/cutFiles', {
      fileName: processId,
      glassThickness:inventoryData.value[0].thickness,
@@ -110,7 +142,7 @@
      fileType:"OPT",
      fileSaveMode:1,
      glassIdMode:1,
      layouts: layoutCutData.value.layouts
      layouts: optimizeLayouts.value.layouts
    }, {
      headers: {
        'Content-Type': 'application/json'
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -263,6 +263,13 @@
        return  Result.seccess(glassOptimizeService.selectOptimizeResult(processId));
    }
    @ApiOperation("查询优化结果信息接口")
    @PostMapping("/getOptimizeInfo/{processId}")
    public Result getOptimizeInfo(
            @PathVariable String processId){
        return  Result.seccess(glassOptimizeService.getOptimizeInfoSv(processId));
    }
    @ApiOperation("更新优化结果接口")
    @PostMapping("/updateOptimizeResult/{processId}")
    public Result updateOptimizeResult(
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -199,4 +199,12 @@
    Map<String, Object> getGlassInfo(String projectId);
    void addOptimizeOffcut(Map<String, Object> map, String projectId, String glassType, String glassThickness);
    List<Map<String, Object>> getOptimizeLayoutsInfo(String processId);
    List<Map<String, Object>> getOptimizeDetailsInfo(String processId);
    List<Map<String, Object>> getOptimizeOffsetsInfo(String processId);
    int deleteOptimizeOffcut(String projectNumber);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -355,6 +355,85 @@
        return map;
    }
    public Object getOptimizeInfoSv(String processId) {
        // 获取布局信息
        List<Map<String, Object>> layouts = glassOptimizeMapper.getOptimizeLayoutsInfo(processId);
        // 获取玻璃明细信息
        List<Map<String, Object>> glassDetails = glassOptimizeMapper.getOptimizeDetailsInfo(processId);
        // 获取余料信息
        List<Map<String, Object>> offsets = glassOptimizeMapper.getOptimizeOffsetsInfo(processId);
        // 将玻璃明细和余料合并到一个列表中
        List<Map<String, Object>> allDetails = new ArrayList<>();
        if (glassDetails != null) {
            allDetails.addAll(glassDetails);
        }
        if (offsets != null) {
            allDetails.addAll(offsets);
        }
        // 按照stockId将明细分组并添加到对应的布局中
        if (layouts != null && !layouts.isEmpty()) {
            for (Map<String, Object> layout : layouts) {
                Object stockIdObj = layout.get("stockId");
                if (stockIdObj != null) {
                    Integer stockId = null;
                    if (stockIdObj instanceof Number) {
                        stockId = ((Number) stockIdObj).intValue();
                    } else {
                        try {
                            stockId = Integer.valueOf(stockIdObj.toString());
                        } catch (NumberFormatException e) {
                            // 如果无法转换为数字,则跳过该布局
                            continue;
                        }
                    }
                    List<Map<String, Object>> matchedDetails = new ArrayList<>();
                    for (Map<String, Object> detail : allDetails) {
                        Object layoutIdObj = detail.get("layoutId");
                        Object stockSortObj = detail.get("stockSort");
                        Integer detailStockId = null;
                        if (layoutIdObj != null) {
                            if (layoutIdObj instanceof Number) {
                                detailStockId = ((Number) layoutIdObj).intValue();
                            } else {
                                try {
                                    detailStockId = Integer.valueOf(layoutIdObj.toString());
                                } catch (NumberFormatException e) {
                                    // 跳过无效的layoutId
                                    continue;
                                }
                            }
                        } else if (stockSortObj != null) {
                            if (stockSortObj instanceof Number) {
                                detailStockId = ((Number) stockSortObj).intValue();
                            } else {
                                try {
                                    detailStockId = Integer.valueOf(stockSortObj.toString());
                                } catch (NumberFormatException e) {
                                    // 跳过无效的stockSort
                                    continue;
                                }
                            }
                        }
                        // 如果detail的stockId与layout的stockId匹配,则添加到匹配列表中
                        if (detailStockId != null && detailStockId.equals(stockId)) {
                            matchedDetails.add(detail);
                        }
                    }
                    // 将匹配的明细添加到布局的glassDetails字段中
                    layout.put("glassDetails", matchedDetails);
                }
            }
        }
//        Map<String, Object> result = new HashMap<>();
        Map<String, Object> result = new LinkedHashMap<>();
        result.put("layouts", layouts);
        result.put("optimizeUse", glassOptimizeMapper.materialStoreOptimizeUse(processId));
        return result;
    }
    //工程信息
    public Map<String, Object> projectInfoSv(String projectNo,String username) {
        Map<String, Object> stringObjectMap = glassOptimizeMapper.selectProjectCount(projectNo);
@@ -496,6 +575,7 @@
            else if(code==2){
                glassOptimizeMapper.deleteOptimizeDetail(projectNumber);
                glassOptimizeMapper.deleteOptimizeLayout(projectNumber);
                glassOptimizeMapper.deleteOptimizeOffcut(projectNumber);
                glassOptimizeMapper.deleteOptimizeProjectFile(projectNumber);
                glassOptimizeMapper.updateOptimizeUse(projectNumber);
                glassOptimizeMapper.updateProjectOptimizeStateMp(projectNumber, states);
@@ -993,4 +1073,5 @@
        return saveState;
    }
}
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -1224,8 +1224,8 @@
            order_sort,
            stock_id,
            polys_id,
            o_width,
            o_height,
            p_width,
            p_height,
            width,
            height,
            x_axis,
@@ -1287,6 +1287,7 @@
            down_trim,
            left_trim,
            right_trim,
            count,
            glass_count,
            glass_area,
            create_time
@@ -1301,7 +1302,8 @@
            #{glass.downTrim},
            #{glass.leftTrim},
            #{glass.rightTrim},
            #{glass.glassCount},
            #{glass.count},
            #{glass.glassQuantity},
            #{glass.glassArea},
            now()
            );
@@ -1659,6 +1661,13 @@
        delete from pp.other_flow_card
        where project_no = #{projectNumber}
    </delete>
    <delete id="deleteOptimizeOffcut">
        DELETE
        FROM
            pp.optimize_offcut
        WHERE
            project_no = #{projectNumber}
    </delete>
    <select id="selectOptimizeProject">
@@ -1783,6 +1792,65 @@
        where
            project_no = #{projectId}
    </select>
    <select id="getOptimizeLayoutsInfo" resultType="java.util.Map">
        SELECT
            width,
            height,
            stock_id AS stockId,
            stock_code AS stockCode,
            usage_rate AS usageRate,
            up_trim AS upTrim,
            down_trim AS downTrim,
            left_trim AS leftTrim,
            right_trim AS rightTrim,
            count AS quantity,
            glass_count AS glassQuantity
        FROM
            pp.optimize_layout
        where
            project_no = #{projectId}
    </select>
    <select id="getOptimizeDetailsInfo" resultType="java.util.Map">
        SELECT
            0 As isRemain,
            width AS realWidth,
            height AS realHeight,
            p_width AS width,
            p_height AS height,
            process_id AS processId,
            layer,
            total_layer AS totalLayer,
            order_sort As orderSort,
            stock_id AS layoutId,
            stock_number AS glassSort,
            x_axis AS x,
            y_axis AS y,
            mark_icon AS markIcon,
            isRotate,
            rack_no As rackNo
        FROM
            pp.optimize_detail
        WHERE
            project_no = #{projectId}
    </select>
    <select id="getOptimizeOffsetsInfo" resultType="java.util.Map">
        SELECT
            1 AS isRemain,
            0 AS isRotate,
            width AS realWidth,
            height AS realHeight,
            width AS width,
            height AS height,
            stock_id AS stockSort,
            x_axis AS x,
            y_axis AS y,
            model AS glassType,
            thickness AS glassThickness
        FROM
            pp.optimize_offcut
        WHERE
            project_no = #{projectId}
    </select>
</mapper>