From 1e1c416c6aa6596feb333b75d882ffeede73d3c9 Mon Sep 17 00:00:00 2001
From: guoyujie <guoyujie@ng.com>
Date: 星期二, 08 四月 2025 17:37:34 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override

---
 north-glass-erp/northglass-erp/src/router/index.js                                           |    5 
 north-glass-erp/northglass-erp/src/views/mm/stockReport/OptimizeOutboundReport.vue           |   43 ++++
 north-glass-erp/northglass-erp/src/lang/en.js                                                |    2 
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetAmount.vue                 |   88 ++++++++-
 north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java |    7 
 north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml                               |   50 +++++
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue            |   48 +++-
 north-glass-erp/northglass-erp/src/lang/zh.js                                                |    2 
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java             |   11 +
 north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue          |    2 
 north-glass-erp/src/main/java/com/example/erp/entity/mm/MaterialLog.java                     |    3 
 north-glass-erp/northglass-erp/src/views/mm/stockReport/StockReport.vue                      |    1 
 north-glass-erp/northglass-erp/src/lang/ar.js                                                |    2 
 north-glass-erp/northglass-erp/src/lang/ru.js                                                |    2 
 north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java     |   11 
 north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java       |   23 ++
 north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml                           |   81 +++++++++
 north-glass-erp/src/main/java/com/example/erp/mapper/mm/MaterialInventoryMapper.java         |    3 
 north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java           |   52 ++++
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue               |   73 +++++++-
 20 files changed, 456 insertions(+), 53 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/lang/ar.js b/north-glass-erp/northglass-erp/src/lang/ar.js
index bc23913..61d0ae7 100644
--- a/north-glass-erp/northglass-erp/src/lang/ar.js
+++ b/north-glass-erp/northglass-erp/src/lang/ar.js
@@ -1116,6 +1116,8 @@
         materialAdditionReport:"鐗╂枡鏂板鎶ヨ〃",
         materialOutboundReport:"鐗╂枡鍑哄簱鎶ヨ〃",
         materialReturnReport:"鐗╂枡杩斿簱鎶ヨ〃",
