廖井涛
2025-08-11 80779e662c51601328e8e4054ebd169f5360d12c
Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
8个文件已修改
231 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue 23 ●●●● 补丁 | 查看 | 原始文档 | 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/java/com/example/erp/service/pp/ReportingWorkService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml 1 ●●●● 补丁 | 查看 | 原始文档 | 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/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
@@ -440,19 +440,32 @@
          const completedNum =
              (row.completedQuantity === undefined || row.completedQuantity===null || row.completedQuantity==='') ? 0 : row.completedQuantity
          //
          const okVal = completedSum - totalQuantity
          const okVal = completedSum - totalQuantity + row.breakageQuantity
          //当可操作数量为0,并且完工数量不等于可完工数量时
          if(row.minQuantity===0 && val!==totalQuantity ){
          if(row.minQuantity===0 && val!==(totalQuantity-row.breakageQuantity) ){
            return new Error(`${t('reportingWorks.pleaseNumber12')} ${okVal}+${val}=${okVal+val}\n
                              ${t('reportingWorks.pleaseNumber13')} ${nextQuantitySum}\n
                              ${t('reportingWorks.pleaseNumber14')}
            `)
          }
          if(titleUploadData.value.reportingWorkId!=null  && (val>totalQuantity ||  val<(row.quantity-row.minQuantity) )){
            return new Error(`${row.quantity-row.minQuantity}
          if(titleUploadData.value.reportingWorkId!=null){
            if(row.completedQuantityComputed>=row.minQuantity ){
              if((val<(row.completedQuantityComputed-row.minQuantity || val>=row.completedQuantityComputed))){
                return new Error(`${row.completedQuantityComputed-row.minQuantity}
            <=val<=
            ${row.quantity}`)
                                  ${row.completedQuantityComputed}`)
              }
            }else{
              if((val>row.completedQuantityComputed)){
                return new Error(`val
                                  <=
                                  ${row.completedQuantityComputed}`)
              }
            }
          }
        }
      }
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/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -690,7 +690,6 @@
                                //更新报工流程表数据
                                reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
                            }
                            System.out.println(1);
                            //删除报工,将审核状态改为-1
                            reportingWorkMapper.deleteWork(reportingWorkId);
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>
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -425,6 +425,7 @@
                0,
                ifnull(a.completed_quantity+a.breakage_quantity,0)) as 'quantity', -- 可报工数
            ifnull(a.completed_quantity,0) as 'completedQuantity', -- 完工数
            ifnull(a.completed_quantity,0) as 'completedQuantityComputed', -- 完工数
            ifnull(a.breakage_quantity,0) as 'breakageQuantity', -- 破损数
            ifnull(f.completed_quantity,0) as thisQuantitySum ,-- 本工序完工和
            if(c.quantity-f.completed_quantity = 0 ,true,false) as saveFlag,