From 5a5e59f8aaa2a030511ef245886bf6d1db9bf774 Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期五, 15 三月 2024 14:40:14 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override

---
 north-glass-erp/northglass-erp/src/router/index.js                                              |    5 
 north-glass-erp/src/main/java/com/example/erp/entity/pp/DamageDetails.java                      |    2 
 north-glass-erp/target/classes/mapper/pp/FolwCard.xml                                           |  261 ++-
 north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml                                 |   42 
 north-glass-erp/northglass-erp/src/views/pp/processCard/SelectAddProcess.vue                    |   37 
 north-glass-erp/target/classes/mapper/pp/ReportingWork.xml                                      |  257 ++++
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java                     |    4 
 north-glass-erp/northglass-erp/src/views/pp/workOrder/WorkOrder.vue                             |    6 
 north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java           |    2 
 north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue                          |    2 
 north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml                                       |  261 ++-
 north-glass-erp/northglass-erp/src/views/pp/processCard/ProductionScheduling.vue                |  270 +++-
 north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java        |   28 
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/ProductionSchedulingMapper.java         |    6 
 north-glass-erp/src/main/resources/mapper/pp/ReportingWorkDetail.xml                            |    1 
 north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue                 |  299 +++-
 north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml                             |   42 
 north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWork.java                      |   21 
 north-glass-erp/northglass-erp/src/views/pp/processCard/ProcessCard.vue                         |   13 
 north-glass-erp/northglass-erp/src/views/pp/processCard/SplittingDetails.vue                    |   25 
 north-glass-erp/target/classes/mapper/pp/ReportingWorkDetail.xml                                |    1 
 north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue             |  276 +++++
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkDetailMapper.java          |    1 
 north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue                      |  163 +-
 north-glass-erp/target/classes/mapper/pp/ProductionScheduling.xml                               |   99 +
 north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue             |  376 ++++--
 north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java          |   12 
 north-glass-erp/.idea/dataSources.local.xml                                                     |    1 
 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java              |  183 +++
 north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue                               |    2 
 north-glass-erp/northglass-erp/src/views/pp/workOrder/SelectWorkOrder.vue                       |   50 
 north-glass-erp/northglass-erp/src/views/pp/workOrder/AddWorkOrder.vue                          |   28 
 north-glass-erp/src/main/java/com/example/erp/controller/pp/ProductionSchedulingController.java |    6 
 north-glass-erp/src/main/java/com/example/erp/service/pp/ProductionSchedulingService.java       |   17 
 north-glass-erp/northglass-erp/src/views/pp/reportingWorks/ReportingWorks.vue                   |   10 
 north-glass-erp/src/main/resources/mapper/pp/ProductionScheduling.xml                           |   99 +
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java                |   28 
 north-glass-erp/northglass-erp/src/views/pp/processCard/SelectProcessCard.vue                   |   61 
 north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml                                  |  257 ++++
 north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java                   |    8 
 40 files changed, 2,500 insertions(+), 762 deletions(-)

