From 23deff80efa6651995f7c1013a968275045f0e0f Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期四, 08 八月 2024 08:47:58 +0800
Subject: [PATCH] 添加查询流程卡打印数据

---
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java   |    9 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/FlowCardService.java                                       |   22 +
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java                        |    9 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java                  |    4 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java    |   13 
 UI-Project/src/views/ReportWork/reportWork.vue                                                                                   |    6 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/FlowCard.java                                               |  163 ++++++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/FlowCardMapper.java                                         |   25 +
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/FlowCardMapper.xml                                                |   73 +++
 UI-Project/src/views/UnLoadGlass/loadmachinerack.vue                                                                             |  375 +++++++++++-------
 /dev/null                                                                                                                        |   16 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java          |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java                                 |   21 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/FlowCardServiceImpl.java                              |   32 +
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java |   56 ++
 UI-Project/src/views/UnLoadGlass/PrintFlow.vue                                                                                   |  318 +++++++++++++++
 16 files changed, 964 insertions(+), 181 deletions(-)

diff --git a/UI-Project/src/views/ReportWork/reportWork.vue b/UI-Project/src/views/ReportWork/reportWork.vue
index 67b04ab..7b6a6e9 100644
--- a/UI-Project/src/views/ReportWork/reportWork.vue
+++ b/UI-Project/src/views/ReportWork/reportWork.vue
@@ -18,9 +18,9 @@
     </el-select>
     <el-select v-model="report.workingProcedure" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;" >
       <el-option :label="$t('reportmanage.all')" value="0"></el-option>
-      <el-option :label="$t('reportmanage.incise')" value="1"></el-option>
-      <el-option :label="$t('reportmanage.edging')" value="2"></el-option>
-      <el-option :label="$t('reportmanage.steel')" value="3"></el-option>
+      <el-option :label="$t('reportmanage.incise')" value="鍒囧壊"></el-option>
+      <el-option :label="$t('reportmanage.edging')" value="纾ㄨ竟"></el-option>
+      <el-option :label="$t('reportmanage.steel')" value="閽㈠寲"></el-option>
     </el-select>
     <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire') }}</el-button>
     <el-button type="success" style="margin-left: 10px;" @click="handleConfirm">{{ $t('reportmanage.signingwork') }}</el-button>
