From f46f83ab2ce1bd2f34c81cb5750e6d5ce6ffb306 Mon Sep 17 00:00:00 2001
From: chenlu <1320612696@qq.com>
Date: 星期四, 12 十二月 2024 08:30:24 +0800
Subject: [PATCH] 工程创建界面功能完成

---
 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java       |    1 
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue           |  360 +++++++++++++++++++----------
 north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml                           |  137 +++++++++--
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue     |   59 +++-
 north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java |   31 ++
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java         |   12 +
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue              |   25 +
 north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java       |   53 ++++
 8 files changed, 509 insertions(+), 169 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue
index 9994920..e0bd895 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectCreate.vue
@@ -6,6 +6,20 @@
 import {ref} from "vue";
 import {useI18n} from "vue-i18n";
 
+let projectRow = ref({
+  processId:null,
+  technologyNumber:null
+})
+
+
+const handleProcessIdUpdate = newProcessId => {
+  projectRow.value.processId = newProcessId;
+};
+
+const handleTechnologyNumberUpdate = newTechnologyNumber => {
+  projectRow.value.technologyNumber = newTechnologyNumber;
+};
+
 
 
 </script>
@@ -14,11 +28,16 @@
   <div style="width: 100%; height: 100%;">
 
     <div id="processCard">
-      <process-card/>
+      <process-card :process-id="projectRow.processId===null?null:projectRow.processId"
+                    :technology-number="projectRow.technologyNumber===null?null:projectRow.technologyNumber"
+                    @updateProcessId="handleProcessIdUpdate"
+                    @updateTechnologyNumber="handleTechnologyNumberUpdate"
+      />
     </div>
 
-    <div id="processCard-detail">
-      <process-card-detail/>
+    <div id="processCard-detail" >
+      <process-card-detail :process-id="projectRow.processId===null?null:projectRow.processId"
+                           :technology-number="projectRow.technologyNumber===null?null:projectRow.technologyNumber"/>
     </div>
 
     <div id="project-list">
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
index 72b7383..5dedb14 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
@@ -1,25 +1,93 @@
 <script setup>
-import {reactive, ref} from "vue";
+import {onMounted, reactive, ref} from "vue";
 import {useI18n} from "vue-i18n";
 import {Search} from "@element-plus/icons-vue";
 import request from "@/utils/request";
 import deepClone from "@/utils/deepClone";
 import {ElMessage} from "element-plus";