diff --git a/north-glass-erp/.idea/dataSources.local.xml b/north-glass-erp/.idea/dataSources.local.xml
index 0c4acb4..a7ad12e 100644
--- a/north-glass-erp/.idea/dataSources.local.xml
+++ b/north-glass-erp/.idea/dataSources.local.xml
@@ -23,7 +23,6 @@
       <database-info product="MySQL" version="8.0.19" jdbc-version="4.2" driver-name="MySQL Connector/J" driver-version="mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0)" dbms="MYSQL" exact-version="8.0.19" exact-driver-version="8.0">
         <extra-name-characters>#@</extra-name-characters>
         <identifier-quote-string>`</identifier-quote-string>
-        <jdbc-catalog-is-schema>true</jdbc-catalog-is-schema>
       </database-info>
       <case-sensitivity plain-identifiers="lower" quoted-identifiers="lower" />
       <secret-storage>master_key</secret-storage>
diff --git a/north-glass-erp/northglass-erp/src/router/index.js b/north-glass-erp/northglass-erp/src/router/index.js
index fa99bfa..93f3c32 100644
--- a/north-glass-erp/northglass-erp/src/router/index.js
+++ b/north-glass-erp/northglass-erp/src/router/index.js
@@ -266,6 +266,11 @@
               component: () => import('../views/pp/processCard/ProductionScheduling.vue'),
             },
             {
+              path: 'selectDetailProcessCard',
+              name: 'selectDetailProcessCard',
+              component: () => import('../views/pp/processCard/SelectDetailProcessCard.vue'),
+            },
+            {
               path: '',
               redirect:'/main/processCard/SelectProcessCard'
             }
diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue
index 6602727..bcab2ab 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue
@@ -12,7 +12,9 @@
 import BasicTable from '@/components/basic/BasicTable.vue'
 import {VXETable} from "vxe-table";
 import useUserInfoStore from "@/stores/userInfo";
-
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 let productGlassTypeStore = useProductGlassTypeStore()
 let router = useRouter()
 const userStore = useUserInfoStore()
@@ -30,11 +32,11 @@
     case 'delete': {
       request.post(`/processCard/deleteFlowCard/${row.orderId}/${row.processId}`).then((res) => {
         if (res.code == 200) {
-          ElMessage.success("鍒犻櫎鎴愬姛")
+          ElMessage.success(t('workOrder.deleteOk'))
           location.reload();
         } else {
           ElMessage.warning(res.msg)
-          router.push("/login")
+         // router.push("/login")
         }
       })
       break
@@ -166,17 +168,17 @@
     showStatus: true
   },//琛ㄥご鍙傛暟
   columns: [
-    {type: 'checkbox', fixed: "left", title: '閫夋嫨'},
+    {type: 'checkbox', fixed: "left", title: t('basicData.check')},
     {
       field: 'orderNumber',
-      title: '璁㈠簭',
+      title: t('basicData.check'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
     {
       field: 'shape',
-      title: '褰㈢姸',
+      title: t('order.shape'),
       showOverflow: "ellipsis",
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
@@ -184,7 +186,7 @@
     },
     {
       field: 'width',
-      title: '瀹�',
+      title: t('order.width'),
       sortable: true,
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
@@ -193,18 +195,18 @@
     },
     {
       field: 'height',
-      title: '楂�',
+      title: t('order.height'),
       sortable: true,
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged,
       width: '60px'
     },
-    {field: 'baiscQuantity', title: '寰呭垎鏁伴噺', showOverflow: "ellipsis", width: '60px'},
-    {field: 'computeGrossArea', title: '寰呭垎闈㈢Н', width: '60px'},
-    {field: 'totalThickness', title: '鎬诲帤搴�', width: '80px'},
-    {field: 'thickness', title: '鐜荤拑鍘氬害', width: '60px'},
-    {field: 'weight', title: '閲嶉噺'}
+    {field: 'baiscQuantity', title: t('processCard.quantityToDivided'), showOverflow: "ellipsis", width: '60px'},
+    {field: 'computeGrossArea', title: t('processCard.areaToDivided'), width: '60px'},
+    {field: 'totalThickness', title: t('processCard.totalThickness'), width: '80px'},
+    {field: 'thickness', title: t('processCard.glassThickness'), width: '60px'},
+    {field: 'weight', title: t('processCard.weight')}
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
@@ -224,7 +226,7 @@
     return [
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return t('basicData.total')
         }
         if (footList.includes(column.field)) {
           return sumNum(data, column.field)
@@ -267,10 +269,10 @@
     showStatus: true
   },//琛ㄥご鍙傛暟
   columns: [
-    {type: 'checkbox', fixed: "left", title: '閫夋嫨'},
+    {type: 'checkbox', fixed: "left", title: t('basicData.check')},
     {
       field: 'processId',
-      title: '娴佺▼鍗″彿',
+      title: t('processCard.processId'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       width: 130,
@@ -278,7 +280,7 @@
     },
     {
       field: 'orderNumber',
-      title: '璁㈠簭',
+      title: t('order.OrderNum'),
       showOverflow: "ellipsis",
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'}
@@ -286,21 +288,21 @@
     },
     {
       field: 'landingSequence',
-      title: '灏忕墖椤哄簭',
+      title: t('processCard.technologyNumber'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
-    {field: 'shape', title: '褰㈢姸', filters: [{data: ''}], slots: {filter: 'num1_filter'}, filterMethod: filterChanged},
-    {field: 'width', title: '瀹�', showOverflow: "ellipsis"},
-    {field: 'height', title: '楂�'},
-    {field: 'quantity', title: '鎬绘暟閲�'},
-    {field: 'totalThickness', title: '鎬诲帤搴�'},
+    {field: 'shape', title: t('order.shape'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, filterMethod: filterChanged},
+    {field: 'width', title: t('order.width'), showOverflow: "ellipsis"},
+    {field: 'height', title: t('order.height')},
+    {field: 'quantity', title: t('order.quantity')},
+    {field: 'totalThickness', title: t('processCard.totalThickness')},
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
     buttons: [
-      {code: 'saveFlowCard', name: '淇濆瓨', status: 'primary', icon: 'vxe-icon-save'},
+      {code: 'saveFlowCard', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save'},
     ],
     // import: false,
     // export: true,
@@ -315,7 +317,7 @@
     return [
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return t('basicData.total')
         }
         if (footList.includes(column.field)) {
           return sumNum(data, column.field)
@@ -326,13 +328,15 @@
   }
 
 })
+//瀹氫箟杈撳叆鏁伴噺
+let checkedNum = ref('')
 //鍒涘缓娴佺▼鍗�
 const createProcessCard = () => {
   const $grid = xGrid.value
   const checkedList = $grid.getCheckboxRecords()
 
   if (checkedList.length === 0) {
-    ElMessage.warning("璇峰厛閫夋嫨鍙充晶鏁版嵁")
+    ElMessage.warning(t('processCard.schedulingOk'))
     return
   }
   //productionId
@@ -344,23 +348,61 @@
     //index = index.toString().padStart(2, '0')
   }
   const processId = productionId + index.toString().padStart(2, '0')
-  checkedList.forEach((item) => {
-    item.processId = processId
-    item.landingSequence = index
-    item.quantity = item.baiscQuantity
-  })
-  checkedList.forEach((item) => {
-    delete item._X_ROW_KEY
-  })
-  $gridLeft.insertAt(checkedList)
-  $grid.remove(checkedList)
-  if ($gridLeft || $grid) {
+  const regex = /^(\d+|)$/;
+  if (!regex.test(checkedNum.value)) {
+    ElMessage.warning(t('processCard.schedulingNo'))
+    return
+  }
+  //鍒ゆ柇姝f暣鏁�
+  if (/^[1-9]\d*$/.test(checkedNum.value)) {
+    checkedList.forEach((item) => {
+      //瀹氫箟key鍊间繚鎸�
+
+      //鍒ゆ柇鍙敤鏁伴噺鏄惁澶т簬绛変簬杈撳叆鐨勬暟閲�,涓嶆弧瓒冲垯鎶涘嚭寮傚父
+      if (item.baiscQuantity * 1 < checkedNum.value * 1) throw new Error(t('processCard.schedulingQuantity'));
+      item.quantity =  checkedNum.value
+      item.processId = processId
+      item.landingSequence = index
+      item.baiscQuantity=item.baiscQuantity - checkedNum.value
+    })
+    //鍒犻櫎key
+    checkedList.forEach((item) => {
+      let key = item._X_ROW_KEY
+      delete item._X_ROW_KEY
+      if (item.baiscQuantity===0){
+        $grid.remove(checkedList)
+      }
+      $gridLeft.insertAt(checkedList)
+      item._X_ROW_KEY = key
+    })
+
+//娓呴櫎涓よ竟澶嶉�夋
     $gridLeft.clearCheckboxRow()
     $grid.clearCheckboxRow()
   }
+  else if (checkedNum.value === '') {//鍒ゆ柇鏁伴噺杈撳叆妗嗘棤杈撳叆鏁板瓧
+
+    checkedList.forEach((item) => {
+      item.processId = processId
+      item.landingSequence = index
+      item.quantity = item.baiscQuantity
+    })
+    //鍒犻櫎key
+    checkedList.forEach((item) => {
+      delete item._X_ROW_KEY
+    })
+    $gridLeft.insertAt(checkedList)
+    $grid.remove(checkedList)
+    //娓呴櫎涓よ竟澶嶉�夋
+    $gridLeft.clearCheckboxRow()
+    $grid.clearCheckboxRow()
+  }
+
+
+
 }
 
-let checkedNum = ref('')
+
 
 //鍚戝彸杈硅〃鏍兼坊鍔犳暟鎹�
 const addRight = () => {
@@ -373,12 +415,12 @@
     const checkedList = $gridLeft.getCheckboxRecords()
     //鍒ゆ柇宸﹁竟琛ㄦ牸鏄惁鏈夐�変腑鐨勬暟鎹�
     if (checkedList.length === 0) {
-      ElMessage.warning("璇峰厛閫夋嫨宸︿晶鏁版嵁")
+      ElMessage.warning(t('processCard.schedulingArea'))
       return
     }
     const regex = /^(\d+|)$/;
     if (!regex.test(checkedNum.value)) {
-      ElMessage.warning("璇疯緭鍏ユ鏁存暟")
+      ElMessage.warning(t('processCard.schedulingNo'))
       return
     }
     //鍒ゆ柇姝f暣鏁�
@@ -386,7 +428,7 @@
       //瀵归�変腑鐨勫乏杈硅〃鏍兼暟鎹繘琛屽惊鐜�
       checkedList.forEach((item) => {
         //鍒ゆ柇鍙敤鏁伴噺鏄惁澶т簬绛変簬杈撳叆鐨勬暟閲�,涓嶆弧瓒冲垯鎶涘嚭寮傚父
-        if (item.quantity < checkedNum.value) throw new Error("璇疯緭鍏ュ皬浜庣瓑浜庡彲鐢ㄦ暟閲忕殑鏁板瓧");
+        if (item.quantity < checkedNum.value) throw new Error(t('processCard.schedulingQuantity'));
         //宸﹁竟琛ㄦ牸鍙敤鏁伴噺鍑忓幓杈撳叆鐨勬暟閲�
         item.quantity = item.quantity - checkedNum.value
         //鍙宠竟琛ㄦ牸鏁版嵁
@@ -409,7 +451,7 @@
           $grid.insert(item)
         }
       })
-    } else if (checkedNum.value === '') {//鍒ゆ柇鏁伴噺杈撳叆妗嗘湁鏃犺緭鍏ユ暟瀛�
+    } else if (checkedNum.value === '') {//鍒ゆ柇鏁伴噺杈撳叆妗嗘棤杈撳叆鏁板瓧
 
       checkedList.forEach((item) => {
         let rightData = $grid.getTableData().fullData
@@ -427,6 +469,7 @@
 
 
     }
+    //娓呴櫎涓よ竟澶嶉�夋
     $gridLeft.clearCheckboxRow()
     $grid.clearCheckboxRow()
   } catch (e) {
@@ -446,23 +489,23 @@
     const checkedListLeft = $gridLeft.getCheckboxRecords()
     //鍒ゆ柇鍙宠竟琛ㄦ牸鏄惁鏈夐�変腑鐨勬暟鎹�
     if (checkedList.length * 1 === 0) {
-      ElMessage.warning("璇峰厛閫夋嫨鍙充晶鏁版嵁")
+      ElMessage.warning(t('processCard.schedulingOk'))
       return
     }
     if (checkedListLeft.length !== 1) {
-      ElMessage.warning("璇峰厛閫夋嫨宸︿晶涓�鏉℃暟鎹�")
+      ElMessage.warning(t('processCard.schedulingTime'))
       return
     }
     const regex = /^(\d+|)$/;
     if (!regex.test(checkedNum.value)) {
-      ElMessage.warning("璇疯緭鍏ユ鏁存暟")
+      ElMessage.warning(t('processCard.schedulingNo'))
       return
     }
     //鍒ゆ柇姝f暣鏁�
     if (/^[1-9]\d*$/.test(checkedNum.value)) {
       checkedList.forEach((item) => {
         //鍒ゆ柇鍙敤鏁伴噺鏄惁澶т簬绛変簬杈撳叆鐨勬暟閲�,涓嶆弧瓒冲垯鎶涘嚭寮傚父
-        if (item.baiscQuantity * 1 < checkedNum.value * 1) throw new Error("璇疯緭鍏ュ皬浜庣瓑浜庡彲鐢ㄦ暟閲忕殑鏁板瓧");
+        if (item.baiscQuantity * 1 < checkedNum.value * 1) throw new Error("璇疯緭鍏ュ皬浜庣瓑浜庡緟鍒嗘暟閲忕殑鏁板瓧");
         item.baiscQuantity = item.baiscQuantity - checkedNum.value
         //瀹氫箟key鍊间繚鎸�
         let key = item._X_ROW_KEY
@@ -491,9 +534,6 @@
           }
         } else {
 
-          // if (){
-          //
-          // }
           //濡傛灉鍕鹃�変袱涓�间笉鍚屽垯鎻掑叆鍚屾祦绋嬪崱
           item.quantity = checkedNum.value
           item.processId = checkedListLeft[0].processId
@@ -521,18 +561,6 @@
               break
             }
           }
-          // leftData.forEach((items) => {
-          //   console.log(items.processId, item.processId,"鈥斺�斺�斺�斺�斺��",items.orderNumber, item.orderNumber)
-          //   if (items.orderNumber === item.orderNumber && items.processId===item.processId) {
-          //     console.log("娴嬭瘯333")
-          //
-          //   }
-          //   else{
-          //
-          //   }
-          //
-          // })
-
         }
 
       })
@@ -546,6 +574,7 @@
       $gridLeft.insertAt(checkedList)
       $grid.remove(checkedList)
     }
+    //娓呴櫎涓よ竟澶嶉�夋
     if ($gridLeft || $grid) {
       $gridLeft.clearCheckboxRow()
       $grid.clearCheckboxRow()
@@ -568,12 +597,14 @@
           const $tableRight = xGrid.value
           if ($table) {
             const selectRecords = $table.getCheckboxRecords()
-            const selectRight = $tableRight.getCheckboxRecords()
+          //  const selectRight = $tableRight.getCheckboxRecords()
+            let leftData = $tableRight.getTableData().fullData
             if (selectRecords.length === 0) {
               ElMessage.warning("璇峰厛閫夋嫨淇濆瓨鐨勬暟鎹�")
               return
             }
-            if (selectRight.length > 0) {
+
+            if (leftData.length > 0) {
               ElMessage.warning("璇峰厛灏嗗彸渚ф暟鎹叏閮ㄥ缓绔嬫祦绋嬪崱鍚庝繚瀛�")
               return;
             }
@@ -623,7 +654,7 @@
             style="float: left"
             type="primary"
             @click="intoCreateProduct">
-          {{ flag ? '杩斿洖' : '杩斿洖' }}
+          {{ flag ? t('processCard.return') : t('processCard.return') }}
         </el-button>
         <!--      <el-button  type="primary">淇濆瓨鍒嗘灦</el-button>-->
         <!--              <el-button type="primary" :hidden="true">鍒嗘灦姹囨��</el-button>-->
@@ -676,14 +707,14 @@
 
         <div width="12%">
           <el-main style="">
-            <span>閫変腑鏁伴噺:<el-input v-model="checkedNum" clearable type="number"></el-input></span><br>
+            <span>{{$t('processCard.selectedQuantity')}}:<el-input v-model="checkedNum" clearable type="number"></el-input></span><br>
             <el-button type="primary" @click="addRight"> 鈫�</el-button>
             <br>
             <br>
             <el-button type="primary" @click="addLeft"> 鈫�</el-button>
             <br>
             <br>
-            <el-button type="primary" @click="createProcessCard">寤虹珛娴佺▼鍗�</el-button>
+            <el-button type="primary" @click="createProcessCard">{{$t('processCard.establishProcessCards')}}</el-button>
           </el-main>
         </div>
 
diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/ProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/ProcessCard.vue
index a52acb8..7a62522 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/processCard/ProcessCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/ProcessCard.vue
@@ -6,7 +6,9 @@
 import {ElMessage} from "element-plus";
 import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
 import  GlassType from '@/components/basic/product/GlassType.vue'
-
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 const route = useRoute()
 const router = useRouter()
 let indexFlag=$ref(1)
@@ -19,9 +21,12 @@
   <div id="main">
     <div id="div-title">
       <el-breadcrumb :separator-icon="ArrowRight">
-        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/processCard/SelectProcessCard' }">娴佺▼鍗$鐞�</el-breadcrumb-item>
-        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectAddProcess' }">鍒嗘灦</el-breadcrumb-item>
-        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/processCard/ProductionScheduling' }">鎺掍骇</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/processCard/SelectProcessCard' }">{{$t('processCard.processCardManagement')}}
+        </el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectAddProcess' }">{{$t('processCard.splitFrame')}}
+        </el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/processCard/ProductionScheduling' }">{{$t('processCard.scheduling')}}
+        </el-breadcrumb-item>
         <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">鎵撳嵃</el-breadcrumb-item>
       </el-breadcrumb>
     </div>
diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/ProductionScheduling.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/ProductionScheduling.vue
index eb198e6..899f725 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/processCard/ProductionScheduling.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/ProductionScheduling.vue
@@ -12,7 +12,11 @@
 import BasicTable from '@/components/basic/BasicTable.vue'
 import {VXETable} from "vxe-table";
 import useUserInfoStore from "@/stores/userInfo";
-import {changeFilterEvent,filterChanged} from "@/hook"
+import {changeFilterEvent, filterChanged} from "@/hook"
+import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 
 let router = useRouter()
 const userStore = useUserInfoStore()
@@ -32,8 +36,9 @@
   }
 }
 
+
 //宸ュ簭
-const value = ref('')
+const value = ref('cutting')
 
 
 //鎺掍骇鐘舵��
@@ -41,11 +46,11 @@
 const stateOptions = [
   {
     value: '2',
-    label: '宸叉帓浜�',
+    label: t('processCard.ProductionSchedulingOk'),
   },
   {
     value: '1',
-    label: '鏈帓浜�',
+    label: t('processCard.ProductionSchedulingNo'),
   },
 ]
 
@@ -119,21 +124,32 @@
   return [start, end]
 }
 
+onMounted(()=>{
+  //鍚敤琛ㄦ牸鎷栧姩閫変腑
+  addListener(xGrid.value,gridOptions)
+})
+
 //绗竴娆″姞杞借幏鍙栬繎涓冨ぉ鏃堕棿鍜岄粯璁ょ姸鎬�
 form.date1 = getNowTime()
 let startTime = form.date1[0]
 let endTime = form.date1[1]
+let selectProcesses = value.value
+let inputVal = form.orderId
+if (inputVal == '') {
+  inputVal = null
+}
+if (selectProcesses == '') {
+  selectProcesses = null
+}
 //绗竴娆″姞杞芥暟鎹�
-
-request.post(`/productionScheduling/selectLastScheduling/${startTime}/${endTime}`, filterData.value).then((res) => {
+request.post(`/productionScheduling/selectLastScheduling/${startTime}/${endTime}/${selectProcesses}/${inputVal}`, filterData.value).then((res) => {
 
   if (res.code == 200) {
     pageTotal.value = res.data.total
     produceList = produceList.value.concat(deepClone(res.data.data))
-    titleSelectJson.value.processType=res.data.process
+    titleSelectJson.value.processType = res.data.process
     xGrid.value.reloadData(produceList)
     gridOptions.loading = false
-    console.log(res.data)
     //绂佺敤鍒犻櫎銆佷繚瀛樻寜閽�
     gridOptions.toolbarConfig.buttons[0].disabled = true
     gridOptions.toolbarConfig.buttons[1].disabled = true
@@ -157,13 +173,13 @@
   }
   if (inputVal == null && selectState == 1) {
     //鏍规嵁鏃堕棿鏌ヨ鏈帓浜ф暟鎹�
-    request.post(`/productionScheduling/selectLastScheduling/${startTime}/${endTime}`, filterData.value).then((res) => {
+    request.post(`/productionScheduling/selectLastScheduling/${startTime}/${endTime}/${selectProcesses}/${inputVal}`, filterData.value).then((res) => {
 
       if (res.code == 200) {
         pageTotal.value = res.data.total
         xGrid.value.loadData(res.data.data)
         gridOptions.loading = false
-        //绂佺敤鍒犻櫎銆佷繚瀛樻寜閽�
+        //绂佺敤鍒犻櫎銆佸鏍告寜閽�
         gridOptions.toolbarConfig.buttons[0].disabled = true
         gridOptions.toolbarConfig.buttons[1].disabled = true
         //鍚敤淇濆瓨
@@ -172,16 +188,14 @@
         ElMessage.warning(res.msg)
       }
     })
-  } else
-    if (inputVal != null && selectState == 1) {
-
+  } else if (inputVal != null && selectState == 1) {
     //鏍规嵁宸ュ簭鏌ヨ鏈帓浜ф暟鎹�
     request.post(`/productionScheduling/selectScheduling/${startTime}/${endTime}/${inputVal}/${selectProcesses}/${selectState}`, filterData.value).then((res) => {
       if (res.code == 200) {
         pageTotal.value = res.data.total
         xGrid.value.loadData(res.data.data)
         gridOptions.loading = false
-        //绂佺敤鍒犻櫎銆佷繚瀛樻寜閽�
+        //绂佺敤鍒犻櫎銆佸鏍告寜閽�
         gridOptions.toolbarConfig.buttons[0].disabled = true
         gridOptions.toolbarConfig.buttons[1].disabled = true
         //鍚敤淇濆瓨
@@ -192,13 +206,12 @@
     })
   } else if (inputVal == null && selectState == 2) {
     //鏍规嵁鏃堕棿鏌ヨ宸叉帓浜ф暟鎹�
-    console.log(startTime, endTime, selectProcesses, selectState)
     request.post(`/productionScheduling/selectScheduling/${startTime}/${endTime}/${inputVal}/${selectProcesses}/${selectState}`, filterData.value).then((res) => {
       if (res.code == 200) {
         pageTotal.value = res.data.total
         xGrid.value.loadData(res.data.data)
         gridOptions.loading = false
-        //鍚敤鍒犻櫎銆佷繚瀛樻寜閽�
+        //鍚敤鍒犻櫎銆佸鏍告寜閽�
         gridOptions.toolbarConfig.buttons[0].disabled = false
         gridOptions.toolbarConfig.buttons[1].disabled = false
         //绂佺敤淇濆瓨
@@ -214,7 +227,7 @@
         pageTotal.value = res.data.total
         xGrid.value.loadData(res.data.data)
         gridOptions.loading = false
-        //鍚敤鍒犻櫎銆佷繚瀛樻寜閽�
+        //鍚敤鍒犻櫎銆佸鏍告寜閽�
         gridOptions.toolbarConfig.buttons[0].disabled = false
         gridOptions.toolbarConfig.buttons[1].disabled = false
         //绂佺敤淇濆瓨
@@ -228,6 +241,12 @@
 
 }
 
+/*鍚庣杩斿洖缁撴灉澶氬眰宓屽灞曠ず*/
+const hasDecimal = (value) => {
+  const regex = /\./; // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+  return regex.test(value); // 杩斿洖true/false
+}
+
 
 //瀛愮粍浠舵帴鏀跺弬鏁�
 const xGrid = ref()
@@ -236,7 +255,7 @@
   keepSource: true,//淇濇寔婧愭暟鎹�
   align: 'center',//鏂囧瓧灞呬腑
   stripe: true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true, height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  rowConfig: {isCurrent: true, isHover: true, height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
   id: 'CustomerList',
   showFooter: true,//鏄剧ず鑴�
   printConfig: {},
@@ -249,66 +268,128 @@
     useKey: true
   },
   filterConfig: {   //绛涢�夐厤缃」
-    // remote: true
+                    // remote: true
   },
   customConfig: {
     storage: true
   },
-  editConfig: {
+
+    editConfig: {
     trigger: 'click',
     mode: 'row',
     showStatus: true
-  },//琛ㄥご鍙傛暟
+  },
+  menuConfig: {
+    body: {
+      options: [
+        [
+          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
+          { code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false },
+          { code: 'clearChecked', name: t('basicData.clearSelection'), prefixIcon: 'vxe-icon-indicator', visible: true, disabled: false },
+        ]
+      ]
+    }
+  },
+  //琛ㄥご鍙傛暟
   columns: [
     {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
-    {type: 'checkbox', fixed: "left", title: '閫夋嫨', width: 80},
-    {type: 'seq', fixed: "left", title: '鑷簭', width: 50},
+    {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80},
+    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
     {
       field: 'scheduled_start_time',
       width: 120,
       editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}},
-      title: '璁″垝寮�濮嬫椂闂�'
+      title: t('processCard.scheduledStartTime')
     },
     {
       field: 'plan_end_time',
       width: 120,
       editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}},
-      title: '璁″垝缁撴潫鏃堕棿'
+      title: t('processCard.planEndTime')
     },
     // {field: '鎺掍骇缂栧彿', title: '鎺掍骇缂栧彿',  width: 120 },
-    {field: 'order_id', title: '閿�鍞崟鍙�', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 100,filterMethod:filterChanged},
-    {field: 'customer_name', title: '瀹㈡埛鍚嶇О', width: 110, filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
-    {field: 'project', title: '椤圭洰鍚嶇О', width: 100, filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
-    {field: 'order_number', title: '搴忓彿', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 70,filterMethod:filterChanged},
-
-    {field: 'width', title: '瀹�', width: 60,filters: [{data: ''}],slots: {filter: 'num1_filter'},filterMethod:filterChanged},
-    {field: 'height', title: '楂�', width: 60,filters: [{data: ''}],slots: {filter: 'num1_filter'},filterMethod:filterChanged},
-    {field: 'quantity', title: '璁㈠崟鏁伴噺', width: 70},
-    {field: 'area', title: '璁㈠崟闈㈢Н', width: 90},
+    {
+      field: 'order_id',
+      title: t('order.orderId'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      width: 100,
+      filterMethod: filterChanged
+    },
+    {
+      field: 'customer_name',
+      title: t('processCard.customerName'),
+      width: 110,
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged
+    },
+    {
+      field: 'project',
+      title: t('order.project'),
+      width: 100,
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged
+    },
+    {
+      field: 'order_number',
+      title: t('order.OrderNum'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      width: 70,
+      filterMethod: filterChanged
+    },
+    {
+      field: 'technology_number',
+      title: t('processCard.technologyNumber'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      width: 70,
+      filterMethod: filterChanged
+    },
+    {
+      field: 'child_width',
+      title: t('order.width'),
+      width: 60,
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged
+    },
+    {
+      field: 'child_height',
+      title: t('order.height'),
+      width: 60,
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged
+    },
+    {field: 'quantity', title: t('processCard.orderQuantity'), width: 70},
+    {field: 'area', title: t('processCard.orderArea'), width: 90},
     {
       field: 'scheduling_quantity',
       width: 120,
       editRender: {name: 'input', attrs: {placeholder: ''}},
-      title: '鎺掍骇鏁伴噺',
+      title: t('processCard.productionSchedulingQuantity'),
       sortable: true
     },
-    {field: 'pendingProductionQuantity', title: '寰呮帓浜ф暟閲�', width: 120},
-    {field: 'pendingProductionArea', title: '寰呮帓浜ч潰绉�', width: 120},
-    {field: 'productionScheduledQuantity', title: '宸叉帓浜ф暟閲�', width: 120},
-    {field: 'productionScheduledArea', title: '宸叉帓浜ч潰绉�', width: 120},
-    {field: 'review_status', title: '瀹℃牳鐘舵��', width: 140},
-    {field: 'reviewer', title: '瀹℃牳浜�', width: 140},
-    {field: 'product_name', title: '浜у搧鍚嶇О', width: 140},
-    {field: 'shape', title: '褰㈢姸', width: 80},
-    {field: 'notes', title: '澶囨敞', editRender: {name: 'input', attrs: {placeholder: ''}}, width: 120},
-    {field: 'scheduling_id', title: '鎺掍骇缂栧彿',width: 120},
+    {field: 'pendingProductionQuantity', title: t('processCard.quantityToScheduled'), width: 120},
+    {field: 'pendingProductionArea', title: t('processCard.areaToScheduled'), width: 120},
+    {field: 'productionScheduledQuantity', title: t('processCard.plannedProductionQuantity'), width: 120},
+    {field: 'productionScheduledArea', title: t('processCard.plannedProductionArea'), width: 120},
+    {field: 'review_status', title: t('processCard.reviewedState'), width: 140},
+    {field: 'reviewer', title: t('processCard.reviewed'), width: 140},
+    {field: 'glass_child', title: t('order.product'), width: 140},
+    {field: 'shape', title: t('order.shape'), width: 80},
+    {field: 'notes', title: t('processCard.notes'), editRender: {name: 'input', attrs: {placeholder: ''}}, width: 120},
+    {field: 'scheduling_id', title: t('processCard.schedulingId'), width: 120},
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
     buttons: [
-      {code: 'delete', name: '鍒犻櫎', status: 'primary'},
-      {code: 'review', name: '瀹℃牳', status: 'primary'},
-      {code: 'save', name: '鎺掍骇', status: 'primary', icon: 'vxe-icon-save'},
+      {code: 'delete', name: t('basicData.delete'), status: 'primary'},
+      {code: 'review', name: t('basicData.review'), status: 'primary'},
+      {code: 'save', name: t('processCard.scheduling'), status: 'primary', icon: 'vxe-icon-save'},
     ],
     import: false,
     // export: true,
@@ -335,9 +416,7 @@
 
 })
 
-//鍒犻櫎
-
-
+//琛ㄦ牸鎸夐挳
 const gridEvents = {
   async toolbarButtonClick({code}) {
     const $grid = xGrid.value
@@ -372,12 +451,21 @@
               processes: selectProcesses,//宸ュ簭
               userName: username//瀹℃牳浜�
             })
+            //绂佺敤淇濆瓨
+            gridOptions.toolbarConfig.buttons[2].disabled = true
             //淇濆瓨鎺掍骇鏁版嵁
             request.post("/productionScheduling/addScheduling", schedulingData.value).then((res) => {
               if (res.code == 200) {
                 ElMessage.success("淇濆瓨鎴愬姛")
-                location.reload();
+                // 鍚敤淇濆瓨
+                gridOptions.toolbarConfig.buttons[2].disabled = false
+                router.push({
+                  path: '/main/processCard/ProductionScheduling',
+                  query: { random: Math.random()}
+                })
               } else {
+                // 鍚敤淇濆瓨
+                gridOptions.toolbarConfig.buttons[2].disabled = false
                 ElMessage.warning(res.msg)
 
               }
@@ -402,7 +490,7 @@
                 scheduling: selectRecords,
               })
 
-              request.post("/productionScheduling/deleteScheduling",schedulingData.value).then((res) => {
+              request.post("/productionScheduling/deleteScheduling", schedulingData.value).then((res) => {
                 if (res.code == 200) {
                   ElMessage.success("鍒犻櫎鎴愬姛")
                   location.reload();
@@ -427,7 +515,7 @@
               scheduling: selectRecords,
               userName: username//瀹℃牳浜�
             })
-            request.post("/productionScheduling/examineScheduling",schedulingData.value).then((res) => {
+            request.post("/productionScheduling/examineScheduling", schedulingData.value).then((res) => {
               if (res.code == 200) {
                 ElMessage.success("瀹℃牳鎴愬姛")
                 location.reload();
@@ -443,15 +531,63 @@
       }
     }
   },
-
+  menuClick ({ menu, row, column }) {
+    const $grid = xGrid.value
+    if ($grid) {
+      switch (menu.code) {
+        case 'copyChecked' :{
+          let result = toolbarButtonClickEvent()
+          if(result){
+            const dataList = xGrid.value.getTableData().visibleData
+            const val = dataList[result.start][result.cell]
+            dataList.forEach((item,index) =>{
+              if(index>=result.start && index<=result.end){
+                item[result.cell] = val
+              }
+            })
+          }
+          gridOptions.menuConfig.body.options[0][5].disabled=false
+          break
+        }
+        case 'copyAll' :{
+          let result = toolbarButtonClickEvent()
+          if(result){
+            const dataList = xGrid.value.getTableData().visibleData
+            const val = dataList[result.start][result.cell]
+            dataList.forEach((item,index) =>{
+              if(index>=result.start ){
+                item[result.cell] = val
+              }
+            })
+          }
+          gridOptions.menuConfig.body.options[0][5].disabled=false
+          break
+        }
+        case 'clearChecked' :{
+          let result = toolbarButtonClickEvent()
+          if(result){
+            const dataList = xGrid.value.getTableData().visibleData
+            dataList.forEach((item,index) =>{
+              if(index>=result.start && index<=result.end){
+                item[result.cell] = ''
+              }
+            })
+          }
+          gridOptions.menuConfig.body.options[0][5].disabled=false
+          break
+        }
+      }
+    }
+  },
 }
 
 const determineNum = () => {
   const $grid = xGrid.value
   const table = $grid.getTableData().fullData
   const selectRecords = $grid.getCheckboxRecords()
+  let selectState = stateValue.value
   table.forEach((selectRecords) => {
-    if (selectRecords.scheduling_quantity > selectRecords.pendingProductionQuantity) {
+    if (selectRecords.scheduling_quantity > selectRecords.pendingProductionQuantity && selectState==1) {
       ElMessage.warning("鎺掍骇鏁伴噺涓嶈兘澶т簬寰呮帓浜ф暟閲�")
       //绂佺敤淇濆瓨鎸夐挳
       //gridOptions.toolbarConfig.buttons[2].disabled = true
@@ -460,8 +596,6 @@
 
   })
 }
-
-
 
 
 </script>
@@ -481,9 +615,9 @@
 
         />
         &nbsp;&nbsp;
-        <el-input v-model="form.orderId" placeholder="閿�鍞崟鍙�" clearable style="width: 110px"></el-input>
+        <el-input v-model="form.orderId" clearable :placeholder="$t('order.orderId')" style="width: 110px"></el-input>
         &nbsp;
-        <el-select v-model="value" clearable placeholder="璇烽�夋嫨宸ュ簭" style="width: 120px">
+        <el-select v-model="value" clearable default-value="default_city" style="width: 120px">
           <el-option
               v-for="item in titleSelectJson['processType']"
               :key="item.id"
@@ -504,7 +638,7 @@
         <el-button
             id="select"
             :icon="Search"
-            type="primary" @click="getWorkOrder">鏌ヨ
+            type="primary" @click="getWorkOrder">{{$t('basicData.search')}}
         </el-button>
       </el-row>
 
@@ -512,8 +646,8 @@
     <vxe-grid
         ref="xGrid"
         class="mytable-scrollbar"
-        max-height="100%"
         height="100%"
+        max-height="100%"
         v-bind="gridOptions"
         v-on="gridEvents"
         @filter-change="filterChanged"
@@ -542,6 +676,11 @@
 
     </vxe-grid>
   </div>
+  <div class="vxe-table--cell-area" ref="cellArea" >
+    <span  class="vxe-table--cell-main-area"  ></span>
+
+    <span class="vxe-table--cell-active-area"  ></span>
+  </div>
 </template>
 
 <style scoped>
@@ -555,4 +694,11 @@
   height: 6%;
   text-align: center;
 }
+.vxe-grid {
+  /* 绂佺敤娴忚鍣ㄩ粯璁ら�変腑 */
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
 </style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectAddProcess.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectAddProcess.vue
index 94f5322..77d62b2 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectAddProcess.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectAddProcess.vue
@@ -6,6 +6,9 @@
 import deepClone from "@/utils/deepClone";
 import {ElDatePicker, ElMessage} from "element-plus";
 import {Search} from "@element-plus/icons-vue";
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 let router=useRouter()
 const getTableRow = (row,type) =>{
   switch (type) {
@@ -202,18 +205,18 @@
   },//琛ㄥご鍙傛暟
   columns:[
     {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
-    {title: '鎿嶄綔', width: 80, slots: { default: 'button_slot' },fixed:"left"},
-    { type: 'seq',fixed:"left", title: '鑷簭', width: 50 },
-    {field: 'order.orderId',  title: '閿�鍞崟鍙�',filters:[{ data: '' }],slots: { filter: 'num1_filter' } , },
-    {field: 'order.customerName', title: '瀹㈡埛鍚嶇О',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'order.project', title: '椤圭洰鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'order.batch', title: '鎵规',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, },
-    {field: 'order.otherRemarks', title: '鍘熺墖瑕佹眰' ,showOverflow:"ellipsis",filters:[{ data: '' },],slots: { filter: 'num1_filter' }},
-    {field: 'order.icon', title: '鍟嗘爣閫夐」',filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
-    {field: 'order.orderType', title: '璁㈠崟绫诲瀷',filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
-    {field: 'order.salesman', title: '涓氬姟鍛�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'order.processingNote', title: '鍔犲伐瑕佹眰',showOverflow:"ellipsis"},
-    {field: 'order.deliveryAddress', title: '閫佽揣鍦板潃',},
+    {title: t('basicData.operate'), width: 80, slots: { default: 'button_slot' },fixed:"left"},
+    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 },
+    {field: 'order.orderId',  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } , },
+    {field: 'order.customerName', title: t('processCard.customerName'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'order.project', title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'order.batch', title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, },
+    {field: 'order.otherRemarks', title: t('processCard.otherRemarks') ,showOverflow:"ellipsis",filters:[{ data: '' },],slots: { filter: 'num1_filter' }},
+    {field: 'order.icon', title:t('order.icon'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
+    {field: 'order.orderType', title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
+    {field: 'order.salesman', title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'order.processingNote', title: t('order.processingNote'),showOverflow:"ellipsis"},
+    {field: 'order.deliveryAddress', title: t('order.deliveryAddress'),},
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
@@ -233,7 +236,7 @@
     return[
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return t('basicData.total')
         }
         // if (footList.includes(column.field)) {
         //   return sumNum(data, column.field)
@@ -258,8 +261,8 @@
             type="daterange"
             format="YYYY/MM/DD"
             value-format="YYYY-MM-DD"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
+            :start-placeholder="$t('basicData.startDate')"
+            :end-placeholder="$t('basicData.endDate')"
             :default-time="defaultTime"
 
         />
@@ -268,7 +271,7 @@
         <el-button
             @click="getWorkOrder"
             id="select"
-            type="primary" :icon="Search">鏌ヨ
+            type="primary" :icon="Search">{{$t('basicData.search')}}
         </el-button>
       </el-row>
 
@@ -296,7 +299,7 @@
 
       <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
       <template #button_slot="{ row }">
-        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">缂栬緫</el-button>
+        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
       </template>
 
       <template #num1_filter="{ column, $panel }">
diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue
new file mode 100644
index 0000000..70e3b1f
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue
@@ -0,0 +1,276 @@
+<script setup>
+
+import request from "@/utils/request"
+import deepClone from "@/utils/deepClone"
+import {ElDatePicker, ElMessage} from "element-plus"
+import useProductGlassTypeStore from "@/stores/sd/product/productGlassType"
+import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue"
+import {Search} from "@element-plus/icons-vue"
+import GlassType from "@/components/sd/product/GlassType.vue"
+import {useRouter} from 'vue-router'
+import Sortable from 'sortablejs'
+import BasicTable from '@/components/basic/BasicTable.vue'
+import {VXETable} from "vxe-table";
+
+let productGlassTypeStore = useProductGlassTypeStore()
+let router = useRouter()
+let props = defineProps({
+  rowIndex:{}
+})
+
+//琛ㄥ熬姹傚拰
+const sumNum = (list, field) => {
+  let count = 0
+  list.forEach(item => {
+    count += Number(item[field])
+  })
+  return count.toFixed(2)
+}
+
+//瀹氫箟婊氬姩鏉¢珮搴�
+let scrollTop = ref(null)
+let scrollHeight = ref(null)
+let clientHeight = ref(null)
+const scrollEvnt = (row) => {
+  // 鍐呭楂樺害
+  scrollTop.value = row.$event.target.scrollTop
+  scrollHeight.value = row.$event.target.scrollHeight
+  clientHeight.value = row.$event.target.clientHeight
+}
+//绛涢�夋潯浠讹紝鏈夊閿渶瑕佸厛瀹氫箟鏄庣粏閲岄潰鐨勬暟鎹�
+let filterData = ref({
+  order: {
+    project: ''
+  },
+  orderDetail: {
+    productId: '',
+    productName: '',
+    computeGrossArea: '',
+    processingNote: '',
+  }
+
+})
+//瀹氫箟椤甸潰鎬婚〉鏁�
+let pageTotal = ref('')
+//瀹氫箟鏁版嵁杩斿洖缁撴灉
+let produceList = ref([])
+//瀹氫箟褰撳墠椤垫暟
+let pageNum=ref(1)
+let pageState = null
+
+
+
+//绗竴娆″姞杞�
+
+const {currentRoute} = useRouter()
+const route = currentRoute.value
+
+let processId = route.query.processId
+//绗竴娆″姞杞芥暟鎹�
+
+request.post(`/processCard/flowCardDetail/${processId}`, filterData.value).then((res) => {
+
+  if (res.code == 200) {
+    produceList = produceList.value.concat(deepClone(res.data.data))
+    xGrid.value.reloadData(produceList)
+    gridOptions.loading = false
+  } else {
+    ElMessage.warning(res.msg)
+  }
+})
+
+//椤佃剼缈婚〉鏌ヨ
+const selectPageList = ()=>{
+  let startTime = form.date1[0]
+  let endTime = form.date1[1]
+  request.post(`/processCard/flowCard/${pageNum.value}/${total.pageSize}/${startTime}/${endTime}`,filterData.value).then((res) => {
+    if(res.code==200){
+
+      produceList = deepClone(res.data.data)
+      xGrid.value.reloadData(produceList)
+    }else{
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+
+//椤佃剼璺宠浆
+const handlePageChange = ({ currentPage, pageSize }) => {
+  pageNum.value=currentPage
+  total.pageTotal    = pageSize
+  selectPageList()
+}
+
+/*浣跨敤绛涢�夛紝鍚庣鑾峰彇鏁版嵁*/
+const changeFilterEvent = (event, option, $panel,) => {
+  // 鎵嬪姩瑙﹀彂绛涢��
+  $panel.changeOption(event, !!option.data, option)
+}
+
+function filterChanged(column) {
+  gridOptions.loading = true
+  //绛涢�夋潯浠跺彂鐢熷彉鍖栨潯浠跺彂鐢熷彉鍖�
+  let value = column.datas[0] != undefined ? column.datas[0] : ''
+  value = value.trim()
+  //鍒ゆ柇鏄惁瀛樺湪澶栭敭
+  if (column.property.indexOf('.') > -1) {
+    const columnArr = column.property.split('.')
+    filterData.value[columnArr[0]] = {
+      [columnArr[1]]: value
+    }
+  } else {
+    filterData.value[column.property] = value
+  }
+
+//鑾峰彇閫変腑鏃堕棿
+  let startTime = form.date1[0]
+  let endTime = form.date1[1]
+
+  request.post(`/processCard/detailFlowCard/1/${total.pageSize}/${startTime}/${endTime}`, filterData.value).then((res) => {
+    if(res.code==200){
+      pageTotal.value=res.data.total
+      total.pageTotal=parseInt(res.data.total)
+      pageNum.value=1
+      produceList = deepClone(res.data.data)
+      xGrid.value.loadData(produceList)
+      gridOptions.loading=false
+    }else{
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+/*鍚庣杩斿洖缁撴灉澶氬眰宓屽灞曠ず*/
+const hasDecimal = (value) => {
+  const regex = /\./; // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+  return regex.test(value); // 杩斿洖true/false
+}
+
+//瀛愮粍浠舵帴鏀跺弬鏁�
+const xGrid = ref()
+const gridOptions = reactive({
+  border:  "full",//琛ㄦ牸鍔犺竟妗�
+  keepSource: true,//淇濇寔婧愭暟鎹�
+  align: 'center',//鏂囧瓧灞呬腑
+  stripe:true,//鏂戦┈绾�
+  rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  id: 'CustomerList',
+  showFooter: true,//鏄剧ず鑴�
+  printConfig: {},
+  importConfig: {},
+  exportConfig: {},
+  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
+  showOverflow:true,
+  columnConfig: {
+    resizable: true,
+    useKey: true
+  },
+  filterConfig: {   //绛涢�夐厤缃」
+    //remote: true
+  },
+  customConfig: {
+    storage: true
+  },
+  editConfig: {
+    trigger: 'click',
+    mode: 'row',
+    showStatus: true
+  },//琛ㄥご鍙傛暟
+  columns:[
+    {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
+    { type: 'seq',fixed:"left", title: '鑷簭', width: 50 },
+    {field: 'order_id', title: '閿�鍞崟鍙�',filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 },
+    {field: 'process_id', width: 130, title: '娴佺▼鍗″彿' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'order_number', title: '璁㈠崟搴忓彿' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
+    {field: 'quantity', title: '鏁伴噺',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 180},
+    {field: 'area', title: '闈㈢Н' ,showOverflow:"ellipsis"},
+    {field: 'product_name', title: '浜у搧鍚嶇О', },
+    {field: 'founder', title: '鍒嗘灦鍛�', },
+    {field: 'splitFrame_time', title: '鍒嗘灦鏃堕棿', },
+  ],//琛ㄥご鎸夐挳
+
+  toolbarConfig: {
+    // buttons: [{
+    //
+    // }],
+    import: false,
+    // export: true,
+    // print: true,
+    zoom: true,
+    custom: true
+  },
+  data:  [
+
+  ],//table body瀹為檯鏁版嵁
+  //鑴氶儴姹傚拰
+  footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
+    return[
+      columns.map((column, columnIndex) => {
+        if (columnIndex === 0) {
+          return '鍚堣:'
+        }
+        // if (props.tableProp.footList.includes(column.field)) {
+        //   return sumNum(data, column.field)
+        // }
+        return ''
+      })
+    ]
+  }
+
+})
+
+
+
+</script>
+
+<template>
+  <div class="main-div-customer">
+
+    <vxe-grid
+        max-height="100%"
+        @filter-change="filterChanged"
+        class="mytable-scrollbar"
+        ref="xGrid"
+        v-bind="gridOptions"
+
+    >
+      <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
+      <!--      涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�-->
+      <template #content="{ row }">
+        <ul class="expand-wrapper">
+          <li v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
+            <span style="font-weight: bold">{{ item.title + ':  ' }}</span>
+            <span v-if="hasDecimal(item.field)">{{ row[item.field.split('.')[0]][item.field.split('.')[1]] }}</span>
+            <span v-else>{{ row[item.field] }}</span>
+
+          </li>
+        </ul>
+      </template>
+
+      <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
+
+
+      <template #num1_filter="{ column, $panel }">
+        <div>
+          <div v-for="(option, index) in column.filters" :key="index">
+            <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
+          </div>
+        </div>
+      </template>
+
+
+    </vxe-grid>
+  </div>
+</template>
+
+<style scoped>
+.main-div-customer{
+  width: 99%;
+  height: 100%;
+}
+#selectForm {
+  width: 40%;
+  text-align: center;
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectProcessCard.vue
index 91df402..7cd887e 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectProcessCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectProcessCard.vue
@@ -11,7 +11,9 @@
 import Sortable from 'sortablejs'
 import BasicTable from '@/components/basic/BasicTable.vue'
 import {VXETable} from "vxe-table";
-
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 let productGlassTypeStore = useProductGlassTypeStore()
 let router = useRouter()
 let props = defineProps({
@@ -21,9 +23,9 @@
   let startTime = form.date1[0]
   let endTime = form.date1[1]
   switch (type) {
-    case 'edit' : {
-      // console.log(row)
-      // router.push({path: '/main/processCard/PrintFlowCard', query: {id: row.id}})
+    case 'select' : {
+      console.log(row.processId)
+      router.push({path: '/main/processCard/SelectDetailProcessCard', query: { processId: row.processId }})
       break
     }
     case 'setType': {
@@ -32,7 +34,8 @@
       if (state=='鍙帓鐗�'){
         request.post(`/processCard/updateLayoutStatus/${row.processId}/2`).then((res) => {
           if (res.code == 200) {
-            ElMessage.success("鎺掔増鎴愬姛")
+            ElMessage.success(t('processCard.typesettingSuccess')
+            )
             router.push({path: '/main/processCard/SelectProcessCard', query: {random:Math.random()}})
           } else {
 
@@ -43,7 +46,7 @@
       else if(state=='涓嶅彲鎺掔増'){
         request.post(`/processCard/updateLayoutStatus/${row.processId}/1`).then((res) => {
           if (res.code == 200) {
-            ElMessage.success("淇敼鎴愬姛")
+            ElMessage.success(t('processCard.modifySuccessfully'))
             router.push({path: '/main/processCard/SelectProcessCard', query: {random:Math.random()}})
           } else {
 
@@ -57,7 +60,7 @@
     case 'delete': {
       request.post(`/processCard/deleteFlowCard/${row.orderId}/${row.processId}`).then((res) => {
         if (res.code == 200) {
-          ElMessage.success("鍒犻櫎鎴愬姛")
+          ElMessage.success(t('workOrder.deleteOk'))
           router.push({path: '/main/processCard/SelectProcessCard', query: {random:Math.random()}})
         } else {
 
@@ -279,18 +282,18 @@
   },//琛ㄥご鍙傛暟
   columns:[
     {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
-    {title: '鎿嶄綔', width: 160, slots: { default: 'button_slot' },fixed:"left"},
-    { type: 'seq',fixed:"left", title: '鑷簭', width: 50 },
-    {field: 'orderId', title: '閿�鍞崟鍙�',filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 },
-    {field: 'processId', width: 130, title: '娴佺▼鍗″彿' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'orderDetail.productId', title: '浜у搧缂栧彿' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
-    {field: 'orderDetail.productName', title: '浜у搧鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 180},
-    {field: 'order.project', title: '椤圭洰鍚嶇О' ,showOverflow:"ellipsis"},
-    {field: 'quantity', title: '鏁伴噺', },
-    {field: 'orderDetail.computeGrossArea', title: '闈㈢Н', },
-    {field: 'founder', title: '鍒嗘灦鍛�', },
-    {field: 'orderDetail.processingNote', title: '鍔犲伐瑕佹眰', },
-    {field: 'layoutStatus', title: '鎺掔増鐘舵��', }
+    {title: t('basicData.operate'), width: 160, slots: { default: 'button_slot' },fixed:"left"},
+    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 },
+    {field: 'orderId', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 },
+    {field: 'processId', width: 130, title: t('processCard.processId') ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'orderDetail.productId', title: t('order.productId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
+    {field: 'orderDetail.productName', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 180},
+    {field: 'order.project', title: t('order.project') ,showOverflow:"ellipsis"},
+    {field: 'quantity', title: t('order.quantity'), },
+    {field: 'orderDetail.computeGrossArea', title: t('order.area'), },
+    {field: 'founder', title: t('processCard.founder'), },
+    {field: 'orderDetail.processingNote', title: t('order.processingNote'), },
+    {field: 'layoutStatus', title: t('processCard.layoutStatus'), }
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
@@ -311,7 +314,7 @@
     return[
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return t('basicData.total')
         }
         // if (props.tableProp.footList.includes(column.field)) {
         //   return sumNum(data, column.field)
@@ -336,8 +339,8 @@
             type="daterange"
             format="YYYY/MM/DD"
             value-format="YYYY-MM-DD"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
+            :start-placeholder="$t('basicData.startDate')"
+            :end-placeholder="$t('basicData.endDate')"
             :default-time="defaultTime"
 
         />
@@ -345,7 +348,8 @@
         <el-button
             @click="getWorkOrder"
             id="select"
-            type="primary" :icon="Search">鏌ヨ
+            type="primary" :icon="Search">{{$t('basicData.search')}}
+
         </el-button>
       </el-row>
 
@@ -374,11 +378,12 @@
       <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
 
       <template #button_slot="{ row }" >
-        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">鎵撳嵃</el-button>
-        <el-button v-if="row.layoutStatus=='鍙帓鐗�'" @click="getTableRow(row,'setType')" link type="primary" size="small">鎺掔増</el-button>
-        <el-button v-else-if="row.layoutStatus=='涓嶅彲鎺掔増'" @click="getTableRow(row,'setType')" link type="primary" size="small">鍙帓鐗�</el-button>
-        <el-button v-else-if="row.layoutStatus=='宸叉帓鐗�'" disabled @click="getTableRow(row,'setType')" link type="primary" size="small">鎺掔増</el-button>
-        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">鍒犻櫎</el-button>
+        <el-button @click="getTableRow(row,'select')" link type="primary" size="small">{{$t('basicData.edit')}}
+        </el-button>
+        <el-button v-if="row.layoutStatus=='鍙帓鐗�'" @click="getTableRow(row,'setType')" link type="primary" size="small">{{$t('processCard.composing')}}</el-button>
+        <el-button v-else-if="row.layoutStatus=='涓嶅彲鎺掔増'" @click="getTableRow(row,'setType')" link type="primary" size="small">{{$t('processCard.composingOk')}}</el-button>
+        <el-button v-else-if="row.layoutStatus=='宸叉帓鐗�'" disabled @click="getTableRow(row,'setType')" link type="primary" size="small">{{$t('processCard.typesetter')}}</el-button>
+        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
       </template>
 
       <template #num1_filter="{ column, $panel }">
diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/SplittingDetails.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/SplittingDetails.vue
index 1e48c74..b062ecb 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/processCard/SplittingDetails.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/SplittingDetails.vue
@@ -11,6 +11,9 @@
 import Sortable from 'sortablejs'
 import BasicTable from '@/components/basic/BasicTable.vue'
 import {VXETable} from "vxe-table";
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 let router=useRouter()
 const getTableRow = (row,type) =>{
   switch (type) {
@@ -163,15 +166,15 @@
   },//琛ㄥご鍙傛暟
   columns:[
     {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
-    {title: '鎿嶄綔', width: 80, slots: { default: 'button_slot' },fixed:"left"},
-    { type: 'seq',fixed:"left", title: '鑷簭', width: 50 },
-    {field: 'orderId',  title: '閿�鍞崟鍙�',filters:[{ data: '' }],slots: { filter: 'num1_filter' },  },
-    {field: 'orderGlassDetail.productionId', title: '鐢熶骇璁㈠崟鍙�', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'orderDetail.productId', title: '浜у搧缂栧彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'orderDetail.productName', title: '浜у搧鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
-    {field: 'orderDetail.quantity', title: '鎬绘暟閲�',showOverflow:"ellipsis"},
-    {field: 'orderDetail.computeGrossArea', title: '鎬婚潰绉�', },
-    {field: 'orderDetail.perimeter', title: '鍛ㄩ暱',},
+    {title: t('basicData.operate'), width: 80, slots: { default: 'button_slot' },fixed:"left"},
+    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 },
+    {field: 'orderId',  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },  },
+    {field: 'orderGlassDetail.productionId', title: t('workOrder.productionId'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'orderDetail.productId', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'orderDetail.productName', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
+    {field: 'orderDetail.quantity', title: t('order.quantity'),showOverflow:"ellipsis"},
+    {field: 'orderDetail.computeGrossArea', title: t('order.area'), },
+    {field: 'orderDetail.perimeter', title: t('workOrder.perimeter'),},
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
@@ -191,7 +194,7 @@
     return[
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return t('basicData.total')
         }
         if (footList.includes(column.field)) {
           return sumNum(data, column.field)
@@ -232,7 +235,7 @@
 
       <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
       <template #button_slot="{ row }">
-        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">缂栬緫</el-button>
+        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
 
       </template>
 
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 2a58df2..c3fe5c1 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
@@ -7,6 +7,9 @@
 import {indexOf} from "xe-utils";
 import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
 import userInfo from "@/stores/userInfo"
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 let brokenVisible = ref(false)
 const xGrid = ref()
 const brokenGrid =ref()
@@ -15,6 +18,7 @@
 const user=userInfo()
 //瀹氫箟琛ㄥご鏁版嵁
 const titleUploadData = ref({
+  reportingWorkId: null,
   //娴佺▼鍗″彿
   processId: 'NG24030804A02/1',
   //閿�鍞崟鍙�
@@ -76,22 +80,32 @@
 
 })
 
-
+let inputDisabled = ref(false)
 onMounted(() =>{
   if(route.query.processId !== undefined && route.query.processId!=='' && route.query.processId!=null ){
     titleUploadData.value.processId = route.query.processId
   }
+   //route.query.reportingWorkId = 'BG2403150004'
   //鍒ゆ柇鏄惁浼犲叆鎶ュ伐缂栧彿
-  if(route.query.reportingWorkId!== undefined && route.query.reportingWorkId!=='' && route.query.reportingWorkId!=null){
+  if(route.query.reportingWorkId !== '' && route.query.reportingWorkId!=null){
     request.post(`reportingWork/selectUpdateReportingWork/${route.query.reportingWorkId}`).then(res=>{
       if(res.code === '200'){
         titleUploadData.value = res.data.reportingWork
-        console.log(res.data)
+        titleSelectJson.value = res.data.basic
         xGrid.value.reloadData(res.data.reportingWorkDetails)
+        let button =  {
+          code: 'update',
+          name: '淇敼',
+          status: 'primary',
+        }
+        gridOptions.toolbarConfig.buttons.push(button)
       }
+      inputDisabled.value = true
     })
   }
 })
+
+const data = [{id:1,num:2},{id:1,num:3},{id:2,num:2},{id:1,num:2}];
 
 
 //琛ㄥ熬姹傚拰
@@ -153,14 +167,14 @@
     //  {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
     {
       field: 'order_number',
-      title: '搴忓彿',
+      title: t('order.OrderNum'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
     {
       field: 'glass_child',
-      title: '鍗曠墖鍚嶇О',
+      title: t('reportingWorks.glassChild'),
       showOverflow: "ellipsis",
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
@@ -168,21 +182,21 @@
     },
     {
       field: 'technology_number',
-      title: '鏍囪',
+      title: t('processCard.technologyNumber'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
     {
       field: 'glass_address',
-      title: '鐗囨爣璁�',
+      title: t('reportingWorks.glassAddress'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
     {
       field: 'quantity_card',
-      title: '娴佺▼鍗℃暟閲�',
+      title: t('reportingWorks.numberProcessCards'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       showOverflow: "ellipsis",
@@ -190,29 +204,29 @@
     },
     {
       field: 'child_width',
-      title: '瀹�',
+      title: t('order.width'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
     {
       field: 'child_height',
-      title: '楂�',
+      title: t('order.height'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
     {
       field: 'shape',
-      title: '褰㈢姸',
+      title: t('order.shape'),
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'},
       showOverflow: "ellipsis",
       filterMethod: filterChanged
     },
-    {field: 'quantity', title: '鍙姤鏁伴噺',},
+    {field: 'quantity', title: t('reportingWorks.reportableQuantityOk'),},
     {
-      field: 'completedQuantity', title: '瀹屽伐鏁伴噺',width: 120,
+      field: 'completedQuantity', title: t('reportingWorks.completedQuantity'),width: 120,
       editRender: {
         name: 'input',
         attrs: {placeholder: ''}
@@ -220,10 +234,10 @@
 
     },
     {
-      field: 'breakageQuantity',  title: '娆$牬鏁伴噺',
+      field: 'breakageQuantity',  title: t('reportingWorks.quantityBroken'),
     },
-    {field: 'completed', width: 90, title: '宸插畬宸�',},
-    {field: 'onceBroken', width: 90, title: '宸叉鐮�',},
+    {field: 'completed', width: 90, title:t('reportingWorks.completed'),},
+    {field: 'onceBroken', width: 90, title: t('reportingWorks.onceBroken'),},
 
   ],
 //琛ㄥ崟楠岃瘉
@@ -239,6 +253,9 @@
           }else if((row.completedQuantity*1+brokenNum*1)>row.quantity*1){
             return new Error((`${row.completedQuantity}+${brokenNum}>${row.quantity}`))
           }
+          if(titleUploadData.value.reportingWorkId!=null  && row.completedQuantity<row.minQuantity){
+            return new Error(`璇疯緭鍏ュぇ浜庣瓑浜�${row.minQuantity}鐨勬暟瀛梎)
+          }
 
         }
       }