diff --git a/UI-Project/src/views/UnLoadGlass/PrintFlow.vue b/UI-Project/src/views/UnLoadGlass/PrintFlow.vue
new file mode 100644
index 0000000..4c1358e
--- /dev/null
+++ b/UI-Project/src/views/UnLoadGlass/PrintFlow.vue
@@ -0,0 +1,318 @@
+<script setup>
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
+import {Search} from "@element-plus/icons-vue";
+import {useRouter} from "vue-router"
+const router = useRouter()
+import request from "@/utils/request"
+import { WebSocketHost ,host} from '@/utils/constants'
+import { ref, onMounted , onBeforeUnmount, reactive, computed,onUnmounted } from "vue";
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
+import { ElMessage, ElMessageBox } from 'element-plus'
+
+let produceList = ref([])
+let flowCardList = ref([])
+
+const searchout = async () => {
+  try {
+    const response = await request.post('/unLoadGlass/downGlassInfo/downGlassPrint',{
+        flowCardId:"NG24070506A001",
+        layer:1
+    });
+    if (response.code == 200) {
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      produceList.value = response.data.projectInfo;
+      flowCardList.value = response.data.flowCardList;
+      ElMessage.success(response.message);
+      
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.message);
+    }
+  } catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+};
+</script>
+<template>
+    <div id="printFlowCard">
+    <table v-for="(item,id) in produceList" id="contentTable" :key="id">
+      <thead>
+      <tr v-for="(itemFlow,index) in item.detail" :key="index">
+        <td  v-if="like='1'"  colspan="26">
+          <div style="float: left;"><input style="border: none;font-size: 28px;width: 70px;margin: 5px  "/></div>
+          <div id="bj" style="float: right;font-size: 28px">{{ id + 1 }}</div>
+          <div>{{ company.companyName }}</div>
+          <div>鐢熶骇娴佺▼鍗�</div>
+          <div v-if="itemFlow.technologyNumberMerge!=''" style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumberMerge }} 鍏� {{ flowCardCount }} 鏋�
+          </div>
+          <div v-else style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumber }} 鍏� {{ flowCardCount }} 鏋�
+          </div>
+        </td>
+        <td v-else colspan="24">
+          <div style="float: left;"><input style="border: none;font-size: 28px;width: 70px  "/></div>
+          <div id="bj" style="float: right;font-size: 28px">{{ id + 1 }}</div>
+          <div>{{ company.companyName }}</div>
+          <div>鐢熶骇娴佺▼鍗�</div>
+          <div v-if="itemFlow.technologyNumberMerge!=''" style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumberMerge }} 鍏� {{ flowCardCount }} 鏋�
+          </div>
+          <div v-else style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumber }} 鍏� {{ flowCardCount }} 鏋�
+          </div>
+        </td>
+      </tr>
+      <tr v-for="(items,index) in item.detail" :key="index">
+        <td class="tdNowrap">瀹㈡埛鍚嶇О锛�</td>
+        <td colspan="2">{{ items.customer_name }}</td>
+        <td class="tdNowrap">椤圭洰鍚嶇О锛�</td>
+        <td colspan="2">{{ items.project }}</td>
+        <td class="tdNowrap">宸ヨ壓娴佺▼锛�</td>
+        <td colspan="19" v-if="like='1'" style="width: 500px">{{ items.process }}</td>
+        <td colspan="17" v-else style="width: 500px">{{ items.process }}</td>
+      </tr>
+      <tr v-for="(itemTr,index) in item.detail" :key="index">
+        <td class="tdNowrap">纾ㄨ竟绫诲瀷锛�</td>
+        <td colspan="2">{{ itemTr.edging_type }}</td>
+        <td class="tdNowrap">鍗曠墖鍚嶇О锛�</td>
+        <td colspan="2">{{ itemTr.glass_child }}</td>
+        <td class="tdNowrap">浜у搧鍚嶇О锛�</td>
+        <td v-if="like=='1'" colspan="19">{{ itemTr.product_name }}</td>
+        <td v-else colspan="17">{{ itemTr.product_name }}</td>
+      </tr>
+      <tr>
+        <td rowspan='2'>搴忓彿</td>
+        <td rowspan='2'>缂栧彿</td>
+        <td v-if="like!=null" rowspan="2">灏忕墖椤哄簭</td>
+        <td v-else style="display: none;" rowspan="2">灏忕墖椤哄簭</td>
+        <td rowspan='2'>瀹�*楂�</td>
+        <td rowspan='2'>鏁伴噺</td>
+        <td rowspan='2'>闈㈢Н</td>
+        <td rowspan='2'>鍛ㄩ暱</td>
+        <td rowspan='2'>鍗婂緞</td>
+        <td rowspan='2'>澶囨敞</td>
+        <td v-for="(itemPr,index) in item.processList" :key="index" colspan="2">{{ itemPr.process }}</td>
+      </tr>
+      <tr>
+
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+      </tr>
+      </thead>
+      <tbody>
+
+      <tr v-for="(itemDatile,index) in item.detailList" :key="index">
+        <td>{{ itemDatile.order_number }}</td>
+        <td>{{ itemDatile.s01Value }}</td>
+        <td v-if="like=='1'">{{ itemDatile.technology_number }}</td>
+        <td v-else style="display: none"></td>
+        <td>{{ itemDatile.child_width }}</td>
+        <td class="item" style="width: 5%;height: 100%;">
+          <el-input v-model="itemDatile.quantity" style="border: none" @keyup="handleSummary()"></el-input>
+        </td>
+        <td>{{ itemDatile.total_area }}</td>
+        <td>{{ itemDatile.perimeter }}</td>
+        <td>{{ itemDatile.bend_radius }}</td>
+        <td>{{ itemDatile.remarks }}</td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+      </tr>
+      </tbody>
+      <tfoot>
+      <tr style="height: 14px">
+        <td v-for="(itemsum,index) in item.detail" :key="index" colspan="26">
+          鏁伴噺锛�
+          <label>{{ itemsum.quantity }}</label>
+          闈㈢Н锛�
+          <label>{{ parseFloat(itemsum.gross_area.toFixed(2)) }}</label>
+          閲嶉噺锛�
+          <label>{{ parseFloat(itemsum.weight.toFixed(2)) }}</label>
+        </td>
+      </tr>
+      <tr v-for="(itemtextarea,index) in item.detail" :key="index">
+        <td v-if="like='1'" colspan="4" rowspan="6" style="width: 480px;height: 100px ">
+          <div style="width: 100%;height: 100%;"><textarea style="height: 99%;width: 99%;border: none;;font-size: 11px">{{itemtextarea.otherRemarks}}</textarea>
+          </div>
+        </td>
+        <td v-else colspan="6" rowspan="2" style="width: 480px;height: 100px ">
+          <!--          <div style="width: 100%;height: 100%"><textarea style="height: 99%;width: 99%;font-size: 11px">{{ itemtextarea.processing_note }}</textarea>-->
+          <!--          </div>-->
+           <div style="width: 100%;height: 100%;"><textarea style="height: 99%;width: 99%;border: none;;font-size: 11px">{{itemtextarea.otherRemarks}}</textarea>
+           </div>
+        </td>
+        <td>瀹屽伐绛惧悕</td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+      </tr>
+      <tr>
+        <td>鐢熶骇鏃ユ湡</td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+      </tr>
+      <tr>
+        <td>璐ㄦ绛惧悕</td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+      </tr>
+      <tr v-for="(qrCodeItem,index) in item.detail" :key="index">
+        <td colspan="23">
+          <span style="display: flex;">
+            <span v-for="(qrCodeItems,index) in qrCodeItem.qrcodeList" :key="index" style="display: flex;width: 35%">
+            <div class='qrCode' style="width: 80px;height: 80px;">
+            <img :src=qrCodeItems.qrcode>
+          </div>
+          <span style="float: left;font-weight: bolder">{{
+              qrCodeItem.process_id + "/" + qrCodeItems.technologyNumber
+            }}</span>
+          </span>
+          </span>
+        </td>
+
+      </tr>
+      </tfoot>
+    </table>
+  </div>
+</template>
+<style scoped>
+* {
+  margin: 0;
+  padding: 0;
+  text-align: center;
+}
+
+
+#printFlowCard {
+  text-align: center;
+//font-weight: bolder; height: 600px;
+}
+
+#contentTable {
+  border-collapse: collapse;
+  border: 1px solid black;
+  width: 100%;
+}
+
+#contentTable thead {
+  font-size: 13px;
+  font-weight: bolder;
+}
+
+#contentTable thead div {
+  font-size: 15px;
+  font-weight: bolder;
+}
+
+#contentTable tr td {
+  border: 1px solid black;
+  height: 18px;
+  font-weight: bolder;
+}
+
+#contentTable tbody {
+  white-space: nowrap;
+
+}
+
+.tdNowrap {
+  white-space: nowrap;
+
+}
+
+#contentTable tfoot {
+  font-size: 12px;
+  font-weight: bolder;
+}
+
+input{
+  font-weight: bolder;
+}
+
+
+@page {
+  size: auto;  /* auto is the initial value */
+  margin: 2mm 2mm 0mm 1mm  /* this affects the margin in the printer settings */
+
+}
+
+@media print {
+  table {
+    page-break-before: always;
+    page-break-inside: auto;
+  }
+
+ #contentTable thead {
+   display: table-header-group;
+  }
+
+  tfoot {
+    display: table-footer-group;
+    page-break-inside: avoid;
+  }
+}
+
+.qrCode img {
+  width: 100%;
+  height: 100%;
+}
+
+</style>
\ No newline at end of file
diff --git a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
index 844a323..a6b9c45 100644
--- a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
+++ b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,18 +1,18 @@
 <script setup>
