修改优化数据查询位置,从原来的单一表改成三个表,包括前端修改和撤销逻辑修改
| | |
| | | // 添加用于存储库存数据的响应式变量
|
| | | const inventoryData = ref([]);
|
| | |
|
| | | const optimizeLayouts = ref(null);
|
| | |
|
| | | // 从 localStorage 读取库存数据
|
| | | const loadInventoryData = () => {
|
| | |
| | | });
|
| | | };
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | 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 () => {
|
| | |
| | | ElMessage.warning('没有可保存的数据');
|
| | | return;
|
| | | }
|
| | | console.log("提交数据:", layoutCutData.value);
|
| | | console.log("提交数据:", optimizeLayouts);
|
| | | const response = await requestOptimize.post('api/cutFiles', {
|
| | | fileName: processId,
|
| | | glassThickness:inventoryData.value[0].thickness,
|
| | |
| | | fileType:"OPT",
|
| | | fileSaveMode:1,
|
| | | glassIdMode:1,
|
| | | layouts: layoutCutData.value.layouts
|
| | | layouts: optimizeLayouts.value.layouts
|
| | | }, {
|
| | | headers: {
|
| | | 'Content-Type': 'application/json'
|
| | |
| | | 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( |
| | |
| | | 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); |
| | | } |
| | |
| | | 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); |
| | |
| | | else if(code==2){ |
| | | glassOptimizeMapper.deleteOptimizeDetail(projectNumber); |
| | | glassOptimizeMapper.deleteOptimizeLayout(projectNumber); |
| | | glassOptimizeMapper.deleteOptimizeOffcut(projectNumber); |
| | | glassOptimizeMapper.deleteOptimizeProjectFile(projectNumber); |
| | | glassOptimizeMapper.updateOptimizeUse(projectNumber); |
| | | glassOptimizeMapper.updateProjectOptimizeStateMp(projectNumber, states); |
| | |
| | | return saveState; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | order_sort, |
| | | stock_id, |
| | | polys_id, |
| | | o_width, |
| | | o_height, |
| | | p_width, |
| | | p_height, |
| | | width, |
| | | height, |
| | | x_axis, |
| | |
| | | down_trim, |
| | | left_trim, |
| | | right_trim, |
| | | count, |
| | | glass_count, |
| | | glass_area, |
| | | create_time |
| | |
| | | #{glass.downTrim}, |
| | | #{glass.leftTrim}, |
| | | #{glass.rightTrim}, |
| | | #{glass.glassCount}, |
| | | #{glass.count}, |
| | | #{glass.glassQuantity}, |
| | | #{glass.glassArea}, |
| | | now() |
| | | ); |
| | |
| | | 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"> |
| | |
| | | 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> |