From e50c85b217446357771f99f34c0d3c5263a3759a Mon Sep 17 00:00:00 2001
From: guoyuji <guoyujie@ng.com>
Date: 星期一, 02 十二月 2024 11:03:49 +0800
Subject: [PATCH] Merge branch 'master' of http://bore.pub:10439/r/ERP_override

---
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/GlassComputed.vue              |   31 +++++++
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ComputeCard.vue           |   88 ++++++++++++---------
 north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml                           |   39 +++++++++
 north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java |    8 ++
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java         |    4 +
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue               |   20 +++-
 north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java       |   11 ++
 7 files changed, 153 insertions(+), 48 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/GlassComputed.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/GlassComputed.vue
index d794264..f824caa 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/GlassComputed.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/GlassComputed.vue
@@ -2,6 +2,33 @@
 import ComputeCard from "@/views/pp/glassOptimize/page/ComputeCard.vue";
 import ComputeDetail from "@/views/pp/glassOptimize/page/ComputeDetail.vue";
 import Compute from "@/views/pp/glassOptimize/page/Compute.vue";
+import { ref } from 'vue';
+import {ElMessage} from "element-plus";
+import request from "@/utils/request";
+
+
+// 鐢ㄤ簬瀛樺偍浠庡悗绔幏鍙栧埌鐨勬暟鎹紝鍒濆鍖栦负绌烘暟缁�
+const receivedData = ref([]);
+const handleFetchData = async (projectNumber) => {
+  try {
+    const res = await request.post(`/glassOptimize/selectProjectCompute/${projectNumber}`);
+    if (Number(res.code) === 200 && res.data && res.data.data) {
+      receivedData.value = res.data.data;
+    } else {
+      console.error('璇锋眰鍑虹幇闂锛岀姸鎬佺爜锛�', res.code, '锛岄敊璇俊鎭細', res.msg);
+      if (res.code === 404) {
+        ElMessage.error('鏈壘鍒板搴斿伐绋嬪彿鐨勬暟鎹紝璇锋鏌ヨ緭鍏ユ槸鍚︽纭�');
+      } else if (res.code === 500) {
+        ElMessage.error('鏈嶅姟鍣ㄥ唴閮ㄥ嚭鐜伴敊璇紝璇风◢鍚庡啀璇�');
+      } else {
+        ElMessage.warning(res.msg);
+      }
+    }
+  } catch (error) {
+    console.error('璇锋眰鍑洪敊', error);
+    ElMessage.error('缃戠粶杩炴帴鍑虹幇闂锛岃妫�鏌ョ綉缁滆缃�');
+  }
+};
 
 </script>
 
@@ -9,11 +36,11 @@
   <div style="width: 100%; height: 100%;">
 
     <div id="compute">
-      <compute/>
+      <compute @fetch-data="handleFetchData" />
     </div>
 
     <div id="computeCard">
-      <compute-card/>
+      <compute-card :table-data="receivedData" />
     </div>
 
     <div id="computeDetail">
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
index 51999ee..ae83d7c 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
@@ -77,11 +77,8 @@
       buttons: "toolbar_buttons"
     },
   },
-
 })
-let emit = defineEmits([
-  'changeDialog'
-])
+
 
 // 杩涘害鏉¢鑹插拰鎸夐挳鍔犲噺
 const percentage1 = ref(80)
@@ -128,6 +125,16 @@
   },
 ]
 
+// 瀹氫箟鍝嶅簲寮忔暟鎹紝鐢ㄤ簬缁戝畾宸ョ▼鍙疯緭鍏ユ鐨勫��
+const projectNumber = ref('');
+
+let emit = defineEmits(['changeDialog', 'fetch-data']);
+
+const handleSearchClick = () => {
+  // 閫氳繃 $emit 瑙﹀彂鑷畾涔変簨浠讹紝灏嗗伐绋嬪彿浼犻�掔粰鐖剁粍浠讹紝鐢辩埗缁勪欢鍘昏皟鐢ㄦ帴鍙h幏鍙栨暟鎹�
+  emit('fetch-data', projectNumber.value);
+};
+
 
 </script>
 
@@ -137,12 +144,13 @@
     <div id="title" style="margin-top: -10px">
       <span>
         宸ョ▼缂栧彿