-import {Search} from "@element-plus/icons-vue";
-import {reactive, onMounted, onBeforeUnmount,onUnmounted} from "vue";
-import {useRouter} from "vue-router"
+import { Search } from "@element-plus/icons-vue";
+import { reactive, onMounted, onBeforeUnmount, onUnmounted } from "vue";
+import { useRouter } from "vue-router"
 const router = useRouter()
 import { useI18n } from 'vue-i18n'
-  const { t } = useI18n()
-  let language = ref(localStorage.getItem('lang') || 'zh')
+const { t } = useI18n()
+let language = ref(localStorage.getItem('lang') || 'zh')
 import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import Landingindication from "./Landingindication.vue";
 import Landingindicationtwo from "./Landingindicationtwo.vue";
 import request from "@/utils/request";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
-import { WebSocketHost ,host} from '@/utils/constants'
+import { WebSocketHost, host } from '@/utils/constants'
 const dialogFormVisiblea = ref(false)
 const dialogFormVisiblea2 = ref(false)
 const dialogFormVisibleaDownGlass = ref(false)
@@ -26,17 +26,24 @@
 const flowCardId = ref('');
 const flowCardOptions = ref('[]');
 const tableData = reactive([]);
-const downGlass= ref([]);
+const downGlass = ref([]);
+const timeRange = ref(["2022-01-01", "2025-01-01"])
+const selectValuesa = reactive({});
+const selectOptionsa = ref([]);
+
+const handleInputChangea = (value, rowId) => {
+  // 鏇存柊瀵瑰簲琛岀殑 select 鍊�  
+  selectValuesa[rowId] = value;
+};
 // 鏂规硶
 const handleSelectionChange = () => {
   // 澶勭悊琛ㄦ牸琛岄�夋嫨浜嬩欢
 };
 const handleBindRack = (row) => {
   workstationId.value = row.workstationId; // 鍋囪rackNumber鏄灦鍙峰瓧娈电殑灞炴�у悕
-  console.log(row.flowCardId);
   flowCardId.value = row.flowCardId;
   // 鍙戣捣鎺ュ彛璇锋眰鑾峰彇娴佺▼鍗″彿
-    fetchFlowCardId(); 
+  fetchFlowCardId();
   dialogFormVisiblea.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
 };
 //鑾峰彇娴佺▼鍗″彿
@@ -45,12 +52,12 @@
     const response = await request.get('unLoadGlass/downWorkStation/getflowCardId');
     console.log(response)
     if (response.code === 200) {
-   
-  flowCardOptions.value = response.data.filter(item => item !== null)
-.map(item => ({ flowcard_id: item.flow_card_id }));
-  console.log(flowCardOptions.value);
-}
- else {
+
+      flowCardOptions.value = response.data.filter(item => item !== null)
+        .map(item => ({ flowcard_id: item.flow_card_id }));
+      console.log(flowCardOptions.value);
+    }
+    else {
       ElMessage.error(response.msg);
     }
   } catch (error) {
@@ -61,17 +68,17 @@
 const handleConfirm = async () => {
   try {
     const firstPart = flowCardId.value.split('|')[0].trim(); // 
-const twoPart = flowCardId.value.split('|')[1].trim(); // 
+    const twoPart = flowCardId.value.split('|')[1].trim(); // 
     const response = await request.post('unLoadGlass/downWorkStation/updateFlowCardId', {
       workstationId: workstationId.value,
       flowCardId: firstPart,
-      layer:twoPart
-    }); 
+      layer: twoPart
+    });
     console.log(response)
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       console.log('缁戝畾鎴愬姛');
-   
+
       ElMessage.success(response.message);
       updatePageData();
       dialogFormVisiblea.value = false;
@@ -96,30 +103,29 @@
 };
 //娓呴櫎鍐呭
 const handleclear = async () => {
-    try {
-        const response = await request.post('unLoadGlass/downWorkStation/clear', {
-            workstationId: workstationId.value,
-        });
+  try {
+    const response = await request.post('unLoadGlass/downWorkStation/clear', {
+      workstationId: workstationId.value,
+    });
 
-        console.log(response);
 
-        if (response.code === 200) {
-            // 娓呴櫎鎴愬姛鐨勯�昏緫
-            console.log('娓呴櫎鎴愬姛');
-            ElMessage.success(response.message);
-            dialogFormVisiblea2.value = false;
-        } else if (response.code === 500) {
-            // 娓呴櫎澶辫触鐨勯�昏緫
-            console.log('娓呴櫎澶辫触');
-            console.log(response.message); // 鎵撳嵃鏈嶅姟鍣ㄨ繑鍥炵殑閿欒淇℃伅
-            ElMessage.error(response.message);
-            dialogFormVisiblea2.value = false;
-        }
-    } catch (error) {
-        // console.log(error);
-         ElMessage.error("娓呴櫎澶辫触");
-            dialogFormVisiblea2.value = false;
+    if (response.code === 200) {
+      // 娓呴櫎鎴愬姛鐨勯�昏緫
+      console.log('娓呴櫎鎴愬姛');
+      ElMessage.success(response.message);
+      dialogFormVisiblea2.value = false;
+    } else if (response.code === 500) {
+      // 娓呴櫎澶辫触鐨勯�昏緫
+      console.log('娓呴櫎澶辫触');
+      console.log(response.message); // 鎵撳嵃鏈嶅姟鍣ㄨ繑鍥炵殑閿欒淇℃伅
+      ElMessage.error(response.message);
+      dialogFormVisiblea2.value = false;
     }
+  } catch (error) {
+    // console.log(error);
+    ElMessage.error("娓呴櫎澶辫触");
+    dialogFormVisiblea2.value = false;
+  }
 };
 // 鍙戦�佽幏鍙栬〃鏍兼暟鎹殑璇锋眰
 const fetchTableData = async () => {
@@ -146,14 +152,16 @@
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
-  if(data.sendDownGlass!=null){
-    downGlass.value=data.sendDownGlass[0][1];
-    console.log(downGlass.value);
-    console.log(tableData.value);
+  if (data.downGlassInfos != null) {
+    downGlass.value = data.downGlassInfos[0][1];
   }
+  if (data.engineerIdList != null) {
+    selectOptionsa.value = data.engineerIdList[0]
+  }
+
   // tableData.splice(0, tableData.length, ...data.params[0]);
 
-//  console.log("鏇存柊鍚庢暟鎹�", data.params[0]);
+  //  console.log("鏇存柊鍚庢暟鎹�", data.params[0]);
 };
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
@@ -161,40 +169,40 @@
   fetchTableData(); // 鑾峰彇鏁版嵁
   socket = initializeWebSocket(socketUrl, handleMessage);
 });
