From c4da4fbc66773158e39d44d301401d378ef376d7 Mon Sep 17 00:00:00 2001
From: 于杰 <1210123631@qq.com>
Date: 星期六, 11 十月 2025 16:35:05 +0800
Subject: [PATCH] 提交 实现玻璃优化报告下载部分功能,多出前端样式修改
---
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue | 2
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml | 101 ++++++++++++
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue | 2
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java | 20 ++
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java | 12 +
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue | 2
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java | 135 ++++++++++++++++
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizationRectPrint.vue | 190 ++++++++++++++++++++++-
8 files changed, 447 insertions(+), 17 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizationRectPrint.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizationRectPrint.vue
index 3209af8..6331d84 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizationRectPrint.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizationRectPrint.vue
@@ -1,5 +1,8 @@
<template>
<div>
+ <el-button id="button" type="primary" @click="printReports" style="background: #409eff; position: fixed; top: 90px; right: 100px; padding: 20px; color: white; border: none; cursor: pointer; margin-right: 10px;">
+ 棰勮
+ </el-button>
<el-button id="button" type="primary" @click="handlePrint" style="position: fixed; top: 90px; right: 20px; padding: 20px; background: #409eff; color: white; border: none; border-radius: 5px; cursor: pointer;">
鎵撳嵃
</el-button>
@@ -7,17 +10,30 @@
<div style="display: flex; align-items: center; gap: 20px; margin-bottom: 20px;">
<span>宸ョ▼缂栧彿锛�</span>
<el-input readonly placeholder="" style="width: 150px" v-model="processId"></el-input>
- <el-checkbox v-model="config.plain">
- 鍒囨潗鐜�
+ <el-checkbox v-model="config.printLayouts">
+ 鎵撳嵃鐗堝浘
+ </el-checkbox>
+ <el-checkbox v-model="config.printReport">
+ 鎵撳嵃鎶ュ憡
</el-checkbox>
<div style="margin-right: 30px;"></div>
<span>甯冨眬閫夋嫨锛�</span>
- <el-select v-model="config.type" style="width: 120px;">
- <el-option v-for="type in linkTypes" :key="type" :value="type" />
+ <el-select v-model="config.columnTypes" style="width: 120px;">
+ <el-option v-for="type in columnTypes" :key="type" :value="type" />
</el-select>
- <el-button id="button" type="primary" @click="handlePrint" style="background: #409eff; color: white; border: none; cursor: pointer;">
- 棰勮
- </el-button>
+ <el-select v-model="config.rowTypes" style="width: 120px;">
+ <el-option v-for="type in rowTypes" :key="type" :value="type" />
+ </el-select>
+ </div>
+ <div style="display: flex; align-items: center; gap: 20px; margin-bottom: 20px;">
+ <span>鏄剧ず灏忕墖淇℃伅锛�</span>
+ <el-select v-model="config.glassInfo" style="width: 120px;">
+ <el-option v-for="type in glassInfo" :key="type" :value="type" />
+ </el-select>
+ <span>鏄剧ず鍒囧壊淇℃伅锛�</span>
+ <el-select v-model="config.cutInfo" style="width: 120px;">
+ <el-option v-for="type in cutInfo" :key="type" :value="type" />
+ </el-select>
</div>
<div ref="printContainer" style="position: relative;">
@@ -44,6 +60,8 @@
import { ref, onMounted, watch, reactive, inject } from 'vue';
import RectRenderer from './page/RectRenderer.vue';
import request from "@/utils/request";
+import {ElMessage, ElMessageBox} from "element-plus";
+import requestOptimize from "@/utils/requestOptimize";
const props = defineProps({
project : null,
@@ -54,11 +72,19 @@
const savedProjectNo = localStorage.getItem('projectNo');
const processId = ref('');
const layoutData = ref();
+const optimizeUse = ref();
+const reportData = ref();
+const layoutSet = ref();
+const materialList = ref();
+const productList = ref();
const dataLoaded = ref(false);
const materialDetails = ref();
const injectedProjectNo = inject('projectNo', null);
const state = ref();
-const linkTypes = ['涓�鍒�', '涓ゅ垪', '涓夊垪']
+const columnTypes = ['涓�鍒�', '涓ゅ垪', '涓夊垪', '鍥涘垪']
+const rowTypes = ['涓�琛�', '涓よ']
+const glassInfo = ['涓嶆樉绀�', '鏄剧ず鍦ㄥ彸渚�', '鏄剧ず鍦ㄤ笅渚�']
+const cutInfo = ['涓嶆樉绀�', '鏄剧ず']
// 瀹氫箟涓嶅悓甯冨眬瀵瑰簲鐨勫昂瀵�
const layoutDimensions = {
@@ -75,13 +101,15 @@
const currentPrintHeight = ref(layoutDimensions[printLayout.value].height);
const selectLayout = () => {
- request.post(`/glassOptimize/selectOptimizeResult/${processId.value}`)
+ request.post(`/glassOptimize/getOptimizeInfo/${processId.value}`)
.then((res) => {
if (res.code == 200) {
try {
- layoutData.value = JSON.parse(res.data.data[0].Layouts);
- materialDetails.value=res.data.optimizeUse;
- dataLoaded.value=true;
+ layoutData.value = res.data.layouts;
+ optimizeUse.value=res.data.optimizeUse[0];
+ // 娣诲姞鎺у埗鍙拌緭鍑�
+ console.log('layoutData:', layoutData.value);
+ console.log('optimizeUse:', optimizeUse.value);
} catch (error) {
console.error("瑙f瀽甯冨眬鏁版嵁澶辫触:", error);
}
@@ -94,9 +122,142 @@
});
};
+const selectReportData= () => {
+ request.post(`/glassOptimize/getReportData/${processId.value}`)
+ .then((res) => {
+ if (res.code == 200) {
+ try {
+ reportData.value = res.data.reportData[0];
+ console.log('reportData:', reportData.value);
+ } catch (error) {
+ console.error("瑙f瀽甯冨眬鏁版嵁澶辫触:", error);
+ }
+ } else {
+ console.error("璇锋眰澶辫触锛岀姸鎬佺爜:", res.code);
+ }
+ })
+ .catch((error) => {
+ console.error("璇锋眰澶辫触:", error);
+ });
+};
+
+
+const selectMaterialData= () => {
+ request.post(`/glassOptimize/materialInfo/${processId.value}`)
+ .then((res) => {
+ if (res.code == 200) {
+ try {
+ materialList.value = res.data.materialList[0];
+ console.log('reportData:', materialList.value);
+ } catch (error) {
+ console.error("瑙f瀽甯冨眬鏁版嵁澶辫触:", error);
+ }
+ } else {
+ console.error("璇锋眰澶辫触锛岀姸鎬佺爜:", res.code);
+ }
+ })
+ .catch((error) => {
+ console.error("璇锋眰澶辫触:", error);
+ });
+};
+
+const selectProductData= () => {
+ request.post(`/glassOptimize/getProductList/${processId.value}`)
+ .then((res) => {
+ if (res.code == 200) {
+ try {
+ productList.value = res.data.productList;
+ console.log('productList:', productList.value);
+ } catch (error) {
+ console.error("瑙f瀽甯冨眬鏁版嵁澶辫触:", error);
+ }
+ } else {
+ console.error("璇锋眰澶辫触锛岀姸鎬佺爜:", res.code);
+ }
+ })
+ .catch((error) => {
+ console.error("璇锋眰澶辫触:", error);
+ });
+};
+
+const printReports = async() => {
+ try {
+ // 纭繚鏈夋暟鎹彲浠ユ彁浜�
+ if (!processId) {
+ ElMessage.warning('娌℃湁鍙墦鍗扮殑鏁版嵁');
+ return;
+ }
+
+ // 鏄犲皠 rowTypes 鍒� layoutRows
+ const layoutRowsMap = {
+ '涓�琛�': 1,
+ '涓よ': 2
+ };
+
+ // 鏄犲皠 columnTypes 鍒� layoutColumns
+ const layoutColumnsMap = {
+ '涓�鍒�': 1,
+ '涓ゅ垪': 2,
+ '涓夊垪': 3,
+ '鍥涘垪': 4
+ };
+
+ // 鏄犲皠 glassInfo 鍒� glassInfoShow
+ const glassInfoMap = {
+ '涓嶆樉绀�': 0,
+ '鏄剧ず鍦ㄥ彸渚�': 1,
+ '鏄剧ず鍦ㄤ笅渚�': 2
+ };
+
+ // 鏄犲皠 cutInfo 鍒� cutInfoShow
+ const cutInfoMap = {
+ '涓嶆樉绀�': 0,
+ '鏄剧ず': 1
+ };
+
+ const response = await requestOptimize.post('/api/reports', {
+ fileName: processId.value,
+ projectNo: processId.value,
+ companyName : '1',
+ glassThickness : optimizeUse.value.thickness,
+ glassType : optimizeUse.value.model,
+ quantity : String(optimizeUse.value.processingQuantity),
+ printLayouts : config.printLayouts ? '1' : '0',
+ printReport : config.printReport ? '1' : '0',
+ layouts : layoutData.value,
+ reportData: reportData.value,
+ materialList: materialList.value,
+ productList: productList.value,
+ layoutSet: {
+ layoutRows: layoutRowsMap[config.rowTypes] || 1,
+ layoutColumns: layoutColumnsMap[config.columnTypes] || 1,
+ glassInfoShow: glassInfoMap[config.glassInfo] || 0,
+ cutInfoShow: cutInfoMap[config.cutInfo] || 0
+ }
+
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ } catch (error) {
+ console.error('淇濆瓨澶辫触:', error);
+ ElMessage.error('淇濆瓨澶辫触锛岃绋嶅悗鍐嶈瘯');
+ }
+};
+
+
+
const config = reactive({
- type: '涓ゅ垪',
+ columnTypes: '涓ゅ垪',
+ rowTypes: '涓よ',
plain: true,
+ printLayouts: true,
+ printReport: true,
+ glassInfo: '涓嶆樉绀�',
+ cutInfo: '鏄剧ず'
+
})
onMounted(() => {
@@ -112,6 +273,9 @@
if (processId.value) {
selectLayout();
+ selectReportData();
+ selectMaterialData();
+ selectProductData();
}
});
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue
index 78c9d78..4d2be2a 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue
@@ -343,7 +343,7 @@
<div id="project-list">
<div style="width: 100%;height: 100%">
- <h1>宸ョ▼鍒楄〃</h1>
+ <h2>宸ョ▼鍒楄〃</h2>
<vxe-grid
size="small"
height="100%"
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
index 80de7a3..d47ad32 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
@@ -394,7 +394,7 @@
</template>
<template #toolbar_buttons>
- <h1>鑶滅郴绛涢�夛細</h1>
+ <h2>鑶滅郴绛涢�夛細</h2>
<el-select v-model="optionVal" clearable default-value="default_city" placeholder="閫夋嫨鑶滅郴"
style="width: 120px">
<el-option
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue
index 053a9ff..33cfeb9 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue
@@ -121,7 +121,7 @@
<template>
<div style="width: 100%;height: 100%">
- <h1>娴佺▼鍗¤鎯�</h1>
+ <h2>娴佺▼鍗¤鎯�</h2>
<vxe-grid
size="small"
height="100%"
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java b/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
index 3f0d53e..bdee6f6 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -255,6 +255,26 @@
return Result.seccess(glassOptimizeService.saveOptimizeResult(object,projectId));
}
+ @ApiOperation("鏌ヨ鎶ュ憡鏁版嵁鎺ュ彛")
+ @PostMapping("/getReportData/{processId}")
+ public Result getReportData(@PathVariable String processId){
+ return Result.seccess(glassOptimizeService.getReportDataSv(processId));
+ }
+
+ @ApiOperation("鏌ヨ鐗╂枡淇℃伅鎺ュ彛")
+ @PostMapping("/materialInfo/{processId}")
+ public Result materialInfo(
+ @PathVariable String processId){
+ return Result.seccess(glassOptimizeService.getMaterialInfoSv(processId));
+ }
+
+
+ @ApiOperation("鏌ヨ浜у搧鍒楄〃鎺ュ彛")
+ @PostMapping("/getProductList/{processId}")
+ public Result getProductList(
+ @PathVariable String processId){
+ return Result.seccess(glassOptimizeService.getProductListSv(processId));
+ }
@ApiOperation("鏌ヨ浼樺寲缁撴灉鎺ュ彛")
@PostMapping("/selectOptimizeResult/{processId}")
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
index a18f3cd..a68b740 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -215,4 +215,16 @@
void addUpdateOffcut(Map<String, Object> detail, String processId, String glassType, String glassThickness, int stockId);
void updateProjectOptimize(String projectId, Integer states, Map<String, Object> optimalResults);
+
+ List<Map<String, Object>> getReportDataProcessIdSv(String processId);
+
+ List<Map<String, Object>> getPeriMeterDataSv(String processId);
+
+ List<Map<String, Object>> getMaterialInfoSv(String processId);
+
+ List<Map<String, Object>> getProductListSv(String processId);
+
+ List<Map<String, Object>> selectProjectList(String processId);
+
+ List<Map<String, Object>> materialOptimizeUse(String processId);
}
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
index 560d062..3d029b8 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -558,7 +558,7 @@
// Map<String, Object> result = new HashMap<>();
Map<String, Object> result = new LinkedHashMap<>();
result.put("layouts", layouts);
- result.put("optimizeUse", glassOptimizeMapper.materialStoreOptimizeUse(processId));
+ result.put("optimizeUse", glassOptimizeMapper.materialOptimizeUse(processId));
return result;
}
@@ -1208,4 +1208,137 @@
}
+ public Map<String, Object> getReportDataSv(String processId) {
+ Map<String, Object> perimap = new HashMap<>();
+ perimap.put("peridata", glassOptimizeMapper.getPeriMeterDataSv(processId));
+
+ Map<String, Object> map = new HashMap<>();
+ Object layoutSetObj = glassOptimizeMapper.getReportDataProcessIdSv(processId);
+ map.put("reportData", layoutSetObj);
+ List<Map<String, Object>> peridata = (List<Map<String, Object>>) perimap.get("peridata");
+ double totalPerimeter = 0.0;
+ if (peridata != null && !peridata.isEmpty()) {
+ for (Map<String, Object> perimeterData : peridata) {
+ if (perimeterData.containsKey("perimeter") && perimeterData.get("perimeter") != null) {
+ try {
+ Object perimeterObj = perimeterData.get("perimeter");
+ if (perimeterObj instanceof Number) {
+ totalPerimeter += ((Number) perimeterObj).doubleValue();
+ } else {
+ totalPerimeter += Double.parseDouble(perimeterObj.toString());
+ }
+ } catch (NumberFormatException e) {
+ System.err.println("鏃犳硶瑙f瀽鍛ㄩ暱鏁版嵁: " + perimeterData.get("perimeter"));
+ }
+ }
+ }
+ }
+
+ if (layoutSetObj instanceof List) {
+ List<Map<String, Object>> layoutSet = (List<Map<String, Object>>) layoutSetObj;
+ if (!layoutSet.isEmpty()) {
+ layoutSet.get(0).put("rectanglePerimeter", totalPerimeter);
+ }
+ }
+ return map;
+ }
+
+ public Map<String, Object> getMaterialInfoSv(String processId) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("materialList", glassOptimizeMapper.getMaterialInfoSv(processId));
+ return map;
+ }
+
+ public Map<String, Object> getProductListSv(String processId) {
+ Map<String, Object> productMap = new HashMap<>();
+ List<Map<String, Object>> productInfo = glassOptimizeMapper.selectProjectList(processId);
+ productMap.put("productInfo", productInfo);
+ Map<String, Object> map = new HashMap<>();
+
+ if (productInfo != null && !productInfo.isEmpty()) {
+ // 鎸夌収 processCard 鍒嗙粍
+ Map<String, List<Map<String, Object>>> groupedByProcessCard = new HashMap<>();
+ for (Map<String, Object> item : productInfo) {
+ String processCard = (String) item.get("processCard");
+ if (processCard != null) {
+ groupedByProcessCard.computeIfAbsent(processCard, k -> new ArrayList<>()).add(item);
+ }
+ }
+
+ // 涓烘瘡涓� processCard 璁$畻缁熻淇℃伅
+ List<Map<String, Object>> result = new ArrayList<>();
+ for (Map.Entry<String, List<Map<String, Object>>> entry : groupedByProcessCard.entrySet()) {
+ String processCard = entry.getKey();
+ List<Map<String, Object>> items = entry.getValue();
+
+ // 璁$畻缁熻淇℃伅
+ double longestSide = 0;
+ double shortestSide = Double.MAX_VALUE;
+ int specQuantity = items.size();
+ int totalQuantity = 0;
+
+ // 浣跨敤 BigDecimal 绮剧‘璁$畻闈㈢Н
+ BigDecimal totalArea = BigDecimal.ZERO;
+
+ for (Map<String, Object> item : items) {
+ // 瀹夊叏鑾峰彇闀垮拰瀹�
+ Number widthObj = (Number) item.get("width");
+ Number heightObj = (Number) item.get("height");
+
+ if (widthObj == null || heightObj == null) {
+ continue;
+ }
+
+ double width = widthObj.doubleValue();
+ double height = heightObj.doubleValue();
+
+ // 鏇存柊鏈�闀胯竟鍜屾渶鐭竟
+ double maxSide = Math.max(width, height);
+ double minSide = Math.min(width, height);
+
+ if (maxSide > longestSide) {
+ longestSide = maxSide;
+ }
+ if (minSide < shortestSide) {
+ shortestSide = minSide;
+ }
+
+ // 瀹夊叏鑾峰彇鏁伴噺
+ Number quantityObj = (Number) item.get("quantity");
+ if (quantityObj != null) {
+ totalQuantity += quantityObj.intValue();
+ }
+
+ // 瀹夊叏鑾峰彇闈㈢Н 鈥斺�� 浣跨敤 BigDecimal 绮剧‘绱姞
+ Object areaObj = item.get("Area");
+ if (areaObj != null) {
+ // 鍏抽敭锛氶�氳繃 toString() 杞负瀛楃涓插啀鏋勯�� BigDecimal锛岄伩鍏� double 绮惧害鎹熷け
+ BigDecimal area = new BigDecimal(areaObj.toString());
+ totalArea = totalArea.add(area);
+ }
+ }
+
+ // 澶勭悊 shortestSide 鐨勮竟鐣屾儏鍐�
+ if (shortestSide == Double.MAX_VALUE) {
+ shortestSide = 0;
+ }
+
+ // 鏋勯�犺繑鍥炴暟鎹�
+ Map<String, Object> resultMap = new HashMap<>();
+ resultMap.put("processCard", processCard);
+ resultMap.put("longestSide", longestSide);
+ resultMap.put("shortestSide", shortestSide);
+ resultMap.put("specQuantity", specQuantity);
+ resultMap.put("totalQuantity", totalQuantity);
+ resultMap.put("totalArea", totalArea);
+
+ result.add(resultMap);
+ }
+
+ map.put("productList", result);
+ }
+ return map;
+ }
+
+
}
diff --git a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
index f684745..9138b66 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -1949,6 +1949,107 @@
WHERE
project_no = #{projectId}
</select>
+ <select id="getReportDataProcessIdSv" resultType="java.util.Map" parameterType="java.lang.String">
+ SELECT
+ op.project_no as projectId,
+ op.glass_total as rectangleQuantity,
+ '0' as otherShapeQuantity,
+ op.glass_total_area as rectangleArea,
+ '0' as otherShapeArea,
+ '0' as otherShapePerimeter
+ FROM
+ pp.optimize_project as op
+ WHERE
+ op.project_no = #{processId}
+ </select>
+ <select id="getPeriMeterDataSv" resultType="java.util.Map" parameterType="java.lang.String">
+ SELECT
+ od.id,
+ od.project_no,
+ od.p_width,
+ od.p_height,
+ (od.p_width + od.p_height)*2 AS perimeter
+ FROM
+ pp.optimize_detail as od
+ WHERE
+ od.project_no = #{processId}
+ </select>
+ <select id="getMaterialInfoSv" resultType="java.util.Map" parameterType="java.lang.String">
+ SELECT
+ ou.raw_stock_code AS code,
+ ou.use_count AS quantity,
+ ou.width,
+ ou.height,
+ ou.width*ou.height*ou.use_count/1000000.0 as useArea,
+ op.glass_total_area as totalArea
+ FROM
+ pp.optimize_use ou
+ INNER JOIN pp.optimize_project op on ou.project_no = op.project_no
+ WHERE
+ ou.project_no = #{processId} and ou.state=1
+ </select>
+ <select id="getProductListSv" resultType="java.util.Map" parameterType="java.lang.String">
+
+ </select>
+ <select id="selectProjectList" resultType="java.util.Map" parameterType="java.lang.String">
+ ( SELECT
+ c.project_no,
+ c.quantity AS quantity,
+ d.child_width AS width,
+ d.child_height AS height,
+ concat( c.process_id, '-', c.technology_number ) AS processCard,
+ round( d.area * c.quantity, 4 ) AS Area,
+ c.order_number
+ FROM
+ pp.flow_card c
+ LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
+ AND c.order_number = d.order_number
+ AND c.technology_number = d.technology_number
+ WHERE
+ c.project_no IS NOT NULL
+ AND c.project_no = #{processId}
+
+ ORDER BY
+ c.process_id,
+ c.order_number
+ ) UNION
+ (
+ SELECT
+ c.project_no,
+ c.patch_num AS quantity,
+ d.child_width AS width,
+ d.child_height AS height,
+ concat( c.process_id, '-', c.technology_number ) AS processCard,
+ round( d.area * c.patch_num, 4 ) AS Area,
+ c.order_sort
+ FROM
+ pp.patch_log c
+ LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
+ AND c.order_sort = d.order_number
+ AND c.technology_number = d.technology_number
+ WHERE
+ c.project_no IS NOT NULL
+ AND c.project_no = #{processId}
+
+ ORDER BY
+ c.process_id,
+ c.order_sort)
+ </select>
+ <select id="materialOptimizeUse" resultType="java.util.Map">
+ select ou.raw_stock_code AS id,
+ ou.use_count AS processingQuantity,
+ ou.width,
+ ou.height,
+ ou.left_trim as leftTrim,
+ ou.down_trim as downTrim,
+ ou.up_trim as upTrim,
+ ou.right_trim as rightTrim,
+ JSON_UNQUOTE(JSON_EXTRACT(ms.json, '$.thickness')) AS thickness,
+ JSON_UNQUOTE(JSON_EXTRACT(ms.json, '$.name')) AS name,
+ JSON_UNQUOTE(JSON_EXTRACT(ms.json, '$.model')) AS model
+ from pp.optimize_use ou
+ left join mm.material_store ms on ou.raw_stock_code=ms.id where project_no=#{projectNumber} and state=1
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0