-const { t } = useI18n()
+import useUserInfoStore from "@/stores/userInfo";
+
+const {t} = useI18n()
+const userStore = useUserInfoStore()
+const username = userStore.user.userName
+let rowClickIndex = ref(null)
+
+let props = defineProps({
+  processId: null,
+  technologyNumber: null
+})
+
+//鑶滅郴
+const optionVal = ref()
+//鑶滅郴
+const projectNmae = ref()
+//宸ョ▼缂栧彿涓暟
+let projectId = ref()
+//宸ョ▼缂栧彿
+const Id = ref()
+let oddNumbers = ref()
+
+//瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
+const titleSelectJson = ref({
+  processType: [],
+})
+
+const selectGlassType = () => {
+  //鏌ヨ鑶滅郴
+  request.post(`/glassOptimize/selectGlassType`).then((res) => {
+    if (res.code == 200) {
+      titleSelectJson.value.processType = res.data.data
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+//鏌ヨ鏈�鏂板伐绋嬪彿
+const getProjectId = () => {
+  request.post(`/glassOptimize/getProjectId`).then((res) => {
+    if (res.code == 200) {
+      projectId = res.data.data[0].project_no
+      // 鑾峰彇瀛楃涓茬殑鏈�鍚庝袱浣嶆暟瀛�
+      let maximum = projectId.slice(-2);
+      let lastTwoInteger = parseInt(maximum, 10);
+       // 璁剧疆涓や綅涓嶅琛�0
+      let formattedNumber = (lastTwoInteger + 1).toString().padStart(2, '0');
+      // 鏍煎紡鍖栧綋鍓嶆棩鏈熶负 "yyMMdd"
+      let currentDate = new Date();
+      let formattedDate = currentDate.getFullYear().toString().slice(-2) +
+          (currentDate.getMonth() + 1).toString().padStart(2, '0') +
+          currentDate.getDate().toString().padStart(2, '0');
+
+      // 鎷兼帴鎴愭渶缁堢殑瀛楃涓�
+      oddNumbers.value = 'P' + formattedDate + formattedNumber;
+
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+
+onMounted(() => {
+  getProjectId();
+  selectGlassType();
+
+})
+
 const xGrid = ref()
 const gridOptions = reactive({
 
-  height:'100%',
+  height: '100%',
   loading: false,
-  border:  "full",//琛ㄦ牸鍔犺竟妗�
+  border: "full",//琛ㄦ牸鍔犺竟妗�
   keepSource: true,//淇濇寔婧愭暟鎹�
   align: 'center',//鏂囧瓧灞呬腑
-  stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 30, useKey: true},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  stripe: true,//鏂戦┈绾�
+  rowConfig: {isCurrent: true, isHover: true, height: 30, useKey: true},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
   id: 'ProcessCard',
-  scrollX:{enabled: true},
-  scrollY:{ enabled: true ,gt:0},//寮�鍚櫄鎷熸粴鍔�
-  showOverflow:true,
+  scrollX: {enabled: true},
+  scrollY: {enabled: true, gt: 0},//寮�鍚櫄鎷熸粴鍔�
+  showOverflow: true,
   columnConfig: {
     resizable: true,
     useKey: true
@@ -35,156 +103,202 @@
     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},
+  columns: [
+
     {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80},
-    {field: 'process_id',width: 150, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'technology_number',width: 70, title: '灞�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'TotalFloors',width: 150, title: '鎬诲眰鏁�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'TotalNumber',width: 150, title: '瑙勬牸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'quantity',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'shape',width: 150, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'glass_child',width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'project', width:150, title: t('order.project'), showOverflow: "ellipsis"},
-    {field: 'area',width: 150, title: t('order.area'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {
+      field: 'process_id',
+      width: 150,
+      title: t('processCard.processId'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
+    {
+      field: 'technology_number',
+      width: 70,
+      title: '灞�',
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
+    {
+      field: 'TotalFloors',
+      width: 150,
+      title: '鎬诲眰鏁�',
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
+    {
+      field: 'TotalNumber',
+      width: 150,
+      title: '瑙勬牸',
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
+    {
+      field: 'quantity',
+      width: 150,
+      title: t('order.quantity'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
+    {
+      field: 'shape',
+      width: 150,
+      title: t('order.shape'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
+    {
+      field: 'glass_child',
+      width: 150,
+      title: t('order.product'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
+    {field: 'project', width: 150, title: t('order.project'), showOverflow: "ellipsis"},
+    {
+      field: 'area',
+      width: 150,
+      title: t('order.area'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      sortable: true
+    },
 
 
   ],//琛ㄥご鍙傛暟
-  data:null,//琛ㄦ牸鏁版嵁
+  data: null,//琛ㄦ牸鏁版嵁
 
   toolbarConfig: {
     buttons: [],
-    slots:{
+    slots: {
       buttons: "toolbar_buttons"
     },
   },
 
+
 })
-let emit = defineEmits([
-  'changeDialog'
-])
-//鑶滅郴鍒楄〃
-const optionVal = ref('')
-const options = [
-  {
-    value: '鐧界幓',
-    label: '鐧界幓',
-  },
-  {
-    value: '鐏伴暅',
-    label: '鐏伴暅',
-  },
-  {
-    value: 'Low-e',
-    label: 'Low-e',
-  },
-]
+
+const gridEvents = {
+  cellClick({row}) {
+    rowClickIndex.value = row
+    // Emit 浜嬩欢灏嗘洿鏂板悗鐨勫�间紶閫掔粰鐖剁粍浠�
+    emit('updateProcessId', rowClickIndex.value.process_id);
+    emit('updateTechnologyNumber', rowClickIndex.value.technology_number);
+  }
+}
+const emit = defineEmits(['updateProcessId', 'updateTechnologyNumber']);
+
 
 //灏忓渾鐐瑰崟閫夋
 let radio = ref(1);
 
-const selectFlowCardList = ()=>{
+const selectFlowCardList = () => {
   request.post(`/glassOptimize/getFlowCardList/${optionVal.value}/${radio.value}`).then((res) => {
-    if(res.code==200){
+    if (res.code == 200) {
       xGrid.value.loadData(res.data.data)
-    }else{
+    } else {
       ElMessage.warning(res.msg)
     }
   })
 }
 
+//鍒涘缓宸ョ▼
+const addProject = () => {
+  const $table = xGrid.value
+  if ($table) {
+    const selectRecords = $table.getCheckboxRecords()
+    if (selectRecords.length == 0) {
+      ElMessage.warning(t('reportingWorks.selectProcessCardData'))
+      return;
+    }
 
+    let projectData = ref({
+      projectdetail: selectRecords,
+      userName : username
+    })
+    request.post(`/glassOptimize/addProject/${optionVal.value}/${oddNumbers.value}/${projectNmae.value}`, projectData.value).then((res) => {
+      if (res.code == 200 && res.data === true) {
+        ElMessage.success(t('basicData.msg.saveSuccess'))
+      } else {
+        ElMessage.warning(res.msg)
+      }
+    })
+
+  }
+}
 </script>
 
 <template>
   <div style="width: 100%;height: 110%; margin-top: -36px">
     <h1>娴佺▼鍗″垪琛�
-    <span style="margin-left: 140px;font-size: 14px">宸ョ▼缂栧彿锛�</span>
-    <vxe-input disabled placeholder="" size="small"></vxe-input>&nbsp;
-    <span style="font-size: 14px">宸ョ▼鍚嶇О锛�</span>
-    <vxe-input placeholder="" size="small"></vxe-input>
-      <el-button type="primary" style="margin-left: 20px">鍒涘缓</el-button>
+      <span style="margin-left: 140px;font-size: 14px">宸ョ▼缂栧彿锛�</span>
+<!--      <span>{{oddNumbers}}</span>-->
+      <el-input disabled v-model="oddNumbers" style="width: 100px"></el-input>
+<!--      <vxe-input :disabled="isDisabled" placeholder="" v-model="oddNumbers" size="small" style="color:black;"></vxe-input>&nbsp;-->
+      <span style="font-size: 14px">宸ョ▼鍚嶇О锛�</span>
+      <vxe-input placeholder="" v-model="projectNmae" size="small"></vxe-input>
+      <el-button style="margin-left: 20px" type="primary" @click="addProject">鍒涘缓</el-button>
     </h1>
     <vxe-grid
-          size="small"
-          @filter-change="filterChanged"
-          height="100%"
-          class="mytable-scrollbar"
-          ref="xGrid"
-          v-bind="gridOptions"
-          v-on="gridEvents"
-      >
-        <template #num2_filter="{ column, $panel }">
-          <div>
-            <div v-for="(option, index) in column.filters" :key="index">
-              <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')"  @change="changeFilterEvent($event, option, $panel)">
-                <vxe-option value="0" :label="$t('basicData.unchecked')"></vxe-option>
-                <vxe-option value="1" :label="$t('basicData.selected')"></vxe-option>
-              </vxe-select>
-            </div>
+        ref="xGrid"
+        class="mytable-scrollbar"
+        height="100%"
+        size="small"
+        v-bind="gridOptions"
+        v-on="gridEvents"
+        @filter-change="filterChanged"
+    >
+      <template #num2_filter="{ column, $panel }">
+        <div>
+          <div v-for="(option, index) in column.filters" :key="index">
+            <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')"
+                        @change="changeFilterEvent($event, option, $panel)">
+              <vxe-option :label="$t('basicData.unchecked')" value="0"></vxe-option>
+              <vxe-option :label="$t('basicData.selected')" value="1"></vxe-option>
+            </vxe-select>
           </div>
-        </template>
+        </div>
+      </template>
 
-        <template #num1_filter="{ column, $panel }">
-          <div>
-            <div v-for="(option, index) in column.filters" :key="index">
-              <input
+      <template #num1_filter="{ column, $panel }">
+        <div>
+          <div v-for="(option, index) in column.filters" :key="index">
+            <input
 
-                  type="type"
-                  v-model="option.data"
-                  @keyup.enter.native="$panel.confirmFilter()"
-                  @input="changeFilterEvent($event, option, $panel)"/>
-            </div>
+                v-model="option.data"
+                type="type"
+                @input="changeFilterEvent($event, option, $panel)"
+                @keyup.enter.native="$panel.confirmFilter()"/>
           </div>
-        </template>
+        </div>
+      </template>
 
-        <template #toolbar_buttons>
-          <h1>鑶滅郴绛涢�夛細</h1>
-          <el-select
-              placeholder="閫夋嫨鑶滅郴"
-              style="margin-left:10px; width: 170px "
-              ref="getSelect"
-              v-model="optionVal"
-              clearable
-              class="m-2"
-              @change="getWorkOrder"
-          >
-
-            <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-            />
-          </el-select>
-          <el-button type="primary" :icon="Search" style="margin-left: 20px" @click="selectFlowCardList">鏌ヨ</el-button>
-          <vxe-radio-group v-model="radio" style="margin-left: 20px">
-            <vxe-radio label="1" content="鍏ㄩ儴"></vxe-radio>
-            <vxe-radio label="2" content="姝e崟"></vxe-radio>
-            <vxe-radio label="3" content="琛ュ崟"></vxe-radio>
-          </vxe-radio-group>
-        </template>
+      <template #toolbar_buttons>
+        <h1>鑶滅郴绛涢�夛細</h1>
+        <el-select v-model="optionVal" clearable default-value="default_city" placeholder="閫夋嫨鑶滅郴"
+                   style="width: 120px">
+          <el-option
+              v-for="item in titleSelectJson['processType']"
+              :key="item.id"
+              :label="item.glassType"
+              :value="item.glassType"
+          />
+        </el-select>
+        <el-button :icon="Search" style="margin-left: 20px" type="primary" @click="selectFlowCardList">鏌ヨ</el-button>
+        <vxe-radio-group v-model="radio" style="margin-left: 20px">
+          <vxe-radio content="鍏ㄩ儴" label="1"></vxe-radio>
+          <vxe-radio content="姝e崟" label="2"></vxe-radio>
+          <vxe-radio content="琛ュ崟" label="3"></vxe-radio>
+        </vxe-radio-group>
+      </template>
     </vxe-grid>
   </div>
 </template>
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue
index 4a9e093..044e9f3 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCardDetail.vue
@@ -1,8 +1,14 @@
 <script setup>
-import {reactive, ref} from "vue";
+import {onMounted, reactive, ref, watch} from "vue";
 import {useI18n} from "vue-i18n";
+import request from "@/utils/request";
+import {ElMessage} from "element-plus";
 const { t } = useI18n()
 
+let props = defineProps({
+  processId:null,
+  technologyNumber:null
+})
 const xGrid = ref()
 
 const gridOptions = reactive({
@@ -54,34 +60,53 @@
     ]
   },*/
   columns:[
-    {field: 'id',width: 70,  title: '搴忓彿',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'state',width: 150,title: t('order.width'),filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {type: 'seq',width: 150,title: t('order.height')},
-    {field: 'id',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'id',width: 150, title: t('order.buildingNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'id',width: 150, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'id',width: 150, title: t('order.grossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'id',width: 150, title: t('craft.TrademarkAttribute'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'order_number',width: 70,  title: '搴忓彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field:'child_width',width: 150,title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'child_height',width: 150,title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'quantity',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'building_number',width: 150, title: t('order.buildingNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'shape',width: 150, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'grossArea',width: 150, title: t('order.grossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'separation',width: 150, title: t('craft.TrademarkAttribute'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
 
   ],//琛ㄥご鍙傛暟
   data:null,//琛ㄦ牸鏁版嵁
   toolbarConfig: {
     buttons: [],
     slots:{
-      buttons: "toolbar_buttons"
     },
   },
 
 })
-let emit = defineEmits([
-  'changeDialog'
-])
-let ProjectName = ref('')
-const changeOrderType = async ()=>{
-  await emit('changeDialog',ProjectName.value)
-  ProjectName.value = null
+
+
+onMounted(()=>{
+
+})
+
+watch(
+
+    () => props.processId,
+    (newValue, oldValue) => {
+if (props.processId!=null){
+  getWorkOrder()
 }
 
+    }
+);
+
+const getWorkOrder = () => {
+  if (props.processId!=null || props.processId!=""){
+    request.post(`/glassOptimize/getProcessCardDetail/${props.processId}/${props.technologyNumber}`).then((res) => {
+      if(res.code==200){
+        xGrid.value.loadData(res.data.data)
+      }else{
+        ElMessage.warning(res.msg)
+      }
+    })
+  }
+
+}
 </script>
 
 <template>
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 9484a42..19dc67d 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
@@ -1,5 +1,6 @@
 package com.example.erp.controller.pp;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.example.erp.common.Constants;
 import com.example.erp.common.Result;
 import com.example.erp.entity.pp.OptimizeProjectMange;
@@ -11,6 +12,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.sql.Date;
+import java.util.Map;
 
 @RestController
 @Api(value="浼樺寲绠$悊controller",tags={"浼樺寲绠$悊鎿嶄綔鎺ュ彛"})
@@ -102,4 +104,33 @@
         return Result.seccess(glassOptimizeService.selectComputeDetailSv(processId));
     }
 
+    //鍒涘缓宸ョ▼鏌ヨ娴佺▼鍗℃槑缁�
+    @ApiOperation("鍒涘缓宸ョ▼鏌ヨ娴佺▼鍗℃槑缁�")
+    @PostMapping  ("/getProcessCardDetail/{processId}/{technologyNumber}")
+    public Result getProcessCardDetail(
+            @PathVariable String processId,
+            @PathVariable Integer technologyNumber){
+        return Result.seccess(glassOptimizeService.getProcessCardDetailSv(processId,technologyNumber));
+    }
+
+    @ApiOperation("鑶滅郴鏌ヨ")
+    @PostMapping  ("/selectGlassType")
+    public Result selectGlassType(){
+        return Result.seccess(glassOptimizeService.selectGlassTypeSv());
+    }
+
+    @ApiOperation("鏈�鏂板伐绋嬪彿鏌ヨ")
+    @PostMapping  ("/getProjectId")
+    public Result getProjectId(){
+        return Result.seccess(glassOptimizeService.getProjectIdSv());
+    }
+    @ApiOperation("鍒涘缓宸ョ▼鎺ュ彛")
+    @PostMapping("/addProject/{optionVal}/{projectId}/{projectNmae}")
+    public Result addProject(
+            @PathVariable String optionVal,
+            @PathVariable String projectId,
+            @PathVariable String projectNmae,
+            @RequestBody Map<String,Object> object){
+        return  Result.seccess(glassOptimizeService.addProjectSv(optionVal,projectId,projectNmae,object));
+    }
 }
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 6438c2f..91b894c 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
@@ -39,4 +39,16 @@
 
     //妯℃嫙璁$畻娴佺▼鍗¤鎯�
     List<Map<String, Object>> selectComputeDetailMp(String processId);
+
+    List<Map<String, Object>> getProcessCardDetailmMp(String processId, Integer technologyNumber);
+
+    List<Map<String, Object>> selectGlassTypeMp();
+
+    List<Map<String, Object>> getProjectIdSv();
+
+    Boolean updateFlowCardProject(String processId, String technologyNumber, String projectId);
+
+    Double getSelectArea(String processId, String technologyNumber);
+
+    Boolean addProjectMp(String projectId, String projectNmae, String glassThickness, String glassType, Integer sumQuantity, Double sumArea, String userName);
 }
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 8a9cb51..a1690a1 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
@@ -1,7 +1,10 @@
 
 package com.example.erp.service.pp;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.example.erp.entity.pp.FlowCard;
 import com.example.erp.entity.pp.OptimizeProjectMange;
 import com.example.erp.mapper.pp.GlassOptimizeMapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +12,7 @@
 
 import java.sql.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Service
@@ -86,4 +90,53 @@
         return map;
     }
 
+    public Map<String, Object> getProcessCardDetailSv(String processId, Integer technologyNumber) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("data", glassOptimizeMapper.getProcessCardDetailmMp(processId,technologyNumber));
+        return map;
+    }
+
+    public Map<String, Object> selectGlassTypeSv() {
+        Map<String, Object> map = new HashMap<>();
+        map.put("data", glassOptimizeMapper.selectGlassTypeMp());
+        return map;
+    }
+
+
+    public Map<String, Object> getProjectIdSv() {
+        Map<String, Object> map = new HashMap<>();
+        map.put("data", glassOptimizeMapper.getProjectIdSv());
+        return map;
+    }
+
+    public Boolean addProjectSv(String optionVal, String projectId, String projectNmae, Map<String, Object> object) {
+        String userName = "";
+        if (object.get("userName") != null) {
+            userName = object.get("userName").toString();
+        }
+        Double sumArea = (double) 0;
+        Double area = (double) 0;
+        Integer sumQuantity = 0;
+        List<FlowCard> flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("projectdetail")), FlowCard.class);
+        if (!flowCardList.isEmpty()) {
+            for (FlowCard flowCard : flowCardList) {
+                //缁欐祦绋嬪崱琛ㄦ坊鍔犲搴旂殑宸ョ▼鍙�
+                glassOptimizeMapper.updateFlowCardProject(flowCard.getProcessId(),flowCard.getTechnologyNumber(),projectId);
+                area = glassOptimizeMapper.getSelectArea(flowCard.getProcessId(),flowCard.getTechnologyNumber());
+                sumArea += area;
+                sumQuantity +=flowCard.getQuantity();
+            }
+            int index = optionVal.indexOf("mm");
+            // 鑾峰彇 "mm" 鍓嶉潰鐨勯儴鍒�
+            String glass_thickness = optionVal.substring(0, index);
+            // 鑾峰彇 "mm" 鍚庨潰鐨勯儴鍒�
+            String glass_type = optionVal.substring(index + 2);
+            glassOptimizeMapper.addProjectMp(projectId,projectNmae,glass_thickness,glass_type,sumQuantity,sumArea,userName);
+            return true;
+        }
+        else {
+            return false;
+
+        }
+    }
 }
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 f77a9b7..fa93989 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
@@ -311,7 +311,6 @@
 
             //鍒ゆ柇鏄惁澶т簬褰撳墠鏁伴噺骞朵笖鎶涘嚭寮傚父
             if (processNum < (reportingWorkDetail.getBreakageQuantity() + reportingWorkDetail.getCompletedQuantity())) {
-                System.out.println(processNum+"--"+reportingWorkDetail.getBreakageQuantity()+"--"+reportingWorkDetail.getCompletedQuantity());
                 Map<String, Object> map = new HashMap<>();
                 map.put("orderNumber", reportingWorkDetail.getOrderNumber());
                 map.put("technologyNumber", reportingWorkDetail.getOrderNumber());
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 c72d362..7fc144f 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -166,31 +166,48 @@
     </select>
 
     <select id="getFlowCardListMp">
-        select fc.process_id,
-               fc.technology_number,
-               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 position(#{optionVal} in ogd.glass_child)
-        GROUP BY fc.process_id, fc.technology_number
-        ORDER BY fc.process_id, fc.technology_number
+        SELECT
+            fc.process_id,
+            fc.technology_number,
+            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,
+            CONCAT( JSON_UNQUOTE( JSON_EXTRACT( pd.separation, '$.thickness' )), JSON_UNQUOTE( JSON_EXTRACT( pd.separation, '$.color' )) ) AS glassType
+        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
+                LEFT JOIN sd.product_detail AS pd ON pd.prod_id = od.product_id
+                AND pd.glass_sort = fc.technology_number
+        WHERE
+                CONCAT( JSON_UNQUOTE( JSON_EXTRACT( pd.separation, '$.thickness' )), JSON_UNQUOTE( JSON_EXTRACT( pd.separation, '$.color' )) )= #{optionVal}
+              and ISNULL(fc.project_no)
+        GROUP BY
+            fc.process_id,
+            fc.technology_number
+        ORDER BY
+            fc.process_id,
+            fc.technology_number
     </select>
 
         <!--宸ョ▼绠$悊-->
@@ -334,4 +351,74 @@
             p.state IN (1, 2)
           AND f.process_id = #{processId}
     </select>
+
+    <select id="getProcessCardDetailmMp">
+        select fc.order_number,
+               ogd.child_width,
+               ogd.child_height,
+               fc.quantity,
+               od.building_number,IF(od.shape!=2,'鏅舰','寮傚舰') as shape,
+               ROUND(ogd.child_width*ogd.child_height*fc.quantity/1000000,2) as grossArea,
+               pd.separation
+        from pp.flow_card as fc
+                 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 sd.order_detail as od on od.order_id=ogd.order_id and od.order_number=ogd.order_number
+                 left join sd.product_detail as pd on pd.prod_id=od.product_id and pd.glass_sort=fc.technology_number
+        where fc.process_id=#{processId} and fc.technology_number=#{technologyNumber}
+        group by fc.process_id,fc.order_number,fc.technology_number
+        order by fc.order_number,fc.technology_number
+    </select>
+
+    <select id="selectGlassTypeMp">
+        SELECT
+            JSON_UNQUOTE(JSON_EXTRACT(type, '$.lowE')) AS lowE,
+            JSON_UNQUOTE(JSON_EXTRACT(type, '$.color')) AS color,
+            JSON_UNQUOTE(JSON_EXTRACT(type, '$.thickness')) AS thickness,
+            JSON_UNQUOTE(JSON_EXTRACT(type, '$.craft')) AS craft,
+            JSON_UNQUOTE(JSON_EXTRACT(type, '$.position')) AS position,
+    CONCAT(
+        JSON_UNQUOTE(JSON_EXTRACT(type, '$.thickness')),
+        JSON_UNQUOTE(JSON_EXTRACT(type, '$.color'))
+    ) AS glassType
+        FROM pp.v_optimize_create_process_type
+        GROUP BY
+            thickness,
+            color
+        ORDER BY
+            CAST(REPLACE(JSON_UNQUOTE(JSON_EXTRACT(type, '$.thickness')), 'mm', '') AS UNSIGNED);
+    </select>
+
+    <select id="getProjectIdSv">
+        SELECT IFNULL(
+                       (SELECT project_no
+                        FROM pp.optimize_project
+                        WHERE DATE(create_time) = CURDATE()
+           ORDER BY create_time DESC
+           LIMIT 1), '00') AS project_no;
+    </select>
+
+    <update id="updateFlowCardProject">
+        UPDATE pp.flow_card set project_no=#{projectId}
+                             where process_id=#{processId} and technology_number=#{technologyNumber}
+    </update>
+
+    <select id="getSelectArea">
+        select
+            ROUND(SUM(ogd.child_width*ogd.child_height*fc.quantity)/1000000,2) as grossArea
+        from pp.flow_card as fc
+                 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 sd.order_detail as od on od.order_id=ogd.order_id and od.order_number=ogd.order_number
+                 left join sd.product_detail as pd on pd.prod_id=od.product_id and pd.glass_sort=fc.technology_number
+        where fc.process_id=#{processId} and fc.technology_number=#{technologyNumber}
+        group by fc.process_id,fc.technology_number
+    </select>
+
+    <insert id="addProjectMp">
+        insert into pp.optimize_project (project_no, project_name, order_glass_type, order_glass_thickness)
+        values (#{projectId}, #{projectNmae}, #{glassType}, #{glassThickness})
+    </insert>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0