-  onUnmounted(() => {
-    if (socket) {
+onUnmounted(() => {
+  if (socket) {
     closeWebSocket(socket);
-    }
-    });
+  }
+});
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 
 
-const getTagType =(status) => {
-      return status === 1 ? 'success' : 'danger';
-      // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
-    }
- 
-    const toggleStatus = (row) => {
-      // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
-      row.enableState = 1 - row.enableState; // Toggle between 0 and 1
-      // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
-      updateRowStatus(row);
-    };
- 
-    const updateRowStatus = async (row) => {
+const getTagType = (status) => {
+  return status === 1 ? 'success' : 'danger';
+  // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
+}
+
+const toggleStatus = (row) => {
+  // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
+  row.enableState = 1 - row.enableState; // Toggle between 0 and 1
+  // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
+  updateRowStatus(row);
+};
+
+const updateRowStatus = async (row) => {
   try {
     // 鍋囪浣犵殑鍚庣 API 鎺ユ敹 PUT 璇锋眰锛屽苟涓旈渶瑕佷紶閫� row.id 鍜� row.enableState 鍙傛暟
-   
- 
+
+
     const response = await request.post('unLoadGlass/downWorkStation/updateDownWorkstation', {
       enableState: row.enableState,
       id: row.id
 
- 
-    }); 
+
+    });
     console.log('Updated row status:', response.data);
     // 鍙互鏍规嵁鍚庣杩斿洖鐨勬暟鎹繘琛岃繘涓�姝ュ鐞嗭紝姣斿鏇存柊鏈湴鐘舵�佺瓑
   } catch (error) {
@@ -202,11 +210,29 @@
     // 澶勭悊閿欒鎯呭喌锛屾瘮濡傛彁绀虹敤鎴锋洿鏂板け璐�
   }
 };
- 
+
+// 鏌ヨ鏁版嵁
+const selectDownGlassData = async () => {
+  
+  const response = await request.post("/unLoadGlass/downGlassInfo/selectDownGlassInfo", {
+    workStationId: selectValuesa[0],
+    engineerId: selectValuesa[1],
+    beginDate: timeRange.value[0],
+    endDate: timeRange.value[1],
+  })
+  if (response.code === 200) {
+    sendDownGlass.value = response.data;
+    ElMessage.success(response.message);
+  } else {
+    ElMessage.error(response.message);
+  }
+
+}
 
 
-
-
+const open=async()=>{
+  router.push({path: '/UnLoadGlass/PrintFlow'})
+}
 
 
 // beforeUnmount(() => {
@@ -216,94 +242,119 @@
 </script>
 <template>
   <div>
-    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisibleaDownGlass = true">钀芥灦璇︽儏</el-button>
+    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary"
+      @click="dialogFormVisibleaDownGlass = true">钀芥灦璇︽儏</el-button>
     <el-card style="flex: 1;" v-loading="loading">
       <el-card style="flex: 1;margin-left: 4px;margin-top: 1px;" v-loading="loading">