-      <vxe-select size="small" style="margin-left: 20px" clearable></vxe-select>
+      <vxe-input size="small" style="margin-left: 20px" clearable v-model="projectNumber"></vxe-input>
       <el-button
           type="primary"
           :icon="Search"
           style="margin-left: 20px"
-          @click="">{{$t('basicData.search') }}
+          @click="handleSearchClick"
+      >{{$t('basicData.search') }}
       </el-button>
       </span>
       <span style="float: right ; margin-right: 120px">
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ComputeCard.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ComputeCard.vue
index 9d44723..debeba0 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ComputeCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ComputeCard.vue
@@ -1,9 +1,17 @@
 <script setup>
-import {reactive, ref} from "vue";
+import {nextTick, onMounted, reactive, ref, watch} from "vue";
 import {useI18n} from "vue-i18n";
 const { t } = useI18n()
 
 const xGrid = ref()
+
+const checkboxCellRender = reactive({
+  name: 'VxeCheckboxGroup',
+  options: [
+    { label: '鍏佽妯帓', value: '1' },
+    { label: '閽㈠寲', value: '2' },
+  ]
+})
 
 const gridOptions = reactive({
 
@@ -33,39 +41,19 @@
     mode: 'row',
     showStatus: true
   },
-  /*formConfig: {
-    data: {
-      width: '',
-      height: '',
-      quantity: ''
-    },
-    items: [
-      { field: 'width', title: t('order.width')+':', itemRender: { name: 'VxeInput' } },
-      { field: 'height', title: t('order.height')+':', itemRender: { name: 'VxeInput' } },
-      { field: 'quantity', title: t('order.quantity')+':', itemRender: { name: 'VxeInput' } },
-      {
-        itemRender: {
-          name: 'VxeButtonGroup',
-          options: [
-            { type: 'submit', content: t('craft.sure'), status: 'primary' },
-            { type: 'reset', content: t('product.msg.reset') }
-          ]
-        }
-      }
-    ]
-  },*/
+
   columns:[
     {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
-    {field: 'checkbox', title: '鍏佽妯帓', width: 100},
-    {field: 'checkbox', title: '閽㈠寲', width: 70},
-    {field: 'processId',width: 150, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'id',width: 70,  title: '灞�',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field: 'id',width: 150, title: '鎬诲眰鏁�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'id',width: 100, title: '瑙勬牸',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field: 'quantity',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderDetail.productName',width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderDetail.computeGrossArea',width: 150, title: t('order.area'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: '',width: 70, title: 'merge'}
+    {field: 'check', title: '閫夋嫨', width: 200, cellRender: checkboxCellRender },
+    {field: 'process_id',width: 150, title: t('processCard.processId'), sortable: true},
+    {field: 'technology_number',width: 70, title: '灞�', sortable: true},
+    {field: 'TotalFloors',width: 150, title: '鎬诲眰鏁�', sortable: true},
+    {field: 'TotalNumber',width: 150, title: '瑙勬牸', sortable: true},
+    {field: 'quantity',width: 150, title: t('order.quantity'), sortable: true},
+    {field: 'glass_child',width: 150, title: t('order.product'), sortable: true},
+    {field: 'project', width:150, title: t('order.project'), showOverflow: "ellipsis"},
+    {field: 'area',width: 150, title: t('order.area'), sortable: true},
+
 
   ],//琛ㄥご鍙傛暟
   data:null,//琛ㄦ牸鏁版嵁
@@ -80,14 +68,37 @@
 })
 let emit = defineEmits([
   'changeDialog'
-])
-let Membrane = ref('閫夋嫨鑶滅郴')
+]);
 
-const changeOrderType = async ()=>{
-  await emit('changeDialog',Membrane.value)
-  Membrane.value = null
-}
+const props = defineProps({
+  tableData: Array
+});
 