+        optimizeOutboundReport:"浼樺寲鍑哄簱鎶ヨ〃",
+        optimizeQuantity:"浼樺寲浣跨敤鏁伴噺",
     },
     components:{
         addNewSignature :'兀囟賮 丕爻賲 噩丿賷丿',
diff --git a/north-glass-erp/northglass-erp/src/lang/en.js b/north-glass-erp/northglass-erp/src/lang/en.js
index ffa28f8..dd387e8 100644
--- a/north-glass-erp/northglass-erp/src/lang/en.js
+++ b/north-glass-erp/northglass-erp/src/lang/en.js
@@ -1116,6 +1116,8 @@
         materialAdditionReport:"Material addition report",
         materialOutboundReport:"Material delivery report",
         materialReturnReport:"Material return report",
+        optimizeOutboundReport:"浼樺寲鍑哄簱鎶ヨ〃",
+        optimizeQuantity:"浼樺寲浣跨敤鏁伴噺",
     },
     components:{
         addNewSignature :'Add label name',
diff --git a/north-glass-erp/northglass-erp/src/lang/ru.js b/north-glass-erp/northglass-erp/src/lang/ru.js
index a8eab33..37d09c1 100644
--- a/north-glass-erp/northglass-erp/src/lang/ru.js
+++ b/north-glass-erp/northglass-erp/src/lang/ru.js
@@ -1115,6 +1115,8 @@
         materialAdditionReport:"鐗╂枡鏂板鎶ヨ〃",
         materialOutboundReport:"鐗╂枡鍑哄簱鎶ヨ〃",
         materialReturnReport:"鐗╂枡杩斿簱鎶ヨ〃",
+        optimizeOutboundReport:"浼樺寲鍑哄簱鎶ヨ〃",
+        optimizeQuantity:"浼樺寲浣跨敤鏁伴噺",
     },
     components:{
         addNewSignature :'袛芯斜邪胁懈褌褜 懈屑褟 屑械褌泻懈',
diff --git a/north-glass-erp/northglass-erp/src/lang/zh.js b/north-glass-erp/northglass-erp/src/lang/zh.js
index 13c0e91..c7e6b2e 100644
--- a/north-glass-erp/northglass-erp/src/lang/zh.js
+++ b/north-glass-erp/northglass-erp/src/lang/zh.js
@@ -1126,6 +1126,8 @@
         materialAdditionReport:"鐗╂枡鏂板鎶ヨ〃",
         materialOutboundReport:"鐗╂枡鍑哄簱鎶ヨ〃",
         materialReturnReport:"鐗╂枡杩斿簱鎶ヨ〃",
+        optimizeOutboundReport:"浼樺寲鍑哄簱鎶ヨ〃",
+        optimizeQuantity:"浼樺寲浣跨敤鏁伴噺",
     },
     components:{
         addNewSignature :'鏂板鏍囩鍚�',
diff --git a/north-glass-erp/northglass-erp/src/router/index.js b/north-glass-erp/northglass-erp/src/router/index.js
index 187bd23..f85f0b3 100644
--- a/north-glass-erp/northglass-erp/src/router/index.js
+++ b/north-glass-erp/northglass-erp/src/router/index.js
@@ -1122,6 +1122,11 @@
               component: () => import('../views/mm/stockReport/MaterialOutboundReport.vue'),
             },
             {
+              path: 'optimizeOutboundReport',
+              name: 'optimizeOutboundReport',
+              component: () => import('../views/mm/stockReport/OptimizeOutboundReport.vue'),
+            },
+            {
               path: 'materialReturnReport',
               name: 'materialReturnReport',
               component: () => import('../views/mm/stockReport/MaterialReturnReport.vue'),
diff --git a/north-glass-erp/northglass-erp/src/views/mm/stockReport/OptimizeOutboundReport.vue b/north-glass-erp/northglass-erp/src/views/mm/stockReport/OptimizeOutboundReport.vue
new file mode 100644
index 0000000..73b72cc
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/mm/stockReport/OptimizeOutboundReport.vue
@@ -0,0 +1,43 @@
+<script setup>
+
+import BasicTable from "@/components/BasicTable.vue"
+import request from "@/utils/request"
+import { ref} from "vue"
+import { useI18n } from 'vue-i18n'
+
+//璇█鑾峰彇
+const { t } = useI18n()
+
+const childrenData = ref({
+  columns:[
+    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
+    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'projectNo', width: '120',title:t('ingredientsStock.projectNo'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'quantity', width: '140',title: t('ingredientsStock.outboundQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'useCount', width: '140',title: t('stockReport.optimizeQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'inventoryId',width: '100', title: t('ingredientsStock.id'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'materialName',width: '140', title: t('ingredientsStock.materialName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'thickness', width: '100',title: t('order.totalThickness'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'unit', width:'140', title: t('ingredients.unit'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+
+  ],//琛ㄦ牸琛ㄥご瀛楁
+  data:[],//琛ㄦ牸鏁版嵁
+  url :'/materialInventory/getOptimizeOutboundReport/鐗╂枡鍑哄簱',
+  exportUrl :'/materialInventory/exportMaterialLogReport/鐗╂枡鍑哄簱',
+  exportName:t('stockReport.materialOutboundReport'),
+  footList:['quantity']
+})
+
+</script>
+
+<template>
+  <basic-table
+      :childrenData="childrenData"/>
+</template>
+
+<style scoped>
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/mm/stockReport/StockReport.vue b/north-glass-erp/northglass-erp/src/views/mm/stockReport/StockReport.vue
index 18408db..c27cc52 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/stockReport/StockReport.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/stockReport/StockReport.vue
@@ -65,6 +65,7 @@
                   <el-dropdown-item command="/main/stockReport/materialAdditionReport" >{{$t('stockReport.materialAdditionReport')}}</el-dropdown-item>
                   <el-dropdown-item command="/main/stockReport/materialOutboundReport" >{{ $t('stockReport.materialOutboundReport') }}</el-dropdown-item>
                   <el-dropdown-item command="/main/stockReport/materialReturnReport" >{{ $t('stockReport.materialReturnReport') }}</el-dropdown-item>
+                  <el-dropdown-item command="/main/stockReport/optimizeOutboundReport" >{{ $t('stockReport.optimizeOutboundReport') }}</el-dropdown-item>
                 </el-dropdown-menu>
               </template>
             </el-dropdown>
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue
index 16a748b..e0a7005 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue
@@ -45,10 +45,10 @@
     {field: 'model', title: t('warehouseBasicData.type'),},
     {field: 'leftTrim', title: '宸︿慨杈�',},
     {field: 'downTrim', title: '涓嬩慨杈�',},
-    {field: 'rigthTrim', title: '鍙充慨杈�',},
+    {field: 'rightTrim', title: '鍙充慨杈�',},
     {field: 'upTrim', title: '涓婁慨杈�',},
     {field: 'available_quantity', title: '搴撳瓨鏁伴噺',},
-    {field: '', title: '鍔犲伐鏁伴噺',},
+    {field: 'processingQuantity', title: '鍔犲伐鏁伴噺',},
     {field: 'name', title: '鍚嶇О',},
     {field: 'producer', title: '渚涘簲鍟�',}
   ],//琛ㄥご鍙傛暟
@@ -131,12 +131,13 @@
 
 const thickness = ref(route.params.thickNess);
 const model = ref(route.params.model);
+let projectNo = ref(null);
 
-
-const selectMaterialStore = () =>{
-  request.post(`/glassOptimize/materialStore/${thickness.value}/${model.value}`).then((res) => {
+const selectMaterialStore = async () =>{
+  request.post(`/glassOptimize/materialStore/${thickness.value}/${model.value}/${projectNo}`).then((res) => {
     if (Number(res.code) === 200) {
       const rawData = res.data.data;
+      const edgeTrimming = res.data.edgeTrimming;
       if (Array.isArray(rawData) && rawData.length > 0) {
         const formattedData = rawData.map(item => {
           const formattedItem = {};
@@ -150,13 +151,28 @@
           }
           return formattedItem;
         });
-        const data = formattedData;
-        data.forEach(item => {
-          item.leftTrim = 0;
-          item.downTrim = 0;
-          item.rigthTrim = 0;
-          item.upTrim = 0;
-        });
+        if(edgeTrimming!=null){
+          const edgeTrimmingData = edgeTrimming.map(item => {
+            const edgeTrimmingItem = {};
+            for (const key in item) {
+              if (typeof item[key] === 'string') {
+                //鍘婚櫎瀛楃涓插睘鎬у�煎紑澶村拰缁撳熬鐨勫弻寮曞彿
+                edgeTrimmingItem[key] = item[key].replace(/^\"|\"$/g, '');
+              } else {
+                edgeTrimmingItem[key] = item[key];
+              }
+            }
+            return edgeTrimmingItem;
+          });
+          console.log(edgeTrimmingData)
+          formattedData.forEach(item => {
+            item.leftTrim = edgeTrimmingData[0].leftTrim;
+            item.downTrim = edgeTrimmingData[0].downTrim;
+            item.rightTrim = edgeTrimmingData[0].rightTrim;
+            item.upTrim = edgeTrimmingData[0].upTrim;
+          });
+        }
+
         xGrid.value.loadData(formattedData);
         gridOptions.data = formattedData;
       } else {
@@ -169,7 +185,11 @@
 };
 
 onMounted(() => {
-  selectMaterialStore();
+  if(route.params.projectNo!=null){
+    projectNo=route.params.projectNo
+    selectMaterialStore();
+  }
+
 });
 
 watch(() => props.receivedData, (newData) => {
@@ -222,7 +242,7 @@
             // 浠� receivedData 涓幏鍙栧搴旂殑鍊兼潵鏇存柊琛ㄦ牸鏁版嵁椤�
             leftTrim: Number(receivedData.quicksetLeft),
             downTrim: Number(receivedData.quicksetBottom),
-            rigthTrim: Number(receivedData.quicksetRight),
+            rightTrim: Number(receivedData.quicksetRight),
             upTrim: Number(receivedData.quicksetTop),
           };
           updatedData.push(updatedItem);
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetAmount.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetAmount.vue
index 0928d90..10fccb5 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetAmount.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetAmount.vue
@@ -1,7 +1,48 @@
 <script setup>
-import {ref} from "vue";
+import {onMounted, ref} from "vue";
 import {defineEmits} from 'vue';
+import request from "@/utils/request";
+import {ElMessage} from "element-plus";
 
+onMounted(async() => {
+  await firstLoading()
+})
+
+const firstLoading = async() => {
+  request.post(`/glassOptimize/getConfiguration/纾ㄩ噺`).then((res) => {
+    if (res.code == "200") {
+      const rawData = res.data.data;
+      if (Array.isArray(rawData) && rawData.length > 0) {
+        const formattedData = rawData.map(item => {
+          const formattedItem = {};
+          for (const key in item) {
+            if (typeof item[key] === 'string') {
+              //鍘婚櫎瀛楃涓插睘鎬у�煎紑澶村拰缁撳熬鐨勫弻寮曞彿
+              formattedItem[key] = item[key].replace(/^\"|\"$/g, '');
+            } else {
+              formattedItem[key] = item[key];
+            }
+          }
+          return formattedItem;
+        });
+        quicksetLeft.value=formattedData[0].leftEdge
+        quicksetTop.value=formattedData[0].upEdge
+        quicksetRight.value=formattedData[0].rightEdge
+        quicksetBottom.value=formattedData[0].downEdge
+        controlValue.value=formattedData[0].quickEdge
+        if(formattedData[0].autoFillEdge=="true"){
+          check.value=true
+        }else{
+          check.value=false
+        }
+        minAutoLenght.value=formattedData[0].minAutoLenght
+
+      }
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  });
+};
 function setupComponent() {
   // 鍚勪釜杈撳叆妗嗙粦瀹氱殑鍊硷紝鍒濆鍖栦负0
   const quicksetTop = ref('0');
@@ -10,6 +51,7 @@
   const quicksetLeft = ref('0');
   // 鐢ㄤ簬鎺у埗鐨勮緭鍏ュ�硷紝鍒濆鍖栦负1
   const controlValue = ref('1');
+  const minAutoLenght = ref('0');
 
   const syncValues = () => {
     // 灏嗘帶鍒跺�艰祴缁欏叾浠栧洓涓粍浠�
@@ -24,6 +66,7 @@
     quicksetBottom,
     quicksetLeft,
     controlValue,
+    minAutoLenght,
     syncValues
   };
 }
@@ -33,10 +76,11 @@
   quicksetBottom,
   quicksetLeft,
   controlValue,
+  minAutoLenght,
   syncValues
 } = setupComponent();
 
-const check = ref(true)
+const check = ref()
 
 const emit = defineEmits(['set-amount']);
 const props = defineProps({
@@ -44,14 +88,36 @@
 });
 
 const setAmount = () => {
-  const amountData = {
-    quicksetTop: quicksetTop.value,
-    quicksetRight: quicksetRight.value,
-    quicksetBottom: quicksetBottom.value,
-    quicksetLeft: quicksetLeft.value
-  };
-  emit('set-amount', amountData);
-  props.closeDialog(2);
+  let json = "{"
+  json+='"left_edge":"'+quicksetLeft.value+'",'
+  json+='"up_edge":"'+quicksetTop.value+'",'
+  json+='"right_edge":"'+quicksetRight.value+'",'
+  json+='"down_edge":"'+quicksetBottom.value+'",'
+  json+='"auto_fill_edge":"'+check.value+'",'
+  json+='"quick_edge":"'+controlValue.value+'",'
+  json+='"min_auto_lenght":"'+minAutoLenght.value+'"'
+  json+="}"
+
+  let configuration={
+    json:json,
+  }
+
+  request.post(`/glassOptimize/saveConfiguration/纾ㄩ噺`,configuration).then((res) => {
+    if(res.code==200 && res.data===true){
+      const amountData = {
+        quicksetTop: quicksetTop.value,
+        quicksetRight: quicksetRight.value,
+        quicksetBottom: quicksetBottom.value,
+        quicksetLeft: quicksetLeft.value,
+        controlValue:controlValue.value,
+        minAutoLenght:minAutoLenght.value,
+      };
+      emit('set-amount', amountData);
+      props.closeDialog(2);
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  });
 };
 
 </script>
@@ -81,7 +147,7 @@
       <div style="margin-top: 30px">
       <span>鎴愬搧杈归暱澶т簬绛変簬澶氬皯鏃惰嚜鍔ㄥ~鍏�(鍗曚綅: mm)</span>
       <el-checkbox v-model="check" style="margin: 5px 0 0 12px;"/>
-      <vxe-input style="width: 100px; height: 40px; margin-left: 5px" placeholder="0"/>
+      <vxe-input style="width: 100px; height: 40px; margin-left: 5px" v-model="minAutoLenght" placeholder=""/>
       </div>
     </div>
   </div>
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue
index f23bb1f..f12748d 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue
@@ -1,7 +1,42 @@
 <script setup>
-import {ref} from "vue";
+import {onMounted, ref} from "vue";
 import {defineEmits} from 'vue';
+import request from "@/utils/request";
+import {ElMessage} from "element-plus";
 
+
+onMounted(async() => {
+  await firstLoading()
+})
+
+const firstLoading = async() => {
+  request.post(`/glassOptimize/getConfiguration/淇竟`).then((res) => {
+    if (res.code == "200") {
+      const rawData = res.data.data;
+      if (Array.isArray(rawData) && rawData.length > 0) {
+        const formattedData = rawData.map(item => {
+          const formattedItem = {};
+          for (const key in item) {
+            if (typeof item[key] === 'string') {
+              //鍘婚櫎瀛楃涓插睘鎬у�煎紑澶村拰缁撳熬鐨勫弻寮曞彿
+              formattedItem[key] = item[key].replace(/^\"|\"$/g, '');
+            } else {
+              formattedItem[key] = item[key];
+            }
+          }
+          return formattedItem;
+        });
+        quicksetLeft.value=formattedData[0].leftTrim
+        quicksetTop.value=formattedData[0].upTrim
+        quicksetRight.value=formattedData[0].rightTrim
+        quicksetBottom.value=formattedData[0].downTrim
+
+      }
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  });
+};
 
 function setupComponent() {
   // 鍚勪釜杈撳叆妗嗙粦瀹氱殑鍊硷紝鍒濆鍖栦负0
@@ -46,14 +81,34 @@
 });
 
 const setTrimming = () => {
-  const dataToSend = {
-    quicksetTop: quicksetTop.value,
-    quicksetRight: quicksetRight.value,
-    quicksetBottom: quicksetBottom.value,
-    quicksetLeft: quicksetLeft.value
-  };
-  emit('send-data-event', dataToSend);
-  props.closeDialog(3);
+  let json = "{"
+  json+='"left_trim":"'+quicksetLeft.value+'",'
+  json+='"up_trim":"'+quicksetTop.value+'",'
+  json+='"right_trim":"'+quicksetRight.value+'",'
+  json+='"down_trim":"'+quicksetBottom.value+'",'
+  json+='"auto_fill_trim":"'+true+'",'
+  json+='"quick_trim":"'+15+'"'
+  json+="}"
+
+  let configuration={
+      json:json,
+    }
+
+  request.post(`/glassOptimize/saveConfiguration/淇竟`,configuration).then((res) => {
+    if(res.code==200 && res.data===true){
+      const dataToSend = {
+        quicksetTop: quicksetTop.value,
+        quicksetRight: quicksetRight.value,
+        quicksetBottom: quicksetBottom.value,
+        quicksetLeft: quicksetLeft.value
+      };
+      emit('send-data-event', dataToSend);
+      props.closeDialog(3);
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  });
+
 };
 
 </script>
diff --git a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue
index 1b806bb..71f17f3 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue
@@ -342,7 +342,7 @@
     {title: t('basicData.operate'), width: 140, slots: { default: 'button_slot' },fixed:"left"},
     { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 },
     {field: 'reportingWorkId', width: 120, title: t('reportingWorks.reportingWorkId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, },
-    {field: 'reportingWorkTime',width: 120, title: t('reportingWorks.reportingWorkTime') ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'reportingWorkTime',width: 120, title: t('reportingWorks.reportingWorkTime') ,showOverflow:"ellipsis" ,},
     {field: 'orderId', width: 130,title:  t('order.orderId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
     {field: 'processId', width: 160,title: t('processCard.processId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
     {field: 'order.project',width: 150, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, },
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java b/north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java
index 13617d9..02ccdce 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/mm/MaterialInventoryController.java
@@ -194,7 +194,12 @@
         return Result.seccess(materialInventoryService.cancelMaterialAdditionRecord(object));
     }
 
-
+    @ApiOperation("浼樺寲鐗╂枡搴撳瓨璁板綍鏌ヨ鎺ュ彛")
+    @SaCheckPermission("warehouseReport.search")
+    @PostMapping("/getOptimizeOutboundReport/{type}/{pageNum}/{pageSize}/{selectDate}")
+    public Result getOptimizeOutboundReport(@PathVariable String type,@PathVariable Integer pageNum, @PathVariable Integer pageSize,@PathVariable List<String> selectDate, @RequestBody MaterialLog materialLog){
+        return Result.seccess(materialInventoryService.getOptimizeOutboundReport(type,pageNum,pageSize,selectDate,materialLog));
+    }
 
 
 }
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 d7eb966..b970adf 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
@@ -49,11 +49,11 @@
 
     //搴撳瓨淇℃伅
     @ApiOperation("搴撳瓨淇℃伅鎺ュ彛")
-    @PostMapping  ("/materialStore/{thickness}/{model}")
+    @PostMapping  ("/materialStore/{thickness}/{model}/{projectNumber}")
     public Result materialStore(
             @PathVariable  String thickness,
-            @PathVariable  String model ){
-        return Result.seccess(glassOptimizeService.materialStoreSv(thickness,model));
+            @PathVariable  String model,@PathVariable  String projectNumber ){
+        return Result.seccess(glassOptimizeService.materialStoreSv(thickness,model,projectNumber));
     }
 
 
@@ -257,6 +257,11 @@
         return Result.seccess(glassOptimizeService.getConfiguration(type));
     }
 
+    @ApiOperation("淇墖纾ㄩ噺淇敼")
+    @PostMapping("/saveConfiguration/{type}")
+    public Result saveConfiguration(@PathVariable String type, @RequestBody Map<String,Object>  object){
+        return Result.seccess(glassOptimizeService.saveConfiguration(object,type));
+    }
 
 
 
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/mm/MaterialLog.java b/north-glass-erp/src/main/java/com/example/erp/entity/mm/MaterialLog.java
index 5d74b7a..3ecc6bb 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/mm/MaterialLog.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/mm/MaterialLog.java
@@ -50,5 +50,8 @@
     @ExcelProperty("鍒涘缓鏃堕棿")
     private LocalDate operateTime;
 
+    @ExcelProperty("浼樺寲浣跨敤鏁伴噺")
+    private Integer useCount;
+
 
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/MaterialInventoryMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/MaterialInventoryMapper.java
index 6efb6fe..af97ddb 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/MaterialInventoryMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/MaterialInventoryMapper.java
@@ -266,4 +266,7 @@
 
     String selectProjectNo(@Param("useId") Integer useId);
 
+    List<MaterialLog> getOptimizeOutboundReport(Integer offset, Integer pageSize, String startDate, String endDate, MaterialLog materialLog, String type);
+
+    Map<String,Integer> getOptimizeOutboundReportTotal(Integer offset, Integer pageSize, String startDate, String endDate, MaterialLog materialLog, String type);
 }
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 a2f73b3..ec119fb 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
@@ -3,6 +3,7 @@
 
 import com.example.erp.entity.pp.FlowCard;
 import com.example.erp.entity.pp.OptimizeProjectMange;
+import com.example.erp.entity.pp.OptimizeUse;
 import com.example.erp.entity.sd.OrderGlassDetail;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -24,8 +25,10 @@
     //搴撳瓨淇℃伅
     List<Map<String, Object>>  materialStoreMp(String thickness, String model);
 
+    List<Map<String, Object>>  materialStoreOptimizeUse(String projectNumber);
+
     //宸ュ崟绠$悊鏌ヨ鏈浆宸ュ崟鏁版嵁
-    List<OrderGlassDetail> selectWordOrder(Date selectTime1, Date selectTime2, OrderGlassDetail orderGlassDetail);
+    List<Map<String, Object>> selectWordOrder(Date selectTime1, Date selectTime2, OrderGlassDetail orderGlassDetail);
 
     //鍒涘缓宸ョ▼鑶滅郴鏌ヨ
     List<Map<String, Object>> getFlowCardListMp(String optionVal, Integer radio);
@@ -90,4 +93,10 @@
                          Integer sumQuantity, Double sumArea, String userName,Integer processIdCount, String processId, Integer type);
 
     List<Map<String, Object>> getTemperedConfiguration();
+
+    List<Map<String, Object>> getGrindingTrimming();
+
+    List<Map<String, Object>> getEdgeTrimming();
+
+    Boolean updateOptimizeConfig(String json,Integer type);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java b/north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
index 59a3aa2..46dc82b 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
@@ -1082,7 +1082,26 @@
     }
 
 
+    public Map<String, Object> getOptimizeOutboundReport(String type, Integer pageNum, Integer pageSize, List<String> selectDate, MaterialLog materialLog) {
+        Integer offset = (pageNum-1)*pageSize;
+        String endDate = LocalDate.now().toString();
+        String startDate = LocalDate.now().minusDays(15).toString();
+        if(selectDate !=null && selectDate.size()==2){
+            if(!selectDate.get(0).isEmpty()){
+                startDate = selectDate.get(0);
+            }
+            if(!selectDate.get(1).isEmpty()){
+                endDate = selectDate.get(1);
+            }
+        }
 
-
-
+        Map<String, Object> map = new HashMap<>();
+        map.put("data", materialInventoryMapper.getOptimizeOutboundReport(offset, pageSize,startDate, endDate, materialLog,type));
+        map.put("total", materialInventoryMapper.getOptimizeOutboundReportTotal(offset, pageSize,startDate, endDate, materialLog,type));
+        List<String> list = new ArrayList<>();
+        list.add(startDate);
+        list.add(endDate);
+        map.put("selectDate",list);
+        return map;
+    }
 }
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 b80c6b2..8c480d4 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
@@ -7,18 +7,20 @@
 import com.example.erp.common.RabbitMQUtil;
 import com.example.erp.entity.pp.FlowCard;
 import com.example.erp.entity.pp.OptimizeProjectMange;
+import com.example.erp.entity.userInfo.Log;
+import com.example.erp.entity.userInfo.SysError;
 import com.example.erp.mapper.pp.GlassOptimizeMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.DecimalFormat;
+import java.util.*;
 import java.util.concurrent.TimeoutException;
 
 @Service
@@ -126,8 +128,18 @@
 
     //宸ョ▼淇℃伅
     public Map<String, Object> projectInfoSv(String projectNo) {
+        Map<String, Object> stringObjectMap = glassOptimizeMapper.selectProjectCount(projectNo);
         Map<String, Object> map = new HashMap<>();
-        map.put("data", glassOptimizeMapper.projectInfoMp(projectNo));
+        if(Integer.parseInt(stringObjectMap.get("state").toString())<10){
+            map.put("data", glassOptimizeMapper.projectInfoMp(projectNo));
+            map.put("grindingTrimming", glassOptimizeMapper.getEdgeTrimming());
+        }else if(stringObjectMap.get("state").equals(10)){
+            map.put("data", glassOptimizeMapper.projectInfoMp(projectNo));
+            map.put("grindingTrimming", glassOptimizeMapper.getEdgeTrimming());
+        }else{
+            map.put("data", glassOptimizeMapper.projectInfoMp(projectNo));
+            map.put("grindingTrimming", null);
+        }
         return map;
     }
 
@@ -140,9 +152,17 @@
     }
 
     //搴撳瓨淇℃伅
-    public Map<String, Object> materialStoreSv(String thickness, String model) {
+    public Map<String, Object> materialStoreSv(String thickness, String model, String projectNumber) {
+        Map<String, Object> stringObjectMap = glassOptimizeMapper.selectProjectCount(projectNumber);
         Map<String, Object> map = new HashMap<>();
-        map.put("data", glassOptimizeMapper.materialStoreMp(thickness,model));
+        if(Integer.parseInt(stringObjectMap.get("state").toString())<=10){
+            map.put("data", glassOptimizeMapper.materialStoreMp(thickness,model));
+            map.put("edgeTrimming", glassOptimizeMapper.getEdgeTrimming());
+        }else{
+            map.put("data", glassOptimizeMapper.materialStoreOptimizeUse(projectNumber));
+            map.put("edgeTrimming", null);
+        }
+
         return map;
     }
 
@@ -306,11 +326,27 @@
         if(type.equals("閽㈠寲")){
             map.put("data", glassOptimizeMapper.getTemperedConfiguration());
         }else if(type.equals("纾ㄩ噺")){
-            map.put("data", glassOptimizeMapper.getTemperedConfiguration());
+            map.put("data", glassOptimizeMapper.getGrindingTrimming());
         }else if(type.equals("淇竟")){
-            map.put("data", glassOptimizeMapper.getTemperedConfiguration());
+            map.put("data", glassOptimizeMapper.getEdgeTrimming());
         }
 
         return map;
     }
+
+    public Boolean saveConfiguration(Map<String,Object> object,String type) {
+        String json = "";
+        if (object.get("json") != null) {
+            json = object.get("json").toString();
+        }
+        if(type.equals("閽㈠寲")){
+            glassOptimizeMapper.updateOptimizeConfig(json,1);
+        } else if (type.equals("淇竟")) {
+            glassOptimizeMapper.updateOptimizeConfig(json,5);
+        }else if (type.equals("纾ㄩ噺")) {
+            glassOptimizeMapper.updateOptimizeConfig(json,4);
+        }
+        return true;
+
+    }
 }
diff --git a/north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml b/north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
index fc889c2..0a1965e 100644
--- a/north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
+++ b/north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
@@ -1149,5 +1149,86 @@
         select project_no from pp.optimize_use where id=#{useId};
     </select>
 
+    <select id="getOptimizeOutboundReport">
+        SELECT
+            ml.operation_order_number,
+            ml.project_no,
+            ml.inventory_id,
+            ml.material_name,
+            ml.unit,
+            ml.width,
+            ml.height,
+            ml.thickness,
+            ml.quantity,
+            round(ml.width*ml.height*ml.quantity/1000000,2) as area,
+            ou.use_count,
+            ou.not_use_count,
+            ml.operator,
+            ml.operate_time
 
+        FROM
+            mm.material_log AS ml
+                LEFT JOIN pp.optimize_use AS ou ON ou.project_no = ml.project_no
+                AND ou.raw_stock_code = ml.inventory_id
+        WHERE
+            ou.project_no IS NOT NULL
+            	AND date( ml.operate_time )>= #{startDate} and date(ml.operate_time) &lt;= #{endDate}
+            and ml.operate_type=#{type}
+
+        <if test="materialLog.operationOrderNumber != null and materialLog.operationOrderNumber != ''">
+            and ml.operation_order_number regexp #{materialLog.operationOrderNumber}
+        </if>
+        <if test="materialLog.useCount != null and materialLog.useCount != ''">
+            and ou.use_count regexp #{materialLog.useCount}
+        </if>
+        <if test="materialLog.quantity != null and materialLog.quantity != ''">
+            and ml.quantity regexp #{materialLog.quantity}
+        </if>
+        <if test="materialLog.width != null and materialLog.width != ''">
+            and  ml.width regexp  REGEXP_REPLACE(#{materialLog.width},'\\.0+$','')
+        </if>
+        <if test="materialLog.height != null and materialLog.height != ''">
+            and  ml.height regexp  REGEXP_REPLACE(#{materialLog.height},'\\.0+$','')
+        </if>
+        <if test="materialLog.thickness != null and materialLog.thickness != ''">
+            and  ml.thickness regexp  REGEXP_REPLACE(#{materialLog.thickness},'\\.0+$','')
+        </if>
+
+        <if test="materialLog.inventoryId != null and materialLog.inventoryId != ''">
+            and  ml.inventory_id regexp  #{materialLog.inventoryId}
+        </if>
+
+        <if test="materialLog.materialName != null and materialLog.materialName != ''">
+            and  ml.material_name regexp  #{materialLog.materialName}
+        </if>
+        <if test="materialLog.producer != null and materialLog.producer != ''">
+            and  ml.producer regexp  #{materialLog.producer}
+        </if>
+        <if test="materialLog.unit != null and materialLog.unit != ''">
+            and  ml.unit regexp  #{materialLog.unit}
+        </if>
+        <if test="materialLog.operator != null and materialLog.operator != ''">
+            and  ml.operator regexp  #{materialLog.operator}
+        </if>
+        <if test="materialLog.remarks != null and materialLog.remarks != ''">
+            and ml.remarks regexp #{materialLog.remarksr}
+        </if>
+        order by ml.id desc
+        limit #{offset},#{pageSize};
+    </select>
+
+    <select id="getOptimizeOutboundReportTotal">
+        SELECT
+            CEILING(count(ml.id)/#{pageSize}) as 'pageTotal',
+                count(ml.id) as 'total'
+
+        FROM
+            mm.material_log AS ml
+                LEFT JOIN pp.optimize_use AS ou ON ou.project_no = ml.project_no
+                AND ou.raw_stock_code = ml.inventory_id
+        WHERE
+            ou.project_no IS NOT NULL
+          AND date( ml.operate_time )>= #{startDate} and date(ml.operate_time) &lt;= #{endDate}
+          and ml.operate_type=#{type}
+    </select>
 </mapper>
\ No newline at end of file
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 69d1eab..6f27e16 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -76,7 +76,8 @@
             f.technology_number ,
             g.glass_child ,
             g.icon,
-            op.project_name
+            op.project_name,
+            d.processing_note
         FROM
             ((pp.flow_card AS f
                 LEFT JOIN sd.order_detail AS d ON (((f.order_id = d.order_id) AND (f.order_number = d.order_number))))
@@ -126,7 +127,7 @@
         SELECT
             i.id AS id,
             i.producer AS producer,
-            i.available_quantity AS available_quantity,
+            i.available_quantity-i.plan_quantity AS available_quantity,
             JSON_EXTRACT(s.json, '$.width') AS width,
             JSON_EXTRACT(s.json, '$.height') AS height,
             JSON_EXTRACT(s.json, '$.thickness') AS thickness,
@@ -142,12 +143,29 @@
             (
                     (`s`.`type` = '鍘熺墖')
                     AND (`i`.`optimize_state` = 1)
-                    AND (`i`.`available_quantity` > 0)
+                    AND (`i`.`available_quantity`-i.plan_quantity > 0)
                     AND JSON_EXTRACT(s.json, '$.thickness') = #{thickness}
                     AND JSON_EXTRACT(s.json, '$.model') = #{model}
                 )
         ORDER BY
             `i`.`available_quantity` DESC ;
+    </select>
+
+
+    <select id="materialStoreOptimizeUse">
+        select ms.id 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_EXTRACT(ms.json, '$.thickness') AS thickness,
+               JSON_EXTRACT(ms.json, '$.name') AS name,
+               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>
 
     <select id="selectWordOrder" resultMap="wordOrderMap">
@@ -684,4 +702,30 @@
                JSON_EXTRACT( oc.config_detail, '$.y_space' ) as y_space
         from pp.optimize_admin oa left join pp.optimize_config oc on oa.h_id=oc.id where name='admin'
     </select>
+
+    <select id="getEdgeTrimming">
+        select JSON_EXTRACT( oc.config_detail, '$.left_trim' ) as leftTrim,
+               JSON_EXTRACT( oc.config_detail, '$.up_trim' ) as upTrim,
+               JSON_EXTRACT( oc.config_detail, '$.right_trim' ) as rightTrim,
+               JSON_EXTRACT( oc.config_detail, '$.down_trim' ) as downTrim,
+               JSON_EXTRACT( oc.config_detail, '$.auto_fill_trim' ) as autoFillTrim,
+               JSON_EXTRACT( oc.config_detail, '$.quick_trim' ) as quickTrim
+        from  pp.optimize_config oc where config_type=5
+    </select>
+
+    <select id="getGrindingTrimming">
+        select JSON_EXTRACT( oc.config_detail, '$.left_edge' ) as leftEdge,
+               JSON_EXTRACT( oc.config_detail, '$.up_edge' ) as upEdge,
+               JSON_EXTRACT( oc.config_detail, '$.right_edge' ) as rightEdge,
+               JSON_EXTRACT( oc.config_detail, '$.down_edge' ) as downEdge,
+               JSON_EXTRACT( oc.config_detail, '$.auto_fill_edge' ) as autoFillEdge,
+               JSON_EXTRACT( oc.config_detail, '$.quick_edge' ) as quickEdge,
+                JSON_EXTRACT( oc.config_detail, '$.min_auto_lenght' ) as minAutoLenght
+        from  pp.optimize_config oc where config_type=4
+    </select>
+
+    <update id="updateOptimizeConfig">
+        UPDATE pp.optimize_config set config_detail=#{json},create_time=now()
+        where config_type=#{type}
+    </update>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0