-      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="200px" ref="table" 
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" />
-          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')" min-width="120" />
-          <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="150" />
-          <el-table-column prop="totalQuantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" />
-          <el-table-column prop="racksNumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
-          <el-table-column prop="layer" align="center" label="灞傛暟" min-width="120" />
-          <el-table-column prop="otherNumber" align="center" label="浜哄伐涓嬬墖鏁�" min-width="120" />
-          <!-- <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" /> -->
-          <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
-          <el-table-column
-            align="center"
-            :label="$t('reportWork.startstatus')"
-            min-width="80"
-            prop="enableState"
-          >
-          <template #default="scope">
-            <el-tag :type="getTagType(scope.row.enableState)" @click="toggleStatus(scope.row)">
-          {{ scope.row.enableState === 1 ? $t('reportWork.enable') : $t('reportWork.unenable') }}
-        </el-tag>
-          </template>
-          </el-table-column>
-          <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200">
-            <template #default="scope">
-            <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�' " @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}</el-button>
-            <el-button size="mini" type="text" plain  @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear') }}</el-button>
-          </template>
-          
-        </el-table-column>
-        </el-table>
-        
-      </div>
-      <el-dialog v-model="dialogFormVisibleaDownGlass" top="2vh" width="97%" :title="$t('searchOrder.cageinformation')">
-        <el-table height="200px" ref="table" 
-        @selection-change="handleSelectionChange"
-        :data="downGlass" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-        <el-table-column prop="workStationId" align="center" :label="$t('宸ヤ綅鍙�')" min-width="80" />
-        <el-table-column prop="engineerId" align="center" :label="$t('宸ョ▼鍙�')" min-width="80" />
-          <el-table-column prop="flowCardId" align="center" :label="$t('娴佺▼鍗″彿')" min-width="80" />
-          <el-table-column prop="layer" align="center" :label="$t('灞�')" min-width="120" />
-          <el-table-column prop="sequence" align="center" :label="$t('椤哄簭')" min-width="150" />
-          <el-table-column prop="width" align="center" :label="$t('瀹�')" min-width="120" />
-          <el-table-column prop="height" align="center" :label="$t('楂�')" min-width="120" />
-          <el-table-column prop="Filmsid" align="center" :label="$t('鑶滅郴')" min-width="120" />
-          <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="120" />
-          <el-table-column prop="glassId" align="center" :label="$t('鐜荤拑id')" min-width="120" />
-          
-        </el-table>
-      </el-dialog>
-      
-    </el-card>
-    <!-- workstationId: '1',
+        <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
+          <el-table height="200px" ref="table" @selection-change="handleSelectionChange" :data="tableData"
+            :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+            <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" />
+            <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')"
+              min-width="120" />
+            <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="150" />
+            <el-table-column prop="totalQuantity" align="center" :label="$t('reportWork.totalquantity')"
+              min-width="120" />
+            <el-table-column prop="racksNumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
+            <el-table-column prop="layer" align="center" label="灞傛暟" min-width="120" />
+            <el-table-column prop="otherNumber" align="center" label="浜哄伐涓嬬墖鏁�" min-width="120" />
+            <!-- <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" /> -->
+            <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
+            <el-table-column align="center" :label="$t('reportWork.startstatus')" min-width="80" prop="enableState">
+              <template #default="scope">
+                <el-tag :type="getTagType(scope.row.enableState)" @click="toggleStatus(scope.row)">
+                  {{ scope.row.enableState === 1 ? $t('reportWork.enable') : $t('reportWork.unenable') }}
+                </el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200">
+              <template #default="scope">
+                <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�'"
+                  @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}</el-button>
+                <el-button size="mini" type="text" plain @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear')
+                  }}</el-button>
+                  <el-button @click="open()">111</el-button>
+              </template>
+
+            </el-table-column>
+          </el-table>
+
+        </div>
+        <el-dialog v-model="dialogFormVisibleaDownGlass" top="2vh" width="97%"
+          :title="$t('searchOrder.cageinformation')">
+          <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('璇烽�夋嫨宸ヤ綅')" clearable>
+            <el-option label="鍏ㄩ儴" value="0"></el-option>
+            <el-option label="1" value="1"></el-option>
+            <el-option label="2" value="2"></el-option>
+            <el-option label="3" value="3"></el-option>
+            <el-option label="4" value="4"></el-option>
+            <el-option label="5" value="5"></el-option>
+            <el-option label="6" value="6"></el-option>
+            <el-option label="7" value="7"></el-option>
+            <el-option label="8" value="8"></el-option>
+            <el-option label="9" value="9"></el-option>
+            <el-option label="10" value="10"></el-option>
+          </el-select>
+
+          <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('basicData.plselectproject')" clearable
+            @input="handleInputChangea($event, row.id)">
+            <el-option v-for="item in selectOptionsa" :key="item" :label="item" :value="item" />
+          </el-select>
+          <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="daterange" format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD" :start-placeholder="$t('reportmanage.starttime')"
+            :end-placeholder="$t('reportmanage.endtime')" :default-time="defaultTime" />
+          <el-button type="primary" style="margin-left: 10px;" @click="selectDownGlassData()">{{
+        $t('reportmanage.inquire')
+      }}</el-button>
+          <el-table height="200px" ref="table" @selection-change="handleSelectionChange" :data="downGlass"
+            :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+            <el-table-column prop="workStationId" align="center" :label="$t('宸ヤ綅鍙�')" min-width="80" />
+            <el-table-column prop="engineerId" align="center" :label="$t('宸ョ▼鍙�')" min-width="80" />
+            <el-table-column prop="flowCardId" align="center" :label="$t('娴佺▼鍗″彿')" min-width="80" />
+            <el-table-column prop="layer" align="center" :label="$t('灞�')" min-width="120" />
+            <el-table-column prop="sequence" align="center" :label="$t('椤哄簭')" min-width="150" />
+            <el-table-column prop="width" align="center" :label="$t('瀹�')" min-width="120" />
+            <el-table-column prop="height" align="center" :label="$t('楂�')" min-width="120" />
+            <el-table-column prop="Filmsid" align="center" :label="$t('鑶滅郴')" min-width="120" />
+            <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="120" />
+            <el-table-column prop="glassId" align="center" :label="$t('鐜荤拑id')" min-width="120" />
+
+          </el-table>
+        </el-dialog>
+
+      </el-card>
+      <!-- workstationId: '1',
     workstationId: '1005',
     flowCardId: '183.6',
     totalquantity: '1991',
     racksnumber:"1",
     work_state: '寰呰瘑鍒�', -->
-  <div style="display: flex;" class="awatch">
-  <div id="main-body">
-      <Landingindication></Landingindication>
-    </div>
-  <div id="main-bodya">
-    <Landingindicationtwo></Landingindicationtwo>
-    </div>
-    </div>
+      <div style="display: flex;" class="awatch">
+        <div id="main-body">
+          <Landingindication></Landingindication>
+        </div>
+        <div id="main-bodya">
+          <Landingindicationtwo></Landingindicationtwo>
+        </div>
+      </div>
     </el-card>
