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>&nbsp;
-      <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