@@ -251,8 +268,8 @@
       // {code: 'sameDamage', name: '娆$牬鐩稿悓'},
       // {code: 'sameOneCompletion', name: '瀹屽伐涓�鍒楃浉鍚�'},
       // {code: 'sameOneDamage', name: '娆$牬涓�鍒楃浉鍚�'},
-      {code: 'saveReportingWork', name: '淇濆瓨', status: 'primary', icon: 'vxe-icon-save',disabled:true},
-      {code: 'saveReportingWorkReview', name: '淇濆瓨骞跺鏍�', status: 'primary', icon: 'vxe-icon-save',disabled:true},
+      {code: 'saveReportingWork', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save',disabled:true},
+      {code: 'saveReportingWorkReview', name: t('reportingWorks.saveAndReview'), status: 'primary', icon: 'vxe-icon-save',disabled:true},
     ],
     // import: false,
     // export: true,
@@ -266,7 +283,7 @@
     return [
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return t('basicData.total')
         }
         return ''
       })
@@ -275,7 +292,12 @@
 
 })
 
-let brokenRow = ref()
+let brokenRow = ref({
+  glass_child:'',
+  order_number:'',
+  technology_number:''
+
+})
 const gridEvents = {
   async toolbarButtonClick({code}) {
     const $grid = xGrid.value
@@ -287,7 +309,7 @@
             ElMessage.error(`鏍¢獙涓嶉�氳繃锛乣)
             return
           }
-          saveReportingWork(0)
+          saveReportingWork(0,'save')
           break
         }
         case 'saveReportingWorkReview':  {
@@ -296,7 +318,16 @@
             ElMessage.error(`鏍¢獙涓嶉�氳繃锛乣)
             return
           }
-          saveReportingWork(1)
+          saveReportingWork(1,'save')
+          break
+        }
+        case 'update':  {
+          const errMap = await $grid.validate(true)
+          if (errMap) {
+            ElMessage.error(`鏍¢獙涓嶉�氳繃锛乣)
+            return
+          }
+          saveReportingWork(0,'update')
           break
         }
       }
@@ -311,7 +342,6 @@
     //brokenGrid.value.reloadData(brokenRow.damageDetail)
     //鏀瑰彉brokenVisible鐨勫�艰Е鍙憃penedBrokenTable锛堬級鏂规硶
     brokenVisible.value = true
-    //console.log(brokenGrid.value)
 
   }
 }
@@ -347,7 +377,7 @@
     showStatus: true
   },//琛ㄥご鍙傛暟
   columns: [
-    {type: 'seq',fixed:"left", title: '鑷簭', width: 80 },
+    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 },
     // {
     //   field: 'order_number',
     //   title: '搴忓彿'
@@ -355,48 +385,48 @@
 
     {
       field: 'breakageQuantity',
-      title: '娆$牬鏁伴噺',
+      title: t('reportingWorks.quantityBroken'),
       editRender: {name: 'input', attrs: {placeholder: ''}}
     },
     {field: 'available',
-      title: '鍙埄鐢�',
+      title: t('reportingWorks.available'),
       slots: {default: 'available'}
     },
-    {field: 'returnProcess', title: '閫�鍥炲伐搴�',
+    {field: 'returnProcess', title: t('reportingWorks.returnProcess'),
       editRender: {},
       slots: {default: 'returnProcess_default', edit: 'returnProcess'}
     },
     {
-      field: 'breakageType', title: '娆$牬绫诲瀷',
+      field: 'breakageType', title: t('reportingWorks.breakageType'),
       editRender: {},
       slots: {default: 'breakageType_default', edit: 'breakageType'}
     },
     {
-      field: 'breakageReason', title: '娆$牬鍘熷洜',
+      field: 'breakageReason', title: t('reportingWorks.breakageReason'),
       editRender: {},
       slots: {default: 'breakageReason_default', edit: 'breakageReason'}
     },
     {
-      field: 'responsibleProcess', title: '璐d换宸ュ簭',
+      field: 'responsibleProcess', title: t('reportingWorks.responsibleProcess'),
       editRender: {},
       slots: {default: 'responsibleProcess_default', edit: 'responsibleProcess'}
     },
     {
       field: 'responsibleEquipment',
-      title: '璐d换璁惧',
+      title: t('reportingWorks.responsibleEquipment'),
       editRender: {},
       slots: {default: 'reportingDeviceSort_default', edit: 'reportingDeviceSort'}
       // editRender: {name: 'input', attrs: {placeholder: ''}}
     },
 
     {
-      field: 'responsibleTeam',  title: '璐d换鐝粍',
+      field: 'responsibleTeam',  title: t('reportingWorks.responsibleTeam'),
       editRender: {},
       slots: {default: 'responsibleTeam_default', edit: 'responsibleTeam'}
     },
     {
       field: 'responsiblePersonnel',
-      title: '璐d换浜哄憳',
+      title: t('reportingWorks.responsiblePersonnel'),
       editRender: {name: 'input', attrs: {placeholder: ''}}
 
     },
@@ -442,8 +472,8 @@
   },
   toolbarConfig: {//琛ㄥご鎸夐挳
     buttons: [
-      {code: 'addRow', name: '娣诲姞', status: 'primary', icon: 'vxe-icon-square-plus'},
-      {code: 'removeRow', name: '鍒犻櫎', status: 'primary', icon: 'vxe-icon-delete'},
+      {code: 'addRow', name: t('reportingWorks.increase'), status: 'primary', icon: 'vxe-icon-square-plus'},
+      {code: 'removeRow', name: t('basicData.delete'), status: 'primary', icon: 'vxe-icon-delete'},
     ],
     // import: false,
     // export: true,
@@ -476,7 +506,6 @@
   addListener(brokenGrid.value,brokenGridOptions)
   let damage =ref(brokenRow.value.damageDetails)
   brokenGrid.value.reloadData(damage.value)
-  //console.log(brokenRow.value)
 }
 
 
@@ -497,16 +526,29 @@
   })
 
   let reportingWorkNum = isNaN(brokenRow.value.completedQuantity*1)?0:brokenRow.value.completedQuantity*1
-  if((breakageQuantityCount+reportingWorkNum>brokenRow.value.quantity*1) ){
+  if((breakageQuantityCount>brokenRow.value.quantity*1) ){
     ElMessage.warning(`鎹熻�楁暟:'${breakageQuantityCount}'
-                               瀹屽伐鏁�:'${reportingWorkNum}'涔嬪拰${breakageQuantityCount+reportingWorkNum}
                                涓嶈兘澶т簬${brokenRow.value.quantity*1}`)
     return false
   }
-
+  brokenRow.value.completedQuantity = brokenRow.value.quantity-breakageQuantityCount
   breakageQuantityCount = breakageQuantityCount === 0 ? null : breakageQuantityCount
   brokenRow.value.breakageQuantity = breakageQuantityCount
   brokenRow.value.damageDetails=brokenGrid.value.getTableData().fullData
+  // xGrid.value.getTableData().fullData.forEach(
+  //
+  // )
+  const equalByOrderNum = xGrid.value.getTableData().fullData.filter((row) =>{
+    return row.order_number === brokenRow.value.order_number
+  })
+  const maxQuantity =  Math.max(...equalByOrderNum.map(item =>item.breakageQuantity || 0))
+  equalByOrderNum.forEach((row) =>{
+    row.completedQuantity= brokenRow.value.quantity*1-maxQuantity
+  })
+
+
+  getQuantity()
+
   done()
 }
 
@@ -521,11 +563,38 @@
   }
 })
 
-const saveReportingWork = (type) => {
+function checkSameNumForId(data, targetId) {
+  // 鍒濆鍖栦竴涓璞℃潵瀛樺偍閬囧埌鐨刬d鍙婂叾瀵瑰簲鐨刵um鍊�
+  const idNums = {};
+  let firstNum = null;
+
+  for (const item of data) {
+    if (item.order_number === targetId) {
+      // 濡傛灉鎵惧埌浜嗙洰鏍噄d锛屾鏌um鏄惁涓庣涓�涓亣鍒扮殑num鐩稿悓
+      if (firstNum === null) {
+        // 濡傛灉鏄涓�涓亣鍒扮殑锛岃褰昻um鍊�
+        firstNum = item.completedQuantity;
+      } else if (item.completedQuantity !== firstNum) {
+        // 濡傛灉num鍊间笌绗竴涓亣鍒扮殑num涓嶅悓锛岃繑鍥瀎alse
+        return false;
+      }
+    }
+  }
+
+  // 濡傛灉閬嶅巻瀹屾暟缁勫悗娌℃湁杩斿洖false锛岄偅涔堟墍鏈夊叿鏈夌洰鏍噄d鐨勫璞¢兘鍏锋湁鐩稿悓鐨刵um鍊�
+  return true;
+}
+
+
+
+
+
+
+const saveReportingWork = (state,saveType) => {
 
   if(xGrid.value.getTableData().fullData.length===0){
     ElMessage.warning(`璇烽�夋嫨娴佺▼鍗℃暟鎹甡)
-    return false
+    return
   }
   const device = titleUploadData.value.deviceName
   if(device === null || device === undefined || device === ''){
@@ -537,6 +606,28 @@
     ElMessage.error('璇烽�夋嫨鎶ュ伐璁惧锛�')
     return
   }
+
+  const seenIds = {}
+  const uniqueByOrderNum = xGrid.value.getTableData().fullData.filter(item => {
+    // 妫�鏌tem鐨刬d鏄惁宸茬粡鍦╯eenIds涓�
+    if (!seenIds[item.order_number]) {
+      // 濡傛灉涓嶅湪锛屾坊鍔犲畠骞惰繑鍥瀟rue浠ヤ繚鐣欒繖涓璞�
+      seenIds[item.order_number] = true;
+      return true;
+    }
+    // 濡傛灉宸茬粡鍦╯eenIds涓紝杩斿洖false浠ヨ繃婊ゆ帀杩欎釜瀵硅薄
+    return false;
+  });
+  const notFinishList = xGrid.value.getTableData().fullData.filter(item =>{
+    return item.saveFlag === false
+  })
+  for(let item of uniqueByOrderNum){
+    if(!checkSameNumForId(notFinishList,item.order_number)){
+      ElMessage.error(`璇锋鏌ヨ鍗曞簭鍙�: ${item.order_number} 鎶ュ伐鏁伴噺鏄惁鐩稿悓锛乣)
+      return false
+    }
+  }
+
 
   titleUploadData.value.creator = user.user.userName
   titleUploadData.value.creatorId = user.user.userId
@@ -553,10 +644,19 @@
   const requestData = {
     title:titleUploadData.value,
     detail:xGrid.value.getTableData().fullData,
-    type:type//瀹℃牳鐘舵��
+    type:state//瀹℃牳鐘舵��
   }
   gridOptions.toolbarConfig.buttons[0].disabled=true
   gridOptions.toolbarConfig.buttons[1].disabled=true
+  if(saveType==='save'){
+    saveReportingWorkRequest(requestData)
+  }else{
+    updateReportingWorkRequest(requestData)
+  }
+
+}
+
+const saveReportingWorkRequest = (requestData) =>{
   request.post(`/reportingWork/saveReportingWork`,requestData).then(res =>{
     if (res.code == 200){
       ElMessage.success("鎶ュ伐鎴愬姛")
@@ -564,18 +664,33 @@
     }else{
       const errorObj = JSON.parse(res.msg)
       const msg = "搴忓彿锛�"+errorObj.orderNumber+'\n'
-                +'灏忕墖椤哄簭锛�'+errorObj.technologyNumber+'\n'
-                +"瀹為檯鍙姤宸ユ暟閲忥細"+errorObj.processNum+'<'+
-                "鎶ュ伐鏁伴噺锛�"+errorObj.sumNum+'\n'
-                +"璇峰埛鏂扮晫闈㈤噸鏂版姤宸�"
+          +'灏忕墖椤哄簭锛�'+errorObj.technologyNumber+'\n'
+          +"瀹為檯鍙姤宸ユ暟閲忥細"+errorObj.processNum+'<'+
+          "鎶ュ伐鏁伴噺锛�"+errorObj.sumNum+'\n'
+          +"璇峰埛鏂扮晫闈㈤噸鏂版姤宸�"
 
       ElMessage.error(msg)
     }
   }).catch(err =>{
     ElMessage.error(err.message)
   }).finally(()=>{
+
     gridOptions.toolbarConfig.buttons[0].disabled=false
     gridOptions.toolbarConfig.buttons[1].disabled=false
+  })
+}
+
+//鏇存柊鎶ュ伐鏁版嵁
+const updateReportingWorkRequest = (requestData) =>{
+  request.post(`/reportingWork/updateReportingWork`,requestData).then(res =>{
+    if (res.code == 200){
+      ElMessage.success("鎶ュ伐淇敼鎴愬姛")
+      router.push({path:'/main/reportingWorks/AddReportingWork',
+        query:{
+          processId:titleUploadData.value.processId,
+          random:Math.random()}
+      })
+    }
   })
 }
 
@@ -656,17 +771,17 @@
 const getWork = () => {
 
   let processId = titleUploadData.value.processId
-  if (processId.indexOf("/") < 0) {
-
-    ElMessage.warning("璇疯緭鍏ユ纭牸寮忔祦绋嬪崱")
-    return
-  }
-  let indexOfChar = processId.indexOf("/")
-  let leftString = processId.slice(0, indexOfChar)
-  if (leftString.length != 13) {
-    ElMessage.warning("璇疯緭鍏ユ纭綅鏁扮殑娴佺▼鍗�")
-    return
-  }
+  // if (processId.indexOf("/") < 0) {
+  //
+  //   ElMessage.warning("璇疯緭鍏ユ纭牸寮忔祦绋嬪崱")
+  //   return
+  // }
+  // let indexOfChar = processId.indexOf("/")
+  // let leftString = processId.slice(0, indexOfChar)
+  // if (leftString.length != 13) {
+  //   ElMessage.warning("璇疯緭鍏ユ纭綅鏁扮殑娴佺▼鍗�")
+  //   return
+  // }
 //宸ュ簭
   let process = titleUploadData.value.thisProcess
   if (process == "" || process == null) {
@@ -719,7 +834,7 @@
       }
 
       //鍒ゆ柇鏃╂櫄鐝�
-      titleUploadData.value.classes='鏃╃彮'
+      titleUploadData.value.classes=t('reportingWorks.early')
       titleUploadData.value.reportingWorkTime = formatCurrentTime()
       //缁戝畾涓嬫柟琛ㄦ牸
       detail.value = res.data.Detail
@@ -781,7 +896,26 @@
         item.completedQuantity=row.completedQuantity
       }
     })
+    getQuantity()
   }
+}
+const  getQuantity = () => {
+  const arr = xGrid.value.getTableData().fullData
+  const returnArr =  arr.filter((obj, index, self) =>
+      self.findIndex((t) => t.order_number === obj.order_number) === index
+  )
+
+
+  let sumBreak = 0
+  let sumQuantity = 0
+  returnArr.forEach((item)=>{
+    sumQuantity+=Number(item.completedQuantity*1)
+  })
+  arr.forEach((item)=>{
+    sumBreak+=Number(item.breakageQuantity) || 0
+  })
+  titleUploadData.value.thisCompletedQuantity = sumQuantity
+  titleUploadData.value.thisWornQuantity = sumBreak
 }
 
 </script>
@@ -789,9 +923,10 @@
 <template>
   <div style="height: 100%;width: 100%">
     <div id="head" style="height: 5%;width: 100%;margin-bottom: 5px">
-      <el-input v-model="titleUploadData.processId" placeholder="娴佺▼鍗″彿" style="width: 200px" @keyup.enter.native="getWork"/>
+      <el-input :disabled="inputDisabled" v-if="titleUploadData.reportingWorkId" v-model="titleUploadData.reportingWorkId" placeholder="鎶ュ伐缂栧彿" style="width: 200px" />
+      <el-input :disabled="inputDisabled" v-model="titleUploadData.processId" placeholder="娴佺▼鍗″彿" style="width: 200px" @keyup.enter.native="getWork"/>
       &nbsp;
-      <el-select v-model="titleUploadData.thisProcess" clearable placeholder="璇烽�夋嫨宸ュ簭" style="width: 120px"
+      <el-select :disabled="inputDisabled" v-model="titleUploadData.thisProcess" clearable placeholder="璇烽�夋嫨宸ュ簭" style="width: 120px"
                  @change="getWork">
         <el-option
             v-for="item in titleSelectJson['processType']"
@@ -801,39 +936,40 @@
         />
       </el-select>
       &nbsp;
-      <el-button :disabled="disabledFlag" :loading="loadingFlag" @click="reviewReportingWork" type="primary">瀹℃牳閫氳繃</el-button>
+      <el-button :disabled="disabledFlag" :loading="loadingFlag" @click="reviewReportingWork" type="primary">{{$t('reportingWorks.passAudit')}}
+      </el-button>
 <!--      <el-button type="primary">瀹℃牳涓嶉�氳繃</el-button>-->
       &nbsp;
-      <label>娴佺▼鍗¢潰绉細xxx骞虫柟绫�</label>
+      <label>{{$t('reportingWorks.processCardArea')}}锛�</label>
     </div>
     <div style="background-color: white;margin-bottom: 5px;height: 17%;width: 100%">
       <el-row>
         <el-col :span="2">
-          <el-text>閿�鍞崟鍙凤細</el-text>
+          <el-text>{{$t('order.orderId')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-text>{{ titleUploadData.orderId }}</el-text>
         </el-col>
         <el-col :span="2">
-          <el-text>鐢熶骇璁㈠崟鍙凤細</el-text>
+          <el-text>{{$t('workOrder.productionId')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-text>{{ titleUploadData.productionId }}</el-text>
         </el-col>
         <el-col :span="2">
-          <el-text>瀹㈡埛缂栫爜锛�</el-text>
+          <el-text>{{$t('processCard.customerId')}}锛�</el-text>
         </el-col>
         <el-col :span="2">
           <el-text>{{ titleUploadData.order.customerId }}</el-text>
         </el-col>
         <el-col :span="2">
-          <el-text>瀹㈡埛鍚嶇О锛�</el-text>
+          <el-text>{{$t('processCard.customerName')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-text class="customClass"></el-text>
         </el-col>
         <el-col :span="2">
-          <el-text>椤圭洰鍚嶇О锛�</el-text>
+          <el-text>{{$t('order.project')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-text wrap-text="false">{{ titleUploadData.order.project }}</el-text>
@@ -842,10 +978,10 @@
       </el-row>
       <el-row>
         <el-col :span="2">
-          <el-text>鎶ュ伐璁惧锛�</el-text>
+          <el-text>{{$t('reportingWorks.deviceType')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
-          <el-select v-model="titleUploadData.deviceName" clearable placeholder="璇烽�夋嫨璁惧">
+          <el-select v-model="titleUploadData.deviceName" clearable :placeholder="$t('reportingWorks.pleaseDevice')">
             <el-option
                 v-for="item in titleSelectJson['deviceType']"
                 :key="item.id"
@@ -855,27 +991,27 @@
           </el-select>
         </el-col>
         <el-col :span="2">
-          <el-text>涓婂伐搴忥細</el-text>
+          <el-text>{{$t('reportingWorks.previousProcess')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
 
           <el-text>{{ titleUploadData.previousProcess }}</el-text>
         </el-col>
         <el-col :span="2">
-          <el-text>鍙姤宸ユ暟閲忥細</el-text>
+          <el-text>{{$t('reportingWorks.numberReported')}}锛�</el-text>
         </el-col>
         <el-col :span="2">
           <el-text>{{ titleUploadData.previousProcessQuantity }}</el-text>
 
         </el-col>
         <el-col :span="2">
-          <el-text>鏈伐搴忓畬宸ワ細</el-text>
+          <el-text>{{$t('reportingWorks.thisCompletedQuantity')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-text>{{ titleUploadData.thisCompletedQuantity }}</el-text>
         </el-col>
         <el-col :span="2">
-          <el-text>鏈伐搴忔鐮达細</el-text>
+          <el-text>{{$t('reportingWorks.thisWornQuantity')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-text>{{ titleUploadData.thisWornQuantity }}</el-text>
@@ -884,10 +1020,10 @@
       </el-row>
       <el-row>
         <el-col :span="2">
-          <el-text>鎶ュ伐鐝粍锛�</el-text>
+          <el-text>{{$t('reportingWorks.teamsType')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
-          <el-select v-model="titleUploadData.teamsGroupsName" clearable placeholder="璇烽�夋嫨鐝粍">
+          <el-select v-model="titleUploadData.teamsGroupsName" clearable :placeholder="$t('reportingWorks.selectTeam')">
             <el-option
                 v-for="item in titleSelectJson['teamsType']"
                 :key="item.id"
@@ -897,10 +1033,10 @@
           </el-select>
         </el-col>
         <el-col :span="2">
-          <el-text>鐝锛�</el-text>
+          <el-text>{{$t('reportingWorks.classes')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
-          <el-select v-model="titleUploadData.classes" class="processesSt" placeholder="">
+          <el-select v-model="titleUploadData.classes" class="processesSt" :placeholder="$t('reportingWorks.selectClasses')">
             <el-option
                 v-for="item in classesOption"
                 :key="item.value"
@@ -910,14 +1046,14 @@
           </el-select>
         </el-col>
         <el-col :span="2">
-          <el-text>涓嬪伐搴忥細</el-text>
+          <el-text>{{$t('reportingWorks.nextProcess')}}锛�</el-text>
         </el-col>
         <el-col :span="2">
           <el-text>{{ titleUploadData.nextProcess }}</el-text>
 
         </el-col>
         <el-col :span="2">
-          <el-text>鎶ュ伐鏃ユ湡锛�</el-text>
+          <el-text>{{$t('reportingWorks.reportingWorkTime')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-date-picker
@@ -930,7 +1066,7 @@
           />
         </el-col>
         <el-col :span="2">
-          <el-text>澶囨敞锛�</el-text>
+          <el-text>{{$t('basicData.remarks')}}锛�</el-text>
         </el-col>
         <el-col :span="3">
           <el-input v-model="titleUploadData.notes" placeholder="" />
@@ -968,7 +1104,8 @@
           v-model="brokenVisible"
           :close-on-click-modal="false"
           :close-on-press-escape="false"
-          title="鐮存崯鍒楄〃"
+          :title="$t('reportingWorks.damageList')+':'
+          +brokenRow.glass_child+'.'+brokenRow.order_number+'.'+brokenRow.technology_number"
           style="width: 80%;height:75% ">
         <vxe-grid
 
diff --git a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/ReportingWorks.vue b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/ReportingWorks.vue
index 0c12745..e0df7d8 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/ReportingWorks.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/ReportingWorks.vue
@@ -6,7 +6,9 @@
 import {ElMessage} from "element-plus";
 import {useRouter,useRoute} from "vue-router";
 import  GlassType from '@/components/basic/product/GlassType.vue'
-
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 
 const router = useRouter()
 const route = useRoute()
@@ -20,9 +22,9 @@
   <div id="main">
     <div id="div-title">
       <el-breadcrumb :separator-icon="ArrowRight">
-        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/reportingWorks/SelectReportingWorks' }">鎶ュ伐绠$悊</el-breadcrumb-item>
-        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/reportingWorks/AddReportingWork' }">鎶ュ伐鏂板</el-breadcrumb-item>
-        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/reportingWorks/QualityInspectionReview' }">璐ㄦ瀹℃牳</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/reportingWorks/SelectReportingWorks' }">{{$t('reportingWorks.WorkReportingManagement')}}</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/reportingWorks/AddReportingWork' }">{{$t('reportingWorks.addReportingWorks')}}</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/reportingWorks/QualityInspectionReview' }">{{$t('reportingWorks.qualityInspectionReview')}}</el-breadcrumb-item>
         <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">鎵撳嵃</el-breadcrumb-item>
       </el-breadcrumb>
     </div>
diff --git a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue
index 0e752bb..465977e 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue
@@ -1,17 +1,34 @@
 <script setup>
 
-import {reactive} from "vue";
+import {reactive, ref} from "vue";
 import {useRouter} from  'vue-router'
+import request from "@/utils/request";
+import deepClone from "@/utils/deepClone";
+import {ElDatePicker, ElMessage} from "element-plus";
+import {Search} from "@element-plus/icons-vue";
+import { useI18n } from 'vue-i18n'
+import SelectProduct from "@/views/sd/product/SelectProduct.vue";
+//璇█鑾峰彇
+const { t } = useI18n()
 let router=useRouter()
 const getTableRow = (row,type) =>{
   switch (type) {
     case 'edit' :{
       //alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑缂栬緫淇℃伅')
-      router.push({path: '/main/reportingWorks/AddReportingWork', query: { id: row.id }})
+     // router.push({path: '/main/reportingWorks/AddReportingWork', query: { id: row.id }})
       break
     }
     case 'delete':{
-      alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍒犻櫎淇℃伅')
+      request.post(`/reportingWork/deleteWork/${row.reportingWorkId}/${row.processId}/${row.thisProcess}`).then((res) => {
+        if (res.code == 200) {
+          ElMessage.success(t('workOrder.deleteOk'))
+          router.push({path: '/main/reportingWorks/SelectReportingWorks', query: {random:Math.random()}})
+        } else {
+
+          ElMessage.warning(res.msg)
+
+        }
+      })
       break
     }
     case  'setType':{
@@ -20,6 +37,17 @@
     }
   }
 }
+
+
+function padLeftZero(str) {
+  return ('00' + str).substr(str.length)
+}
+
+//鎻愪氦鐨勮〃鍗�
+const form = reactive({
+  date1: '',
+  orderId: ''
+})
 
 //琛ㄥ熬姹傚拰
 const sumNum = (list, field) => {
@@ -30,14 +58,181 @@
   return count.toFixed(2)
 }
 
-//瀛愮粍浠舵帴鏀跺弬鏁�
+//瀹氫箟婊氬姩鏉¢珮搴�
+let scrollTop = ref(null)
+let scrollHeight = ref(null)
+let clientHeight = ref(null)
+const scrollEvnt = (row) => {
+  // 鍐呭楂樺害
+  scrollTop.value = row.$event.target.scrollTop
+  scrollHeight.value = row.$event.target.scrollHeight
+  clientHeight.value = row.$event.target.clientHeight
+}
+//绛涢�夋潯浠讹紝鏈夊閿渶瑕佸厛瀹氫箟鏄庣粏閲岄潰鐨勬暟鎹�
+let filterData = ref({
+  order: {
+    project: '',
+    batch:''
+  },
+  orderGlassDetail: {
+    completedArea:'',
+    wornArea:''
+  }
 
+})
+//瀹氫箟椤甸潰鎬婚〉鏁�
+let pageTotal = ref('')
+//瀹氫箟鏁版嵁杩斿洖缁撴灉
+let produceList = ref([])
+//瀹氫箟褰撳墠椤垫暟
+let pageNum=ref(1)
+let pageState = null
+
+//鑾峰彇涓冨ぉ鍓嶅埌褰撳墠鏃堕棿
+function getNowTime() {
+  const start = new Date(new Date().getTime()- 3600 * 1000 * 24 * 7)
+      .toISOString()
+      .replace('T', ' ')
+      .slice(0,10) //榛樿寮�濮嬫椂闂�7澶╁墠
+  const end = new Date(new Date().getTime()+3600 * 1000 * 24)
+      .toISOString()
+      .replace('T', ' ')
+      .slice(0,10)//榛樿缁撴潫鏃堕棿褰撳墠鏃堕棿
+  return [start, end]
+}
+
+
+//绗竴娆″姞杞借幏鍙栬繎涓冨ぉ鏃堕棿鍜岄粯璁ょ姸鎬�
+form.date1=getNowTime()
+let startTime = form.date1[0]
+let endTime = form.date1[1]
+let inputVal = form.orderId
+if (inputVal == '') {
+  inputVal = null
+}
+let total = reactive({
+  pageTotal : 0,
+  dataTotal : 0,
+  pageSize : 100
+})
+//绗竴娆″姞杞芥暟鎹�
+request.post(`/reportingWork/selectReportingWork/1/${total.pageSize}/${startTime}/${endTime}/${inputVal}`, filterData.value).then((res) => {
+
+  if (res.code == 200) {
+    console.log(res.data.data);
+    total.dataTotal = res.data.total.total*1
+    total.pageTotal= res.data.total.pageTotal
+    pageTotal.value = res.data.total
+    produceList = produceList.value.concat(deepClone(res.data.data))
+    xGrid.value.reloadData(produceList)
+    gridOptions.loading = false
+  } else {
+    ElMessage.warning(res.msg)
+  }
+})
+
+//椤佃剼缈婚〉鏌ヨ
+const selectPageList = ()=>{
+  let startTime = form.date1[0]
+  let endTime = form.date1[1]
+  let inputVal = form.orderId
+  if (inputVal == '') {
+    inputVal = null
+  }
+  request.post(`/reportingWork/selectReportingWork/${pageNum.value}/${total.pageSize}/${startTime}/${endTime}/${inputVal}`,filterData.value).then((res) => {
+    if(res.code==200){
+
+
+      produceList = deepClone(res.data.data)
+      xGrid.value.reloadData(produceList)
+    }else{
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+//鐐瑰嚮鏌ヨ
+const getWorkOrder = () => {
+
+  let startTime = form.date1[0]
+  let endTime = form.date1[1]
+  let inputVal = form.orderId
+  if (inputVal == '') {
+    inputVal = null
+  }
+  request.post(`/reportingWork/selectReportingWork/${pageNum.value}/${total.pageSize}/${startTime}/${endTime}/${inputVal}`, filterData.value).then((res) => {
+    if (res.code == 200) {
+      total.dataTotal = res.data.total.total*1
+      total.pageTotal= res.data.total.pageTotal
+      pageTotal.value = res.data.total
+      xGrid.value.loadData(res.data.data)
+      gridOptions.loading = false
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+//椤佃剼璺宠浆
+const handlePageChange = ({ currentPage, pageSize }) => {
+  pageNum.value=currentPage
+  total.pageTotal    = pageSize
+  selectPageList()
+}
+
+/*浣跨敤绛涢�夛紝鍚庣鑾峰彇鏁版嵁*/
+const changeFilterEvent = (event, option, $panel,) => {
+  // 鎵嬪姩瑙﹀彂绛涢��
+  $panel.changeOption(event, !!option.data, option)
+}
+
+function filterChanged(column) {
+  gridOptions.loading = true
+  //绛涢�夋潯浠跺彂鐢熷彉鍖栨潯浠跺彂鐢熷彉鍖�
+  let value = column.datas[0] != undefined ? column.datas[0] : ''
+  value = value.trim()
+  //鍒ゆ柇鏄惁瀛樺湪澶栭敭
+  if (column.property.indexOf('.') > -1) {
+    const columnArr = column.property.split('.')
+    filterData.value[columnArr[0]] = {
+      [columnArr[1]]: value
+    }
+  } else {
+    filterData.value[column.property] = value
+  }
+
+//鑾峰彇閫変腑鏃堕棿
+  let startTime = form.date1[0]
+  let endTime = form.date1[1]
+
+  request.post(`/reportingWork/selectReportingWork/1/${total.pageSize}/${startTime}/${endTime}/${inputVal}`, filterData.value).then((res) => {
+    if(res.code==200){
+      pageTotal.value=res.data.total
+      total.pageTotal=parseInt(res.data.total)
+      pageNum.value=1
+      produceList = deepClone(res.data.data)
+      xGrid.value.loadData(produceList)
+      gridOptions.loading=false
+    }else{
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+/*鍚庣杩斿洖缁撴灉澶氬眰宓屽灞曠ず*/
+const hasDecimal = (value) => {
+  const regex = /\./; // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+  return regex.test(value); // 杩斿洖true/false
+}
+
+//瀛愮粍浠舵帴鏀跺弬鏁�
+const xGrid = ref()
 const gridOptions = reactive({
   border:  "full",//琛ㄦ牸鍔犺竟妗�
   keepSource: true,//淇濇寔婧愭暟鎹�
   align: 'center',//鏂囧瓧灞呬腑
   stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
   id: 'CustomerList',
   showFooter: true,//鏄剧ず鑴�
   printConfig: {},
@@ -64,18 +259,22 @@
     {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
     {title: '鎿嶄綔', width: 140, slots: { default: 'button_slot' },fixed:"left"},
     { type: 'seq',fixed:"left", title: '鑷簭', width: 50 },
-    {field: 'reportingWorkNo', width: 120, title: '鎶ュ伐缂栧彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true, },
-    {field: 'reportingWorkTime',width: 120, title: '鎶ュ伐鏃堕棿', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'processCard', width: 130,title: '娴佺▼鍗″彿', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
-    {field: 'entryName',width: 120, title: '椤圭洰鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'batch', width: 100,title: '鎵规', sortable: true,showOverflow:"ellipsis"},
-    {field: 'device', width: 100,title: '璁惧', sortable: true},
-    {field: 'thisProcess',width: 100, title: '鏈伐搴�', sortable: true},
-    {field: 'finishedNumber',width: 120, title: '鏈伐搴忓畬宸�', sortable: true,showOverflow:"ellipsis"},
-    {field: 'finishedArea', width: 120,title: '瀹屽伐闈㈢Н', sortable: true},
-    {field: 'wornNumber',width: 120, title: '鏈伐搴忔鐮�', sortable: true},
-    {field: 'wornArea',width: 120, title: '娆$牬闈㈢Н', sortable: true},
-    {field: 'teamName',width: 120, title: '鐝粍鍚嶇О', sortable: true}
+    {field: 'reportingWorkId', width: 120, title: '鎶ュ伐缂栧彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, },
+    {field: 'reportingWorkTime',width: 120, title: '鎶ュ伐鏃堕棿' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'orderId', width: 130,title: '閿�鍞崟鍙�' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'processId', width: 130,title: '娴佺▼鍗″彿' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+    {field: 'order.project',width: 120, title: '椤圭洰鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, },
+    {field: 'order.batch', width: 100,title: '鎵规' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+
+    {field: 'thisProcess',width: 100, title: '鏈伐搴�',filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
+    {field: 'thisCompletedQuantity',width: 120, title: '鏈伐搴忓畬宸�' },
+    {field: 'completedArea', width: 120,title: '瀹屽伐闈㈢Н', },
+    {field: 'thisWornQuantity',width: 120, title: '鏈伐搴忔鐮�', },
+    {field: 'wornArea',width: 120, title: '娆$牬闈㈢Н', },
+    {field: 'deviceName', width: 100,title: '鎶ュ伐璁惧', },
+    {field: 'teamsGroupsName',width: 120, title: '鎶ュ伐鐝粍', },
+    {field: 'reviewedState',width: 120, title: '瀹℃牳鐘舵��', },
+
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
@@ -88,95 +287,10 @@
     zoom: true,
     custom: true
   },
-  data:  [
-    {
-      reportingWorkNo: 'BG2312080011',
-      reportingWorkTime: '2023-12-08 09:05:58',
-      processCard: 'NG23120801A01',
-      entryName: '淇″悎鏄ュぉ閲�',
-      batch: '鍥涙壒浜�',
-      device:'澶ф捣鍒╁畞',
-      thisProcess: '鍒囧壊',
-      finishedNumber: '13',
-      finishedArea: '44.22',
-      wornNumber: '',
-      wornArea: '',
-      teamName:'鍒囧壊涓�鐝�'
-    },
-    {
-      reportingWorkNo: 'BG2312080013',
-      reportingWorkTime: '2023-12-08 09:05:58',
-      processCard: 'NG23120801A01',
-      entryName: '淇″悎鏄ュぉ閲�',
-      batch: '涓�鎵逛簩',
-      device:'澶ф捣鍒╁畞',
-      thisProcess: '鍒囧壊',
-      finishedNumber: '13',
-      finishedArea: '44.22',
-      wornNumber: '',
-      wornArea: '',
-      teamName:'鍒囧壊涓�鐝�'
-    },
-    {
-      reportingWorkNo: 'BG2311080025',
-      reportingWorkTime: '2023-12-08 09:05:58',
-      processCard: 'NG23120801A01',
-      entryName: '淇″悎鏄ュぉ閲�',
-      batch: '涓�鎵逛簩',
-      device:'澶ф捣鍒╁畞',
-      thisProcess: '鍒囧壊',
-      finishedNumber: '13',
-      finishedArea: '44.22',
-      wornNumber: '',
-      wornArea: '',
-      teamName:'鍒囧壊涓�鐝�'
-    },
-    {
-      reportingWorkNo: 'BG2303080025',
-      reportingWorkTime: '2023-12-08 09:05:58',
-      processCard: 'NG23120801A01',
-      entryName: '淇″悎鏄ュぉ閲�',
-      batch: '涓�鎵逛簩',
-      device:'澶ф捣鍒╁畞',
-      thisProcess: '鍒囧壊',
-      finishedNumber: '13',
-      finishedArea: '44.22',
-      wornNumber: '',
-      wornArea: '',
-      teamName:'鍒囧壊涓�鐝�'
-    },
-    {
-      reportingWorkNo: 'BG2312080001',
-      reportingWorkTime: '2023-12-08 09:05:58',
-      processCard: 'NG23120801A01',
-      entryName: '淇″悎鏄ュぉ閲�',
-      batch: '涓�鎵逛簩',
-      device:'澶ф捣鍒╁畞',
-      thisProcess: '鍒囧壊',
-      finishedNumber: '13',
-      finishedArea: '44.22',
-      wornNumber: '',
-      wornArea: '',
-      teamName:'鍒囧壊涓�鐝�'
-    },
-    {
-      reportingWorkNo: 'BG2312080015',
-      reportingWorkTime: '2023-12-08 09:05:58',
-      processCard: 'NG23120801A01',
-      entryName: '淇″悎鏄ュぉ閲�',
-      batch: '涓�鎵逛簩',
-      device:'澶ф捣鍒╁畞',
-      thisProcess: '鍒囧壊',
-      finishedNumber: '13',
-      finishedArea: '44.22',
-      wornNumber: '',
-      wornArea: '',
-      teamName:'鍒囧壊涓�鐝�'
-    },
-  ],//table body瀹為檯鏁版嵁
+  data:  [],//table body瀹為檯鏁版嵁
   //鑴氶儴姹傚拰
   footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
-    let footList=['finishedNumber','finishedArea','wornNumber','wornArea']
+    let footList=['','','','']
     return[
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
@@ -193,16 +307,6 @@
 })
 
 
-const form = reactive({
-  name: '',
-  region: '',
-  date1: '',
-  date2: '',
-  delivery: false,
-  type: [],
-  resource: '',
-  desc: '',
-})
 </script>
 
 <template>
@@ -212,12 +316,22 @@
         <el-date-picker
             v-model="form.date1"
             type="daterange"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+            :start-placeholder="$t('basicData.startDate')"
+            :end-placeholder="$t('basicData.endDate')"
             :default-time="defaultTime"
+
         />
         &nbsp;&nbsp;
-        <el-button type="primary">鏌ヨ</el-button>
+        <el-input v-model="form.orderId" clearable :placeholder="$t('order.orderId')" style="width: 130px"></el-input>
+        &nbsp;
+        <el-button
+            @click="getWorkOrder"
+            id="select"
+            type="primary" :icon="Search">{{$t('basicData.search')}}
+
+        </el-button>
       </el-row>
 
     </div>
@@ -233,9 +347,11 @@
       <!--      涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�-->
       <template #content="{ row }">
         <ul class="expand-wrapper">
-          <li  v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
-            <span style="font-weight: bold">{{item.title+':  '}}</span>
-            <span>{{ row[item.field] }}</span>
+          <li v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
+            <span style="font-weight: bold">{{ item.title + ':  ' }}</span>
+            <span v-if="hasDecimal(item.field)">{{ row[item.field.split('.')[0]][item.field.split('.')[1]] }}</span>
+            <span v-else>{{ row[item.field] }}</span>
+
           </li>
         </ul>
       </template>
@@ -243,7 +359,6 @@
       <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
       <template #button_slot="{ row }">
         <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">缂栬緫</el-button>
-        <el-button @click="getTableRow(row,'setType')" link type="primary" size="small">鍙嶅</el-button>
         <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">鍒犻櫎</el-button>
       </template>
 
@@ -254,9 +369,24 @@
           </div>
         </div>
       </template>
-
+      <template #pager>
+        <!--浣跨敤 pager 鎻掓Ы-->
+        <!--        'PrevJump','NextJump', -->
+        <vxe-pager
+            @page-change="handlePageChange"
+            :layouts="[  'PrevPage', 'Jump','PageCount', 'NextPage',  'Total']"
+            v-model:current-page="pageNum"
+            v-model:page-size="total.pageSize"
+            v-model:pager-count="total.pageTotal"
+            :total="total.dataTotal"
+        >
+        </vxe-pager>
+      </template>
 
     </vxe-grid>
+<!--    <el-dialog v-model="updateWork"  style="width: 80%;height:75% ">-->
+<!--      <select-product :rowIndex="rowIndex" @getProductRow="getProductRow" style="width: 100%;height: 100%" />-->
+<!--    </el-dialog>-->
   </div>
 </template>
 
@@ -266,7 +396,7 @@
   height: 100%;
 }
 #selectForm {
-  width: 40%;
+  width: 45%;
   text-align: center;
 }
 </style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/pp/workOrder/AddWorkOrder.vue b/north-glass-erp/northglass-erp/src/views/pp/workOrder/AddWorkOrder.vue
index 6af2006..cf186ba 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/workOrder/AddWorkOrder.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/workOrder/AddWorkOrder.vue
@@ -12,7 +12,9 @@
 import BasicTable from '@/components/basic/BasicTable.vue'
 import {VXETable} from "vxe-table";
 import useUserInfoStore from "@/stores/userInfo";
-
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 let router = useRouter()
 const userStore = useUserInfoStore()
 const username = userStore.user.userName
@@ -165,19 +167,19 @@
   },//琛ㄥご鍙傛暟
   columns: [
     {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
-    {type: 'checkbox', fixed: "left", title: '閫夋嫨', width: 80},
-    {type: 'seq', fixed: "left", title: '鑷簭', width: 50},
-    {field: 'orderId', title: '閿�鍞崟鍙�', filters: [{data: ''}], slots: {filter: 'num1_filter'},},
-    {field: 'productId',title: '浜у搧缂栧彿',showOverflow: "ellipsis",filters: [{data: ''}],slots: {filter: 'num1_filter'}},
-    {field: 'productName', title: '浜у搧鍚嶇О', filters: [{data: ''}], slots: {filter: 'num1_filter'}, },
-    {field: 'quantity', title: '鎬绘暟閲�', },
-    {field: 'computeGrossArea', title: '鎬婚潰绉�', },
-    {field: 'perimeter', title: '鍛ㄩ暱', showOverflow: "ellipsis"}
+    {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80},
+    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
+    {field: 'orderId', title: t('order.orderId'), filters: [{data: ''}], slots: {filter: 'num1_filter'},},
+    {field: 'productId',title: t('order.productId'),showOverflow: "ellipsis",filters: [{data: ''}],slots: {filter: 'num1_filter'}},
+    {field: 'productName', title: t('order.product'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, },
+    {field: 'quantity', title: t('order.quantity'), },
+    {field: 'computeGrossArea', title: t('order.area'), },
+    {field: 'perimeter', title: t('workOrder.perimeter'), showOverflow: "ellipsis"}
   ],//琛ㄥご鎸夐挳
 
   toolbarConfig: {
     buttons: [
-      {code: 'saveWorkOrder', name: '淇濆瓨', status: 'primary', icon: 'vxe-icon-save'},
+      {code: 'saveWorkOrder', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save'},
     ],
     // import: false,
     // export: true,
@@ -192,7 +194,7 @@
     return [
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return  t('basicData.total')
         }
         if (footList.includes(column.field)) {
           return sumNum(data, column.field)
@@ -221,11 +223,11 @@
 
             request.post("/workOrder/addOrderWork", workOrderData.value).then((res) => {
               if (res.code == 200) {
-                ElMessage.success("淇濆瓨鎴愬姛")
+                ElMessage.success(t('basicData.msg.saveSuccess'))
                 location.reload();
               } else {
                 ElMessage.warning(res.msg)
-                router.push("/login")
+               // router.push("/login")
               }
             })
 
diff --git a/north-glass-erp/northglass-erp/src/views/pp/workOrder/SelectWorkOrder.vue b/north-glass-erp/northglass-erp/src/views/pp/workOrder/SelectWorkOrder.vue
index c80a393..878aa7a 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/workOrder/SelectWorkOrder.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/workOrder/SelectWorkOrder.vue
@@ -10,7 +10,9 @@
 import Sortable from 'sortablejs'
 import BasicTable from '@/components/basic/BasicTable.vue'
 import {VXETable} from "vxe-table";
-
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 
 let productGlassTypeStore = useProductGlassTypeStore()
 let router = useRouter()
@@ -26,7 +28,7 @@
     case 'delete': {
         request.post(`/workOrder/deleteOrderWork/${row.orderId}/${row.orderDetail.productName}`).then((res) => {
         if (res.code == 200) {
-          ElMessage.success("鍒犻櫎鎴愬姛")
+          ElMessage.success(t('workOrder.deleteOk'))
           location.reload();
         } else {
           ElMessage.warning(res.msg)
@@ -54,11 +56,11 @@
 const options = [
   {
     value: '0',
-    label: '宸茶浆',
+    label: t('workOrder.convert'),
   },
   {
     value: '1',
-    label: '鏈浆',
+    label: t('workOrder.unConverted'),
   },
 ]
 
@@ -238,25 +240,25 @@
   },//琛ㄥご鍙傛暟
   columns: [
     {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
-    {title: '鎿嶄綔', width: 110, slots: {default: 'button_slot'}, fixed: "left"},
-    {type: 'seq', fixed: "left", title: '鑷簭', width: 50},
-    {field: 'orderId', title: '閿�鍞崟鍙�', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110},
+    {title: t('basicData.operate'), width: 110, slots: {default: 'button_slot'}, fixed: "left"},
+    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
+    {field: 'orderId', title: t('order.orderId'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110},
     {
       field: 'productionId',
-      title: '鐢熶骇璁㈠崟鍙�',
+      title: t('workOrder.productionId'),
       showOverflow: "ellipsis",
       filters: [{data: ''}],
       slots: {filter: 'num1_filter'}
       , width: 130
     },
-    {field: 'order.batch', title: '鎵规', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110},
-    {field: 'orderDetail.productName', title: '浜у搧鍚嶇О', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 210},
-    {field: 'orderDetail.computeArea', title: '鍗曠墖鎬婚潰绉�', showOverflow: "ellipsis", width: 110},
-    {field: 'orderDetail.quantity', title: '鎬绘暟閲�', width: 70},
-    {field: 'orderDetail.computeGrossArea', title: '鎴愬搧鎬婚潰绉�',},
-    {field: 'orderDetail.perimeter', title: '鍛ㄩ暱', showOverflow: "ellipsis"},
-    {field: 'orderDetail.bendRadius', title: '鍗婂緞',},
-    {field: 'orderDetail.processingNote', title: '鍔犲伐瑕佹眰',}
+    {field: 'order.batch', title: t('order.batch'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110},
+    {field: 'orderDetail.productName', title: t('order.product'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 210},
+    {field: 'orderDetail.computeArea', title: t('order.computeArea'), showOverflow: "ellipsis", width: 110},
+    {field: 'orderDetail.quantity', title: t('order.quantity'), width: 70},
+    {field: 'orderDetail.computeGrossArea', title: t('order.trueGrossArea'),},
+    {field: 'orderDetail.perimeter', title: t('workOrder.perimeter'), showOverflow: "ellipsis"},
+    {field: 'orderDetail.bendRadius', title: t('order.bendRadius'),},
+    {field: 'orderDetail.processingNote', title: t('order.processingNote'),}
   ],//琛ㄥご鎸夐挳
   data: null,//琛ㄦ牸鏁版嵁
   toolbarConfig: {
@@ -275,7 +277,7 @@
     return [
       columns.map((column, columnIndex) => {
         if (columnIndex === 0) {
-          return '鍚堣:'
+          return t('basicData.total')
         }
         if (footList.includes(column.field)) {
           return sumNum(data, column.field)
@@ -299,14 +301,14 @@
             type="daterange"
             format="YYYY/MM/DD"
             value-format="YYYY-MM-DD"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
+            :start-placeholder="$t('basicData.startDate')"
+            :end-placeholder="$t('basicData.endDate')"
             :default-time="defaultTime"
 
         />
         &nbsp;&nbsp;
-        <el-select :default-first-option="true" ref="getSelect" style="width: 120px" v-model="optionVal" class="m-2"
-                   placeholder="鏄惁杞伐鍗�">
+        <el-select :default-first-option="true" ref="getSelect" style="width: 130px" v-model="optionVal" class="m-2"
+                   >
           <el-option
               v-for="item in options"
               :key="item.value"
@@ -319,7 +321,7 @@
             @click="getWorkOrder(isButtonDisabled)"
             :disabled="isButtonDisabled"
             id="select"
-            type="primary" :icon="Search">鏌ヨ
+            type="primary" :icon="Search">{{$t('basicData.search')}}
         </el-button>
       </el-row>
 
@@ -347,8 +349,8 @@
 
       <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
       <template #button_slot="{ row }">
-        <el-button :class="{disable: optionVal== 0}" :disabled="optionVal == 0" @click="getTableRow(row,'edit')" link type="primary" size="small">杞伐鍗�</el-button>
-        <el-button :class="{disable: optionVal== 1}" :disabled="optionVal == 1" @click="getTableRow(row,'delete')" link type="primary" size="small">鍒犻櫎</el-button>
+        <el-button :class="{disable: optionVal== 0}" :disabled="optionVal == 0" @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('workOrder.transferOrder')}}</el-button>
+        <el-button :class="{disable: optionVal== 1}" :disabled="optionVal == 1" @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
       </template>
 
       <template #num1_filter="{ column, $panel }">
diff --git a/north-glass-erp/northglass-erp/src/views/pp/workOrder/WorkOrder.vue b/north-glass-erp/northglass-erp/src/views/pp/workOrder/WorkOrder.vue
index 0a082a3..39dd4cf 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/workOrder/WorkOrder.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/workOrder/WorkOrder.vue
@@ -6,8 +6,12 @@
 import {ElMessage} from "element-plus";
 import {useRoute, useRouter} from "vue-router";
 import  GlassType from '@/components/basic/product/GlassType.vue'
+import { useI18n } from 'vue-i18n'
+//璇█鑾峰彇
+const { t } = useI18n()
 const router = useRouter()
 const route = useRoute()
+
 let indexFlag=$ref(1)
 function changeRouter(index){
   indexFlag=index
@@ -18,7 +22,7 @@
   <div id="main">
     <div id="div-title">
       <el-breadcrumb :separator-icon="ArrowRight">
-        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/workOrder/SelectWorkOrder' }">宸ュ崟绠$悊</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/workOrder/SelectWorkOrder' }">{{$t('workOrder.workOrder')}}</el-breadcrumb-item>
         <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">鎵撳嵃</el-breadcrumb-item>
       </el-breadcrumb>
     </div>
diff --git a/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue b/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
index 5869d79..5b27678 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -540,7 +540,7 @@
   list.forEach((item)=>{
     countMoney += parseFloat(item.grossAmount)
   })
-  return countMoney
+  return parseFloat((countMoney).toFixed(2))
 }
 //瀵煎叆鍔熻兘
 const importEvent = async () => {
diff --git a/north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue b/north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue
index 2ad94fa..94a319d 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue
@@ -224,7 +224,7 @@
     if(res.code==200){
       gridOptions.toolbarConfig.buttons[2].disabled = true
       if(state==2){
-        ElMessage.success(t('basicData.msg.reviewSuccess'))
+        ElMessage.success(t('basicData.msg.ReviewSuccess'))
       }else if (state==0){
         ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
       }
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
index 3247c6f..6df94b7 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
@@ -59,8 +59,8 @@
     }
 
 
-    //鍒犻櫎宸ュ崟
-    @ApiOperation("鍒犻櫎宸ュ崟鎺ュ彛")
+    //鍒犻櫎娴佺▼鍗�
+    @ApiOperation("鍒犻櫎娴佺▼鍗℃帴鍙�")
     @PostMapping("/deleteFlowCard/{orderId}/{processId}")
     public Result deleteOrderWork(
             @PathVariable String orderId,
@@ -135,5 +135,13 @@
         return Result.seccess(flowCardService.selectSchedulingSv(selectTime1,selectTime2,orderId,processes,state,flowCard));
 
     }
+    //鏌ヨ鎺掍骇鏁版嵁
+    @ApiOperation("娴佺▼鍗℃槑缁嗘煡璇㈡帴鍙�")
+    @PostMapping  ("/flowCardDetail/{processId}")
+    public Result flowCardDetail(
+            @PathVariable String processId,
+            @RequestBody FlowCard flowCard){
+        return Result.seccess(flowCardService.flowCardDetailSv(processId,flowCard));
 
+    }
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProductionSchedulingController.java b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProductionSchedulingController.java
index 2e8bd1d..3f5f84d 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProductionSchedulingController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ProductionSchedulingController.java
@@ -22,12 +22,14 @@
 
     //鏌ヨ绗竴娆℃帓鐗堟暟鎹�
     @ApiOperation("鍔犺浇鏃舵煡璇㈡帓鐗堟暟鎹帴鍙�")
-    @PostMapping  ("/selectLastScheduling/{selectTime1}/{selectTime2}")
+    @PostMapping  ("/selectLastScheduling/{selectTime1}/{selectTime2}/{processes}/{orderId}")
     public Result selectLastScheduling(
             @PathVariable String selectTime1,
             @PathVariable String selectTime2,
+            @PathVariable String processes,
+            @PathVariable String orderId,
             @RequestBody ProductionScheduling productionScheduling){
-        return Result.seccess(productionSchedulingService.selectLastScheduling(selectTime1,selectTime2,productionScheduling));
+        return Result.seccess(productionSchedulingService.selectLastScheduling(selectTime1,selectTime2,processes,orderId,productionScheduling));
 
     }
     //鐐瑰嚮鏌ヨ鎺掔増鏁版嵁
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java
index b1653b4..e022d55 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java
@@ -2,6 +2,7 @@
 
 import com.example.erp.common.Constants;
 import com.example.erp.common.Result;
+import com.example.erp.entity.pp.FlowCard;
 import com.example.erp.entity.pp.ReportingWork;
 import com.example.erp.exception.ServiceException;
 import com.example.erp.service.pp.ReportingWorkService;
@@ -53,6 +54,33 @@
     public Result SelectUpdateReportingWork(@PathVariable String reportingWorkId)  {
         return  Result.seccess(reportingWorkService.selectUpdateReportingWorkSv(reportingWorkId));
     }
+    @ApiOperation("鎶ュ伐淇敼")
+    @PostMapping  ("/updateReportingWork")
+    public Result updateReportingWork(@RequestBody Map<String,Object> reportingWork)  {
+        return  Result.seccess(reportingWorkService.updateReportingWork(reportingWork));
+    }
 
+    @ApiOperation("鎶ュ伐鏌ヨ鎺ュ彛")
+    @PostMapping  ("/selectReportingWork/{pageNum}/{pageSize}/{selectTime1}/{selectTime2}/{orderId}")
+    public Result selectReportingWork(
+            @PathVariable Integer pageNum,
+            @PathVariable Integer pageSize,
+            @PathVariable Date selectTime1,
+            @PathVariable Date selectTime2,
+            @PathVariable String orderId,
+            @RequestBody ReportingWork reportingWork){
+        return Result.seccess(reportingWorkService.selectReportingWorkSv(pageNum,pageSize,selectTime1,selectTime2,orderId,reportingWork));
 
+    }
+
+    @ApiOperation("鍒犻櫎鎶ュ伐鎺ュ彛")
+    @PostMapping("/deleteWork/{reportingWorkId}/{processId}/{thisProcess}")
+    public Result deleteWork(@PathVariable String reportingWorkId,@PathVariable String processId,@PathVariable String thisProcess){
+        if(reportingWorkService.deleteWorkSv(reportingWorkId,processId,thisProcess)){
+            return Result.seccess();
+        }else {
+            throw new ServiceException(Constants.Code_500,"鍒犻櫎澶辫触,璇锋鏌ユ槸鍚︾鍚堝垹闄ゆ潯浠�");
+
+        }
+    }
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/pp/DamageDetails.java b/north-glass-erp/src/main/java/com/example/erp/entity/pp/DamageDetails.java
index 9470122..3471e06 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/pp/DamageDetails.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/pp/DamageDetails.java
@@ -26,7 +26,7 @@
     //绫诲瀷
     private String breakageType;
     //鍙埄鐢�
-    private Integer available;
+    private Boolean available;
     //閫�鍥炲伐搴�
     private String returnProcess;
     //璐d换宸ュ簭
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWork.java b/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWork.java
index bb4f0f4..8801554 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWork.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWork.java
@@ -3,7 +3,10 @@
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.example.erp.entity.sd.DeliveryDetail;
 import com.example.erp.entity.sd.Order;
+import com.example.erp.entity.sd.OrderGlassDetail;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.time.LocalDate;
@@ -33,11 +36,11 @@
     //鏈伐搴�
     private String thisProcess;
     //涓婂伐搴忔暟閲�
-    private Integer thisProcessQuantity;
+    private int thisProcessQuantity;
     //鏈伐搴忓畬宸ユ暟閲�
-    private Integer thisCompletedQuantity;
+    private int thisCompletedQuantity;
     //鏈伐搴忔鐮存暟閲�
-    private Integer thisWornQuantity;
+    private int thisWornQuantity;
     //涓嬪伐搴�
     private String nextProcess;
     //鐝
@@ -59,6 +62,7 @@
     //鍖呰鏂瑰紡
     private String packagingMethod;
     //鎶ュ伐鏃堕棿
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime reportingWorkTime;
     //瀹℃牳鏃堕棿
     private LocalDate examineTime;
@@ -83,4 +87,15 @@
 //    private ReportingWork reportingWork;
     @TableField(select = false,exist= false)
     private  ReportingWorkDetail reportingWorkDetail;
+
+    @TableField(select = false,exist= false)
+    private OrderGlassDetail orderGlassDetail;
+
+
+    //瀹氫箟鐨勫畬宸ラ潰绉�
+    @TableField(select = false,exist= false)
+    private String completedArea;
+    //娆$牬闈㈢Н
+    @TableField(select = false,exist= false)
+    private String wornArea;
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
index 1925556..43abc0b 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -61,4 +61,8 @@
 
 
     Integer selectFlowCardCount(String orderId);
+
+    List<Map<String, String>> flowCardDetailMp(String processId, FlowCard flowCard);
+
+    Boolean deleteReportingWork(String processId);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ProductionSchedulingMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ProductionSchedulingMapper.java
index 343aa44..ed797a9 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ProductionSchedulingMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ProductionSchedulingMapper.java
@@ -19,13 +19,13 @@
 
     List<Map<String,String>> selectNoSchedulingMp(String selectTime1, String selectTime2,String orderId,String processes, ProductionScheduling  productionScheduling);
 
-    List<Map<String,String>> selectLastSchedulingMp(String selectTime1, String selectTime2, ProductionScheduling productionScheduling);
+    List<Map<String,String>> selectLastSchedulingMp(String selectTime1, String selectTime2,String processes,String orderId, ProductionScheduling productionScheduling);
 
     List<Map<String,String>> selectSchedulingNotMp(String selectTime1, String selectTime2, String orderId, String processes, ProductionScheduling productionScheduling);
 
     Integer selectMaxId();
 
-    Boolean insertSelective(String schedulingId, String orderId, String orderNumber, String processes, Integer schedulingQuantity, LocalDate scheduledStartTime, LocalDate planEndTime, String notes);
+    Boolean insertSelective(String schedulingId, String orderId, String orderNumber,String technologyNumber, String processes, Integer schedulingQuantity, LocalDate scheduledStartTime, LocalDate planEndTime, String notes);
 
     Boolean examineSchedulingMp(String schedulingId, String userName);
 
@@ -33,5 +33,5 @@
 
     List<Map<String,String>> selectProcess();
 
-    Integer selectNumberMp(String orderId, String orderNumber, String processes);
+//    Integer selectNumberMp(String orderId, String orderNumber, String processes);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkDetailMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkDetailMapper.java
index b872c80..b7671f2 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkDetailMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkDetailMapper.java
@@ -26,5 +26,4 @@
                                                @Param("sDate") String startTime,@Param("eDate") String endTime,ReportingWorkDetail reportingWorkDetail);
 
 
-    List<ReportingWorkDetail> selectByreportingWorkId(String reportingWorkId);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
index 89418ed..aefe9f3 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
@@ -2,11 +2,10 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.example.erp.entity.pp.BasicDataProduce;
 import com.example.erp.entity.pp.ReportingWork;
-import com.example.erp.entity.pp.ReportingWorkDetail;
+import com.example.erp.entity.sd.OrderGlassDetail;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
-import java.time.LocalDate;
+import java.sql.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -45,4 +44,27 @@
     int selectGlassProcessNum(String orderNumber, String technologyNumber, String processId, String thisProcess);
 
     int selectFlowCardNum(String orderNumber, String technologyNumber, String processId, String thisProcess);
+
+    List<Map<String,Object>> selectByReportingWorkId(String reportingWorkId,String nextProcess);
+    Map<String, Integer> getPageTotal(Integer offset, Integer pageSize, Date selectTime1, Date selectTime2, String orderId, ReportingWork reportingWork);
+
+    String selectNextProcess(String reportingWorkId);
+
+    Integer selectCountByProcessId(String processId, String nextProcess);
+
+    List<Map<String, Object>> reportingWorkDate(String reportingWorkId);
+
+    Boolean updateWorkProcess(String processId, Object orderNumber, Object technologyNumber, Object completedQuantity, Object breakageQuantity, String thisProcess);
+
+    Boolean deleteWork(String reportingWorkId);
+
+    String selectLastProcess(String processId);
+
+    Map<String, Object> selectReceiptQuantity(String processId);
+
+    Integer selectCompletedQuantity(String reportingWorkId);
+
+    Boolean updateInventoryQuantity(String processId, Object orderNumber, Object technologyNumber, Object completedQuantity);
+
+    List<ReportingWork> selectReportingWorkMp(Integer offset, Integer pageSize, Date selectTime1, Date selectTime2, String orderId, ReportingWork reportingWork);
 }
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 63e5757..cf3289e 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
@@ -12,4 +12,6 @@
 @DS("sd")
 public interface OrderProcessDetailMapper extends BaseMapper<OrderProcessDetail> {
     boolean insertOrderProcessDetail(@Param("processDetailList") List<OrderProcessDetail> processDetailList);
+
+    void updateQuantity(String reportingWorkId,String process,String type);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
index 0634f98..f2df3fe 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -71,6 +71,8 @@
 
                 //淇敼鍒嗘灦鐘舵��
                 flowCardMapper.updateDeleteState(orderId, processId);
+                //鍒犻櫎鎶ュ伐娴佺▼鏄庣粏琛ㄦ暟鎹�
+                flowCardMapper.deleteReportingWork(processId);
                 //鍒犻櫎鍒嗘灦鏄庣粏
                 flowCardMapper.deleteFlowCardMp(orderId, processId);
                 //鍒ゆ柇璇ヨ鍗曟祦绋嬪崱鏄惁鍏ㄩ儴鍒犻櫎
@@ -187,4 +189,10 @@
         map.put("data", flowCardMapper.selectLastSchedulingMp(selectTime1, selectTime2, flowCard));
         return map;
     }
+
+    public Object flowCardDetailSv(String processId, FlowCard flowCard) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("data", flowCardMapper.flowCardDetailMp(processId, flowCard));
+        return map;
+    }
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ProductionSchedulingService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ProductionSchedulingService.java
index 28f7922..f0c1284 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ProductionSchedulingService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ProductionSchedulingService.java
@@ -47,9 +47,16 @@
 
 
     //棣栨鏌ヨ鎺掍骇鏁版嵁
-    public Map<String, Object> selectLastScheduling(String selectTime1, String selectTime2,ProductionScheduling productionScheduling ) {
+    public Map<String, Object> selectLastScheduling(String selectTime1, String selectTime2,String processes,String orderId,ProductionScheduling productionScheduling ) {
         Map<String, Object> map = new HashMap<>();
-        map.put("data", productionSchedulingMapper.selectLastSchedulingMp(selectTime1, selectTime2, productionScheduling));
+        if(orderId.equals("null")){
+            orderId="";
+        }
+        if (processes.equals("null")){
+
+            processes="";
+        }
+        map.put("data", productionSchedulingMapper.selectLastSchedulingMp(selectTime1, selectTime2,processes,orderId, productionScheduling));
         map.put("process", productionSchedulingMapper.selectProcess());
         return map;
     }
@@ -84,10 +91,10 @@
         if (!schedulinglist.isEmpty()) {
             for (ProductionScheduling productionScheduling : schedulinglist) {
                 //鏌ヨ宸叉帓浜у伐搴忔暟閲�
-              Integer num =  productionSchedulingMapper.selectNumberMp(productionScheduling.getOrderId(),productionScheduling.getOrderNumber(),processes);
+             // Integer num =  productionSchedulingMapper.selectNumberMp(productionScheduling.getOrderId(),productionScheduling.getOrderNumber(),processes);
 
-               productionSchedulingMapper.insertSelective(schedulingId,productionScheduling.getOrderId(),productionScheduling.getOrderNumber(),processes,productionScheduling.getSchedulingQuantity(),productionScheduling.getScheduledStartTime(),productionScheduling.getPlanEndTime(),productionScheduling.getNotes());
-               // System.out.println(productionScheduling.getOrderNumber()+"***"+productionScheduling.getOrderId());
+             productionSchedulingMapper.insertSelective(schedulingId,productionScheduling.getOrderId(),productionScheduling.getOrderNumber(),productionScheduling.getTechnologyNumber(),processes,productionScheduling.getSchedulingQuantity(),productionScheduling.getScheduledStartTime(),productionScheduling.getPlanEndTime(),productionScheduling.getNotes());
+                //System.out.println(productionScheduling.getOrderNumber()+"***"+productionScheduling.getTechnologyNumber());
             }
             return true;
         }
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 9e5daf6..a4989a3 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
@@ -174,17 +174,30 @@
         }
         //涓昏〃鎻掑叆
         reportingWorkMapper.insert(reportingWork);
-
         //鍓〃寰幆鎻掑叆锛屽苟涓旀彃鍏ユ鐮翠俊鎭〃銆傚啀鏍规嵁娆$牬淇℃伅淇敼璁㈠崟鐜荤拑娴佺▼琛ㄧ殑瀹屽伐鏁伴噺涓庡埡鐮存暟閲�
         reportingWorkDetails.forEach(reportingWorkDetail -> {
+//            reportingWork.setThisProcessQuantity(
+//                    reportingWork.getThisProcessQuantity()
+//                            +reportingWorkDetail.getCompletedQuantity()
+//                            +reportingWorkDetail.getBreakageQuantity());
+//            reportingWork.setThisCompletedQuantity(
+//                    reportingWork.getThisCompletedQuantity()+reportingWorkDetail.getCompletedQuantity());
+//            reportingWork.setThisWornQuantity(
+//                    reportingWork.getThisWornQuantity()+reportingWorkDetail.getBreakageQuantity());
+
+
             reportingWorkDetail.setReportingWorkId(reportingWorkId);
             List<DamageDetails> damageDetails = reportingWorkDetail.getDamageDetails();
+            //娆$牬鏄庣粏琛ㄦ彃鍏ユ暟鎹�
             if(damageDetails!=null && !damageDetails.isEmpty()){
                 damageDetails.forEach(damageDetail ->{
                     damageDetail.setReportingWorkId(reportingWorkId);
                     damageDetail.setOrderNumber(reportingWorkDetail.getOrderNumber());
                     damageDetail.setProcessId(reportingWork.getProcessId());
                     damageDetail.setTechnologyNumber(reportingWorkDetail.getTechnologyNumber());
+                    if(damageDetail.getResponsibleProcess()!=reportingWork.getThisProcess()){
+                        damageDetail.setQualityInsStatus(1);
+                    }
                     damageDetailsMapper.insert(damageDetail);
                 });
             }
@@ -241,7 +254,12 @@
                     .setSql("reporting_work_num =reporting_work_num +"+orderProcessDetail.getReportingWorkNum())
                     .setSql("broken_num =broken_num +"+orderProcessDetail.getBrokenNum());
             orderProcessDetailMapper.update(null,updateWrapper);
-            reportingWorkDetailMapper.insert(reportingWorkDetail);
+
+            //鍒ゆ柇瀹屽伐鏁伴噺鍜屽埡鐮存暟閲忔槸鍚︿负0锛屼负0鍒欎笉鎻掑叆鍒版暟鎹簱
+            if(!(reportingWorkDetail.getCompletedQuantity()==0 && reportingWorkDetail.getBreakageQuantity()==0)){
+                reportingWorkDetailMapper.insert(reportingWorkDetail);
+            }
+
             //鏇存柊娴佺▼鍗¤〃鐨勬姤宸ユ暟閲�
             if(Objects.equals(reportingWork.getNextProcess(), "")){
                 LambdaUpdateWrapper<FlowCard> flowCardLambdaUpdateWrapper =
@@ -256,6 +274,7 @@
 
 
         });
+
         return  true;
     }
 
@@ -277,21 +296,179 @@
         return  true;
     }
 
+    //鎶ュ伐淇敼鏌ヨ
     public Map<String,Object> selectUpdateReportingWorkSv(String reportingWorkId) {
+        //鏌ヨ鎶ュ伐涓昏〃淇℃伅
         ReportingWork reportingWork =reportingWorkMapper.selectOne(new LambdaQueryWrapper<ReportingWork>()
                                         .eq(ReportingWork::getReportingWorkId,reportingWorkId));
+        //鏍规嵁鎶ュ伐淇℃伅鏌ヨ璁㈠崟涓昏〃淇℃伅
         reportingWork.setOrder(
             orderMapper.selectOne(new LambdaQueryWrapper<Order>()
                                         .eq(Order::getOrderId,reportingWork.getOrderId())));
         reportingWork.setFlowCard(new FlowCard());
 
-        List<ReportingWorkDetail> reportingWorkDetails = reportingWorkDetailMapper.selectByreportingWorkId(reportingWorkId);
+        List<Map<String,Object>> reportingWorkDetails = reportingWorkMapper.selectByReportingWorkId(reportingWorkId,reportingWork.getNextProcess());
+        reportingWorkDetails.forEach(reportingWorkDetail ->{
+            List<DamageDetails> damageDetailsList = new  ArrayList<>();
+            damageDetailsList = damageDetailsMapper.selectList(new LambdaQueryWrapper<DamageDetails>()
+                    .eq(DamageDetails::getReportingWorkId,reportingWorkId)
+                    .eq(DamageDetails::getOrderNumber,reportingWorkDetail.get("order_number"))
+                    .eq(DamageDetails::getTechnologyNumber,reportingWorkDetail.get("technology_number"))
+            );
+            reportingWorkDetail.put("damageDetails",damageDetailsList);
+        });
 
 
         Map<String,Object> map = new HashMap<>();
         map.put("reportingWork",reportingWork);
         map.put("reportingWorkDetails",reportingWorkDetails);
+        map.put("basic",getReportingWorkBase(reportingWork.getProcessId(),reportingWork.getThisProcess()));
+
+
+
         return map;
 
     }
+
+    private Map<String,Object> getReportingWorkBase(String processId, String thisProcess) {
+        Map<String,Object> map = new HashMap<>();
+        //璁惧涓嬫媺妗�
+        map.put("deviceType", reportingWorkMapper.SelectWorkBasicDeviceMp(thisProcess));
+        //鐝粍涓嬫媺妗�
+        map.put("teamsType", reportingWorkMapper.SelectWorkBasicTeamsMp(thisProcess));
+
+        map.put("breakageType",reportingWorkMapper.selectBasicNameByType("breakagetype"));
+        map.put("breakageReason",reportingWorkMapper.selectBasicNameByType("breakagereason"));
+
+        //鑾峰彇璇ユ祦绋嬪崱鍙峰巻鍙叉姤宸ュ伐搴�
+        String historyProcess =reportingWorkMapper.historyProcessMp(processId);
+        //鍘嗗彶鎶ュ伐宸ュ簭璁惧
+        map.put("historyDevice",reportingWorkMapper.historyDeviceMp(historyProcess,thisProcess));
+        //鍘嗗彶鎶ュ伐宸ュ簭鐝粍
+        map.put("historyTeams",reportingWorkMapper.historyTeamsMp(processId,thisProcess));
+        //鍘嗗彶宸ュ簭
+        map.put("historyProcess",reportingWorkMapper.SelectHistoryProcessMp(historyProcess,thisProcess));
+
+        return map;
+    }
+
+
+    @Transactional
+    //鎶ュ伐淇敼
+    public Boolean updateReportingWork(Map<String, Object> reportingWorkMap) {
+        //鎺ユ敹瑙f瀽涓婚檮琛ㄤ俊鎭�
+        JSONObject reportingWorkJson = new JSONObject(reportingWorkMap);
+        ReportingWork reportingWork = JSONObject.parseObject(JSONObject.toJSONString(reportingWorkJson.get("title")), ReportingWork.class);
+        List<ReportingWorkDetail> reportingWorkDetails = JSONArray.parseArray(JSONObject.toJSONString(reportingWorkJson.get("detail")), ReportingWorkDetail.class);
+        //鍒犻櫎鍒虹牬鏄庣粏琛ㄥ埡鐮存暟鎹�
+        damageDetailsMapper.delete(
+                new LambdaQueryWrapper<DamageDetails>()
+                .eq(DamageDetails::getReportingWorkId,reportingWork.getReportingWorkId())
+        );
+        //淇敼灏忕墖娴佺▼琛ㄦ暟閲�
+        orderProcessDetailMapper.updateQuantity(reportingWork.getReportingWorkId(),reportingWork.getThisProcess(),"delete");
+        //鍒犻櫎鎶ュ伐鏄庣粏琛ㄦ暟鎹�
+        reportingWorkDetailMapper
+                .delete(new LambdaQueryWrapper<ReportingWorkDetail>()
+                        .eq(ReportingWorkDetail::getReportingWorkId,reportingWork.getReportingWorkId()));
+
+        //鏇寸粏鎶ュ伐涓昏〃
+        reportingWorkMapper.updateById(reportingWork);
+        reportingWorkDetails.forEach(reportingWorkDetail->{
+            List<DamageDetails>  damageDetails =  reportingWorkDetail.getDamageDetails();
+            //姣忎竴鏉℃姤宸ユ暟鎹惊鐜彃鍏ユ鐮存槑缁嗚〃
+            if(damageDetails!=null && !damageDetails.isEmpty()){
+                damageDetails.forEach(damageDetail->{
+                    if(!Objects.equals(reportingWork.getThisProcess(), damageDetail.getResponsibleProcess())){
+                        damageDetail.setQualityInsStatus(1);
+                    }
+                    damageDetailsMapper.insert(damageDetail);
+                });
+            }
+            //鎻掑叆鎶ュ伐鏁版嵁
+            reportingWorkDetailMapper.insert(reportingWorkDetail);
+        });
+        //淇敼灏忕墖娴佺▼琛ㄦ暟閲忎负鎶ュ伐鏄庣粏琛ㄦ暟閲�
+        orderProcessDetailMapper.updateQuantity(reportingWork.getReportingWorkId(),reportingWork.getThisProcess(),"add");
+        return  true;
+    }
+    //鎶ュ伐绠$悊鏌ヨ
+    public Map<String, Object> selectReportingWorkSv(Integer pageNum, Integer pageSize, java.sql.Date selectTime1, java.sql.Date selectTime2, String orderId, ReportingWork reportingWork) {
+        Integer offset = (pageNum - 1) * pageSize;
+        if (orderId.equals("null")) {
+            orderId = "";
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("data", reportingWorkMapper.selectReportingWorkMp(offset, pageSize, selectTime1, selectTime2, orderId, reportingWork));
+        map.put("total", reportingWorkMapper.getPageTotal(offset, pageSize, selectTime1, selectTime2, orderId, reportingWork));
+        //System.out.println(map.get("data"));
+        return map;
+    }
+
+    public Boolean deleteWorkSv(String reportingWorkId, String processId, String thisProcess) {
+        if (!reportingWorkId.isEmpty() && !processId.isEmpty() && !thisProcess.isEmpty()) {
+            //鑾峰彇褰撳墠鎶ュ伐缂栧彿涓嬪伐搴�
+            String nextProcess = reportingWorkMapper.selectNextProcess(reportingWorkId);
+            //鏌ヨ褰撳墠鎶ュ伐缂栧彿涓嬪伐搴忔槸鍚︽姤宸�
+            Integer count = reportingWorkMapper.selectCountByProcessId(processId, nextProcess);
+            //鑾峰彇鏈�鍚庝竴閬撳伐搴�
+            String lastProcess = reportingWorkMapper.selectLastProcess(processId);
+            //鍒ゆ柇鏄惁鏄叆搴撳伐搴�
+            if (lastProcess.equals(thisProcess)) {//鏄叆搴撳伐搴�
+                //鏌ヨ璇ユ祦绋嬪崱鏁伴噺銆佸彲鍏ュ簱鏁伴噺銆佸凡鍏ュ簱鏁伴噺
+                Map<String, Object> list = reportingWorkMapper.selectReceiptQuantity(processId);
+                // System.out.println(list.get("quantity")+"--"+list.get("inventoryQuantity")+"---"+list.get("receivedQuantity"));
+                if (list.get("quantity") == list.get("receiptQuantity")) {
+                    return false;
+                } else {
+                    //杞崲绫诲瀷:宸插叆搴撴暟閲�
+                    Integer receiptQuantity = Integer.parseInt(list.get("receivedQuantity").toString());
+                    //杞崲绫诲瀷:鍙叆搴撴暟閲�
+                    Integer inventoryQuantity = Integer.parseInt(list.get("inventoryQuantity").toString());
+                    //鏌ヨ璇ユ姤宸ョ紪鍙锋湰宸ュ簭瀹屽伐鏁伴噺
+                    Integer completedQuantity = reportingWorkMapper.selectCompletedQuantity(reportingWorkId);
+                    //褰撹宸ュ簭瀹屽伐鏁伴噺灏忎簬绛変簬宸插叆搴撴暟閲忔椂
+                    //System.out.println("inventoryQuantity:" + inventoryQuantity +"completedQuantity:" + completedQuantity + "---receiptQuantity:" + receiptQuantity);
+                    //鍙叆搴撴暟閲�-宸插叆搴撴暟閲�>=鎶ュ伐缂栧彿鏈伐搴忓畬宸ユ暟閲�
+                    if (inventoryQuantity - receiptQuantity >= completedQuantity) {
+                        //鏌ヨ褰撳墠鎶ュ伐缂栧彿瀹屽伐娆$牬鏁伴噺鐨勬暟鎹�
+                        List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
+                        for (Map<String, Object> item : workDateList) {
+
+                            //鏇存柊娴佺▼鍗″彲鍏ュ簱鏁伴噺
+                            reportingWorkMapper.updateInventoryQuantity(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"));
+                            //鏇存柊鎶ュ伐娴佺▼琛ㄦ暟鎹�
+                            reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
+                        }
+                        //鍒犻櫎鎶ュ伐锛屽皢瀹℃牳鐘舵�佹敼涓�-1
+                        reportingWorkMapper.deleteWork(reportingWorkId);
+                        return true;
+                    } else {
+                        return false;
+                    }
+                }
+
+            }
+          else{//涓嶆槸鍏ュ簱宸ュ簭
+              if (count==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);
+                  return true;
+              }
+            else {
+                return false;
+            }
+          }
+
+
+        } else {
+            return false;
+        }
+    }
 }
diff --git a/north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml b/north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
index 5e28ebb..13b2ccb 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -62,25 +62,25 @@
         a.founder,
         c.processing_note,
         if(a.layout_status=0,"涓嶅彲鎺掔増",if(a.layout_status=1,"鍙帓鐗�","宸叉帓鐗�")) as layout_status
-        from flow_card as a left join sd.`order` as b on a.order_Id=b.order_id
+        from (select  id,order_id,process_id,order_number, quantity,founder,layout_status,create_time from flow_card group by process_Id,order_number) as a left join sd.`order` as b on a.order_Id=b.order_id
         left join sd.order_detail as c on a.order_Id=c.order_id and a.order_Number=c.order_number
         where a.create_time between #{selectTime1} and #{selectTime2}
-                    <if test="flowCard.orderId != null and flowCard.orderId != ''">
-                        and a.order_id regexp #{flowCard.orderId}
-                    </if>
-                    <if test="flowCard.processId != null and flowCard.processId != ''">
-                        and a.process_Id regexp #{flowCard.processId}
-                    </if>
-                    <if test="flowCard.orderDetail.productId != null and flowCard.orderDetail.productId != ''">
-                        and c.product_id regexp #{flowCard.orderDetail.productId}
-                    </if>
-                    <if test="flowCard.orderDetail.productName != null and flowCard.orderDetail.productName!= ''">
-                        and c.product_name regexp #{flowCard.orderDetail.productName}
-                    </if>
+        <if test="flowCard.orderId != null and flowCard.orderId != ''">
+            and a.order_id regexp #{flowCard.orderId}
+        </if>
+        <if test="flowCard.processId != null and flowCard.processId != ''">
+            and a.process_Id regexp #{flowCard.processId}
+        </if>
+        <if test="flowCard.orderDetail.productId != null and flowCard.orderDetail.productId != ''">
+            and c.product_id regexp #{flowCard.orderDetail.productId}
+        </if>
+        <if test="flowCard.orderDetail.productName != null and flowCard.orderDetail.productName!= ''">
+            and c.product_name regexp #{flowCard.orderDetail.productName}
+        </if>
 
-                    <if test="flowCard.order.project != null and flowCard.order.project!= ''">
-                        and b.project regexp #{flowCard.order.project}
-                    </if>
+        <if test="flowCard.order.project != null and flowCard.order.project!= ''">
+            and b.project regexp #{flowCard.order.project}
+        </if>
 
 
         group by a.process_Id
@@ -131,7 +131,8 @@
         o.delivery_address
         from sd.`order` as o
         left join sd.order_glass_detail ogd on o.order_id = ogd.order_id
-        where o.production_order=2 and ogd.splitting_status=0 and o.create_time between #{selectTime1} and #{selectTime2}
+        where o.production_order=2 and ogd.splitting_status=0 and o.create_time between #{selectTime1} and
+        #{selectTime2}
 
         <if test="flowCard.order.orderId != null and flowCard.order.orderId != ''">
             and o.order_id regexp #{flowCard.order.orderId}
@@ -165,7 +166,7 @@
         ;
     </select>
 
-<!--    鍒嗘灦鏄庣粏鏌ヨ-->
+    <!--    鍒嗘灦鏄庣粏鏌ヨ-->
     <select id="detailsSelectMp" resultMap="flowCardMap">
         select od.order_id,
         ogd.production_id,
@@ -174,7 +175,7 @@
         SUM( od.quantity) as quantity,
         SUM(od.compute_gross_area) as compute_gross_area,
         od.perimeter
-        from  sd.order_detail as od left join
+        from sd.order_detail as od left join
         (select order_id,order_number,production_id,splitting_status from sd.order_glass_detail
         GROUP BY order_id,order_number
         ) as ogd on od.order_id=ogd.order_id and od.order_number=ogd.order_number
@@ -199,43 +200,47 @@
     <update id="updateDeleteState">
         update
             sd.order_glass_detail as ogd left join flow_card as fc
-                on ogd.order_id=fc.order_id and ogd.order_number=fc.order_number
+                on ogd.order_id = fc.order_id and ogd.order_number = fc.order_number
         set ogd.splitting_status=0
-        where ogd.order_id=#{orderId}  and fc.process_id=#{processId}
+        where ogd.order_id = #{orderId}
+          and fc.process_id = #{processId}
 
     </update>
 
     <!--    鍒犻櫎娴佺▼鍗�-->
     <update id="deleteFlowCardMp">
-        delete from flow_card as fc where fc.process_id=#{processId}
+        delete
+        from flow_card as fc
+        where fc.production_id = left(#{processId},11)
     </update>
 
     <!--    鍒嗘灦鏂板鏄庣粏鏌ヨ-->
 
     <!--resultMap="flowCardMap"-->
-    <select id="selectNoCardMp" >
+    <select id="selectNoCardMp">
 
-        select
-        od.order_number,
-        od.order_number AS 'orderNumber',
-        od.width,
-        od.height,
-        od.shape,
-        od.quantity,
-        od.compute_gross_area,
-        p.total_thickness,
-        od.quantity as baiscQuantity,
-        od.compute_gross_area as 'computeGrossArea',
-        p.total_thickness AS 'totalThickness',
-        p.thickness,
-        od.weight
-        from
-        sd.order_detail as od
-        left join sd.order_glass_detail as ogd on od.order_id=ogd.order_id and od.order_number=ogd.order_number
-        left join sd.product as p on od.product_name=p.product_name
-        where od.order_id=#{orderId} and ogd.production_id=#{productionId} and ogd.splitting_status=0
+        select od.order_number,
+               od.order_number       AS 'orderNumber',
+               od.width,
+               od.height,
+               od.shape,
+               od.quantity,
+               od.compute_gross_area,
+               p.total_thickness,
+               od.quantity           as baiscQuantity,
+               od.compute_gross_area as 'computeGrossArea',
+               p.total_thickness     AS 'totalThickness',
+               p.thickness,
+               od.weight
+        from sd.order_detail as od
+                 left join sd.order_glass_detail as ogd
+                           on od.order_id = ogd.order_id and od.order_number = ogd.order_number
+                 left join sd.product as p on od.product_name = p.product_name
+        where od.order_id = #{orderId}
+          and ogd.production_id = #{productionId}
+          and ogd.splitting_status = 0
         GROUP BY od.order_number
-        order by od.id desc
+        order by od.id
 
     </select>
 
@@ -246,7 +251,7 @@
         where fc.process_id = #{processId}
     </update>
 
-<!--    鏌ヨ瀵瑰簲娴佺▼鍗″彿鎺掔増鐘舵��-->
+    <!--    鏌ヨ瀵瑰簲娴佺▼鍗″彿鎺掔増鐘舵��-->
     <select id="selectLayoutStatus">
         select fc.layout_status
         from flow_card as fc
@@ -254,109 +259,153 @@
         LIMIT 1
     </select>
 
-<!--    鏌ヨ鎶ュ伐琛ㄥ唴鏄惁鏈夊搴旀祦绋嬪崱-->
+    <!--    鏌ヨ鎶ュ伐琛ㄥ唴鏄惁鏈夊搴旀祦绋嬪崱-->
     <select id="reportingWorkCount">
         select COUNT(rw.process_id)
         from reporting_work as rw
         where rw.process_id = #{processId}
     </select>
-<!--    鎻掑叆Flow_card琛�-->
+    <!--    鎻掑叆Flow_card琛�-->
     <insert id="addFlowCardMp">
-        insert into
-            flow_card (
-            order_id,
-            production_id,
-            process_id,
-            landing_sequence,
-            order_number,
-            technology_number,
-            quantity,
-            founder,
-            layers_number,
-            splitFrame_time,
-            create_time
-        )
-        select
-            ogd.order_id,
-            ogd.production_id,
-            #{processId},
-            #{landingSequence},
-            ogd.order_number,
-            ogd.technology_number,
-            #{quantity},
-            #{userName},
-            #{layer},
-            NOW(),
-            NOW()
-
+        insert into flow_card (order_id,
+                               production_id,
+                               process_id,
+                               landing_sequence,
+                               order_number,
+                               technology_number,
+                               quantity,
+                               founder,
+                               layers_number,
+                               splitFrame_time,
+                               create_time)
+        select ogd.order_id,
+               ogd.production_id,
+               #{processId},
+               #{landingSequence},
+               ogd.order_number,
+               ogd.technology_number,
+               #{quantity},
+               #{userName},
+               #{layer},
+               NOW(),
+               NOW()
 
 
         from sd.order_glass_detail as ogd
-        where ogd.production_id=#{productionId} and ogd.order_number=#{orderNumber}
+        where ogd.production_id = #{productionId}
+          and ogd.order_number = #{orderNumber}
         GROUP BY ogd.technology_number
     </insert>
 
-<!--    鏇存柊鍒嗘灦鐘舵��-->
+    <!--    鏇存柊鍒嗘灦鐘舵��-->
     <update id="updateFlowState">
         update sd.order_glass_detail as ogd
         set ogd.splitting_status=1
-        where ogd.production_id=#{productionId} and ogd.order_number=#{orderNumber}
+        where ogd.production_id = #{productionId}
+          and ogd.order_number = #{orderNumber}
     </update>
-<!--    鏌ヨ鏈垎鏋剁殑鏉℃暟-->
+    <!--    鏌ヨ鏈垎鏋剁殑鏉℃暟-->
     <select id="selectFlowCount">
         select COUNT(*)
         from sd.order_glass_detail as ogd
-        where ogd.order_id = left(#{productionId},10)
+        where ogd.order_id = left(#{productionId}, 10)
           and ogd.splitting_status = 0
     </select>
-<!--   淇敼璁㈠崟琛ㄥ垎鏋剁姸鎬�-->
+    <!--   淇敼璁㈠崟琛ㄥ垎鏋剁姸鎬�-->
     <update id="updateProcessingCard">
         update sd.`order` as o
         set o.processing_card=#{state}
-        where o.order_id=left(#{productionId},10)
+        where o.order_id = left(#{productionId}, 10)
     </update>
 
-<!--    鏌ヨ宸叉帓鐗堟暟鎹�-->
+    <!--    鏌ヨ宸叉帓鐗堟暟鎹�-->
     <select id="selectOkSchedulingMp">
-        select od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
-               round(od.width*od.height*od.quantity/1000000,2),
-               (od.quantity-IFNULL(ps.scheduling_quantity,0)),
-               round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2),
-               IFNULL(ps.scheduling_quantity,0),
-               round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2),
-               od.product_name,od.shape
-        from sd.order_detail as od left join sd.order as o on od.order_id=o.order_id
-                                   left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
-        where od.order_id=#{orderId} and ps.processes=#{processes} and ps.scheduling_id IS NOT NULL
+        select od.order_id,
+               o.customer_name,
+               o.project,
+               od.order_number,
+               od.width,
+               od.height,
+               od.quantity,
+               round(od.width * od.height * od.quantity / 1000000, 2),
+               (od.quantity - IFNULL(ps.scheduling_quantity, 0)),
+               round(od.width * od.height * (od.quantity - IFNULL(ps.scheduling_quantity, 0)) / 1000000, 2),
+               IFNULL(ps.scheduling_quantity, 0),
+               round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000, 2),
+               od.product_name,
+               od.shape
+        from sd.order_detail as od
+                 left join sd.order as o on od.order_id = o.order_id
+                 left join production_scheduling as ps
+                           on ps.order_id = od.order_id and ps.order_number = od.order_number
+        where od.order_id = #{orderId}
+          and ps.processes = #{processes}
+          and ps.scheduling_id IS NOT NULL
         order by ps.id desc
     </select>
-<!--    鏌ヨ鏈帓鐗堟暟鎹�-->
+    <!--    鏌ヨ鏈帓鐗堟暟鎹�-->
     <select id="selectNoSchedulingMp">
 
     </select>
-<!--    棣栨鏌ヨ鎺掔増鏁版嵁-->
+    <!--    棣栨鏌ヨ鎺掔増鏁版嵁-->
     <select id="selectLastSchedulingMp">
-        select od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
-               round(od.width*od.height*od.quantity/1000000,2) as area,
-               (od.quantity-IFNULL(ps.scheduling_quantity,0)) as pendingProductionQuantity,
-               round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2) as pendingProductionArea,
-               IFNULL(ps.scheduling_quantity,0) as productionScheduledQuantity,
-               round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2) as productionScheduledArea,
-               od.product_name,od.shape
-        from sd.order_detail as od left join sd.order as o on od.order_id=o.order_id
-                                   left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
+        select od.order_id,
+               o.customer_name,
+               o.project,
+               od.order_number,
+               od.width,
+               od.height,
+               od.quantity,
+               round(od.width * od.height * od.quantity / 1000000, 2)                                       as area,
+               (od.quantity - IFNULL(ps.scheduling_quantity, 0))                                            as pendingProductionQuantity,
+               round(od.width * od.height * (od.quantity - IFNULL(ps.scheduling_quantity, 0)) / 1000000,
+                     2)                                                                                     as pendingProductionArea,
+               IFNULL(ps.scheduling_quantity, 0)                                                            as productionScheduledQuantity,
+               round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000,
+                     2)                                                                                     as productionScheduledArea,
+               od.product_name,
+               od.shape
+        from sd.order_detail as od
+                 left join sd.order as o on od.order_id = o.order_id
+                 left join production_scheduling as ps
+                           on ps.order_id = od.order_id and ps.order_number = od.order_number
         where od.create_time between #{selectTime1} and #{selectTime2}
     </select>
 
-<!--   鏌ヨ瀵瑰簲搴忓彿鐨勫眰鏁�-->
+    <!--   鏌ヨ瀵瑰簲搴忓彿鐨勫眰鏁�-->
     <select id="selectLayer">
         select COUNT(ogd.order_number)
         from sd.order_glass_detail as ogd
         where ogd.production_id = #{productionId}
-          and ogd.order_number=#{orderNumber}
+          and ogd.order_number = #{orderNumber}
     </select>
-<!--  鏌ヨ璇ヨ鍗曟祦绋嬪崱鏉℃暟  -->
+    <!--  鏌ヨ璇ヨ鍗曟祦绋嬪崱鏉℃暟  -->
     <select id="selectFlowCardCount">
-        select COUNT(*) from flow_card where order_id=#{orderId}
+        select COUNT(*)
+        from flow_card
+        where order_id = #{orderId}
     </select>
+
+    <select id="flowCardDetailMp">
+        select fc.order_id,
+               fc.process_id,
+               fc.order_number,
+               fc.quantity,
+               round(ogd.child_width * ogd.child_height * fc.quantity / 1000000, 2) as area,
+               od.product_name,
+               fc.founder,
+               date(fc.splitFrame_time) as splitFrame_time
+        from flow_card as fc
+                 left join sd.order_glass_detail as ogd
+                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
+                              fc.technology_number = ogd.technology_number
+                 left join sd.order_detail as od on od.order_id = ogd.order_id and od.order_number = ogd.order_number
+        where fc.process_id = #{processId}
+        GROUP BY fc.order_id, fc.process_id, fc.order_number
+    </select>
+
+    <delete id="deleteReportingWork">
+        delete from sd.order_process_detail
+        where  left(process_id,11) = left(#{processId},11)
+    </delete>
 </mapper>
\ No newline at end of file
diff --git a/north-glass-erp/src/main/resources/mapper/pp/ProductionScheduling.xml b/north-glass-erp/src/main/resources/mapper/pp/ProductionScheduling.xml
index e099760..80b4bb7 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/ProductionScheduling.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/ProductionScheduling.xml
@@ -91,7 +91,7 @@
                od.quantity,
                round(od.width * od.height * od.quantity / 1000000, 2) as area,
                ps.scheduling_quantity,
-               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity,
+               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as scheduling_quantity,
                round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000, 2)
                                                                       as pendingProductionArea,
                IFNULL(ps.scheduling_quantity, 0)                      as productionScheduledQuantity,
@@ -115,62 +115,77 @@
     </select>
     <!--    鏌ヨ鏈帓浜ф暟鎹�-->
     <select id="selectNoSchedulingMp">
-        select od.order_id,
+        select ogd.order_id,
                o.customer_name,
                o.project,
-               od.order_number,
-               od.width,
-               od.height,
+               ogd.order_number,
+               ogd.technology_number,
+               ogd.child_width,
+               ogd.child_height,
                od.quantity,
-               round(od.width * od.height * od.quantity / 1000000, 2) as area,
-               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity,
-               round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000, 2)
-                                                                      as pendingProductionArea,
-               IFNULL(ps.scheduling_quantity, 0)                      as productionScheduledQuantity,
-               round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000,
+               round(ogd.child_width * ogd.child_height * od.quantity / 1000000, 2) as area,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as scheduling_quantity,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as pendingProductionQuantity,
+               round(ogd.child_width * ogd.child_height * (od.quantity - IFNULL((ps.schedulingQuantity), 0)) / 1000000, 2)
+                                                                                    as pendingProductionArea,
+               IFNULL(ps.schedulingQuantity, 0)                      as productionScheduledQuantity,
+               round(ogd.child_width * ogd.child_height * (IFNULL(ps.schedulingQuantity, 0)) / 1000000,
                      2)                                               as productionScheduledArea,
-               od.product_name,
+               ogd.glass_child,
                od.shape
-        from sd.order_detail as od
-                 left join sd.order as o on od.order_id = o.order_id
-                 left join production_scheduling as ps
-                           on ps.order_id = od.order_id and ps.order_number = od.order_number
-        where (od.quantity - IFNULL((ps.scheduling_quantity), 0)) > 0
-          and od.create_time between #{selectTime1} and #{selectTime2}
+        from sd.order_glass_detail as ogd
 
-          and position(#{orderId} in ps.order_id)
-          and position(#{processes} in ps.processes)
+                 left join sd.order as o on ogd.order_id = o.order_id
+                 left join sd.order_detail as od on od.order_id=ogd.order_id and od.order_number=ogd.order_number
+                 left join sd.order_process_detail as opd on opd.order_id=ogd.order_id and opd.order_number=ogd.order_number and opd.technology_number=ogd.technology_number
+                 left join
+             (select order_id,order_number,technology_number,SUM(scheduling_quantity) as schedulingQuantity from production_scheduling where processes=#{processes} group by order_id,order_number,technology_number) as ps on ps.order_id = ogd.order_id and ps.order_number = ogd.order_number and ps.technology_number=ogd.technology_number
 
-        group by od.order_id, od.order_number
-        order by ps.id desc
+        where (od.quantity - IFNULL((ps.schedulingQuantity), 0)) > 0
+          and od.create_time between #{selectTime1} and #{selectTime2} and opd.reporting_work_num_count=0
+
+          and position(#{orderId} in ogd.order_id)
+--           and position("鍒囧壊" in ps.processes)
+
+        group by ogd.order_id, ogd.order_number,ogd.technology_number
+        order by ogd.order_id desc
     </select>
     <!--    棣栨鏌ヨ鎺掍骇鏁版嵁-->
     <select id="selectLastSchedulingMp">
-        select od.order_id,
+        select ogd.order_id,
                o.customer_name,
                o.project,
-               od.order_number,
-               od.width,
-               od.height,
+               ogd.order_number,
+               ogd.technology_number,
+               ogd.child_width,
+               ogd.child_height,
                od.quantity,
-               round(od.width * od.height * od.quantity / 1000000, 2) as area,
-               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity,
-               round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000,
-                     2)                                               as pendingProductionArea,
-               IFNULL(sum(ps.scheduling_quantity), 0)                 as productionScheduledQuantity,
-               round(od.width * od.height * (IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000,
+               round(ogd.child_width * ogd.child_height * od.quantity / 1000000, 2) as area,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as scheduling_quantity,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as pendingProductionQuantity,
+               round(ogd.child_width * ogd.child_height * (od.quantity - IFNULL((ps.schedulingQuantity), 0)) / 1000000, 2)
+                                                                                    as pendingProductionArea,
+               IFNULL(ps.schedulingQuantity, 0)                      as productionScheduledQuantity,
+               round(ogd.child_width * ogd.child_height * (IFNULL(ps.schedulingQuantity, 0)) / 1000000,
                      2)                                               as productionScheduledArea,
-               od.product_name,
+               ogd.glass_child,
                od.shape
-        from sd.order_detail as od
-                 left join sd.order as o on od.order_id = o.order_id
-                 left join production_scheduling as ps
-                           on ps.order_id = od.order_id and ps.order_number = od.order_number
-        where od.create_time between #{selectTime1} and #{selectTime2}
-          and (od.quantity - IFNULL((ps.scheduling_quantity), 0)) > 0
+        from sd.order_glass_detail as ogd
 
-        group by od.order_id, od.order_number
-        order by ps.id desc
+                 left join sd.order as o on ogd.order_id = o.order_id
+                 left join sd.order_detail as od on od.order_id=ogd.order_id and od.order_number=ogd.order_number
+                 left join sd.order_process_detail as opd on opd.order_id=ogd.order_id and opd.order_number=ogd.order_number and opd.technology_number=ogd.technology_number
+                 left join
+             (select order_id,order_number,technology_number,SUM(scheduling_quantity) as schedulingQuantity from production_scheduling where processes=#{processes} group by order_id,order_number,technology_number) as ps on ps.order_id = ogd.order_id and ps.order_number = ogd.order_number and ps.technology_number=ogd.technology_number
+
+        where (od.quantity - IFNULL((ps.schedulingQuantity), 0)) > 0
+          and od.create_time between #{selectTime1} and #{selectTime2} and opd.reporting_work_num_count=0
+
+          and position(#{orderId} in ogd.order_id)
+--           and position("鍒囧壊" in ps.processes)
+
+        group by ogd.order_id, ogd.order_number,ogd.technology_number
+        order by ogd.order_id desc
     </select>
 
     <select id="selectMaxId">
@@ -183,6 +198,7 @@
         insert into production_scheduling(scheduling_id,
                                           order_id,
                                           order_number,
+                                          technology_number,
                                           processes,
                                           scheduling_quantity,
                                           scheduled_start_time,
@@ -192,6 +208,7 @@
         VALUES (#{schedulingId},
                 #{orderId},
                 #{orderNumber},
+                #{technologyNumber},
                 #{processes},
                 #{schedulingQuantity},
                 #{scheduledStartTime},
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 333af58..3ae0162 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -11,10 +11,22 @@
         <result property="thisProcess" column="this_process"/>
         <result property="reviewedState" column="reviewed_state"/>
         <result property="previousProcessQuantity" column="previous_process_quantity"/>
+        <result property="reportingWorkTime" column="reporting_work_time"/>
+        <result property="thisCompletedQuantity" column="this_completed_quantity"/>
+        <result property="thisWornQuantity" column="this_worn_quantity"/>
+        <result property="deviceName" column="device_name"/>
+        <result property="teamsGroupsName" column="teams_groups_name"/>
+        <result property="reviewedState" column="reviewed_state"/>
+        <result property="reportingWorkId" column="reporting_work_id"/>
+        <result property="processId" column="process_id"/>
+        <result property="completedArea" column="completedArea"/>
+        <result property="wornArea" column="wornArea"/>
+
         <association property="order" javaType="com.example.erp.entity.sd.Order">
             <result property="customerId" column="customer_id"/>
             <result property="customerName" column="customer_name"/>
             <result property="project" column="project"/>
+            <result property="batch" column="batch"/>
         </association>
         <association property="flowCard" javaType="com.example.erp.entity.pp.FlowCard">
             <result property="orderId" column="order_id"/>
@@ -22,6 +34,9 @@
         </association>
         <association property="reportingWorkDetail" javaType="com.example.erp.entity.pp.ReportingWorkDetail">
             <result property="completedQuantity" column="completed_quantity"/>
+        </association>
+        <association property="orderGlassDetail" javaType="com.example.erp.entity.sd.OrderGlassDetail">
+            <result property="area" column="area"/>
         </association>
 
     </resultMap>
@@ -88,8 +103,10 @@
             ogd.child_height,
             od.shape,
             fc.quantity -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as quantity,
-            odpd.reporting_work_num_count as completed,
-            odpd.broken_num as onceBroken
+            fc.quantity -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as completedQuantity,
+            odpd.reporting_work_num as completed,
+            odpd.broken_num as onceBroken,
+            if(fc.quantity -odpd.reporting_work_num = 0 ,true,false) as saveFlag -- 鍒ゆ柇鏄惁宸茬粡瀹屾垚锛屽凡缁忓畬鎴愪笉搴忓彿鍜屽悓搴忓彿鏁伴噺鐩稿悓鎵嶈兘鎻愪氦
         FROM
             sd.order_detail AS od
         LEFT JOIN sd.order_glass_detail AS ogd
@@ -131,9 +148,11 @@
             ogd.child_height,
             od.shape,
             odpds.reporting_work_num -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as quantity,
-            odpd.reporting_work_num_count as completed,
+            odpds.reporting_work_num -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as completedQuantity,
+            odpd.reporting_work_num as completed,
             odpd.broken_num as onceBroken,
-            ogd.`group`
+            ogd.`group`,
+            if(fc.quantity -odpd.reporting_work_num = 0 ,true,false) as saveFlag -- 鍒ゆ柇鏄惁宸茬粡瀹屾垚锛屽凡缁忓畬鎴愪笉搴忓彿鍜屽悓搴忓彿鏁伴噺鐩稿悓鎵嶈兘鎻愪氦
 
 
         FROM
@@ -307,4 +326,234 @@
           and a.order_number = #{orderNumber}
           and a.technology_number = #{technologyNumber}
     </select>
+
+<!--鏌ヨ淇敼鎶ュ伐鏄庣粏鏁版嵁-->
+    <select id="selectByReportingWorkId" >
+        select
+            a.reporting_work_id,
+            d.order_number,
+            d.glass_child,
+            d.technology_number,
+            d.glass_address,
+            c.quantity as quantity_card,
+            d.child_width,
+            d.child_height,
+            e.shape,
+            a.completed_quantity+a.breakage_quantity as 'quantity', -- 鍙姤宸ユ暟
+            a.completed_quantity as 'completedQuantity', -- 瀹屽伐鏁�
+            a.breakage_quantity as 'breakageQuantity', -- 鐮存崯鏁�
+            f.completed_quantity as thisQuantitySum ,-- 鏈伐搴忓畬宸ュ拰
+            if(c.quantity-f.completed_quantity = 0 ,true,false) as saveFlag,
+            <if test="nextProcess != null and nextProcess != ''">  -- 闈炴渶鍚庝竴閬撳伐搴�
+                ifnull(g.completed_quantity,0) as nextQuantitySum,  -- 鍚庡伐搴忓凡瀹屾垚
+                if((f.completed_quantity
+                    -ifnull(g.completed_quantity,0))
+                    &gt;=
+                   a.completed_quantity,
+                    0,
+                   (a.completed_quantity-f.completed_quantity
+                       +ifnull(g.completed_quantity,0))
+                    )  as minQuantity -- 淇敼鏈�灏忔暟
+            </if>
+            <if test="nextProcess == null or nextProcess == ''">  -- 鏈�鍚庝竴閬撳伐搴�
+#               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)))
+                )
+                as minQuantity -- 淇敼鏈�灏忔暟
+            </if>
+            -- e.thisQuantitySum
+        from
+            reporting_work_detail as a
+            left join reporting_work as b
+                on  a.reporting_work_id = b.reporting_work_id
+            left join  flow_card as c
+                on c.process_id = b.process_id
+                and c.technology_number = a.technology_number
+            left join  sd.order_glass_detail as d
+                on d.order_id = c.order_id
+                and c.order_number = d.order_number
+                and d.technology_number = c.technology_number
+            left join sd.order_detail as e
+                on e.order_id = d.order_id and e.order_number = d.order_number
+
+            left join (select sum(completed_quantity) as completed_quantity ,
+                              rw.process_id,
+                              rwd.order_number,
+                              rwd.technology_number,
+                              rw.this_process
+                       from reporting_work as rw
+                       left join  reporting_work_detail  as rwd
+                       on rw.reporting_work_id = rwd.reporting_work_id
+                       group by rw.process_id,
+                                rw.this_process,
+                                rwd.order_number,
+                                rwd.technology_number
+                       ) as f
+            on f.process_id = b.process_id
+            and f.this_process = b.this_process
+            and f.order_number = a.order_number
+            and f.technology_number = a.technology_number
+        <if test="nextProcess != null and nextProcess != ''">
+            left join (select ifnull(sum(completed_quantity),0) as completed_quantity ,
+                            rw.process_id,
+                            rwd.order_number,
+                            rwd.technology_number,
+                            rw.this_process
+                           from reporting_work as rw
+                           left join  reporting_work_detail  as rwd
+                           on rw.reporting_work_id = rwd.reporting_work_id
+                           group by rw.process_id,
+                                    rw.this_process,
+                                    rwd.order_number,
+                                    rwd.technology_number
+                    ) as g
+                  on g.process_id = b.process_id
+                  and g.this_process = b.next_process
+                  and g.order_number = a.order_number
+                  and g.technology_number = a.technology_number
+        </if>
+        where a.reporting_work_id = #{reportingWorkId}
+    </select>
+<select id="selectReportingWorkMp" resultMap="reportingWorkMap">
+        select rw.reporting_work_id,
+               (rw.reporting_work_time) as reporting_work_time,
+               o.order_id,
+               rw.process_id,
+               o.project,
+               o.batch,
+               rw.this_process,
+               rw.this_completed_quantity,
+               (ogd.area * rw.this_completed_quantity) as completedArea,
+               rw.this_worn_quantity,
+               (ogd.area * rw.this_worn_quantity)      as wornArea,
+               rw.device_name,
+               rw.teams_groups_name,
+               rw.reviewed_state
+        # (IF(rw.reviewed_state = 0, '鏈鏍�', IF(rw.reviewed_state = 1, '瀹℃牳閫氳繃', '瀹℃牳涓嶉�氳繃'))) as reviewed_state
+        from sd.order as o
+                 left join sd.order_glass_detail as ogd on ogd.order_id = o.order_id
+                 left join reporting_work as rw on rw.order_id = ogd.order_id and rw.production_id = ogd.production_id
+                 left join reporting_work_detail as rwd
+                           on rwd.reporting_work_id = rw.reporting_work_id and rwd.order_number = ogd.order_number and
+                              rwd.technology_number = ogd.technology_number
+        where rw.reviewed_state != 2
+          and rw.reporting_work_time between #{selectTime1} and #{selectTime2} and position(#{orderId} in rw.order_id)
+          and rw.reviewed_state!=-1
+        <if test="reportingWork.reportingWorkId != null and reportingWork.reportingWorkId != ''">
+            and rw.reporting_work_id regexp #{reportingWork.reportingWorkId}
+        </if>
+        <if test="reportingWork.orderId != null and reportingWork.orderId != ''">
+            and o.order_id regexp #{reportingWork.orderId}
+        </if>
+        <if test="reportingWork.processId != null and reportingWork.processId != ''">
+            and rw.process_id regexp #{reportingWork.processId}
+        </if>
+        <if test="reportingWork.order.project != null and reportingWork.order.project != ''">
+            and o.project regexp #{reportingWork.order.project}
+        </if>
+        <if test="reportingWork.order.batch != null and reportingWork.order.batch != ''">
+            and o.batch regexp #{reportingWork.order.batch}
+        </if>
+        <if test="reportingWork.thisProcess != null and reportingWork.thisProcess != ''">
+            and rw.this_process regexp #{reportingWork.thisProcess}
+        </if>
+        GROUP BY rw.reporting_work_id
+        ORDER BY rw.reporting_work_id desc
+        limit #{offset},#{pageSize};
+    </select>
+
+    <select id="getPageTotal">
+        select CEILING(count(rw.reporting_work_id)/#{pageSize}) as 'pageTotal',
+               count(distinct rw.reporting_work_id) as 'total'
+             from sd.order as o
+                 left join sd.order_glass_detail as ogd on ogd.order_id = o.order_id
+                 left join reporting_work as rw on rw.order_id = ogd.order_id and rw.production_id = ogd.production_id
+                 left join reporting_work_detail as rwd
+                           on rwd.reporting_work_id = rw.reporting_work_id and rwd.order_number = ogd.order_number and
+                              rwd.technology_number = ogd.technology_number
+        where rw.reviewed_state != 2
+          and rw.reporting_work_time between #{selectTime1} and #{selectTime2} and position(#{orderId} in rw.order_id)
+          and rw.reviewed_state!=-1
+        ORDER BY rw.reporting_work_id desc
+        limit #{offset},#{pageSize};
+    </select>
+<!--    鏍规嵁鎶ュ伐缂栧彿鏌ヨ涓嬪伐搴�-->
+    <select id="selectNextProcess">
+        select next_process from reporting_work where reporting_work_id=#{reportingWorkId}
+    </select>
+<!--    鏌ヨ涓嬪伐搴忔槸鍚︽姤宸�-->
+    <select id="selectCountByProcessId">
+        select count(reporting_work_id) from reporting_work where this_process=#{nextProcess} and process_id=#{processId}
+    </select>
+
+<!--    鏌ヨ瀹屽伐娆$牬鏁伴噺-->
+    <select id="reportingWorkDate">
+        select rw.process_id,
+               rwd.order_number,
+               rwd.technology_number,
+               rwd.completed_quantity,
+               IFNULL(SUM(dd.breakage_quantity), 0) as breakage_quantity
+        from reporting_work as rw
+                 left join reporting_work_detail as rwd on rw.reporting_work_id = rwd.reporting_work_id
+                 left join damage_details as dd
+                           on dd.reporting_work_id = rwd.reporting_work_id and dd.order_number = rwd.order_number and
+                              dd.technology_number = rwd.technology_number
+        where rw.reporting_work_id = #{reportingWorkId}
+        GROUP BY rwd.order_number, rwd.technology_number
+    </select>
+
+<!--    淇敼鎶ュ伐娴佺▼鍗¤〃鏁版嵁-->
+    <update id="updateWorkProcess">
+        update sd.order_process_detail
+        set reporting_work_num_count=reporting_work_num_count - #{completedQuantity},
+            reporting_work_num=reporting_work_num - #{completedQuantity},
+            broken_num=broken_num - #{breakageQuantity}
+        where process_id = #{processId}
+          and order_number = #{orderNumber}
+          and technology_number = #{technologyNumber}
+          and process = #{thisProcess}
+    </update>
+
+<!--    鍒犻櫎鎶ュ伐-->
+    <update id="deleteWork">
+        update reporting_work set reviewed_state=-1
+        where reporting_work_id = #{reportingWorkId}
+    </update>
+<!--    鑾峰彇鏈�鍚庝竴閬撳伐搴�-->
+    <select id="selectLastProcess">
+        select process
+        from sd.order_process_detail
+        where process_id = #{processId}
+          and order_number = 1
+          and technology_number = 1
+        order by id desc
+        LIMIT 1
+    </select>
+<!--    鏌ヨ鍙叆搴撱�佸凡鍏ュ簱鏁伴噺-->
+    <select id="selectReceiptQuantity">
+        select ifnull(SUM(quantity),0)                     as quantity,
+               ifnull(SUM(inventory_quantity), 0) as inventoryQuantity,
+               ifnull(SUM(received_quantity), 0) as receivedQuantity
+        from flow_card
+        where process_id = #{processId}
+          and technology_number = 1
+        GROUP BY process_id
+    </select>
+<!--    鏌ヨ鎶ュ伐缂栧彿瀹屽伐鏁伴噺-->
+    <select id="selectCompletedQuantity">
+        select ifnull(this_completed_quantity,0) from reporting_work where reporting_work_id=#{reportingWorkId}
+    </select>
+<!--    鏇存柊娴佺▼鍗″彲鍏ュ簱鏁伴噺-->
+    <update id="updateInventoryQuantity">
+        update flow_card
+        set inventory_quantity = inventory_quantity - #{completedQuantity}
+        where process_id = #{processId}
+          and order_number = #{orderNumber}
+          and technology_number = #{technologyNumber}
+    </update>
 </mapper>
\ No newline at end of file
diff --git a/north-glass-erp/src/main/resources/mapper/pp/ReportingWorkDetail.xml b/north-glass-erp/src/main/resources/mapper/pp/ReportingWorkDetail.xml
index d022876..dc42609 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/ReportingWorkDetail.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/ReportingWorkDetail.xml
@@ -154,6 +154,7 @@
     </select>
 
 
+
     <!--鏌ヨdetail鏄庣粏-->
     <select id="reportingWorkId">
         select * from reporting_work_detail
diff --git a/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml b/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml
index 9983811..2307263 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetail.xml
@@ -26,5 +26,47 @@
 
 
     </insert>
+    <update id="updateQuantity">
+        update sd.order_process_detail as a
+        inner join
+        (select
+             rwd.completed_quantity,
+             rwd.breakage_quantity,
+             rw.process_id,
+             rwd.order_number,
+             rwd.technology_number
+              from pp.reporting_work_detail as rwd
+            left join pp.reporting_work as rw
+                on rwd.reporting_work_id =  rw.reporting_work_id
+            where rwd.reporting_work_id =#{reportingWorkId} )  as b
+        on a.process_id = b.process_id
+        and a.order_number = b.order_number
+        and a.technology_number = b.technology_number
+
+        <if test="type == 'delete'">
+            set a.reporting_work_num_count
+                = a.reporting_work_num_count-b.completed_quantity,
+
+            a.reporting_work_num
+                = a.reporting_work_num-b.completed_quantity,
+
+            a.broken_num
+                = a.broken_num-b.breakage_quantity
+        </if>
+
+        <if test="type == 'add'">
+            set a.reporting_work_num_count
+            = a.reporting_work_num_count+b.completed_quantity,
+
+            a.reporting_work_num
+            = a.reporting_work_num+b.completed_quantity,
+
+            a.broken_num
+            = a.broken_num+b.breakage_quantity
+        </if>
+
+        where a.process = #{process}
+
+    </update>
 
 </mapper>
\ No newline at end of file
diff --git a/north-glass-erp/target/classes/mapper/pp/FolwCard.xml b/north-glass-erp/target/classes/mapper/pp/FolwCard.xml
index 5e28ebb..13b2ccb 100644
--- a/north-glass-erp/target/classes/mapper/pp/FolwCard.xml
+++ b/north-glass-erp/target/classes/mapper/pp/FolwCard.xml
@@ -62,25 +62,25 @@
         a.founder,
         c.processing_note,
         if(a.layout_status=0,"涓嶅彲鎺掔増",if(a.layout_status=1,"鍙帓鐗�","宸叉帓鐗�")) as layout_status
-        from flow_card as a left join sd.`order` as b on a.order_Id=b.order_id
+        from (select  id,order_id,process_id,order_number, quantity,founder,layout_status,create_time from flow_card group by process_Id,order_number) as a left join sd.`order` as b on a.order_Id=b.order_id
         left join sd.order_detail as c on a.order_Id=c.order_id and a.order_Number=c.order_number
         where a.create_time between #{selectTime1} and #{selectTime2}
-                    <if test="flowCard.orderId != null and flowCard.orderId != ''">
-                        and a.order_id regexp #{flowCard.orderId}
-                    </if>
-                    <if test="flowCard.processId != null and flowCard.processId != ''">
-                        and a.process_Id regexp #{flowCard.processId}
-                    </if>
-                    <if test="flowCard.orderDetail.productId != null and flowCard.orderDetail.productId != ''">
-                        and c.product_id regexp #{flowCard.orderDetail.productId}
-                    </if>
-                    <if test="flowCard.orderDetail.productName != null and flowCard.orderDetail.productName!= ''">
-                        and c.product_name regexp #{flowCard.orderDetail.productName}
-                    </if>
+        <if test="flowCard.orderId != null and flowCard.orderId != ''">
+            and a.order_id regexp #{flowCard.orderId}
+        </if>
+        <if test="flowCard.processId != null and flowCard.processId != ''">
+            and a.process_Id regexp #{flowCard.processId}
+        </if>
+        <if test="flowCard.orderDetail.productId != null and flowCard.orderDetail.productId != ''">
+            and c.product_id regexp #{flowCard.orderDetail.productId}
+        </if>
+        <if test="flowCard.orderDetail.productName != null and flowCard.orderDetail.productName!= ''">
+            and c.product_name regexp #{flowCard.orderDetail.productName}
+        </if>
 
-                    <if test="flowCard.order.project != null and flowCard.order.project!= ''">
-                        and b.project regexp #{flowCard.order.project}
-                    </if>
+        <if test="flowCard.order.project != null and flowCard.order.project!= ''">
+            and b.project regexp #{flowCard.order.project}
+        </if>
 
 
         group by a.process_Id
@@ -131,7 +131,8 @@
         o.delivery_address
         from sd.`order` as o
         left join sd.order_glass_detail ogd on o.order_id = ogd.order_id
-        where o.production_order=2 and ogd.splitting_status=0 and o.create_time between #{selectTime1} and #{selectTime2}
+        where o.production_order=2 and ogd.splitting_status=0 and o.create_time between #{selectTime1} and
+        #{selectTime2}
 
         <if test="flowCard.order.orderId != null and flowCard.order.orderId != ''">
             and o.order_id regexp #{flowCard.order.orderId}
@@ -165,7 +166,7 @@
         ;
     </select>
 
-<!--    鍒嗘灦鏄庣粏鏌ヨ-->
+    <!--    鍒嗘灦鏄庣粏鏌ヨ-->
     <select id="detailsSelectMp" resultMap="flowCardMap">
         select od.order_id,
         ogd.production_id,
@@ -174,7 +175,7 @@
         SUM( od.quantity) as quantity,
         SUM(od.compute_gross_area) as compute_gross_area,
         od.perimeter
-        from  sd.order_detail as od left join
+        from sd.order_detail as od left join
         (select order_id,order_number,production_id,splitting_status from sd.order_glass_detail
         GROUP BY order_id,order_number
         ) as ogd on od.order_id=ogd.order_id and od.order_number=ogd.order_number
@@ -199,43 +200,47 @@
     <update id="updateDeleteState">
         update
             sd.order_glass_detail as ogd left join flow_card as fc
-                on ogd.order_id=fc.order_id and ogd.order_number=fc.order_number
+                on ogd.order_id = fc.order_id and ogd.order_number = fc.order_number
         set ogd.splitting_status=0
-        where ogd.order_id=#{orderId}  and fc.process_id=#{processId}
+        where ogd.order_id = #{orderId}
+          and fc.process_id = #{processId}
 
     </update>
 
     <!--    鍒犻櫎娴佺▼鍗�-->
     <update id="deleteFlowCardMp">
-        delete from flow_card as fc where fc.process_id=#{processId}
+        delete
+        from flow_card as fc
+        where fc.production_id = left(#{processId},11)
     </update>
 
     <!--    鍒嗘灦鏂板鏄庣粏鏌ヨ-->
 
     <!--resultMap="flowCardMap"-->
-    <select id="selectNoCardMp" >
+    <select id="selectNoCardMp">
 
-        select
-        od.order_number,
-        od.order_number AS 'orderNumber',
-        od.width,
-        od.height,
-        od.shape,
-        od.quantity,
-        od.compute_gross_area,
-        p.total_thickness,
-        od.quantity as baiscQuantity,
-        od.compute_gross_area as 'computeGrossArea',
-        p.total_thickness AS 'totalThickness',
-        p.thickness,
-        od.weight
-        from
-        sd.order_detail as od
-        left join sd.order_glass_detail as ogd on od.order_id=ogd.order_id and od.order_number=ogd.order_number
-        left join sd.product as p on od.product_name=p.product_name
-        where od.order_id=#{orderId} and ogd.production_id=#{productionId} and ogd.splitting_status=0
+        select od.order_number,
+               od.order_number       AS 'orderNumber',
+               od.width,
+               od.height,
+               od.shape,
+               od.quantity,
+               od.compute_gross_area,
+               p.total_thickness,
+               od.quantity           as baiscQuantity,
+               od.compute_gross_area as 'computeGrossArea',
+               p.total_thickness     AS 'totalThickness',
+               p.thickness,
+               od.weight
+        from sd.order_detail as od
+                 left join sd.order_glass_detail as ogd
+                           on od.order_id = ogd.order_id and od.order_number = ogd.order_number
+                 left join sd.product as p on od.product_name = p.product_name
+        where od.order_id = #{orderId}
+          and ogd.production_id = #{productionId}
+          and ogd.splitting_status = 0
         GROUP BY od.order_number
-        order by od.id desc
+        order by od.id
 
     </select>
 
@@ -246,7 +251,7 @@
         where fc.process_id = #{processId}
     </update>
 
-<!--    鏌ヨ瀵瑰簲娴佺▼鍗″彿鎺掔増鐘舵��-->
+    <!--    鏌ヨ瀵瑰簲娴佺▼鍗″彿鎺掔増鐘舵��-->
     <select id="selectLayoutStatus">
         select fc.layout_status
         from flow_card as fc
@@ -254,109 +259,153 @@
         LIMIT 1
     </select>
 
-<!--    鏌ヨ鎶ュ伐琛ㄥ唴鏄惁鏈夊搴旀祦绋嬪崱-->
+    <!--    鏌ヨ鎶ュ伐琛ㄥ唴鏄惁鏈夊搴旀祦绋嬪崱-->
     <select id="reportingWorkCount">
         select COUNT(rw.process_id)
         from reporting_work as rw
         where rw.process_id = #{processId}
     </select>
-<!--    鎻掑叆Flow_card琛�-->
+    <!--    鎻掑叆Flow_card琛�-->
     <insert id="addFlowCardMp">
-        insert into
-            flow_card (
-            order_id,
-            production_id,
-            process_id,
-            landing_sequence,
-            order_number,
-            technology_number,
-            quantity,
-            founder,
-            layers_number,
-            splitFrame_time,
-            create_time
-        )
-        select
-            ogd.order_id,
-            ogd.production_id,
-            #{processId},
-            #{landingSequence},
-            ogd.order_number,
-            ogd.technology_number,
-            #{quantity},
-            #{userName},
-            #{layer},
-            NOW(),
-            NOW()
-
+        insert into flow_card (order_id,
+                               production_id,
+                               process_id,
+                               landing_sequence,
+                               order_number,
+                               technology_number,
+                               quantity,
+                               founder,
+                               layers_number,
+                               splitFrame_time,
+                               create_time)
+        select ogd.order_id,
+               ogd.production_id,
+               #{processId},
+               #{landingSequence},
+               ogd.order_number,
+               ogd.technology_number,
+               #{quantity},
+               #{userName},
+               #{layer},
+               NOW(),
+               NOW()
 
 
         from sd.order_glass_detail as ogd
-        where ogd.production_id=#{productionId} and ogd.order_number=#{orderNumber}
+        where ogd.production_id = #{productionId}
+          and ogd.order_number = #{orderNumber}
         GROUP BY ogd.technology_number
     </insert>
 
-<!--    鏇存柊鍒嗘灦鐘舵��-->
+    <!--    鏇存柊鍒嗘灦鐘舵��-->
     <update id="updateFlowState">
         update sd.order_glass_detail as ogd
         set ogd.splitting_status=1
-        where ogd.production_id=#{productionId} and ogd.order_number=#{orderNumber}
+        where ogd.production_id = #{productionId}
+          and ogd.order_number = #{orderNumber}
     </update>
-<!--    鏌ヨ鏈垎鏋剁殑鏉℃暟-->
+    <!--    鏌ヨ鏈垎鏋剁殑鏉℃暟-->
     <select id="selectFlowCount">
         select COUNT(*)
         from sd.order_glass_detail as ogd
-        where ogd.order_id = left(#{productionId},10)
+        where ogd.order_id = left(#{productionId}, 10)
           and ogd.splitting_status = 0
     </select>
-<!--   淇敼璁㈠崟琛ㄥ垎鏋剁姸鎬�-->
+    <!--   淇敼璁㈠崟琛ㄥ垎鏋剁姸鎬�-->
     <update id="updateProcessingCard">
         update sd.`order` as o
         set o.processing_card=#{state}
-        where o.order_id=left(#{productionId},10)
+        where o.order_id = left(#{productionId}, 10)
     </update>
 
-<!--    鏌ヨ宸叉帓鐗堟暟鎹�-->
+    <!--    鏌ヨ宸叉帓鐗堟暟鎹�-->
     <select id="selectOkSchedulingMp">
-        select od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
-               round(od.width*od.height*od.quantity/1000000,2),
-               (od.quantity-IFNULL(ps.scheduling_quantity,0)),
-               round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2),
-               IFNULL(ps.scheduling_quantity,0),
-               round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2),
-               od.product_name,od.shape
-        from sd.order_detail as od left join sd.order as o on od.order_id=o.order_id
-                                   left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
-        where od.order_id=#{orderId} and ps.processes=#{processes} and ps.scheduling_id IS NOT NULL
+        select od.order_id,
+               o.customer_name,
+               o.project,
+               od.order_number,
+               od.width,
+               od.height,
+               od.quantity,
+               round(od.width * od.height * od.quantity / 1000000, 2),
+               (od.quantity - IFNULL(ps.scheduling_quantity, 0)),
+               round(od.width * od.height * (od.quantity - IFNULL(ps.scheduling_quantity, 0)) / 1000000, 2),
+               IFNULL(ps.scheduling_quantity, 0),
+               round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000, 2),
+               od.product_name,
+               od.shape
+        from sd.order_detail as od
+                 left join sd.order as o on od.order_id = o.order_id
+                 left join production_scheduling as ps
+                           on ps.order_id = od.order_id and ps.order_number = od.order_number
+        where od.order_id = #{orderId}
+          and ps.processes = #{processes}
+          and ps.scheduling_id IS NOT NULL
         order by ps.id desc
     </select>
-<!--    鏌ヨ鏈帓鐗堟暟鎹�-->
+    <!--    鏌ヨ鏈帓鐗堟暟鎹�-->
     <select id="selectNoSchedulingMp">
 
     </select>
-<!--    棣栨鏌ヨ鎺掔増鏁版嵁-->
+    <!--    棣栨鏌ヨ鎺掔増鏁版嵁-->
     <select id="selectLastSchedulingMp">
-        select od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
-               round(od.width*od.height*od.quantity/1000000,2) as area,
-               (od.quantity-IFNULL(ps.scheduling_quantity,0)) as pendingProductionQuantity,
-               round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2) as pendingProductionArea,
-               IFNULL(ps.scheduling_quantity,0) as productionScheduledQuantity,
-               round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2) as productionScheduledArea,
-               od.product_name,od.shape
-        from sd.order_detail as od left join sd.order as o on od.order_id=o.order_id
-                                   left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
+        select od.order_id,
+               o.customer_name,
+               o.project,
+               od.order_number,
+               od.width,
+               od.height,
+               od.quantity,
+               round(od.width * od.height * od.quantity / 1000000, 2)                                       as area,
+               (od.quantity - IFNULL(ps.scheduling_quantity, 0))                                            as pendingProductionQuantity,
+               round(od.width * od.height * (od.quantity - IFNULL(ps.scheduling_quantity, 0)) / 1000000,
+                     2)                                                                                     as pendingProductionArea,
+               IFNULL(ps.scheduling_quantity, 0)                                                            as productionScheduledQuantity,
+               round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000,
+                     2)                                                                                     as productionScheduledArea,
+               od.product_name,
+               od.shape
+        from sd.order_detail as od
+                 left join sd.order as o on od.order_id = o.order_id
+                 left join production_scheduling as ps
+                           on ps.order_id = od.order_id and ps.order_number = od.order_number
         where od.create_time between #{selectTime1} and #{selectTime2}
     </select>
 
-<!--   鏌ヨ瀵瑰簲搴忓彿鐨勫眰鏁�-->
+    <!--   鏌ヨ瀵瑰簲搴忓彿鐨勫眰鏁�-->
     <select id="selectLayer">
         select COUNT(ogd.order_number)
         from sd.order_glass_detail as ogd
         where ogd.production_id = #{productionId}
-          and ogd.order_number=#{orderNumber}
+          and ogd.order_number = #{orderNumber}
     </select>
-<!--  鏌ヨ璇ヨ鍗曟祦绋嬪崱鏉℃暟  -->
+    <!--  鏌ヨ璇ヨ鍗曟祦绋嬪崱鏉℃暟  -->
     <select id="selectFlowCardCount">
-        select COUNT(*) from flow_card where order_id=#{orderId}
+        select COUNT(*)
+        from flow_card
+        where order_id = #{orderId}
     </select>
+
+    <select id="flowCardDetailMp">
+        select fc.order_id,
+               fc.process_id,
+               fc.order_number,
+               fc.quantity,
+               round(ogd.child_width * ogd.child_height * fc.quantity / 1000000, 2) as area,
+               od.product_name,
+               fc.founder,
+               date(fc.splitFrame_time) as splitFrame_time
+        from flow_card as fc
+                 left join sd.order_glass_detail as ogd
+                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
+                              fc.technology_number = ogd.technology_number
+                 left join sd.order_detail as od on od.order_id = ogd.order_id and od.order_number = ogd.order_number
+        where fc.process_id = #{processId}
+        GROUP BY fc.order_id, fc.process_id, fc.order_number
+    </select>
+
+    <delete id="deleteReportingWork">
+        delete from sd.order_process_detail
+        where  left(process_id,11) = left(#{processId},11)
+    </delete>
 </mapper>
\ No newline at end of file
diff --git a/north-glass-erp/target/classes/mapper/pp/ProductionScheduling.xml b/north-glass-erp/target/classes/mapper/pp/ProductionScheduling.xml
index e099760..80b4bb7 100644
--- a/north-glass-erp/target/classes/mapper/pp/ProductionScheduling.xml
+++ b/north-glass-erp/target/classes/mapper/pp/ProductionScheduling.xml
@@ -91,7 +91,7 @@
                od.quantity,
                round(od.width * od.height * od.quantity / 1000000, 2) as area,
                ps.scheduling_quantity,
-               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity,
+               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as scheduling_quantity,
                round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000, 2)
                                                                       as pendingProductionArea,
                IFNULL(ps.scheduling_quantity, 0)                      as productionScheduledQuantity,
@@ -115,62 +115,77 @@
     </select>
     <!--    鏌ヨ鏈帓浜ф暟鎹�-->
     <select id="selectNoSchedulingMp">
-        select od.order_id,
+        select ogd.order_id,
                o.customer_name,
                o.project,
-               od.order_number,
-               od.width,
-               od.height,
+               ogd.order_number,
+               ogd.technology_number,
+               ogd.child_width,
+               ogd.child_height,
                od.quantity,
-               round(od.width * od.height * od.quantity / 1000000, 2) as area,
-               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity,
-               round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000, 2)
-                                                                      as pendingProductionArea,
-               IFNULL(ps.scheduling_quantity, 0)                      as productionScheduledQuantity,
-               round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000,
+               round(ogd.child_width * ogd.child_height * od.quantity / 1000000, 2) as area,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as scheduling_quantity,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as pendingProductionQuantity,
+               round(ogd.child_width * ogd.child_height * (od.quantity - IFNULL((ps.schedulingQuantity), 0)) / 1000000, 2)
+                                                                                    as pendingProductionArea,
+               IFNULL(ps.schedulingQuantity, 0)                      as productionScheduledQuantity,
+               round(ogd.child_width * ogd.child_height * (IFNULL(ps.schedulingQuantity, 0)) / 1000000,
                      2)                                               as productionScheduledArea,
-               od.product_name,
+               ogd.glass_child,
                od.shape
-        from sd.order_detail as od
-                 left join sd.order as o on od.order_id = o.order_id
-                 left join production_scheduling as ps
-                           on ps.order_id = od.order_id and ps.order_number = od.order_number
-        where (od.quantity - IFNULL((ps.scheduling_quantity), 0)) > 0
-          and od.create_time between #{selectTime1} and #{selectTime2}
+        from sd.order_glass_detail as ogd
 
-          and position(#{orderId} in ps.order_id)
-          and position(#{processes} in ps.processes)
+                 left join sd.order as o on ogd.order_id = o.order_id
+                 left join sd.order_detail as od on od.order_id=ogd.order_id and od.order_number=ogd.order_number
+                 left join sd.order_process_detail as opd on opd.order_id=ogd.order_id and opd.order_number=ogd.order_number and opd.technology_number=ogd.technology_number
+                 left join
+             (select order_id,order_number,technology_number,SUM(scheduling_quantity) as schedulingQuantity from production_scheduling where processes=#{processes} group by order_id,order_number,technology_number) as ps on ps.order_id = ogd.order_id and ps.order_number = ogd.order_number and ps.technology_number=ogd.technology_number
 
-        group by od.order_id, od.order_number
-        order by ps.id desc
+        where (od.quantity - IFNULL((ps.schedulingQuantity), 0)) > 0
+          and od.create_time between #{selectTime1} and #{selectTime2} and opd.reporting_work_num_count=0
+
+          and position(#{orderId} in ogd.order_id)
+--           and position("鍒囧壊" in ps.processes)
+
+        group by ogd.order_id, ogd.order_number,ogd.technology_number
+        order by ogd.order_id desc
     </select>
     <!--    棣栨鏌ヨ鎺掍骇鏁版嵁-->
     <select id="selectLastSchedulingMp">
-        select od.order_id,
+        select ogd.order_id,
                o.customer_name,
                o.project,
-               od.order_number,
-               od.width,
-               od.height,
+               ogd.order_number,
+               ogd.technology_number,
+               ogd.child_width,
+               ogd.child_height,
                od.quantity,
-               round(od.width * od.height * od.quantity / 1000000, 2) as area,
-               (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity,
-               round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000,
-                     2)                                               as pendingProductionArea,
-               IFNULL(sum(ps.scheduling_quantity), 0)                 as productionScheduledQuantity,
-               round(od.width * od.height * (IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000,
+               round(ogd.child_width * ogd.child_height * od.quantity / 1000000, 2) as area,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as scheduling_quantity,
+               (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as pendingProductionQuantity,
+               round(ogd.child_width * ogd.child_height * (od.quantity - IFNULL((ps.schedulingQuantity), 0)) / 1000000, 2)
+                                                                                    as pendingProductionArea,
+               IFNULL(ps.schedulingQuantity, 0)                      as productionScheduledQuantity,
+               round(ogd.child_width * ogd.child_height * (IFNULL(ps.schedulingQuantity, 0)) / 1000000,
                      2)                                               as productionScheduledArea,
-               od.product_name,
+               ogd.glass_child,
                od.shape
-        from sd.order_detail as od
-                 left join sd.order as o on od.order_id = o.order_id
-                 left join production_scheduling as ps
-                           on ps.order_id = od.order_id and ps.order_number = od.order_number
-        where od.create_time between #{selectTime1} and #{selectTime2}
-          and (od.quantity - IFNULL((ps.scheduling_quantity), 0)) > 0
+        from sd.order_glass_detail as ogd
 
-        group by od.order_id, od.order_number
-        order by ps.id desc
+                 left join sd.order as o on ogd.order_id = o.order_id
+                 left join sd.order_detail as od on od.order_id=ogd.order_id and od.order_number=ogd.order_number
+                 left join sd.order_process_detail as opd on opd.order_id=ogd.order_id and opd.order_number=ogd.order_number and opd.technology_number=ogd.technology_number
+                 left join
+             (select order_id,order_number,technology_number,SUM(scheduling_quantity) as schedulingQuantity from production_scheduling where processes=#{processes} group by order_id,order_number,technology_number) as ps on ps.order_id = ogd.order_id and ps.order_number = ogd.order_number and ps.technology_number=ogd.technology_number
+
+        where (od.quantity - IFNULL((ps.schedulingQuantity), 0)) > 0
+          and od.create_time between #{selectTime1} and #{selectTime2} and opd.reporting_work_num_count=0
+
+          and position(#{orderId} in ogd.order_id)
+--           and position("鍒囧壊" in ps.processes)
+
+        group by ogd.order_id, ogd.order_number,ogd.technology_number
+        order by ogd.order_id desc
     </select>
 
     <select id="selectMaxId">
@@ -183,6 +198,7 @@
         insert into production_scheduling(scheduling_id,
                                           order_id,
                                           order_number,
+                                          technology_number,
                                           processes,
                                           scheduling_quantity,
                                           scheduled_start_time,
@@ -192,6 +208,7 @@
         VALUES (#{schedulingId},
                 #{orderId},
                 #{orderNumber},
+                #{technologyNumber},
                 #{processes},
                 #{schedulingQuantity},
                 #{scheduledStartTime},
diff --git a/north-glass-erp/target/classes/mapper/pp/ReportingWork.xml b/north-glass-erp/target/classes/mapper/pp/ReportingWork.xml
index 333af58..3ae0162 100644
--- a/north-glass-erp/target/classes/mapper/pp/ReportingWork.xml
+++ b/north-glass-erp/target/classes/mapper/pp/ReportingWork.xml
@@ -11,10 +11,22 @@
         <result property="thisProcess" column="this_process"/>
         <result property="reviewedState" column="reviewed_state"/>
         <result property="previousProcessQuantity" column="previous_process_quantity"/>
+        <result property="reportingWorkTime" column="reporting_work_time"/>
+        <result property="thisCompletedQuantity" column="this_completed_quantity"/>
+        <result property="thisWornQuantity" column="this_worn_quantity"/>
+        <result property="deviceName" column="device_name"/>
+        <result property="teamsGroupsName" column="teams_groups_name"/>
+        <result property="reviewedState" column="reviewed_state"/>
+        <result property="reportingWorkId" column="reporting_work_id"/>
+        <result property="processId" column="process_id"/>
+        <result property="completedArea" column="completedArea"/>
+        <result property="wornArea" column="wornArea"/>
+
         <association property="order" javaType="com.example.erp.entity.sd.Order">
             <result property="customerId" column="customer_id"/>
             <result property="customerName" column="customer_name"/>
             <result property="project" column="project"/>
+            <result property="batch" column="batch"/>
         </association>
         <association property="flowCard" javaType="com.example.erp.entity.pp.FlowCard">
             <result property="orderId" column="order_id"/>
@@ -22,6 +34,9 @@
         </association>
         <association property="reportingWorkDetail" javaType="com.example.erp.entity.pp.ReportingWorkDetail">
             <result property="completedQuantity" column="completed_quantity"/>
+        </association>
+        <association property="orderGlassDetail" javaType="com.example.erp.entity.sd.OrderGlassDetail">
+            <result property="area" column="area"/>
         </association>
 
     </resultMap>
@@ -88,8 +103,10 @@
             ogd.child_height,
             od.shape,
             fc.quantity -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as quantity,
-            odpd.reporting_work_num_count as completed,
-            odpd.broken_num as onceBroken
+            fc.quantity -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as completedQuantity,
+            odpd.reporting_work_num as completed,
+            odpd.broken_num as onceBroken,
+            if(fc.quantity -odpd.reporting_work_num = 0 ,true,false) as saveFlag -- 鍒ゆ柇鏄惁宸茬粡瀹屾垚锛屽凡缁忓畬鎴愪笉搴忓彿鍜屽悓搴忓彿鏁伴噺鐩稿悓鎵嶈兘鎻愪氦
         FROM
             sd.order_detail AS od
         LEFT JOIN sd.order_glass_detail AS ogd
@@ -131,9 +148,11 @@
             ogd.child_height,
             od.shape,
             odpds.reporting_work_num -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as quantity,
-            odpd.reporting_work_num_count as completed,
+            odpds.reporting_work_num -odpd.reporting_work_num -odpd.broken_num + ifnull(c.patchNumSum,0) as completedQuantity,
+            odpd.reporting_work_num as completed,
             odpd.broken_num as onceBroken,
-            ogd.`group`
+            ogd.`group`,
+            if(fc.quantity -odpd.reporting_work_num = 0 ,true,false) as saveFlag -- 鍒ゆ柇鏄惁宸茬粡瀹屾垚锛屽凡缁忓畬鎴愪笉搴忓彿鍜屽悓搴忓彿鏁伴噺鐩稿悓鎵嶈兘鎻愪氦
 
 
         FROM
@@ -307,4 +326,234 @@
           and a.order_number = #{orderNumber}
           and a.technology_number = #{technologyNumber}
     </select>
+
+<!--鏌ヨ淇敼鎶ュ伐鏄庣粏鏁版嵁-->
+    <select id="selectByReportingWorkId" >
+        select
+            a.reporting_work_id,
+            d.order_number,
+            d.glass_child,
+            d.technology_number,
+            d.glass_address,
+            c.quantity as quantity_card,
+            d.child_width,
+            d.child_height,
+            e.shape,
+            a.completed_quantity+a.breakage_quantity as 'quantity', -- 鍙姤宸ユ暟
+            a.completed_quantity as 'completedQuantity', -- 瀹屽伐鏁�
+            a.breakage_quantity as 'breakageQuantity', -- 鐮存崯鏁�
+            f.completed_quantity as thisQuantitySum ,-- 鏈伐搴忓畬宸ュ拰
+            if(c.quantity-f.completed_quantity = 0 ,true,false) as saveFlag,
+            <if test="nextProcess != null and nextProcess != ''">  -- 闈炴渶鍚庝竴閬撳伐搴�
+                ifnull(g.completed_quantity,0) as nextQuantitySum,  -- 鍚庡伐搴忓凡瀹屾垚
+                if((f.completed_quantity
+                    -ifnull(g.completed_quantity,0))
+                    &gt;=
+                   a.completed_quantity,
+                    0,
+                   (a.completed_quantity-f.completed_quantity
+                       +ifnull(g.completed_quantity,0))
+                    )  as minQuantity -- 淇敼鏈�灏忔暟
+            </if>
+            <if test="nextProcess == null or nextProcess == ''">  -- 鏈�鍚庝竴閬撳伐搴�
+#               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)))
+                )
+                as minQuantity -- 淇敼鏈�灏忔暟
+            </if>
+            -- e.thisQuantitySum
+        from
+            reporting_work_detail as a
+            left join reporting_work as b
+                on  a.reporting_work_id = b.reporting_work_id
+            left join  flow_card as c
+                on c.process_id = b.process_id
+                and c.technology_number = a.technology_number
+            left join  sd.order_glass_detail as d
+                on d.order_id = c.order_id
+                and c.order_number = d.order_number
+                and d.technology_number = c.technology_number
+            left join sd.order_detail as e
+                on e.order_id = d.order_id and e.order_number = d.order_number
+
+            left join (select sum(completed_quantity) as completed_quantity ,
+                              rw.process_id,
+                              rwd.order_number,
+                              rwd.technology_number,
+                              rw.this_process
+                       from reporting_work as rw
+                       left join  reporting_work_detail  as rwd
+                       on rw.reporting_work_id = rwd.reporting_work_id
+                       group by rw.process_id,
+                                rw.this_process,
+                                rwd.order_number,
+                                rwd.technology_number
+                       ) as f
+            on f.process_id = b.process_id
+            and f.this_process = b.this_process
+            and f.order_number = a.order_number
+            and f.technology_number = a.technology_number
+        <if test="nextProcess != null and nextProcess != ''">
+            left join (select ifnull(sum(completed_quantity),0) as completed_quantity ,
+                            rw.process_id,
+                            rwd.order_number,
+                            rwd.technology_number,
+                            rw.this_process
+                           from reporting_work as rw
+                           left join  reporting_work_detail  as rwd
+                           on rw.reporting_work_id = rwd.reporting_work_id
+                           group by rw.process_id,
+                                    rw.this_process,
+                                    rwd.order_number,
+                                    rwd.technology_number
+                    ) as g
+                  on g.process_id = b.process_id
+                  and g.this_process = b.next_process
+                  and g.order_number = a.order_number
+                  and g.technology_number = a.technology_number
+        </if>
+        where a.reporting_work_id = #{reportingWorkId}
+    </select>
+<select id="selectReportingWorkMp" resultMap="reportingWorkMap">
+        select rw.reporting_work_id,
+               (rw.reporting_work_time) as reporting_work_time,
+               o.order_id,
+               rw.process_id,
+               o.project,
+               o.batch,
+               rw.this_process,
+               rw.this_completed_quantity,
+               (ogd.area * rw.this_completed_quantity) as completedArea,
+               rw.this_worn_quantity,
+               (ogd.area * rw.this_worn_quantity)      as wornArea,
+               rw.device_name,
+               rw.teams_groups_name,
+               rw.reviewed_state
+        # (IF(rw.reviewed_state = 0, '鏈鏍�', IF(rw.reviewed_state = 1, '瀹℃牳閫氳繃', '瀹℃牳涓嶉�氳繃'))) as reviewed_state
+        from sd.order as o
+                 left join sd.order_glass_detail as ogd on ogd.order_id = o.order_id
+                 left join reporting_work as rw on rw.order_id = ogd.order_id and rw.production_id = ogd.production_id
+                 left join reporting_work_detail as rwd
+                           on rwd.reporting_work_id = rw.reporting_work_id and rwd.order_number = ogd.order_number and
+                              rwd.technology_number = ogd.technology_number
+        where rw.reviewed_state != 2
+          and rw.reporting_work_time between #{selectTime1} and #{selectTime2} and position(#{orderId} in rw.order_id)
+          and rw.reviewed_state!=-1
+        <if test="reportingWork.reportingWorkId != null and reportingWork.reportingWorkId != ''">
+            and rw.reporting_work_id regexp #{reportingWork.reportingWorkId}
+        </if>
+        <if test="reportingWork.orderId != null and reportingWork.orderId != ''">
+            and o.order_id regexp #{reportingWork.orderId}
+        </if>
+        <if test="reportingWork.processId != null and reportingWork.processId != ''">
+            and rw.process_id regexp #{reportingWork.processId}
+        </if>
+        <if test="reportingWork.order.project != null and reportingWork.order.project != ''">
+            and o.project regexp #{reportingWork.order.project}
+        </if>
+        <if test="reportingWork.order.batch != null and reportingWork.order.batch != ''">
+            and o.batch regexp #{reportingWork.order.batch}
+        </if>
+        <if test="reportingWork.thisProcess != null and reportingWork.thisProcess != ''">
+            and rw.this_process regexp #{reportingWork.thisProcess}
+        </if>
+        GROUP BY rw.reporting_work_id
+        ORDER BY rw.reporting_work_id desc
+        limit #{offset},#{pageSize};
+    </select>
+
+    <select id="getPageTotal">
+        select CEILING(count(rw.reporting_work_id)/#{pageSize}) as 'pageTotal',
+               count(distinct rw.reporting_work_id) as 'total'
+             from sd.order as o
+                 left join sd.order_glass_detail as ogd on ogd.order_id = o.order_id
+                 left join reporting_work as rw on rw.order_id = ogd.order_id and rw.production_id = ogd.production_id
+                 left join reporting_work_detail as rwd
+                           on rwd.reporting_work_id = rw.reporting_work_id and rwd.order_number = ogd.order_number and
+                              rwd.technology_number = ogd.technology_number
+        where rw.reviewed_state != 2
+          and rw.reporting_work_time between #{selectTime1} and #{selectTime2} and position(#{orderId} in rw.order_id)
+          and rw.reviewed_state!=-1
+        ORDER BY rw.reporting_work_id desc
+        limit #{offset},#{pageSize};
+    </select>
+<!--    鏍规嵁鎶ュ伐缂栧彿鏌ヨ涓嬪伐搴�-->
+    <select id="selectNextProcess">
+        select next_process from reporting_work where reporting_work_id=#{reportingWorkId}
+    </select>
+<!--    鏌ヨ涓嬪伐搴忔槸鍚︽姤宸�-->
+    <select id="selectCountByProcessId">
+        select count(reporting_work_id) from reporting_work where this_process=#{nextProcess} and process_id=#{processId}
+    </select>
+
+<!--    鏌ヨ瀹屽伐娆$牬鏁伴噺-->
+    <select id="reportingWorkDate">
+        select rw.process_id,
+               rwd.order_number,
+               rwd.technology_number,
+               rwd.completed_quantity,
+               IFNULL(SUM(dd.breakage_quantity), 0) as breakage_quantity
+        from reporting_work as rw
+                 left join reporting_work_detail as rwd on rw.reporting_work_id = rwd.reporting_work_id
+                 left join damage_details as dd
+                           on dd.reporting_work_id = rwd.reporting_work_id and dd.order_number = rwd.order_number and
+                              dd.technology_number = rwd.technology_number
+        where rw.reporting_work_id = #{reportingWorkId}
+        GROUP BY rwd.order_number, rwd.technology_number
+    </select>
+
+<!--    淇敼鎶ュ伐娴佺▼鍗¤〃鏁版嵁-->
+    <update id="updateWorkProcess">
+        update sd.order_process_detail
+        set reporting_work_num_count=reporting_work_num_count - #{completedQuantity},
+            reporting_work_num=reporting_work_num - #{completedQuantity},
+            broken_num=broken_num - #{breakageQuantity}
+        where process_id = #{processId}
+          and order_number = #{orderNumber}
+          and technology_number = #{technologyNumber}
+          and process = #{thisProcess}
+    </update>
+
+<!--    鍒犻櫎鎶ュ伐-->
+    <update id="deleteWork">
+        update reporting_work set reviewed_state=-1
+        where reporting_work_id = #{reportingWorkId}
+    </update>
+<!--    鑾峰彇鏈�鍚庝竴閬撳伐搴�-->
+    <select id="selectLastProcess">
+        select process
+        from sd.order_process_detail
+        where process_id = #{processId}
+          and order_number = 1
+          and technology_number = 1
+        order by id desc
+        LIMIT 1
+    </select>
+<!--    鏌ヨ鍙叆搴撱�佸凡鍏ュ簱鏁伴噺-->
+    <select id="selectReceiptQuantity">
+        select ifnull(SUM(quantity),0)                     as quantity,
+               ifnull(SUM(inventory_quantity), 0) as inventoryQuantity,
+               ifnull(SUM(received_quantity), 0) as receivedQuantity
+        from flow_card
+        where process_id = #{processId}
+          and technology_number = 1
+        GROUP BY process_id
+    </select>
+<!--    鏌ヨ鎶ュ伐缂栧彿瀹屽伐鏁伴噺-->
+    <select id="selectCompletedQuantity">
+        select ifnull(this_completed_quantity,0) from reporting_work where reporting_work_id=#{reportingWorkId}
+    </select>
+<!--    鏇存柊娴佺▼鍗″彲鍏ュ簱鏁伴噺-->
+    <update id="updateInventoryQuantity">
+        update flow_card
+        set inventory_quantity = inventory_quantity - #{completedQuantity}
+        where process_id = #{processId}
+          and order_number = #{orderNumber}
+          and technology_number = #{technologyNumber}
+    </update>
 </mapper>
\ No newline at end of file
diff --git a/north-glass-erp/target/classes/mapper/pp/ReportingWorkDetail.xml b/north-glass-erp/target/classes/mapper/pp/ReportingWorkDetail.xml
index d022876..dc42609 100644
--- a/north-glass-erp/target/classes/mapper/pp/ReportingWorkDetail.xml
+++ b/north-glass-erp/target/classes/mapper/pp/ReportingWorkDetail.xml
@@ -154,6 +154,7 @@
     </select>
 
 
+
     <!--鏌ヨdetail鏄庣粏-->
     <select id="reportingWorkId">
         select * from reporting_work_detail
diff --git a/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml b/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml
index 9983811..2307263 100644
--- a/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml
+++ b/north-glass-erp/target/classes/mapper/sd/OrderProcessDetail.xml
@@ -26,5 +26,47 @@
 
 
     </insert>
+    <update id="updateQuantity">
+        update sd.order_process_detail as a
+        inner join
+        (select
+             rwd.completed_quantity,
+             rwd.breakage_quantity,
+             rw.process_id,
+             rwd.order_number,
+             rwd.technology_number
+              from pp.reporting_work_detail as rwd
+            left join pp.reporting_work as rw
+                on rwd.reporting_work_id =  rw.reporting_work_id
+            where rwd.reporting_work_id =#{reportingWorkId} )  as b
+        on a.process_id = b.process_id
+        and a.order_number = b.order_number
+        and a.technology_number = b.technology_number
+
+        <if test="type == 'delete'">
+            set a.reporting_work_num_count
+                = a.reporting_work_num_count-b.completed_quantity,
+
+            a.reporting_work_num
+                = a.reporting_work_num-b.completed_quantity,
+
+            a.broken_num
+                = a.broken_num-b.breakage_quantity
+        </if>
+
+        <if test="type == 'add'">
+            set a.reporting_work_num_count
+            = a.reporting_work_num_count+b.completed_quantity,
+
+            a.reporting_work_num
+            = a.reporting_work_num+b.completed_quantity,
+
+            a.broken_num
+            = a.broken_num+b.breakage_quantity
+        </if>
+
+        where a.process = #{process}
+
+    </update>
 
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0