-    
+
   </div>
 
-    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
+  <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
     <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
-      <el-form  size="mini" label-width="100px">
-        <el-form  label-width="210px" label-position="right">
+      <el-form size="mini" label-width="100px">
+        <el-form label-width="210px" label-position="right">
           <el-form-item :label="$t('reportWork.shelfnumbera')" :required="true" style="width: 25vw">
-            <el-input v-model="workstationId" autocomplete="off"/>
+            <el-input v-model="workstationId" autocomplete="off" />
           </el-form-item>
           <el-form-item :label="$t('reportWork.cardnumbera')" :required="true" style="width: 25vw;">
-          <el-select v-model="flowCardId" :placeholder="$t('reportWork.incardnumber')">
-            <el-option v-for="item in flowCardOptions" :key="item.flowcard_id" :label="item.flowcard_id" :value="item.flowcard_id" />
-          </el-select>
-        </el-form-item>
-      </el-form>
+            <el-select v-model="flowCardId" :placeholder="$t('reportWork.incardnumber')">
+              <el-option v-for="item in flowCardOptions" :key="item.flowcard_id" :label="item.flowcard_id"
+                :value="item.flowcard_id" />
+            </el-select>
+          </el-form-item>
+        </el-form>
       </el-form>
     </div>
     <template #footer>
@@ -328,29 +379,45 @@
   </el-dialog>
 </template>
 <style scoped>
-#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
-#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
-#dialog-footer{
+#dt {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 100px;
+}
+
+#dta {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 80%;
+}
+
+#dialog-footer {
   text-align: center;
   margin-top: -15px;
 }
-#message{
+
+#message {
   text-align: center;
   align-items: center;
   color: black;
-   width: 200px;
-   height: 100px;
-   background-color: #337ecc;
-   margin-left: 28%;
+  width: 200px;
+  height: 100px;
+  background-color: #337ecc;
+  margin-left: 28%;
 }
-.awatch{
+
+.awatch {
   max-width: 100%;
 }
-#main-body{
+
+#main-body {
   margin-top: -40px;
   margin-left: 150px;
 }