+onMounted(() => {
+  if (xGrid.value) {
+    const grid = xGrid.value;
+    if (typeof grid.setDirty === 'function') {
+      grid.setDirty(true);
+    }
+  } else {
+    console.error('vxe-grid 缁勪欢瀹炰緥鏈幏鍙栧埌锛屽彲鑳芥寕杞藉嚭鐜伴棶棰�');
+  }
+});
+
+watch(() => props.tableData, async (newData) => {
+  if (Array.isArray(newData)) {
+    gridOptions.data = newData;
+    await nextTick();
+    if (xGrid.value) {
+      const grid = xGrid.value;
+      if (typeof grid.refresh === 'function') {
+        grid.refresh();
+      }
+    }
+  } else {
+    console.error('浼犻�掔粰琛ㄦ牸鐨勬暟鎹牸寮忎笉绗﹀悎瑕佹眰锛屾湡鏈涙槸鏁扮粍鏍煎紡');
+  }
+});
 </script>
 
 <template>
@@ -100,7 +111,6 @@
         class="mytable-scrollbar"
         ref="xGrid"
         v-bind="gridOptions"
-        v-on="gridEvents"
     >
       <template #num2_filter="{ column, $panel }">
         <div>
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java b/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
index 40a3a25..7022879 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -68,4 +68,12 @@
         return Result.seccess(glassOptimizeService.deleteProject(projectNumber));
     }
 
+    //妯℃嫙璁$畻宸ョ▼鍙锋煡璇�
+    @ApiOperation("妯℃嫙璁$畻宸ョ▼鍙锋煡璇�")
+    @PostMapping  ("/selectProjectCompute/{projectNumber}")
+    public Result selectProjectCompute(
+            @PathVariable String projectNumber){
+        return Result.seccess(glassOptimizeService.selectProjectComputeSv(projectNumber));
+    }
+
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
index 2559086..c57fa23 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -4,6 +4,7 @@
 import com.example.erp.entity.pp.OptimizeProjectMange;
 import com.example.erp.entity.sd.OrderGlassDetail;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.sql.Date;
 import java.util.List;
@@ -26,4 +27,7 @@
 
     //鍒犻櫎宸ョ▼
     int deleteProjectMp(String projectNumber);
+
+    //妯℃嫙璁$畻宸ョ▼鍙锋煡璇�
+    List<Map<String, Object>> selectProjectComputeMp(@Param("projectNo")String projectNumber);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
index 18b11ed..32e97d8 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -55,4 +55,13 @@
         Map<String, Object> map = new HashMap<>();
         map.put("data", glassOptimizeMapper.getProjectListMp());
         return map;
-    }}
+    }
+
+    //妯℃嫙璁$畻宸ョ▼鍙锋煡璇�
+    public Map<String, Object>selectProjectComputeSv(String projectNumber) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("data", glassOptimizeMapper.selectProjectComputeMp(projectNumber));
+        return map;
+    }
+
+}
diff --git a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
index ffa719f..4d401ea 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -212,4 +212,43 @@
             p.project_no
     </select>
 
+    <!--妯℃嫙璁$畻鏌ヨ-->
+    <select id="selectProjectComputeMp">
+        SELECT
+            fc.process_id,
+            fc.technology_number,
+            fc.project_no,
+            fcss.TotalFloors,
+            COUNT(fc.order_number)                                      AS TotalNumber,
+            SUM(fc.quantity)                                            AS quantity,
+            ROUND(SUM(od.width * od.height * fc.quantity / 1000000), 2) AS area,
+            o.project,
+            ogd.glass_child,
+            od.shape
+        FROM
+            pp.flow_card AS fc
+                LEFT JOIN sd.`order` AS o ON fc.order_id = o.order_id
+                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_glass_detail AS ogd
+                          ON ogd.order_id = fc.order_id AND ogd.order_number = fc.order_number AND
+                             ogd.technology_number = fc.technology_number
+                LEFT JOIN (
+                SELECT
+                    fcs.process_id,
+                    fcs.order_number,
+                    COUNT(DISTINCT fcs.technology_number) AS TotalFloors
+                FROM
+                    pp.flow_card AS fcs
+                GROUP BY
+                    fcs.process_id, fcs.order_number
+            ) AS fcss
+                          ON fcss.process_id = fc.process_id AND fcss.order_number = fc.order_number
+        WHERE
+            fc.project_no = #{projectNo}
+        GROUP BY
+            fc.process_id, fc.technology_number
+        ORDER BY
+            fc.process_id, fc.technology_number;
+    </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0