From bf90cf8568301edb38920e8b0a0ce7e137a668ef Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期四, 21 八月 2025 09:51:55 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override

---
 north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue                                 |    8 
 north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml                               |    9 
 north-glass-erp/src/main/resources/mapper/pp/DamageDetails.xml                                    |   16 +
 north-glass-erp/northglass-erp/src/lang/en.js                                                     |    5 
 north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml                             |   28 +
 north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecord.vue                        |    2 
 north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue                           |    3 
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/DamageDetailsMapper.java                  |    7 
 north-glass-erp/northglass-erp/src/lang/zh.js                                                     |    6 
 north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java             |    1 
 north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue                   |    5 
 north-glass-erp/northglass-erp/src/components/mm/PrintPackingListLuoyang.vue                      |    1 
 north-glass-erp/northglass-erp/src/lang/ar.js                                                     |    4 
 north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetailMapper.xml                         |   19 +
 north-glass-erp/src/main/resources/mapper/pp/Report.xml                                           |   34 +
 north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue                   |    1 
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue                  |    9 
 north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue            |    4 
 north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue                   |   46 ++
 north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java             |    6 
 north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml                                    |   35 +
 north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue                           |    2 
 north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java |    8 
 north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue                    |   13 
 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java                       |  146 ++++++++
 north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedGoodsInventoryMapper.java         |   32 +
 north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue                     |   87 ++++
 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java                |   26 
 north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue                                      |   42 +-
 north-glass-erp/northglass-erp/src/lang/ru.js                                                     |    5 
 north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue                    |   48 +-
 north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java       |  173 +++++++++-
 north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedGoodsInventory.java               |    4 
 north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java                     |   17 
 north-glass-erp/northglass-erp/src/lang/kr.js                                                     |    4 
 north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml                           |   38 +
 north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml                                    |   10 
 37 files changed, 704 insertions(+), 200 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/components/mm/PrintPackingListLuoyang.vue b/north-glass-erp/northglass-erp/src/components/mm/PrintPackingListLuoyang.vue
index 8f6675d..746a879 100644
--- a/north-glass-erp/northglass-erp/src/components/mm/PrintPackingListLuoyang.vue
+++ b/north-glass-erp/northglass-erp/src/components/mm/PrintPackingListLuoyang.vue
@@ -217,7 +217,6 @@
           sum:sum
         })
       })