-#main-bodya{
+
+#main-bodya {
   margin-top: -40px;
   margin-left: 100px;
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java
new file mode 100644
index 0000000..a265c19
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java
@@ -0,0 +1,21 @@
+package com.mes.pp.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-08-07
+ */
+@RestController
+@RequestMapping("/flow_card/flow-card")
+public class FlowCardController {
+
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/FlowCard.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/FlowCard.java
new file mode 100644
index 0000000..3378be3
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/FlowCard.java
@@ -0,0 +1,163 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-08-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class FlowCard implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * (宸ョ▼鍙�,2024.0302澶╂満)
+     */
+      @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 閿�鍞崟鍙�
+     */
+    private String orderId;
+
+    /**
+     * 鐢熶骇璁㈠崟鍙�
+     */
+    private String productionId;
+
+    /**
+     * 娴佺▼鍗″彿
+     */
+    private String processId;
+
+    /**
+     * 钀芥灦椤哄簭
+     */
+    private String landingSequence;
+
+    /**
+     * 搴忓彿
+     */
+    private Integer orderNumber;
+
+    /**
+     * 宸ヨ壓纭搴忓彿
+     */
+    private Integer technologyNumber;
+
+    /**
+     * 鍒嗘灦鏁伴噺
+     */
+    private Integer quantity;
+
+    /**
+     * 浠ヤ紭鍖栨暟閲�
+     */
+    private Integer optimizeQuantity;
+
+    /**
+     * 鎺掔増鐘舵��(榛樿0,1鍏佽鎺掔増2浼樺寲鍗犵敤)
+     */
+    private Integer layoutStatus;
+
+    /**
+     * 琛ョ墖鏁伴噺
+     */
+    private Integer numberPatches;
+
+    /**
+     * 鏈�鍚庡伐搴忔姤宸� 搴撳瓨鏁伴噺
+     */
+    private Integer inventoryQuantity;
+
+    /**
+     * 宸插叆鏁伴噺
+     */
+    private Integer receivedQuantity;
+
+    /**
+     * 琛ョ墖缂栧彿
+     */
+    private String patchId;
+
+    /**
+     * 宸ョ▼鍗犵敤鐘舵�侊紝0涓哄崰鐢�1鍗犵敤
+     */
+    private Integer engineeringOccupancy;
+
+    /**
+     * 宸ョ▼鍙�(2024.0302娣诲姞)
+     */
+    private String projectNo;
+
+    /**
+     * 鍖呰鍓嶅伐搴忔姤宸� 搴撳瓨鏁伴噺
+     */
+    private Integer inventoryNumber;
+
+    /**
+     * 鍏ュ簱鏃堕棿
+     */
+    private LocalDateTime storageTime;
+
+    /**
+     * 鐢熶骇缁堟鐘舵��(榛樿0,1鐢熶骇缁堟)
+     */
+    private Integer terminationStatus;
+
+    /**
+     * 鎵撳嵃鐘舵��
+     */
+    private Integer printStatus;
+
+    /**
+     * 澶囩敤閿�
+     */
+    private Integer alternateKey;
+
+    /**
+     * 鍒嗘灦鍛�
+     */
+    private String founder;
+
+    /**
+     * 鍒嗘灦鏃堕棿
+     */
+    @TableField("splitFrame_time")
+    private LocalDateTime splitframeTime;
+
+    /**
+     * 灞傛暟
+     */
+    private Integer layersNumber;
+
+    /**
+     * 娴佺▼鍗℃墦鍗版帓搴�
+     */
+    private Integer sort;
+
+    /**
+     * 寤虹珛鏃堕棿
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    private LocalDateTime updateTime;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/FlowCardMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/FlowCardMapper.java
new file mode 100644
index 0000000..bd8d21d
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/FlowCardMapper.java
@@ -0,0 +1,25 @@
+package com.mes.pp.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.mes.pp.entity.FlowCard;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import feign.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-08-07
+ */
+@DS("pp")
+public interface FlowCardMapper extends BaseMapper<FlowCard> {
+
+    List<Map<String, Object>> selectProject(@Param("processId") String processId,@Param("technologyNumber") Integer technologyNumber);
+
+    List<Map<String, Object>> selectFlowCard(@Param("processId") String processId,@Param("technologyNumber") Integer technologyNumber);
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/FlowCardService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/FlowCardService.java
new file mode 100644
index 0000000..d03a88c
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/FlowCardService.java
@@ -0,0 +1,22 @@
+package com.mes.pp.service;
+
+import com.mes.pp.entity.FlowCard;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-08-07
+ */
+public interface FlowCardService extends IService<FlowCard> {
+
+    List<Map<String, Object>> selectProject(String processId, Integer technologyNumber);
+
+    List<Map<String, Object>> selectFlowCard(String processId, Integer technologyNumber);
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java
deleted file mode 100644
index a3b3e5a..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.pp.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.mes.pp.entity.DamageDetails;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author wu
- * @since 2024-07-26
- */
-public interface DamageDetailsService extends IService<DamageDetails> {
-
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/FlowCardServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/FlowCardServiceImpl.java
new file mode 100644
index 0000000..c7aa409
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/FlowCardServiceImpl.java
@@ -0,0 +1,32 @@
+package com.mes.pp.service.impl;
+
+import com.mes.pp.entity.FlowCard;
+import com.mes.pp.mapper.FlowCardMapper;
+import com.mes.pp.service.FlowCardService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-08-07
+ */
+@Service
+public class FlowCardServiceImpl extends ServiceImpl<FlowCardMapper, FlowCard> implements FlowCardService {
+
+    @Override
+    public List<Map<String, Object>> selectProject(String processId, Integer technologyNumber){
+        return baseMapper.selectProject(processId,technologyNumber);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectFlowCard(String processId, Integer technologyNumber){
+        return baseMapper.selectFlowCard(processId, technologyNumber);
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java
deleted file mode 100644
index 0b53228..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.pp.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.mes.pp.entity.ReportingWorkDetail;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author wu
- * @since 2024-07-25
- */
-public interface ReportingWorkDetailService extends IService<ReportingWorkDetail> {
-
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/FlowCardMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/FlowCardMapper.xml
new file mode 100644
index 0000000..960c554
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/FlowCardMapper.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.pp.mapper.FlowCardMapper">
+
+
+    <select id="selectFlowCard" resultType="java.util.Map">
+        select fc.order_number,
+               concat(round(ogd.child_width), "*", round(ogd.child_height)) as child_width,
+               od.quantity,
+               round(ogd.total_area, 2)                                     as total_area,
+               od.perimeter,
+               od.bend_radius,
+               concat(IFNULL(od.processing_note,''), IFNULL(od.remarks,''))                       as remarks,
+               od.other_columns,
+               round(ogd.child_width)                                       as width,
+               round(ogd.child_height)                                      as height,
+               pd.separation,
+               fc.technology_number
+        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 = fc.order_id and od.order_number = fc.order_number
+                 left join sd.product_detail as pd
+                           on pd.prod_id = od.product_id and pd.glass_sort = ogd.technology_number
+        where fc.process_id =  #{processId}
+          and position(fc.technology_number in #{technologyNumber})
+        group by fc.process_id, fc.order_number, fc.technology_number
+        order by IF(sort != NULL || sort != '', sort, fc.order_number)
+
+    </select>
+
+    <select id="selectProject" resultType="java.util.Map">
+        select o.customer_name,
+               o.project,
+               (select process from sd.order_glass_detail where order_id=fc.order_id and order_number=fc.order_number and technology_number=fc.technology_number) as process ,
+               od.edging_type,
+               (select glass_child from sd.order_glass_detail where order_id=fc.order_id and order_number=fc.order_number and technology_number=fc.technology_number) as glass_child ,
+               od.product_name,
+               o.processing_note,
+               fc.process_id,
+               SUM(od.quantity)                                as quantity,
+               round(SUM(ogd.total_area), 2)                   as gross_area,
+               sum(od.weight)                                  as weight,
+               1                            as technologyNumber,
+               concat(fc.process_id, '/', 1) as processIdNumber,
+               concat('瀵瑰簲鎴戝徃鍗曞彿',o.batch)                                         AS otherRemarks
+        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 = fc.order_id and od.order_number = fc.order_number
+                 left join sd.`order` as o on o.order_id = fc.order_id
+                 left join sd.product as p on p.id = od.product_id
+                 left join (select ogd.order_id,
+                                   ogd.order_number,
+                                   ogd.technology_number,
+                                   ogd.glass_child,
+                                   GROUP_CONCAT(glass_child SEPARATOR ' ') AS concatenated_glass_child
+                            from sd.order_glass_detail as ogd
+                            where ogd.order_id = left(#{processId}, 10)
+                              and position(ogd.technology_number in #{technologyNumber})
+                            GROUP BY order_id, order_number) as ogdc
+                           on ogdc.order_id = ogd.order_id and ogdc.order_number = ogd.order_number and
+                              ogdc.technology_number = ogd.technology_number
+        where fc.process_id = #{processId}
+          and position(fc.technology_number in #{technologyNumber})
+        group by fc.process_id
+    </select>
+
+
+
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
index 3f8d7d5..991d778 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
@@ -1,9 +1,11 @@
 package com.mes.downglassinfo.controller;
 
+import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
 import com.mes.downglassinfo.service.DownGlassInfoService;
 import com.mes.utils.Result;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -15,9 +17,14 @@
     @Autowired
     DownGlassInfoService downGlassInfoService;
 
-    @RequestMapping("/selectDownGlassInfo")
-    public Result<String> setDownGlassInfoRequest(@RequestBody DownGlassInfoRequest request) {
-        return Result.success(downGlassInfoService.setDownGlassInfoRequest(request));
+    @PostMapping("/selectDownGlassInfo")
+    public Result setDownGlassInfoRequest(@RequestBody DownGlassInfoRequest request) {
+        downGlassInfoService.setDownGlassInfoRequest(request);
+        return Result.build(200,"鏌ヨ鎴愬姛",1);
     }
 
+    @PostMapping("/downGlassPrint")
+    public Result downGlassPrint(@RequestBody DownGlassInfo downGlassInfo) {
+        return Result.build(200,"鏌ヨ鎴愬姛",downGlassInfoService.downGlassPrint(downGlassInfo));
+    }
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
index c7d5a67..55a4ee9 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
@@ -85,5 +85,9 @@
      */
     private Date gmtCreate;
 
+    /**
+     * 鐜荤拑绫诲瀷
+     */
+    private Integer glassType;
 
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java
index aa307b9..e0cc79a 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java
@@ -6,6 +6,7 @@
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.sql.Timestamp;
 import java.util.Date;
 
 /**
@@ -33,15 +34,15 @@
     /**
      * 寮�濮嬫椂闂�
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date beginDate;
 
     /**
      * 缁撴潫鏃堕棿
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date endDate;
 
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
index 54c0318..846a3e8 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
@@ -6,6 +6,7 @@
 import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
 
 import java.util.List;
+import java.util.Map;
 
 public interface DownGlassInfoService extends IService<DownGlassInfo> {
 
@@ -43,4 +44,6 @@
     boolean generateOutGlassTask(String glassId);
 
     String setDownGlassInfoRequest(DownGlassInfoRequest request);
+
+    Map<String, List<Map<String, Object>>> downGlassPrint(DownGlassInfo downGlassInfo);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
index 232743a..b09fcf6 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -1,6 +1,9 @@
 package com.mes.downglassinfo.service.impl;
 
+import cn.hutool.json.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,11 +18,15 @@
 import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.job.DownLoadCacheGlassTask;
+import com.mes.pp.service.FlowCardService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class DownGlassInfoServiceImpl extends ServiceImpl<DownGlassInfoMapper, DownGlassInfo> implements DownGlassInfoService {
@@ -32,6 +39,9 @@
 
     @Autowired
     RedisUtil redisUtil;
+
+    @Autowired
+    FlowCardService flowCardService;
 
     /**
      * 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙�
@@ -97,4 +107,50 @@
         }
         return "success";
     }
+
+    @Override
+    public Map<String, List<Map<String, Object>>> downGlassPrint(DownGlassInfo downGlassInfo){
+        QueryWrapper<DownGlassInfo> queryWrapper = Wrappers.query();
+        queryWrapper.eq("flow_card_id", "NG24080012A001")
+                .eq("layer", 1)
+                .select("flow_card_id", "layer", "width", "height", "filmsid", "thickness","glass_type","COUNT(*) AS quantity")
+                .groupBy("flow_card_id", "layer", "width", "height", "filmsid", "thickness");
+        List<Map<String, Object>> resultList = baseMapper.selectMaps(queryWrapper);
+
+
+        List<Map<String, Object>> projectInfo=flowCardService.selectProject(downGlassInfo.getFlowCardId(),downGlassInfo.getLayer());
+        List<Map<String, Object>> flowCardInfo=flowCardService.selectFlowCard(downGlassInfo.getFlowCardId(),downGlassInfo.getLayer());
+
+        for (Map<String, Object> row : flowCardInfo) {
+            int order_number = (int) row.get("order_number");
+            int technology_number = (int) row.get("technology_number");
+
+            for (Map<String, Object> row1 : resultList) {
+                int glass_type = (int) row1.get("glass_type");
+                int layer = (int) row1.get("layer");
+                Long quantity=(Long) row1.get("quantity");
+
+                if(order_number==glass_type&&technology_number==layer){
+                    row.put("quantity1",quantity);
+                }
+            }
+        }
+        Map<String, List<Map<String, Object>>> result = new HashMap<>();
+        result.put("detail", projectInfo);
+        result.put("detailList", flowCardInfo);
+        for (Map<String, Object> row : projectInfo) {
+            String order_number = (String) row.get("process");
+            String[] processes=order_number.split("->");
+            List<Map<String, Object>> processList = new ArrayList<>();
+            for (int i = 0; i < processes.length; i++) {
+                Map<String, Object> processMap = new JSONObject();
+                processMap.put("process", processes[i]);
+                processMap.put("id", i);
+                processList.add(processMap);
+            }
+            result.put("processList", processList);
+        }
+        return result;
+    }
+
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
index 4029a6e..4c38ae0 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
@@ -1,6 +1,7 @@
 package mes;
 
 import com.mes.UnLoadGlassApplication;
+import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.service.DownGlassInfoService;
 import com.mes.downglassinfo.service.DownGlassTaskService;
 import com.mes.downglassinfo.service.impl.DownGlassInfoServiceImpl;
@@ -224,7 +225,13 @@
 
     }*/
 
-
+    @Test
+    public void downGlassPrint() {
+        DownGlassInfo downGlassInfo=new DownGlassInfo();
+        downGlassInfo.setFlowCardId("NG24070506A001");
+        downGlassInfo.setLayer(1);
+        downGlassInfoService.downGlassPrint(downGlassInfo);
+    }
 
 
 

--
Gitblit v1.8.0