-      console.log(orderDetailList.value)
     } else {
       ElMessage.warning(res.msg)
       router.push("/login")
diff --git a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue
index bff24f1..5b26402 100644
--- a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue
+++ b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue
@@ -213,7 +213,7 @@
 
 <template>
   <div >
-    <div v-for="(page,pageIndex) in pageData" class="content1">
+    <div v-for="(page,pageIndex) in pageData" class="content1" >
       <table>
         <thead>
         <tr style="height: 3.6cm"><td></td></tr>
@@ -311,7 +311,7 @@
         </tr>
         </tbody>
       </table>
-      <table class="foot">
+      <table class="foot" >
         <tr >
           <td style="width: 5cm"></td>
           <td  style="width: 150px" ></td>
@@ -330,6 +330,7 @@
                 :value="getMoneySum(pageIndex)"
                 style="font-size: 17px;border: 0;width: 100%"/>
           </td>
+          <td></td>
         </tr>
         <tr style="height: 0.65cm"><td></td></tr>
         <tr>
diff --git a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue
index b9031f1..5ee00cb 100644
--- a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue
+++ b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue
@@ -319,7 +319,7 @@
 
               <el-col :span="5" style="font-size: 16px;white-space: nowrap;">
                 <input v-model="delivery.project"
-                       style="border: 0;width: 100%;
+                       style="border: 0;width: 250%;
                          height: 100%;font-size:16px;white-space: nowrap; "/>
               </el-col>
             </el-row>
@@ -515,7 +515,7 @@
   }*/
   .foot{
     position: absolute;
-    bottom: 1cm;
+    bottom: 0.1cm;
   //transform: translateY(8cm);
   }
   /*#table-sum {
diff --git a/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue b/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue
index 55ac32e..13383ee 100644
--- a/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue
+++ b/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue
@@ -163,7 +163,7 @@
       gridOptions.columns.forEach(item =>{
         item.filterMethod = filterChanged
       })
-      list.value = ['quantity','Storage','gross_area','shippedQuantity','shippedArea','glassQuantity','StorageArea']
+      list.value = ['quantity','Storage','grossArea','shippedQuantity','shippedArea','glassQuantity','StorageArea','broken_num']
       title.value = res.data.title
       res.data.title.forEach((item,index) =>{
         list.value.push('reportWorkQuantity.'+item.process)
diff --git a/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue b/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue
index 08ecf40..ba7704d 100644
--- a/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue
+++ b/north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue
@@ -41,7 +41,7 @@
   mergeCells:[],
   toolbarConfig: {
     zoom: true,
-    /*custom: true*/
+     // custom: true
   },
   cellClassName ({ row, column,columnIndex})  {
     if (columnIndex>10 && row.thisQuantity*1 === row.reportWorkQuantity[column.title]*1){
@@ -69,24 +69,19 @@
   orderId:null
 })
 const columns = [
-  {field: 'order_number',fixed:"left", width: 90,title: t('order.OrderNum'),showOverflow:"ellipsis"},
-  // {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
   {field: 'product_name', width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
   {field: 'glass_child',width: 130, title: t('reportingWorks.glassChild') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
   {field: 'order_type', width: 120,title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
   {field: 'process_id',width: 110, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-  {field: 'technology_number', width: 90,title:  t('processCard.technologyNumber'),showOverflow:"ellipsis"},
-  {field: 'child_width', width: 90,title:  t('order.width'),showOverflow:"ellipsis"},
-  {field: 'child_height', width: 90,title:  t('order.height'),showOverflow:"ellipsis"},
-  {field: 'quantity', width: 90,title: t('order.quantity')},
-  {field: 'glassQuantity', width: 90,title: t('order.glassQuantity')},
-  {field: 'gross_area', width: 90,title: t('order.area')},
-  {field: 'shippedQuantity',width: 120, title: t('delivery.deliveryQuantity')},
-  {field: 'inventory',width: 120, title: t('productStock.inventoryQuantity')},
-  {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')},
+  {field: 'technology_number', width: 90,title:  t('processCard.technologyNumber'),showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+  {field: 'quantity',slots: { default: 'show'}, width: 90,title: t('order.quantity')},
+  {field: 'thisQuantity', width: 90,title: t('order.glassQuantity')},
+  {field: 'gross_area',slots: { default: 'show'}, width: 90,title: t('order.area')},
+  {field: 'inventory',slots: { default: 'show'},width: 120, title: t('report.inventoryNum')},
+  {field: 'inventoryArea',slots: { default: 'show'},width: 120, title: t('report.StorageArea')},
   {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')},
 ]
-let column = [0,1,3,6,7,8,10,11,12,13]
+let column = [0,2,3,5,7,8,9]
 
 
 onMounted(()=>{
@@ -96,7 +91,9 @@
 watch(()=>props.orderId,(newValue)=>{
   getWorkOrder()
 })
-
+const show = (row,column ) =>{
+  return row[column.field+'Show']
+}
 
 let mergeCells = ref()
 const getWorkOrder = () => {
@@ -107,7 +104,9 @@
       gridOptions.columns.forEach(item =>{
         item.filterMethod = filterChanged
       })
-      list.value = ['quantity','inventory','inventoryArea','gross_area','shippedQuantity','glassQuantity']
+      console.log(res)
+
+      list.value = ['quantity','thisQuantity','inventory','inventoryArea','gross_area','glassQuantity','broken_num']
       res.data.title.forEach((item,index) =>{
         list.value.push('reportWorkQuantity.'+item.process)
         let column = {slots: { default: 'quantitySum'},
@@ -119,7 +118,7 @@
       res.data.data.forEach(item => {
         item.reportWorkQuantity=JSON.parse(item.reportWorkQuantity)
         item.reportWorkQuantityCount=JSON.parse(item.reportWorkQuantityCount)
-        item.reportWorkQuantityShow=JSON.parse(item.reportWorkQuantityShow)
+         item.reportWorkQuantityShow=JSON.parse(item.reportWorkQuantityShow)
       })
 
       await xGrid.value.loadData(res.data.data)
@@ -145,19 +144,22 @@
 
 }
 const footSum =(list, field) => {
-  if(xGrid.value.isFilter()){
-    return
-  }
   let count = 0
   list.forEach(item => {
     if(field.indexOf('.')>-1){
       let  array = field.split('.')
-      count += Number(item[array[0]][array[1]]) || 0
+      //鍒ゆ柇鏄惁涓虹瓫閫夌姸鎬佸拰闈炶鍗曞悎骞剁姸鎬�
+      if(xGrid.value.isFilter() ){
+        count += Number(item[array[0]+'Show'][array[1]]) || 0
+      }else{
+        count += Number(item[array[0]][array[1]]) || 0
+      }
+
     }else {
       count += Number(item[field])  || 0
     }
   })
-  return count.toFixed(2)
+  return count.toFixed(2).replace(/\.?0+$/, '');
 }
 
 const quantitySum = ( row,column )=>{
@@ -200,6 +202,10 @@
       <template #quantitySum="{ row,column }">
         <span>{{ quantitySum(row,column) }} </span>
       </template>
+      <template #show="{ row,column }">
+        <span>{{ show(row,column) }} </span>
+      </template>
+
 
     </vxe-grid>
   </div>
diff --git a/north-glass-erp/northglass-erp/src/lang/ar.js b/north-glass-erp/northglass-erp/src/lang/ar.js
index 22414ab..351b860 100644
--- a/north-glass-erp/northglass-erp/src/lang/ar.js
+++ b/north-glass-erp/northglass-erp/src/lang/ar.js
@@ -311,7 +311,8 @@
         glassQuantity:'灏忕墖鏁伴噺',
         merge:'瀹屾暣妯″紡',
         layer:'鍗曠墖妯″紡',
-        notFinish:'寰呭畬鎴�'
+        notFinish:'寰呭畬鎴�',
+        processCardCollect:'娴佺▼鍗℃眹鎬�',
 
     },
     searchOrder:{
@@ -662,6 +663,7 @@
         pleaseNumber12:'鏈伐搴忔姤宸ユ暟:',
         pleaseNumber13:'涓嬪伐搴忔姤宸ユ暟:',
         pleaseNumber14:'鏈伐搴忎慨鏀规暟涓嶈兘灏忎簬涓嬪伐搴忔姤宸ユ暟',
+        pleaseNumber15:'宸插叆搴撴暟閲忎笉鑳藉ぇ浜庡凡瀹屽伐鏁伴噺',
     },
     productStock:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/en.js b/north-glass-erp/northglass-erp/src/lang/en.js
index dc07132..b2627b0 100644
--- a/north-glass-erp/northglass-erp/src/lang/en.js
+++ b/north-glass-erp/northglass-erp/src/lang/en.js
@@ -312,7 +312,8 @@
         glassQuantity:'灏忕墖鏁伴噺',
         merge:'瀹屾暣妯″紡',
         layer:'鍗曠墖妯″紡',
-        notFinish:'寰呭畬鎴�'
+        notFinish:'寰呭畬鎴�',
+        processCardCollect:'娴佺▼鍗℃眹鎬�',
 
     },
     searchOrder:{
@@ -664,7 +665,7 @@
         pleaseNumber12:'鏈伐搴忔姤宸ユ暟:',
         pleaseNumber13:'涓嬪伐搴忔姤宸ユ暟:',
         pleaseNumber14:'鏈伐搴忎慨鏀规暟涓嶈兘灏忎簬涓嬪伐搴忔姤宸ユ暟',
-
+        pleaseNumber15:'宸插叆搴撴暟閲忎笉鑳藉ぇ浜庡凡瀹屽伐鏁伴噺',
     },
     productStock:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/kr.js b/north-glass-erp/northglass-erp/src/lang/kr.js
index 8b0df0d..65e1a00 100644
--- a/north-glass-erp/northglass-erp/src/lang/kr.js
+++ b/north-glass-erp/northglass-erp/src/lang/kr.js
@@ -321,7 +321,8 @@
         glassQuantity:'灏忕墖鏁伴噺',
         merge:'瀹屾暣妯″紡',
         layer:'鍗曠墖妯″紡',
-        notFinish:'寰呭畬鎴�'
+        notFinish:'寰呭畬鎴�',
+        processCardCollect:'娴佺▼鍗℃眹鎬�',
 
     },
     searchOrder:{
@@ -671,6 +672,7 @@
         pleaseNumber12:'鏈伐搴忔姤宸ユ暟:',
         pleaseNumber13:'涓嬪伐搴忔姤宸ユ暟:',
         pleaseNumber14:'鏈伐搴忎慨鏀规暟涓嶈兘灏忎簬涓嬪伐搴忔姤宸ユ暟',
+        pleaseNumber15:'宸插叆搴撴暟閲忎笉鑳藉ぇ浜庡凡瀹屽伐鏁伴噺',
     },
     productStock:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/ru.js b/north-glass-erp/northglass-erp/src/lang/ru.js
index eabbbec..1bb87ca 100644
--- a/north-glass-erp/northglass-erp/src/lang/ru.js
+++ b/north-glass-erp/northglass-erp/src/lang/ru.js
@@ -311,8 +311,8 @@
         glassQuantity:'灏忕墖鏁伴噺',
         merge:'瀹屾暣妯″紡',
         layer:'鍗曠墖妯″紡',
-        notFinish:'寰呭畬鎴�'
-
+        notFinish:'寰呭畬鎴�',
+        processCardCollect:'娴佺▼鍗℃眹鎬�',
     },
     searchOrder:{
         createOrder:'袙褘锌懈褋邪褌褜 蟹邪泻邪蟹',
@@ -660,6 +660,7 @@
         pleaseNumber12:'鏈伐搴忔姤宸ユ暟:',
         pleaseNumber13:'涓嬪伐搴忔姤宸ユ暟:',
         pleaseNumber14:'鏈伐搴忎慨鏀规暟涓嶈兘灏忎簬涓嬪伐搴忔姤宸ユ暟',
+        pleaseNumber15:'宸插叆搴撴暟閲忎笉鑳藉ぇ浜庡凡瀹屽伐鏁伴噺',
     },
     productStock:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/zh.js b/north-glass-erp/northglass-erp/src/lang/zh.js
index cbfee4b..20f4b41 100644
--- a/north-glass-erp/northglass-erp/src/lang/zh.js
+++ b/north-glass-erp/northglass-erp/src/lang/zh.js
@@ -321,7 +321,8 @@
         glassQuantity:'灏忕墖鏁伴噺',
         merge:'瀹屾暣妯″紡',
         layer:'鍗曠墖妯″紡',
-        notFinish:'寰呭畬鎴�'
+        notFinish:'寰呭畬鎴�',
+        processCardCollect:'娴佺▼鍗℃眹鎬�',
 
     },
     searchOrder:{
@@ -675,6 +676,7 @@
         pleaseNumber12:'鏈伐搴忔姤宸ユ暟:',
         pleaseNumber13:'涓嬪伐搴忔姤宸ユ暟:',
         pleaseNumber14:'鏈伐搴忎慨鏀规暟涓嶈兘灏忎簬涓嬪伐搴忔姤宸ユ暟',
+        pleaseNumber15:'宸插叆搴撴暟閲忎笉鑳藉ぇ浜庡凡瀹屽伐鏁伴噺',
     },
     productStock:{
         page:{
@@ -827,7 +829,7 @@
         produce:'鐢熶骇',
         traveler:'娴佺▼鍗�',
         warehousing:'鍏ュ簱',
-        unpaidQuantity:"鏈彂鏁伴噺 ",
+        unpaidQuantity:"璁㈠崟鏈彂鏁伴噺 ",
         availableStock:'鍙敤搴撳瓨',
         deliveryQuantity:'鍙戣揣鏁伴噺',
         pleaseEnterTheAmountOfFunds:'璇疯緭鍏ラ」鐩悕绉�',
diff --git a/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue b/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue
index 234ef9c..4993ce7 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue
@@ -284,7 +284,6 @@
               container: container.value,
               flowCard: selectRecords
             })
-
             request.post("/finishedGoodsInventory/addSelectWarehousing",flowData.value).then((res) => {
               if(res.code==200 && res.data==="true"){
                 ElMessage.success(t('productStock.receivedSuccessfully'))
diff --git a/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue b/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue
index 3823495..8b6a42d 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue
@@ -8,11 +8,14 @@
 import { useI18n } from 'vue-i18n'
 import footSum from "@/hook/footSum";
 import {addListener} from "@/hook/mouseMove";
+import  useUserInfoStore from '@/stores/userInfo'
 
 //璇█鑾峰彇
 const { t } = useI18n()
+const userStore = useUserInfoStore()
 let router=useRouter()
 let produceList = ref([])
+let dialogTableVisible = ref(false)
 const getTableRow = (row,type) =>{
   switch (type) {
     case 'edit' :{
@@ -122,7 +125,6 @@
     filterData.value[column.property] = value
   }
   request.post(`/finishedGoodsInventory/getSelect/1/${total.pageSize}`,filterData.value).then((res) => {
-
     if(res.code==200){
       total.dataTotal = res.data.total.total*1
       total.pageTotal= res.data.total.pageTotal
@@ -139,7 +141,6 @@
 const selectOrderList = ()=>{
 
   request.post(`/finishedGoodsInventory/getSelect/${pageNum.value}/${total.pageSize}`,filterData.value).then((res) => {
-
     if(res.code==200){
       if (res.data.total!=null){
         total.dataTotal = res.data.total.total*1
@@ -233,6 +234,7 @@
       { 'code' :'issue','name':t('productStock.orderTransfer'),status: 'primary'},
       { 'code' :'out','name':t('productStock.finishedProductPickup'),status: 'primary'},
       /*{ 'code' :'rework','name':t('productStock.finishedProductRework'),status: 'primary'},*/
+      { 'code' :'changeRack','name':'瑁呯璋冩灦',status: 'primary'},
 
     ],
     /*import: false,
@@ -261,7 +263,7 @@
 })
 
 
-
+let currentRecord = ref(null)
 const  xGrid = ref();
 const gridEvents = {
   toolbarButtonClick({ code }) {
@@ -270,23 +272,49 @@
       switch (code){
         case 'issue':{
           /*VXETable.modal.confirm('鐐瑰嚮浜嗗簱瀛樿皟鎷�');*/
-          router.push({path: '/main/productStock/OrderAllocation'});
-          return;
+          router.push({path: '/main/productStock/OrderAllocation'})
           break
         }
         case 'out':{
-          router.push({path: '/main/productStock/FinishedGoodsIssue'});
-          return;
-          break;
+          router.push({path: '/main/productStock/FinishedGoodsIssue'})
+          break
         }
         case 'rework':{
-          router.push({path: '/main/productStock/FinishedProductRework'});
-          return;
-          break;
+          router.push({path: '/main/productStock/FinishedProductRework'})
+          break
+        }
+        case 'changeRack':{
+          currentRecord.value = null
+          if(xGrid.value.getCurrentRecord()===null){
+            ElMessage.warning(t('productStock.unselectedData'))
+            return
+          }
+          currentRecord.value = JSON.parse(JSON.stringify(xGrid.value.getCurrentRecord()))
+          dialogTableVisible.value = true
+          break
         }
       }
     }
   }
+}
+const changeRack =async () => {
+  const max = xGrid.value.getCurrentRecord().quantityAvailable*1 || 0
+  if(currentRecord.value.quantityAvailable<=0 || parseInt(currentRecord.value.quantityAvailable)>max){
+    ElMessage.warning(`0<value<=${xGrid.value.getCurrentRecord().quantityAvailable}`)
+    return
+  }
+  if(currentRecord.value.boxNo.length>255 || currentRecord.value.remark.length>255){
+    ElMessage.warning('绠卞彿鎴栧娉�'+t('basicData.msg.max255'))
+    return
+  }
+  await request.post(`/finishedGoodsInventory/changeRack/${userStore.user.userName}`,currentRecord.value).then((res) => {
+    if(res.code==200 ){
+      ElMessage.success('瑁呯璋冩灦鎴愬姛')
+      router.push({path: '/main/productStock/productStockList', query:{random:Math.random()}})
+    }else{
+      ElMessage.warning(res.msg)
+    }
+  })
 }
 
 
@@ -345,6 +373,40 @@
       </template>
 
     </vxe-grid>
+
+    <el-dialog v-model="dialogTableVisible"  style="width: 400px;height:250px;margin-top: 25vh">
+      <el-row>
+        <el-col :span="8">
+          <el-text>绠卞彿:</el-text>
+        </el-col>
+        <el-col :span="16">
+          <el-input v-model="currentRecord.boxNo"/>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-text>鏁伴噺:</el-text>
+        </el-col>
+        <el-col :span="16">
+          <el-input v-model="currentRecord.quantityAvailable" type="number"/>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-text>澶囨敞:</el-text>
+        </el-col>
+        <el-col :span="16">
+          <el-input v-model="currentRecord.remark"/>
+        </el-col>
+      </el-row>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="changeRack">
+            璋冩灦
+          </el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -360,4 +422,7 @@
   -ms-user-select: none;
   user-select: none;
 }
+.el-row {
+  margin-bottom: 10px;
+}
 </style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecord.vue b/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecord.vue
index 3f43be0..6ebb02a 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecord.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecord.vue
@@ -293,6 +293,8 @@
 
               }else if(res.data==="false1"){
                 ElMessage.warning("鍙戣揣鍗曞凡鍒涘缓")
+              }else if(res.data==="false2"){
+                ElMessage.warning("鐗╂枡鍙兘瀛樺湪瑁呯璋冩灦锛屾棤娉曢��鍥�")
               }else{
                 ElMessage.warning(t('productStock.cancellationFailed'))
               }
diff --git a/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue b/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue
index 4d6a6fb..7e0317a 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue
@@ -25,18 +25,7 @@
 const dialogTableVisible = ref(false)
 const dialogTableVisible1 = ref(false)
 let produceList = ref([])
-const getTableRow = (row,type) =>{
-  switch (type) {
-    case 'add' :{
-      alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑缂栬緫淇℃伅')
-      break
-    }
-    case 'delete':{
-      alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍒犻櫎淇℃伅')
-      break
-    }
-  }
-}
+
 
 //鎵撳嵃
 let printRow = ref({
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
index 85f03f8..e2a88af 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -531,7 +531,14 @@
           downGrind: item.downGrind,
           leftGrind: item.leftGrind,
           rightGrind:item.rightGrind,
-          layoutId:item.layoutId,
+          heatLayoutId:item.heatLayoutId,
+          process:item.process,
+          orderNo:item.orderNo,
+          customerName:item.customerName,
+          processingNote:item.processingNote,
+          projectName:item.projectName,
+          productName:item.productName,
+          buildingNumber:item.buildingNumber,
           rackNo: rackNoValue
         };
       });
diff --git a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
index 1d3dbbb..eab016e 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
@@ -431,8 +431,15 @@
           }else  if(row.quantity_card<row.completedQuantity){
             return new Error(t('reportingWorks.pleaseNumber10'))
           }
+          const nextProcess = titleUploadData.value.nextProcess//涓嬪伐搴�
+
           const completedSum = Number(row.thisQuantitySum) //鎬诲畬宸ユ暟閲�
-          const nextQuantitySum = Number(row.nextQuantitySum) //鎬讳笅宸ュ簭瀹屽伐鏁伴噺
+          let nextQuantitySum = ''
+          if (nextProcess!=''){
+             nextQuantitySum = Number(row.nextQuantitySum) //鎬讳笅宸ュ簭瀹屽伐鏁伴噺
+          }else {
+             nextQuantitySum = Number(row.received_quantity) //鎬讳笅宸ュ簭瀹屽伐鏁伴噺
+          }
           const totalQuantity = Number(row.quantity) //鍙畬宸ユ暟閲�
           const val = Number(cellValue) //杈撳叆鍊�
 
@@ -450,21 +457,37 @@
             `)
           }
           if(titleUploadData.value.reportingWorkId!=null){
-            if(row.completedQuantityComputed>=row.minQuantity ){
-              if((val<(row.completedQuantityComputed-row.minQuantity || val>=row.completedQuantityComputed))){
-                return new Error(`${row.completedQuantityComputed-row.minQuantity}
+            if (nextProcess!=''){//闈炴渶鍚庝竴閬撳伐搴�
+              if(row.completedQuantityComputed>=row.minQuantity ){
+                if((val<(row.completedQuantityComputed-row.minQuantity || val>=row.completedQuantityComputed))){
+                  return new Error(`${row.completedQuantityComputed-row.minQuantity}
                                   <=val<=
                                   ${row.completedQuantityComputed}`)
-              }
-            }else{
-              if((val>row.completedQuantityComputed)){
-                return new Error(`val
+                }
+              }else{
+                if((val>row.completedQuantityComputed)){
+                  return new Error(`val
                                   <=
                                   ${row.completedQuantityComputed}`)
+                }
+              }
+            }else {//鏈�鍚庝竴閬撳伐搴�
+              if (val<row.completedQuantityComputed){
+                         //搴撳瓨鏁伴噺銆佸凡鍏ュ簱鏁伴噺
+                if (val>(row.inventory_quantity-row.received_quantity)){
+                  return new Error(`val
+                                  <=
+                                  ${row.inventory_quantity-row.received_quantity}`)
+                }else {
+                  if (val < (row.inventory_quantity-row.received_quantity)){
+                        //瀹屽伐鎬绘暟銆佹湰娆″畬宸ユ暟銆佸凡鍏ュ簱鏁伴噺
+                    if (completedSum-row.completedQuantityComputed <row.received_quantity){
+                      return new Error(`${t('reportingWorks.pleaseNumber15')}`)
+                    }
+                  }
+                }
               }
             }
-
-
 
           }
         }
@@ -1523,7 +1546,8 @@
       orderId: titleUploadData.value.orderId
     },
     processId:processIdStr,
-    orderNumber:item.order_number
+    orderNumber:item.order_number,
+    inventoryQuantity:item.completedQuantity
   }));
   let flowData = ref({
     decValue:company.decValue,
diff --git a/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue b/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
index 884570f..32215fe 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
@@ -119,38 +119,28 @@
   columns:[
     {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",},
     {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left",},
-
-    {field:'createOrder',title: t('searchOrder.createOrder'), width: 40, slots: { default: 'state' }},
-    {field:'processReview',title: t('order.technology'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'orderReview',title: t('basicData.review'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'productionOrder',title: t('searchOrder.production'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'processingCard',title: t('searchOrder.process'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'warehousing',title: t('searchOrder.storage'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'delivery',title: t('searchOrder.delivery'), width: 40,filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-
-
     {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'goodsQuantity',width:120,  title: t('searchOrder.inventoryNum'), sortable: true},
+   // {field: 'goodsQuantity',width:120,  title: t('searchOrder.inventoryNum'), sortable: true},
     {field: 'area',width:120,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'bomPrice',width:120,  title: 'BOM鎴愭湰',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'money',width:120,  title: t('order.money'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'createTime',width:120,filters:[{ data: '' }],slots: { filter: 'num1_filter' },   title: t('basicData.reportData'), sortable: true},
-    {field: 'updateTime',width:120,   title: t('productStock.approvedDate'), sortable: true},
     {field: 'packType',width:120,  title: t('order.packType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'orderType',width:120,  title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'salesman',width:120,  title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'creator',width:120,  title: t('product.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'verifier',width:120,  title: t('basicData.review'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    //{field: 'verifier',width:120,  title: t('basicData.review'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'perimeter',width:120,  title: t('searchOrder.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'deliveryDate',width:120,  title: t('order.deliveryDate'), sortable: true},
     {field: 'customerBatch',width:120,  title: t('order.customerBatch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
 
     //{field: '14',width:120,  title: '澶囨敞',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'deliveryAddress',width:120,  title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    //{field: 'deliveryAddress',width:120,  title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'processingNote',width:120,  title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
 
   ],
@@ -180,10 +170,10 @@
         if (columnIndex === 0) {
           return t('basicData.total')
         }
-        const List = ["quantity",'goodsQuantity','area','perimeter','money']
+        const List = ["quantity",'goodsQuantity','area','perimeter','money','bomPrice']
         if (List.includes(column.field)) {
-          //return footSum(data, column.field)
-          return total.value[column.field]
+          return footSum(data, column.field)
+          //return total.value[column.field]
         }
         return ''
       })
@@ -383,6 +373,9 @@
       /*total.dataTotal = res.data.total.dataTotal*1
       total.pageTotal= res.data.total.pageTotal*/
       orderInfo.selectDate = res.data.selectDate
+      res.data.data.forEach((item)=>{
+        item.bomPrice=(item.money/1.3).toFixed(2)
+      })
       orderList.value = deepClone(res.data.data)
       xGrid.value.loadData(orderList.value)
     }else{
@@ -598,7 +591,7 @@
                      link
                      type="primary"
                      size="small">
-            鐢熸垚BOM
+            BOM鏌ヨ
           </el-button>
 
         </template>
@@ -693,6 +686,7 @@
           <el-col :span="8">鍏朵粬锛�</el-col>
           <el-col :span="8">5</el-col>
         </el-row>
+        <template #footer>鍚堣xxx鍏�</template>
       </el-card>
 
 
@@ -725,7 +719,7 @@
           <el-col :span="8">5</el-col>
         </el-row>
 
-<!--          <template #footer>鍚堣xx鍏�</template>-->
+          <template #footer>鍚堣xxx鍏�</template>
       </el-card>
 
       <el-card style="max-width: 480px;margin-left: 45px;margin-top: 20px">
@@ -753,8 +747,16 @@
           <el-col :span="8">853.11銕�</el-col>
         </el-row>
 
-        <!--          <template #footer>鍚堣xx鍏�</template>-->
+                  <template #footer>鍚堣xxx鍏�</template>
       </el-card>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary">杞噰璐崟</el-button>
+          <el-button type="primary">
+            棰嗘枡
+          </el-button>
+        </div>
+      </template>
     </el-dialog>
 
 
diff --git a/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue b/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
index 27b8def..40662a0 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -320,13 +320,14 @@
     {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
     {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"},
     {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'orderNumber',width:120,  title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'finishedGoodsInventory.boxNo',width:120,  title: t('绠卞彿'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'productName',width:120,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'width',width:120,  title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'height',width:120,  title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'deliveryDetail.quantity',width:120,  title: t('delivery.deliveryQuantity'),editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
     {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
-    {field: 'order.quantity',width:120,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'order.quantity',width:160,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     //{field: 'buildingNumber',width:120,  title: '妤煎彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'productId',width:120,   title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
diff --git a/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue b/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
index 93c0818..83e5bbe 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
@@ -21,6 +21,7 @@
 import PrintSheet3 from "@/components/sd/order/PrintSheet3.vue"
 import PrintSheet4 from "@/components/sd/order/PrintSheet4.vue"
 import PrintSheet5 from "@/components/sd/order/PrintSheet5.vue"
+import OrderProcessCollect from "@/components/sd/order/OrderProcessCollect.vue";
   const { t } = useI18n()
   const orderInfo = useOrderInfoStore()
   const userStore = useUserInfoStore()
@@ -753,6 +754,13 @@
               :row="rowClickIndex===null?{}:rowClickIndex"
           />
         </el-tab-pane>
+        <el-tab-pane :label="$t('order.processCardCollect')" name="4">
+          <order-process-collect
+              v-if="tabsValue==='4'"
+              :orderId="rowClickIndex===null?null:rowClickIndex.orderId"
+              :row="rowClickIndex===null?{}:rowClickIndex"
+          />
+        </el-tab-pane>
       </el-tabs>
 
     </div>
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java b/north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
index d53c7ab..787890b 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
@@ -209,4 +209,12 @@
     public Result getSelectPrints( @RequestBody Map<String, Object> object){
         return Result.seccess(finishedGoodsInventoryService.getSelectPrintSvs(object));
     }
+
+    @ApiOperation("鎴愬搧瑁呯璋冩灦")
+    @SaCheckPermission("createProductStock.add")
+    @PostMapping("/changeRack/{user}")
+    public Result changeRack( @RequestBody FinishedGoodsInventory  finishedGoodsInventory,@PathVariable String user){
+        return Result.seccess(finishedGoodsInventoryService.changeRack(finishedGoodsInventory,user));
+
+    }
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedGoodsInventory.java b/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedGoodsInventory.java
index bd66074..8981f66 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedGoodsInventory.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedGoodsInventory.java
@@ -1,6 +1,7 @@
 package com.example.erp.entity.mm;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.example.erp.entity.sd.*;
 import lombok.Data;
@@ -27,8 +28,11 @@
     private LocalDate endTime;
     private String processId;
     private String boxNo;
+    @TableField(select = false,exist = false)
     private Order order;
+    @TableField(select = false,exist = false)
     private OrderDetail orderDetail;
+    @TableField(select = false,exist = false)
     private Double weight;
 
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedGoodsInventoryMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedGoodsInventoryMapper.java
index 2010c30..110ff08 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedGoodsInventoryMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedGoodsInventoryMapper.java
@@ -1,20 +1,20 @@
 package com.example.erp.mapper.mm;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.erp.dto.otherSystem.GlassDetailList;
 import com.example.erp.entity.mm.FinishedGoodsInventory;
 import com.example.erp.entity.mm.FinishedOperateLog;
 import com.example.erp.entity.pp.FlowCard;
 import com.example.erp.entity.sd.*;
-import com.example.erp.entity.userInfo.User;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.data.repository.CrudRepository;
 
-import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
 @Mapper
-public interface FinishedGoodsInventoryMapper extends CrudRepository<FinishedGoodsInventory,Long> {
+public interface FinishedGoodsInventoryMapper  extends BaseMapper<FinishedGoodsInventory>  {
 
 
 
@@ -34,7 +34,7 @@
     Map<String,Integer> getSelectWarehousingPageTotal(Integer offset, Integer pageSize,FlowCard flowCard);
 
     Integer findOrderNumberdcount(@Param("orderId") String orderId,
-                                  @Param("orderNumber") Integer orderNumber);
+                                  @Param("orderNumber") Integer orderNumber, String boxNo);
 
     FinishedGoodsInventory findOrderNumberd(@Param("orderId") String orderId,
                                   @Param("orderNumber") Integer orderNumber);
@@ -88,7 +88,7 @@
     Boolean updateDeliveryDeliveryState(String deliveryId,Integer state);
 
     Boolean updateDeliveryDetailState(@Param("orderId") String orderId,
-                                      @Param("orderNumber") Integer orderNumber,@Param("deliveryId") String deliveryId,Integer state);
+                                      @Param("orderNumber") Integer orderNumber, @Param("deliveryId") String deliveryId, Integer state, String remarks);
 
     Boolean insertFinishedGoodsInventory(@Param("flowCard") FlowCard flowCard,
                                          @Param("storageRegion") String storageRegion,
@@ -117,18 +117,22 @@
                                                @Param("quantity") Integer quantity);
 
     Boolean updateInventoryquantityOut(@Param("orderId") String orderId,
-                                               @Param("orderNumber") Integer orderNumber,
-                                               @Param("quantity") Integer quantity);
+                                       @Param("orderNumber") Integer orderNumber,
+                                       @Param("quantity") Integer quantity,
+                                       @Param("boxNo") String boxNo);
     Boolean updateInventoryquantityInt(@Param("orderId") String orderId,
-                                               @Param("orderNumber") Integer orderNumber,
-                                               @Param("quantity") Integer quantity);
+                                       @Param("orderNumber") Integer orderNumber,
+                                       @Param("quantity") Integer quantity);
+    Boolean updateInventoryquantityIntBybox(@Param("orderId") String orderId,
+                                       @Param("orderNumber") Integer orderNumber,
+                                       @Param("quantity") Integer quantity, String boxNo);
 
     Boolean updateInventoryInventoryOut(@Param("orderId") String orderId,
-                                               @Param("orderNumber") Integer orderNumber,
-                                               @Param("quantity") Integer quantity);
+                                        @Param("orderNumber") Integer orderNumber,
+                                        @Param("quantity") Integer quantity, String boxNo);
     Boolean updateInventoryInventoryInt(@Param("orderId") String orderId,
-                                               @Param("orderNumber") Integer orderNumber,
-                                               @Param("quantity") Integer quantity);
+                                        @Param("orderNumber") Integer orderNumber,
+                                        @Param("quantity") Integer quantity, String remarks);
 
     List<OrderDetail> getSelectOrderDetail(String orderId);
 
@@ -139,7 +143,7 @@
     FlowCard findFlowCard(FlowCard flowCard);
 
     DeliveryDetail findDeliverydetail(@Param("orderId") String orderId,
-                                      @Param("orderNumber") Integer orderNumber,@Param("deliveryId") String deliveryId);
+                                      @Param("orderNumber") Integer orderNumber, @Param("deliveryId") String deliveryId, String boxNo);
 
 
     Integer findOrderNumberdContainercount(String orderId, Integer orderNumber, String container);
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
index 6bd9690..5cbc12e 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
@@ -1,7 +1,7 @@
 package com.example.erp.mapper.mm;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.example.erp.dto.mm.FinishedOperateLogDTO;
-import com.example.erp.entity.mm.FinishedGoodsInventory;
 import com.example.erp.entity.mm.FinishedOperateLog;
 import com.example.erp.entity.pp.FlowCard;
 import com.example.erp.entity.sd.OrderDetail;
@@ -14,14 +14,14 @@
 import java.util.Map;
 
 @Mapper
-public interface FinishedOperateLogMapper extends CrudRepository<FinishedOperateLog,Long> {
+public interface FinishedOperateLogMapper extends BaseMapper<FinishedOperateLog> {
     FinishedOperateLog getselectFinishedOperateLog();
 
     Boolean insertIntFinishedOperateLog(@Param("flowCard") FlowCard flowCard ,@Param("userName") String userName,
                                         @Param("oddNumber") String oddNumber,@Param("container") String container,
                                         @Param("deliveryDetailMoney") Double deliveryDetailMoney,@Param("deliveryDetailArea") Double deliveryDetailArea);
 
-    Boolean insertOutFinishedOperateLog(@Param("orderDetail") OrderDetail orderDetail,@Param("userName") String userName,@Param("oddNumber") String oddNumber);
+    Boolean insertOutFinishedOperateLog(@Param("orderDetail") OrderDetail orderDetail, @Param("userName") String userName, @Param("oddNumber") String oddNumber, String boxNo);
 
     Boolean insertFinishedOperateLogAllocate(@Param("orderDetail") OrderDetail orderDetail,@Param("userName") String userName,@Param("oddNumber") String oddNumber);
 
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/DamageDetailsMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/DamageDetailsMapper.java
index bbab6fd..5eb0fb3 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/DamageDetailsMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/DamageDetailsMapper.java
@@ -1,10 +1,15 @@
 package com.example.erp.mapper.pp;
 
+import com.baomidou.mybatisplus.core.assist.ISqlRunner;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.example.erp.entity.pp.DamageDetails;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface DamageDetailsMapper extends BaseMapper<DamageDetails> {
-    Integer getBehindDamageSum(String processId, String orderNumber, String technologyNumber, String behindProcess);
+    Integer getBehindDamageSum(String processId, String orderNumber, String technologyNumber, String behindProcess,Integer needOrderNumber);
+
+    List<DamageDetails> getNotReview(String processId, String orderNumber,String technologyNumber);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java
index a99f2ca..32aba77 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java
@@ -21,6 +21,7 @@
     List<Map<String,String>> filterOrderProcess(String orderId);
 
     List<Map<String,Object>> getGlassLRow(String orderId);
+    List<Map<String,Object>> getProcessGlassLRow(String orderId);
 
     List<Map<String, String>> filterLastProcess(String orderId, String orderNumber, String technologyNumber,String id);
 
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java b/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
index c57f5f4..32149f0 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
@@ -3,7 +3,9 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.example.erp.dto.mm.FinishedOperateLogDTO;
 import com.example.erp.entity.mm.FinishedGoodsInventory;
 import com.example.erp.entity.mm.FinishedOperateLog;
@@ -28,12 +30,9 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.sql.SQLException;
-import java.sql.Wrapper;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 @DS("mm")
@@ -424,7 +423,7 @@
                     //娣诲姞棰嗗嚭璁板綍
                     finishedOperateLogMapper.insertFinishedOperateLogTakeOut(orderDetail,userName,oddNumber,operateType,remarks);
                     //淇敼搴撳瓨鏁伴噺
-                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
+                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()), orderDetail.getDeliveryDetail().getBoxNo());
                     //淇敼璁㈠崟鏄庣粏琛ㄦ暟閲�
                     finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
                     if (Objects.equals(oldordersum, oldordernumbersum)){
@@ -507,7 +506,7 @@
                     //娣诲姞棰嗗嚭璁板綍
                     finishedOperateLogMapper.insertFinishedOperateLogRework(orderDetail,userName,oddNumber,operateType,remarks);
                     //淇敼搴撳瓨鏁伴噺
-                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
+                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()), orderDetail.getDeliveryDetail().getBoxNo());
                     //淇敼璁㈠崟鏄庣粏琛ㄦ暟閲�
                     finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
                     if (Objects.equals(oldordersum, oldordernumbersum)){
@@ -557,13 +556,13 @@
                         //瀹℃牳淇敼棰嗗嚭璁板綍
                         finishedOperateLogMapper.updateToExamine(finishedOperateLog,userName,"宸插鏍�");
                         //瀹℃牳淇敼搴撳瓨鏁伴噺
-                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()));
+                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()),finishedOperateLog.getRemarks());
                         log.setFunction("updateFinishedGoodsInventoryToExamine瀹℃牳");
                     } else if (Objects.equals(type, "鍙嶅")) {
                         //瀹℃牳淇敼棰嗗嚭璁板綍
                         finishedOperateLogMapper.updateToExamine(finishedOperateLog,userName,"鏈鏍�");
                         //瀹℃牳淇敼搴撳瓨鏁伴噺
-                        finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()));
+                        finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()), finishedOperateLog.getRemarks());
                         log.setFunction("updateFinishedGoodsInventoryToExamine鍙嶅");
                     }
 
@@ -800,6 +799,8 @@
             alias="LC";
         }else if(Objects.equals(type, "杩斿伐")){
             alias="FG";
+        }else if(Objects.equals(type, "璋冩灦")){
+            alias="TJ";
         }
         //鏌ヨ褰撳ぉ鐨勬渶澶ф暟閲�
         Integer maximum=finishedOperateLogMapper.getmaximum(type);
@@ -861,7 +862,10 @@
                 }
 
                 Map<String, Object> itemmap = new HashMap<>();
-                itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimts(finishedOperateLog.getOrder().getCustomerName(),finishedOperateLog.getOrder().getProject(),finishedOperateLog.getRemarks()));
+                itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimts(
+                        finishedOperateLog.getOrder().getCustomerName(),
+                        finishedOperateLog.getOrder().getProject(),
+                        finishedOperateLog.getRemarks()));
 
                 List<Map<String, Object>> detailList = finishedOperateLogMapper.getDetailList2(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks());
 
@@ -904,21 +908,33 @@
             String oddNumber= orderNumberSetting("鍑哄簱");
             OrderDetail orderDetailNew= finishedGoodsInventoryMapper.findOrderDetailNumberd(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber());
             //娣诲姞鍑哄叆搴撹褰�
-            finishedOperateLogMapper.insertOutFinishedOperateLog(orderDetail,userName,oddNumber);
-            Integer finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber());
+            finishedOperateLogMapper.insertOutFinishedOperateLog(orderDetail,userName,oddNumber,orderDetail.getDeliveryDetail().getBoxNo());
 
+            //鍒ゆ柇鍙戣揣鍗曠殑搴撳瓨鏄惁瀛樺湪
+            Integer finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getBoxNo());
 
+            //鑾峰彇璁㈠崟鎬绘暟閲�
             Integer ordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getDeliveryDetail().getOrderId());
+            //鑾峰彇搴撳瓨鎬绘暟閲�
             Integer orderNumberdsum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getDeliveryDetail().getOrderId());
+            //鑾峰彇鍙戣揣鎬绘暟閲�
             Integer orderNumberdDeliverysum = finishedGoodsInventoryMapper.findOrderDeliveryQuantitySum(orderDetail.getDeliveryDetail().getOrderId());
 
+            //鑾峰彇姝ゅ彂璐у崟 鍙戣揣鎬绘暟閲�
             Integer deliverysum = finishedGoodsInventoryMapper.findDeliveryQuantity(orderDetail.getDeliveryDetail().getDeliveryId());
+            //鑾峰彇宸茬粡鍑哄簱鐨勬暟閲�
             Integer deliverydetailsum = finishedGoodsInventoryMapper.findDeliverydetailsum(orderDetail.getDeliveryDetail().getDeliveryId(),0);
             if(deliverydetailsum==null){
                 deliverydetailsum=0;
             }
 
-            DeliveryDetail deliveryDetail=finishedGoodsInventoryMapper.findDeliverydetail(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getDeliveryId());
+            DeliveryDetail deliveryDetail=finishedGoodsInventoryMapper.
+                    findDeliverydetail(orderDetail.getDeliveryDetail().getOrderId(),
+                            orderDetail.getDeliveryDetail().getOrderNumber(),
+                            orderDetail.getDeliveryDetail().getDeliveryId(),
+                            orderDetail.getDeliveryDetail().getBoxNo()
+
+                    );
                     /*System.out.println("璁㈠崟鎬绘暟:" + ordersum + "璁㈠崟搴撳瓨鏁帮細" + orderNumberdsum + "鍑嗗鍑哄簱鏁伴噺" +
                             orderDetail.getWarehouseNum()+ "鍙戣揣鏁伴噺" + orderDetail.getDeliveryDetail().getQuantity()+ "鍙戣揣鎬绘暟" +
                             deliverysum+ "宸插彂鏁伴噺" + deliverydetailsum);*/
@@ -928,9 +944,9 @@
                 if(deliveryDetail==null){
                     if(orderDetailNew.getWarehouseNum()>=orderDetail.getDeliveryDetail().getQuantity()){
                         //淇敼搴撳瓨琛ㄥ簱瀛樻暟閲�
-                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getQuantity());
+                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getQuantity(),orderDetail.getDeliveryDetail().getBoxNo());
                         //淇敼鍙戣揣鏄庣粏琛ㄧ姸鎬�
-                        finishedGoodsInventoryMapper.updateDeliveryDetailState(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getDeliveryId(),0);
+                        finishedGoodsInventoryMapper.updateDeliveryDetailState(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getDeliveryId(),0, orderDetail.getDeliveryDetail().getBoxNo());
                         //淇敼鍙戣揣琛ㄧ姸鎬�
                         finishedGoodsInventoryMapper.updateDeliveryDeliveryState(orderDetail.getDeliveryDetail().getDeliveryId(),1);
                         //淇敼璁㈠崟鏄庣粏琛ㄥ彂璐ф暟閲�
@@ -974,7 +990,19 @@
 
             if(Objects.equals(finishedOperateLog.getOperateType(), "鍏ュ簱")){
                 Delivery delivery = finishedGoodsInventoryMapper.findOrderDelivery(finishedOperateLog.getOrderId());
-                if(delivery==null){
+                FinishedGoodsInventory existFinishedGoodsInventory = finishedGoodsInventoryMapper.
+                        selectOne(new LambdaQueryWrapper<FinishedGoodsInventory>()
+                                .eq(FinishedGoodsInventory::getOrderId, finishedOperateLog.getOrderId())
+                                .eq(FinishedGoodsInventory::getOrderNumber, finishedOperateLog.getOperationNumber())
+                                .eq(FinishedGoodsInventory::getBoxNo, finishedOperateLog.getRemarks())
+                        );
+                if(delivery!=null){
+                    return "false1";
+                }
+                if(existFinishedGoodsInventory.getQuantityAvailable()<finishedOperateLog.getQuantity()){
+                    return "false2";
+                }
+
                     //淇敼璁板綍琛�
                     finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"宸蹭綔搴�");
                     //淇敼搴撳瓨琛ㄥ叆搴撴暟閲�
@@ -996,9 +1024,7 @@
                         finishedGoodsInventoryMapper.updateOrderWarehousingState(finishedOperateLog.getOrderId(),0);
                     }
                     log.setFunction("cancelFinishedGoodsInventoryStorage鍏ュ簱");
-                }else{
-                    return "false1";
-                }
+
 
 
 
@@ -1006,9 +1032,19 @@
                 //淇敼璁板綍琛�
                 finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"宸蹭綔搴�");
                 //淇敼搴撳瓨琛ㄥ簱瀛樻暟閲�
-                finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getQuantity());
+                finishedGoodsInventoryMapper.updateInventoryInventoryInt(
+                        finishedOperateLog.getOrderId(),
+                        finishedOperateLog.getOperationNumber(),
+                        finishedOperateLog.getQuantity(),
+                        finishedOperateLog.getRemarks()
+                );
                 //淇敼鍙戣揣鏄庣粏琛ㄧ姸鎬�
-                finishedGoodsInventoryMapper.updateDeliveryDetailState(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getOperationOrderNumber(),1);
+                finishedGoodsInventoryMapper.updateDeliveryDetailState(
+                        finishedOperateLog.getOrderId(),
+                        finishedOperateLog.getOperationNumber(),
+                        finishedOperateLog.getOperationOrderNumber(),
+                        1,
+                        finishedOperateLog.getRemarks());
                 //淇敼鍙戣揣琛ㄧ姸鎬�
                 finishedGoodsInventoryMapper.updateDeliveryDeliveryState(finishedOperateLog.getOperationOrderNumber(),1);
                 //淇敼璁㈠崟鏄庣粏琛ㄥ簱鍐呮暟閲�
@@ -1032,4 +1068,103 @@
         }
         return "true";
     }
+
+    public Map<String,Object> changeRack(FinishedGoodsInventory finishedGoodsInventory, String user) {
+        Long id = finishedGoodsInventory.getId();
+        Map<String,Object> map = new HashMap<>();
+        FinishedGoodsInventory oldFinishedGoodsInventory = finishedGoodsInventoryMapper.selectById(finishedGoodsInventory.getId());
+
+        //鏌ヨ姝ゆ搴忓彿绠卞彿鐨勫簱瀛樻槸鍚﹀瓨鍦�
+        FinishedGoodsInventory existFinishedGoodsInventory = finishedGoodsInventoryMapper
+                .selectOne(new LambdaQueryWrapper<FinishedGoodsInventory>()
+                        .eq(FinishedGoodsInventory::getOrderId, finishedGoodsInventory.getOrderId())
+                        .eq(FinishedGoodsInventory::getOrderNumber, finishedGoodsInventory.getOrderNumber())
+                        .eq(FinishedGoodsInventory::getBoxNo, finishedGoodsInventory.getBoxNo())
+                        .last("limit 1")
+                );
+        String operationOrderNumber = orderNumberSetting("璋冩灦");
+        FinishedOperateLog finishedOperateLog = new FinishedOperateLog();
+        finishedOperateLog.setOperationOrderNumber(operationOrderNumber);
+        finishedOperateLog.setOrderId(oldFinishedGoodsInventory.getOrderId());
+        finishedOperateLog.setOperationNumber(oldFinishedGoodsInventory.getOrderNumber());
+        finishedOperateLog.setProcessId(oldFinishedGoodsInventory.getProcessId());
+        finishedOperateLog.setOperateType("璋冩灦");
+        finishedOperateLog.setOperator(user);
+        //褰撴垚鍝佺鍙蜂笉瀛樺湪锛屽垯鏂板
+        if(existFinishedGoodsInventory==null){
+            //褰撹浆绉绘暟閲忓ぇ浜庡疄闄呭簱瀛樼鍙锋椂锛屽垯涓嶈兘杞Щ
+            if(oldFinishedGoodsInventory.getQuantityAvailable()<finishedGoodsInventory.getQuantityAvailable()){
+                map.put("code",0);
+                return map;
+            }
+            //鍘熷簱瀛� 鏁伴噺闈㈢Н鍑忓皯
+            oldFinishedGoodsInventory.setInventory(oldFinishedGoodsInventory.getInventory()-finishedGoodsInventory.getQuantityAvailable());
+            oldFinishedGoodsInventory.setQuantityAvailable(oldFinishedGoodsInventory.getQuantityAvailable()-finishedGoodsInventory.getQuantityAvailable());
+            oldFinishedGoodsInventory.setArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getActualSignalArea());
+
+            //鏂板簱瀛樻暟鎹鍔�
+            finishedGoodsInventory.setId(null);
+            finishedGoodsInventory.setInventory(finishedGoodsInventory.getQuantityAvailable());
+            finishedGoodsInventory.setArea(finishedGoodsInventory.getQuantityAvailable()*finishedGoodsInventory.getActualSignalArea());
+
+            finishedGoodsInventoryMapper.
+                    update(oldFinishedGoodsInventory,
+                            new LambdaUpdateWrapper<FinishedGoodsInventory>()
+                                    .eq(FinishedGoodsInventory::getId,id)
+                    ) ;
+            finishedGoodsInventoryMapper.insert(finishedGoodsInventory);
+
+
+            //寰�鎿嶄綔鏃ュ織琛ㄦ坊鍔犳暟鎹�
+            finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable());
+            finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+finishedGoodsInventory.getBoxNo());
+            finishedOperateLogMapper.insert(finishedOperateLog);
+
+            map.put("code",1);
+            return map;//搴撳瓨杞Щ鎴愬姛锛屾柊澧炵鍙�
+
+        }else{
+            //褰搃d涓嶅彉鏃讹紝淇敼澶囨敞
+            if(Objects.equals(id, existFinishedGoodsInventory.getId())){
+                finishedGoodsInventoryMapper.
+                        update(null,new LambdaUpdateWrapper<FinishedGoodsInventory>()
+                                .eq(FinishedGoodsInventory::getId,id)
+                                .set(FinishedGoodsInventory::getRemark,finishedGoodsInventory.getRemark()));
+                map.put("code",2);
+                return map;//搴撳瓨澶囨敞淇敼鎴愬姛
+            }else{
+                //鍘熷簱瀛� 鏁伴噺闈㈢Н鍑忓皯
+                oldFinishedGoodsInventory.setInventory(oldFinishedGoodsInventory.getInventory()-finishedGoodsInventory.getQuantityAvailable());
+                oldFinishedGoodsInventory.setQuantityAvailable(oldFinishedGoodsInventory.getQuantityAvailable()-finishedGoodsInventory.getQuantityAvailable());
+                oldFinishedGoodsInventory.setArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getActualSignalArea());
+
+                existFinishedGoodsInventory.setInventory(existFinishedGoodsInventory.getInventory()+finishedGoodsInventory.getQuantityAvailable());
+                existFinishedGoodsInventory.setQuantityAvailable(existFinishedGoodsInventory.getQuantityAvailable()+finishedGoodsInventory.getQuantityAvailable());
+                existFinishedGoodsInventory.setArea(existFinishedGoodsInventory.getInventory()*existFinishedGoodsInventory.getActualSignalArea());
+
+                finishedGoodsInventoryMapper.
+                        update(oldFinishedGoodsInventory,
+                                new LambdaUpdateWrapper<FinishedGoodsInventory>()
+                                        .eq(FinishedGoodsInventory::getId,id)
+                        ) ;
+                finishedGoodsInventoryMapper.
+                        update(existFinishedGoodsInventory,
+                                new LambdaUpdateWrapper<FinishedGoodsInventory>()
+                                        .eq(FinishedGoodsInventory::getId,existFinishedGoodsInventory.getId())
+                        ) ;
+
+                //寰�鎿嶄綔鏃ュ織琛ㄦ坊鍔犳暟鎹�
+                finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable());
+                finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+existFinishedGoodsInventory.getBoxNo());
+                finishedOperateLogMapper.insert(finishedOperateLog);
+
+                map.put("code",3);
+                List<String> list = new ArrayList<>();
+                list.add(oldFinishedGoodsInventory.getBoxNo());
+                list.add(existFinishedGoodsInventory.getBoxNo());
+                map.put("msg",list);
+                return map;//搴撳瓨杞Щ鎴愬姛锛屼慨鏀圭鍙�
+            }
+        }
+    }
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
index 7e304ce..4c04559 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -193,14 +193,11 @@
                     });
            //鍒ゆ柇鍚庡伐搴忔娴佺▼鍗″彿鏄惁鏈夋鐮�
             List<DamageDetails> hasBreak = damageDetailsMapper
-                    .selectList(new LambdaQueryWrapper<DamageDetails>()
-                            .eq(DamageDetails::getProcessId, dataList.get(i).get("processId"))
-                            .eq(DamageDetails::getOrderNumber, dataList.get(i).get("order_number"))
-                            .eq(DamageDetails::getTechnologyNumber, dataList.get(i).get("technology_number"))
-                            .eq(DamageDetails::getPatchStatus, 0)
-                            .gt(DamageDetails::getBreakageQuantity,0)
-
+                    .getNotReview(dataList.get(i).get("process_id"),
+                            String.valueOf(dataList.get(i).get("order_number")),
+                            String.valueOf(dataList.get(i).get("technology_number"))
                     );
+
             if(!hasBreak.isEmpty()){
                 int finalI = i;
                 data.forEach((thisProcess, index)->{
@@ -216,7 +213,7 @@
                                 dataList.get(finalI).get("processId"),
                                 String.valueOf(dataList.get(finalI).get("order_number")),
                                 String.valueOf(dataList.get(finalI).get("technology_number")),
-                                behindProcess
+                                behindProcess,1
                         );
                         if(behindDamageSum>0){
                             data.put(thisProcess, String.valueOf(Integer.parseInt(data.get(thisProcess) )- behindDamageSum));
@@ -826,9 +823,138 @@
         List<Map<String, String>> dataList = reportMapper.processCardProgressCollectMp(orderId);
         //鑾峰彇琛ㄥご宸ュ簭绛涢�夋暟鎹�
         List<Map<String, String>> uniqueList = orderProcessDetailMapper.filterOrderProcess(orderId);
-
         map.put("title", uniqueList);
-        return  null;
+        Map<String,Map<String,Object>> clos = new HashMap<>();
+        for (int i=0;i<uniqueList.size();i++){
+            //鏍规嵁娴佺▼鏌ヨ鍩虹鏁版嵁
+            BasicData basicData =  basicDataMapper.selectOne(
+                    new QueryWrapper<BasicData>()
+                            .eq("basic_category","process")
+                            .eq("basic_name",uniqueList.get(i).get("process"))
+                            .last("limit 1")
+            );
+            Map<String,Object> getCol = new HashMap<>();
+            //鍒ゆ柇澶硅兌鍜屽す鑳跺悗宸ュ簭
+            //Objects.equals(basicData.getNickname(), "stepA") || Objects.equals(basicData.getNickname(), "stepC")
+            if(Objects.equals(basicData.getNickname(), "stepA") || Objects.equals(basicData.getNickname(), "stepC")){
+                getCol.put("col", 11+i);
+                getCol.put("step","stepA");
+                clos.put(uniqueList.get(i).get("process"), getCol);
+            }
+            //鍒ゆ柇涓┖鍜屼腑绌哄悗宸ュ簭
+            //Objects.equals(basicData.getNickname(), "stepB") || Objects.equals(basicData.getNickname(), "stepD")
+            if(Objects.equals(basicData.getNickname(), "stepB") || Objects.equals(basicData.getNickname(), "stepD")){
+                columns.add(11+i);
+                getCol.put("col", 11+i);
+                getCol.put("step","stepB");
+                clos.put(uniqueList.get(i).get("process"), getCol);
+            }
+        }
+        List<Map<String, Object>> getRowCount = orderProcessDetailMapper.getGlassLRow(orderId);
+        List<Map<String, Integer>> rowCount = new ArrayList<>();
+        columns.forEach(col -> {
+            getRowCount.forEach(row -> {
+                Map<String, Integer> getRow = new HashMap<>();
+                // { row: 0, col: 1, rowspan: 3, colspan: 0},
+                getRow.put("row", ((Number) row.get("RowNum")).intValue());
+                getRow.put("col", col);
+                getRow.put("rowspan", ((Number) row.get("rowCount")).intValue());
+                getRow.put("colspan", 0);
+                rowCount.add(getRow);
+            });
+        });
+
+        //寰幆缁撴灉
+        for (int i=0;i<dataList.size();i++ ) {
+            dataList.get(i).put("reportWorkQuantityShow",dataList.get(i).get("reportWorkQuantity"));
+            Map<String, String> data = JSON.parseObject(dataList.get(i).get("reportWorkQuantity"),
+                    new TypeReference<Map<String, String>>() {
+                    });
+            Map<String, String> dataShow = JSON.parseObject(dataList.get(i).get("reportWorkQuantityShow"),
+                    new TypeReference<Map<String, String>>() {
+                    });
+            //鍒ゆ柇鍚庡伐搴忔娴佺▼鍗″彿鏄惁鏈夋鐮�
+            List<DamageDetails> hasBreak = damageDetailsMapper
+                    .getNotReview(dataList.get(i).get("process_id"),
+                            null,
+                            String.valueOf(dataList.get(i).get("technology_number"))
+                    );
+
+            if(!hasBreak.isEmpty()){
+                int finalI = i;
+                data.forEach((thisProcess, index)->{
+                    String behindProcess = orderProcessDetailMapper.getBehindProcess(
+                            dataList.get(finalI).get("process_id"),
+                            String.valueOf(dataList.get(finalI).get("order_number")),
+                            String.valueOf(dataList.get(finalI).get("technology_number")),
+                            thisProcess,
+                            orderId
+                    );
+
+                    if(behindProcess!=null &&!behindProcess.isEmpty()){
+                        Integer behindDamageSum = damageDetailsMapper.getBehindDamageSum(
+                                dataList.get(finalI).get("process_id"),
+                                String.valueOf(dataList.get(finalI).get("order_number")),
+                                String.valueOf(dataList.get(finalI).get("technology_number")),
+                                behindProcess,
+                                null
+                        );
+                        if(behindDamageSum>0){
+                            data.put(thisProcess, String.valueOf(Integer.parseInt(data.get(thisProcess) )- behindDamageSum));
+                            dataShow.put(thisProcess, String.valueOf(Integer.parseInt(dataShow.get(thisProcess) )- behindDamageSum));
+                        }
+
+                    }
+                });
+
+            }
+
+            if(!clos.isEmpty()){
+                Integer max = orderGlassDetailMapper
+                        .getMaxTechnologyNumberByGroup(dataList.get(i).get("order_id"),
+                                String.valueOf(dataList.get(i).get("order_number")),
+                                String.valueOf(dataList.get(i).get("group"))
+                        );
+                Integer min = orderGlassDetailMapper
+                        .getMinTechnologyNumberByGroup(dataList.get(i).get("order_id"),
+                                String.valueOf(dataList.get(i).get("order_number")),
+                                String.valueOf(dataList.get(i).get("group"))
+                        );
+
+                for (String key : clos.keySet()) {
+                    if(data.get(key) != null){
+                        //鍒ゆ柇鏄す鑳跺伐搴�
+                        if( clos.get(key).get("step")=="stepA"){
+                            if(min == Integer.parseInt(String.valueOf(dataList.get(i).get("technology_number")))  ){
+                                Map<String, Integer> getRow = new HashMap<>();
+                                getRow.put("row", i );
+                                getRow.put("col", (Integer) clos.get(key).get("col"));
+                                getRow.put("rowspan", max-min+1);
+                                getRow.put("colspan", 0);
+                                rowCount.add(getRow);
+                            }else{
+                                data.put(key,"0");
+                            }
+                        }else{//涓┖锛屼腑绌哄悗宸ュ簭
+                            //灏忕墖搴忓彿涓嶆槸1 鐨勬椂鍊欒祴鍊�0
+                            if(Integer.parseInt(String.valueOf(dataList.get(i).get("technology_number")))  !=1){
+                                data.put(key,"0");
+                            }
+                        }
+                    }
+                }
+            }
+            dataList.get(i).put("reportWorkQuantity",JSON.toJSONString(data));
+            dataList.get(i).put("reportWorkQuantityShow",JSON.toJSONString(dataShow));
+
+        }
+
+        map.put("mergeCells", rowCount);
+
+        map.put("data",dataList);
+
+
+        return  map;
     }
 
     public Map<String, Object> processCardProgressReportSv(String orderId, List<Integer> columns) {
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
index 6500b96..6734c72 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -636,18 +636,7 @@
                     log.setFunction("deleteWork鎶ュ伐鍒犻櫎");
                     log.setOperatorId(userId);
                     log.setOperator(userName);
-                    if(reportingWork.getReviewedState()==0){
-                        //鏌ヨ褰撳墠鎶ュ伐缂栧彿瀹屽伐娆$牬鏁伴噺鐨勬暟鎹�
-                        List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
-                        for (Map<String, Object> item : workDateList) {
-                            //鏇存柊鎶ュ伐娴佺▼琛ㄦ暟鎹�
-                            reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
-                        }
-                        //鍒犻櫎鎶ュ伐锛屽皢瀹℃牳鐘舵�佹敼涓�-1
-                        reportingWorkMapper.deleteWork(reportingWorkId);
-                        logService.saveLog(log);
-                        return true;
-                    }
+
 
                     //鍒ゆ柇鏄惁鏄叆搴撳伐搴�
                     if (lastProcess.equals(thisProcess)) {//鏄叆搴撳伐搴�
@@ -683,6 +672,19 @@
                         }
 
                     } else {//涓嶆槸鍏ュ簱宸ュ簭
+                        if(reportingWork.getReviewedState()==0){
+                            //鏌ヨ褰撳墠鎶ュ伐缂栧彿瀹屽伐娆$牬鏁伴噺鐨勬暟鎹�
+                            List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
+                            for (Map<String, Object> item : workDateList) {
+                                //鏇存柊鎶ュ伐娴佺▼琛ㄦ暟鎹�
+                                reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
+                            }
+                            //鍒犻櫎鎶ュ伐锛屽皢瀹℃牳鐘舵�佹敼涓�-1
+                            reportingWorkMapper.deleteWork(reportingWorkId);
+                            logService.saveLog(log);
+                            return true;
+                        }
+
                         if (count == 0) {
                             //鏌ヨ褰撳墠鎶ュ伐缂栧彿瀹屽伐娆$牬鏁伴噺鐨勬暟鎹�
                             List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java b/north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
index 70f76b1..74b716a 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
@@ -6,11 +6,9 @@
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.example.erp.dto.mm.FinishedOperateLogDTO;
 import com.example.erp.dto.sd.DeliveryDetailDTO;
 import com.example.erp.dto.sd.DeliveryDetailProductDTO;
 import com.example.erp.entity.mm.FinishedOperateLog;
-import com.example.erp.entity.pp.BasicDataProduce;
 import com.example.erp.entity.sd.*;
 import com.example.erp.entity.userInfo.Log;
 import com.example.erp.entity.userInfo.SysError;
@@ -21,22 +19,13 @@
 import com.example.erp.service.userInfo.LogService;
 import com.example.erp.service.userInfo.SysErrorService;
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 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.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.util.*;
@@ -221,7 +210,7 @@
                 if (!deliveryDetaillist.isEmpty()) {
                     for (DeliveryDetail deliveryDetail : deliveryDetaillist) {
                         //杩樺師搴撳瓨鏁颁互鍙婅鍗曟槑缁嗙殑鍙戣揣鏁�
-                        finishedGoodsInventoryMapper.updateInventoryquantityInt(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
+                        finishedGoodsInventoryMapper.updateInventoryquantityIntBybox(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity(),deliveryDetail.getBoxNo());
                         deliveryDetailMapper.updateIsNotOrderDetailDeliveryNum(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
                     }
                 }
@@ -380,7 +369,7 @@
                             //淇敼璁㈠崟鏄庣粏
                             deliveryDetailMapper.updateOrderDetailDeliveryNum(orderDetail);
                             //淇敼搴撳瓨琛ㄥ嚭搴撴暟閲�
-                            finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getOrderId(), orderDetail.getOrderNumber(), orderDetail.getDeliveryDetail().getQuantity());
+                            finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getOrderId(), orderDetail.getOrderNumber(), orderDetail.getDeliveryDetail().getQuantity(),orderDetail.getFinishedGoodsInventory().getBoxNo());
                         }else{
                             TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
                             return "false2";
@@ -494,7 +483,7 @@
             if (!deliveryDetaillist.isEmpty()) {
                 for (DeliveryDetail deliveryDetail : deliveryDetaillist) {
                     //杩樺師搴撳瓨鏁颁互鍙婅鍗曟槑缁嗙殑鍙戣揣鏁�
-                    finishedGoodsInventoryMapper.updateInventoryquantityInt(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
+                    finishedGoodsInventoryMapper.updateInventoryquantityIntBybox(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity(), deliveryDetail.getBoxNo());
                     deliveryDetailMapper.updateIsNotOrderDetailDeliveryNum(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
                 }
             }
diff --git a/north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml b/north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml
index b96504e..e4c6272 100644
--- a/north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml
+++ b/north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml
@@ -7,6 +7,10 @@
     <!--鏄犲皠鎴愬搧搴撳瓨-->
     <resultMap id="selectFinishedGoodsInventory" type="com.example.erp.entity.mm.FinishedGoodsInventory">
         <id column="fid" property="id"/>
+        <result column="id" property="id"/>
+        <result column="order_id" property="orderId"/>
+        <result column="order_number" property="orderNumber"/>
+        <result column="process_id" property="processId"/>
         <result column="inventory" property="inventory"/>
         <result column="area" property="area"/>
         <result column="actual_signal_area" property="actualSignalArea"/>
@@ -88,6 +92,7 @@
         <result column="order_id" property="deliveryDetail.orderId"/>
         <result column="create_time" property="deliveryDetail.createTime"/>
         <result column="dd_quantity" property="deliveryDetail.quantity"/>
+        <result column="box_no" property="deliveryDetail.boxNo"/>
 
         <result column="project" property="order.project"/>
 
@@ -140,24 +145,30 @@
             update_time=now(),area=actual_signal_area*quantity_available
         where order_number=#{orderNumber}  and order_id=#{orderId}
     </update>
+    <update id="updateInventoryquantityIntBybox">
+        update mm.finished_goods_inventory
+        set quantity_available=quantity_available+#{quantity},
+            update_time=now(),area=actual_signal_area*quantity_available
+        where order_number=#{orderNumber}  and order_id=#{orderId} and trim(box_no) = trim(#{boxNo})
+    </update>
 
     <update id="updateInventoryquantityOut">
         update mm.finished_goods_inventory
         set quantity_available=quantity_available-#{quantity},
             update_time=now(),area=actual_signal_area*quantity_available
-        where order_number=#{orderNumber}  and order_id=#{orderId}
+        where order_id=#{orderId}  and order_number=#{orderNumber}  and trim(box_no) = trim(#{boxNo})
     </update>
 
     <update id="updateInventoryInventoryInt">
         update mm.finished_goods_inventory
         set inventory=inventory+#{quantity}
-        where order_number=#{orderNumber}  and order_id=#{orderId}
+        where order_number=#{orderNumber}  and order_id=#{orderId} and trim(box_no) = trim(#{remarks})
     </update>
 
     <update id="updateInventoryInventoryOut">
         update mm.finished_goods_inventory
         set inventory=inventory-#{quantity}
-        where order_number=#{orderNumber}  and order_id=#{orderId}
+        where order_number=#{orderNumber}  and order_id=#{orderId} and trim(box_no) = trim(#{boxNo})
     </update>
 
     <select id="getSelectAllocate"  resultMap="selectDeliveryFinishedGoodsInventory">
@@ -219,7 +230,7 @@
                 and fgi.storage_region regexp #{orderDetail.finishedGoodsInventory.storageRegion}
             </if>
         </where>
-        group by fgi.order_id, fgi.order_number
+        group by fgi.order_id, fgi.order_number,fgi.box_no
 
         limit #{offset},#{pageSize};
     </select>
@@ -281,7 +292,7 @@
     <update id="updateDeliveryDetailState">
         update sd.delivery_detail
         set delivery_detail_state=#{state}
-        where order_number=#{orderNumber}  and order_id=#{orderId} and delivery_id=#{deliveryId}
+        where order_number=#{orderNumber}  and order_id=#{orderId} and delivery_id=#{deliveryId} and trim(box_no) = trim(#{remarks})
     </update>
 
     <update id="updateInventoryquantityavailable">
@@ -372,7 +383,8 @@
                od.building_number,
                d.creator,
                dd.delivery_detail_remakes,
-               dd.create_time
+               dd.create_time,
+               dd.box_no
         from sd.delivery_detail dd
                  left join sd.delivery d on dd.delivery_id = d.delivery_id
                  left join sd.order_detail od on od.order_id = dd.order_id and dd.order_number = od.order_number
@@ -529,6 +541,7 @@
         set inventory=inventory-${finishedOperateLog.quantity},quantity_available=quantity_available-${finishedOperateLog.quantity},
         update_time=now(),area=actual_signal_area*quantity_available
         where order_number=#{finishedOperateLog.operationNumber}  and order_id=#{finishedOperateLog.orderId}
+        and box_no=#{finishedOperateLog.remarks}
     </update>
 
     <insert id="insertFinishedGoodsInventory"  useGeneratedKeys="true"  >
@@ -559,7 +572,7 @@
     <select id="findOrderNumberdcount" >
         select count(*)
         from  mm.`finished_goods_inventory`
-        where order_number = #{orderNumber} and order_id=#{orderId};
+        where order_number = #{orderNumber} and order_id=#{orderId} and box_no=#{boxNo};
 
     </select>
 
@@ -764,7 +777,10 @@
 
 
     <select id="defaultfinishedGoods" resultMap="selectFinishedGoodsInventory">
-        select od.order_number,
+        select
+        fgi.id,
+        fgi.process_id,
+        od.order_number,
         o.order_id,
         o.project,
         o.order_type,
@@ -1017,7 +1033,11 @@
 
     <select id="findDeliverydetail">
         select * from sd.delivery_detail
-        where order_number=#{orderNumber}  and order_id=#{orderId} and delivery_id=#{deliveryId} and delivery_detail_state=0
+        where order_number=#{orderNumber}
+          and order_id=#{orderId}
+          and delivery_id=#{deliveryId}
+          and delivery_detail_state=0
+        and trim(#{boxNo}) =box_no
     </select>
 
     <select id="getSelectDeliveryDetailDeliveryId"  resultMap="selectDelivery">
diff --git a/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml b/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
index acd93dd..a848a73 100644
--- a/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
+++ b/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
@@ -633,11 +633,12 @@
                                             operator,
                                             quantity,
                                             operate_time,
-                                            status
+                                            status,
+                                            remarks
         )
         values (
                    #{orderDetail.deliveryDetail.deliveryId} ,#{orderDetail.deliveryDetail.orderId},#{orderDetail.deliveryDetail.orderNumber}
-                   ,"鍑哄簱",#{userName},#{orderDetail.deliveryDetail.quantity},now(),"鏈鏍�"
+                   ,"鍑哄簱",#{userName},#{orderDetail.deliveryDetail.quantity},now(),"鏈鏍�",#{boxNo}
                )
     </insert>
 
@@ -853,7 +854,9 @@
                 and fol.remarks regexp #{finishedOperateLog.remarks}
             </if>
         </where>
-        group by fol.remarks,od.order_id,fol.process_id) as zu
+        group by fol.remarks,od.order_id
+                 -- ,fol.process_id
+            ) as zu
 
     </select>
 
diff --git a/north-glass-erp/src/main/resources/mapper/pp/DamageDetails.xml b/north-glass-erp/src/main/resources/mapper/pp/DamageDetails.xml
index 3ad6b5f..7b8f8cb 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/DamageDetails.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/DamageDetails.xml
@@ -9,7 +9,9 @@
     left join pp.reporting_work as b
     on a.reporting_work_id = b.reporting_work_id
     WHERE a.process_id = #{processId}
+    <if test="needOrderNumber!=null">
     and a.order_number = #{orderNumber}
+    </if>
     and a.technology_number =#{technologyNumber}
     and a.breakage_quantity>0
     and a.patch_status=0
@@ -24,5 +26,19 @@
                            WHERE REGEXP_SUBSTR(#{behindProcess}, '[^,]+', 1, n) IS NOT NULL)
 
 </select>
+    <select id="getNotReview">
+    select a.*
+    from damage_details as a
+    left join reporting_work as b
+    on a.reporting_work_id = b.reporting_work_id
+    where a.process_id=#{processId}
+     and b.reviewed_state>=0
+  <if test="orderNumber!=null">
+      and a.order_number = #{orderNumber}
+  </if>
+    and a.technology_number = #{technologyNumber}
+     and     a.patch_status=0
+    and a.breakage_quantity>0
 
+    </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 85394a8..2a1f455 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -196,13 +196,22 @@
              op.project_name,
              0 as patchState,
              c.rack AS rackNo,
-             0 as layoutId
+             0 as heatLayoutId,
+             d.process,
+             o.order_id AS orderNo,
+             o.customer_name AS customerName,
+             o.processing_note AS processingNote,
+             o.project AS projectName,
+             od.product_name AS productName,
+             od.building_number AS buildingNumber
          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
                  INNER JOIN pp.optimize_project AS op ON op.project_no = c.project_no
+                 LEFT JOIN sd.ORDER o ON o.order_id = c.order_id
+                 LEFT JOIN order_detail od ON c.order_id = od.order_id
          WHERE
              c.project_no IS NOT NULL
            and c.project_no = #{projectNo}
@@ -226,7 +235,14 @@
                 op.project_name,
                 1 as patch_state,
                 a.id as rackNo,
-                0 as layoutId
+                0 as heatLayoutId,
+                d.process,
+                o.order_id AS orderNo,
+                o.customer_name AS customerName,
+                o.processing_note AS processingNote,
+                o.project AS projectName,
+                od.product_name AS productName,
+                od.building_number AS buildingNumber
             FROM
                 pp.patch_log c
                     LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
@@ -234,6 +250,8 @@
                     AND c.technology_number = d.technology_number
                     INNER JOIN pp.optimize_project AS op ON op.project_no = c.project_no
                     LEFT JOIN pp.flow_card fc ON c.process_id = fc.process_id and fc.technology_number=c.technology_number
+                    LEFT JOIN sd.ORDER o ON o.order_id = c.order_id
+                    LEFT JOIN order_detail od ON c.order_id = od.order_id
                     left join
                 (select (@row_number := @row_number + 1) as id,process_id as process_id,technology_number as technology_number from (select process_id,technology_number from pp.flow_card tt where project_no =#{projectNo} group by process_id,technology_number) tt,(select @row_number := 0) as t) a
                 on a.process_id=c.process_id and a.technology_number=c.technology_number
@@ -311,7 +329,7 @@
     <select id="computeAndOptimization">
         SELECT
             c.rack AS rackNo,
-            h.layout_id as layoutId,
+            h.layout_id as heatLayoutId,
             h.width AS width,
             h.height AS height,
             count( 1 ) AS quantity,
@@ -323,7 +341,14 @@
             c.order_number,
             h.order_sort AS orderSort,
             d.icon AS markIcon,
-            h.patch_state  AS patchState
+            h.patch_state  AS patchState,
+            d.process,
+            o.order_id AS orderNo,
+            o.customer_name AS customerName,
+            o.processing_note AS processingNote,
+            o.project AS projectName,
+            od.product_name AS productName,
+            od.building_number AS buildingNumber
         from
             pp.`optimize_heat_detail` h
                 LEFT JOIN pp.flow_card c ON h.process_id = c.process_id
@@ -332,6 +357,8 @@
                 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
+                LEFT JOIN sd.order o on  o.order_id = c.order_id
+                LEFT JOIN order_detail od on  c.order_id = od.order_id
         WHERE
             h.project_no = #{projectNo}
         GROUP BY
diff --git a/north-glass-erp/src/main/resources/mapper/pp/Report.xml b/north-glass-erp/src/main/resources/mapper/pp/Report.xml
index bde52d5..2d019f6 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/Report.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -2973,30 +2973,50 @@
     
     
     <select id="processCardProgressCollectMp">
-       select * from (select b.product_name,
-            c.detail as 'glassName',
+       select * from (select
+              a.order_id,
+              a.order_number,
+              c.glass_group as 'group',
+              a.technology_number,
+            b.product_name,
+            c.detail as glass_child,
+            d.order_type,
             concat(a.process_id,'/',a.technology_number)  as processID,
             a.process_id,
-            a.quantity,
-            a.received_quantity,
-            round(sum(a.received_quantity*b.area),2) as received_area,
+            if(a.technology_number=1,sum(a.quantity-ifnull(a.termination_quantity,0)),0) as quantity,
+            sum(a.quantity)-ifnull(a.termination_quantity,0) as thisQuantity,/*鐢ㄤ簬鍒ゆ柇鏄惁鏀瑰彉棰滆壊*/
+            if(a.technology_number=1, round(sum((a.quantity-ifnull(a.termination_quantity,0)))*b.compute_area,2),0) as gross_area,
+            if(a.technology_number=1, sum(a.received_quantity),0) as inventory,
+            if(a.technology_number=1, round(sum(a.received_quantity*b.area),2),0) as inventoryArea,
 
-            a.technology_number
+            -- show
+            sum(a.quantity-ifnull(a.termination_quantity,0)) as quantityShow ,
+            round(sum((a.quantity-ifnull(a.termination_quantity,0)))*b.compute_area,2) as gross_areaShow,
+            sum(a.received_quantity) as inventoryShow,
+            round(sum(a.received_quantity*b.area),2) as inventoryAreaShow
+
+
+
+
             from pp.flow_card as a
             left join sd.order_detail as b
             on a.order_id = b.order_id and a.order_number = b.order_number
             left join sd.product_detail as c
             on c.prod_id = b.product_id and c.glass_sort = a.technology_number
+            LEFT JOIN sd.`order` as d
+            on a.order_id = d.order_id
             where a.order_id = #{orderId} group by processID
             ) as a
        left join (SELECT process_id,
                          technology_number,
                          sum(broken_num) as broken_num,
-                         concat('{',GROUP_CONCAT(reporting_work_nums),'}') as reporting_work_num
+                         concat('{',GROUP_CONCAT(reporting_work_nums),'}') as reportWorkQuantity,
+                         concat('{',GROUP_CONCAT(reporting_work_counts),'}') as reportWorkQuantityCount
                   from (select
                             opd.process_id,
                             opd.technology_number,
                             concat("\"", process, "\":\"", SUM(reporting_work_num), "\"") as  reporting_work_nums,
+                            concat("\"", process, "\":\"", SUM(reporting_work_num_count), "\"") as  reporting_work_counts,
                             sum(broken_num) as broken_num
                         from sd.order_process_detail as opd
                         where opd.order_id = #{orderId}
diff --git a/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml b/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
index f8bac5c..52b7c6c 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -452,13 +452,13 @@
                     )  as minQuantity -- 淇敼鏈�灏忔暟
             </if>
             <if test="nextProcess == null or nextProcess == ''">  -- 鏈�鍚庝竴閬撳伐搴�
-#               c.received_quantity, -- 宸插叆搴撴暟閲�
-#               c.inventory_quantity, --   搴撳瓨鏁伴噺
+               c.received_quantity, -- 宸插叆搴撴暟閲�
+               c.inventory_quantity, --   搴撳瓨鏁伴噺
               if(ifnull(inventory_quantity,0)
                  -ifnull(c.received_quantity,0)
-                 &gt;= a.completed_quantity,0,
-                (a.completed_quantity-(ifnull(c.inventory_quantity,0)
-                    -ifnull(c.received_quantity,0)))
+                 &gt;= a.completed_quantity,a.completed_quantity,
+                (ifnull(c.inventory_quantity,0)
+                -ifnull(c.received_quantity,0))
                 )
                 as minQuantity -- 淇敼鏈�灏忔暟
             </if>
diff --git a/north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml b/north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml
index a28adf5..b3ea803 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml
@@ -54,6 +54,7 @@
         <result column="storage_region" property="finishedGoodsInventory.storageRegion"/>
         <result column="actual_signal_area" property="finishedGoodsInventory.actualSignalArea"/>
         <result column="box_no" property="finishedGoodsInventory.boxNo"/>
+        <result column="id" property="finishedGoodsInventory.id"/>
 
 
     </resultMap>
@@ -181,7 +182,7 @@
                fgi.quantity_available + dd.quantity as quantity_available,
                od.order_number,
                od.quantity-od.delivery_num as t_quantity,
-               od.quantity as o_quantity,
+        (fgi.quantity_available+ifnull(dd1.sumQuantity,0)) as o_quantity,
                dd.quantity as d_quantity,
                od.building_number,
                od.product_id,
@@ -207,10 +208,14 @@
         left join sd.delivery d on dd.delivery_id=d.delivery_id
         left join sd.order_detail od on dd.order_id=od.order_id and dd.order_number=od.order_number
         left join sd.`order` o on dd.order_id=o.order_id
-        left join mm.finished_goods_inventory fgi on dd.order_id=fgi.order_id and dd.order_number=fgi.order_number
+        left join mm.finished_goods_inventory fgi on dd.order_id=fgi.order_id and dd.order_number=fgi.order_number and fgi.box_no = dd.box_no
+        left join (SELECT IFNULL(sum(quantity),0) as sumQuantity,dd.*
+                    from sd.delivery_detail dd
+                    GROUP BY dd.order_id,dd.order_number,dd.box_no) AS dd1
+        on od.order_id = dd1.order_id and od.order_number = dd1.order_number and dd1.box_no = fgi.box_no
         <where>
             <if test="orderDetail.deliveryDetail.deliveryId != null and orderDetail.deliveryDetail.deliveryId != ''">
-                and dd.delivery_id regexp #{orderDetail.deliveryDetail.deliveryId}
+                and dd.delivery_id = #{orderDetail.deliveryDetail.deliveryId}
             </if>
             <if test="orderDetail.orderId != null and orderDetail.orderId != ''">
                 and od.order_id regexp #{orderDetail.orderId}
@@ -371,14 +376,16 @@
     </select>
 
     <select id="getSelectShippingOrderDetails" resultMap="selectDeliveryFinishedGoodsInventoryOrderDetail">
-        select od.order_id,
+        select
+        fgi.id,
+                od.order_id,
                od.order_number,
                o.batch,
                o.calculate_type,
                fgi.quantity_available,
-               od.quantity- od.delivery_num as t_quantity,
-               od.quantity as o_quantity,
-               fgi.quantity_available as d_quantity,
+               od.quantity- od.delivery_num as t_quantity,-- 鏈彂鏁伴噺
+        ifnull(dd1.sumQuantity,0)+fgi.quantity_available as o_quantity,-- 鏁伴噺
+               fgi.quantity_available as d_quantity,-- 鍙戣揣鏁伴噺
                od.building_number,
                od.product_id,
                od.product_name,
@@ -401,6 +408,13 @@
                  left join sd.`order` o on od.order_id = o.order_id
                  left join mm.finished_goods_inventory fgi
                  on od.order_id = fgi.order_id and od.order_number = fgi.order_number
+        left join (SELECT IFNULL(sum(quantity),0) as sumQuantity,dd.*
+                    from sd.delivery_detail dd
+                    where dd.order_id regexp #{orderDetail.orderId}
+                    GROUP BY dd.order_id,dd.order_number,dd.box_no) AS dd1
+        on od.order_id = dd1.order_id and od.order_number = dd1.order_number and dd1.box_no = fgi.box_no
+
+
         <where>
             fgi.quantity_available > 0 and od.quantity > od.delivery_num
             <if test="orderDetail.orderId != null and orderDetail.orderId != ''">
diff --git a/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetailMapper.xml b/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetailMapper.xml
index 7e5064d..1b4a22e 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetailMapper.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetailMapper.xml
@@ -133,6 +133,25 @@
         order by RowNum
 
     </select>
+
+    <select id="getProcessGlassLRow">
+        select
+            max(a.technology_number) as rowCount,
+            RowNum
+        from pp.flow_card as a
+                 left join
+             (select min((@i:=@i+1)) AS RowNum,c.*
+              from pp.flow_card  as c,
+                   (SELECT @i:=-1) as d
+              where order_id = #{orderId}
+              GROUP BY process_id
+             ) as b
+             on b.id = a.id
+        where a.order_id = #{orderId}
+        group by a.process_id
+        order by RowNum
+
+    </select>
     <update id="insertByReportingWorkDetail">
         update sd.order_process_detail as a
         set

--
Gitblit v1.8.0