From a6f59f0908e5787d55c098c17f4eec365cf6477a Mon Sep 17 00:00:00 2001
From: guoyuji <guoyujie@ng.com>
Date: 星期六, 23 十一月 2024 11:41:25 +0800
Subject: [PATCH] Merge branch 'master' of http://bore.pub:10439/r/ERP_override
---
north-glass-erp/northglass-erp/src/router/index.js | 6
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml | 153 +++++++
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml | 39 +
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java | 16
north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue | 410 +++++++++++++++++++
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java | 4
north-glass-erp/northglass-erp/src/components/mm/PrintPackingList.vue | 132 ++++++
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectMange.vue | 336 +++++++++++----
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectList.vue | 52 +
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java | 43 +
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue | 1
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java | 25 +
north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue | 10
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java | 17
north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedOperateLog.java | 3
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java | 9
16 files changed, 1,135 insertions(+), 121 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/components/mm/PrintPackingList.vue b/north-glass-erp/northglass-erp/src/components/mm/PrintPackingList.vue
new file mode 100644
index 0000000..afbde22
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/components/mm/PrintPackingList.vue
@@ -0,0 +1,132 @@
+<script setup>
+import request from "@/utils/request"
+import {ElDatePicker, ElMessage} from "element-plus"
+import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue"
+import {Search} from "@element-plus/icons-vue"
+import {useRouter} from 'vue-router'
+import {changeFilterEvent, filterChanged} from "@/hook"
+import {useI18n} from 'vue-i18n'
+import deepClone from "@/utils/deepClone";
+import QRCode from "qrcode";
+import companyInfo from "@/stores/sd/companyInfo";
+import userInfo from "@/stores/userInfo"
+//璇█鑾峰彇
+const company = companyInfo()
+const {t} = useI18n()
+let router = useRouter()
+let produceList = ref([])
+let list = ref()
+const details = ref([])
+const user=userInfo()
+
+
+const data = ref({
+ printList: []
+})
+
+let props = defineProps({
+ printList: null,
+})
+
+const {currentRoute} = useRouter()
+const route = currentRoute.value
+
+
+data.value.printList = JSON.parse(props.printList)
+
+onMounted(() => {
+ selectPrint()
+ }
+)
+const selectPrint = () => {
+ request.post(`/finishedGoodsInventory/getSelectPrint`, data.value).then((res) => {
+ if (res.code == 200) {
+ produceList.value = deepClone(res.data.data)
+ console.log(produceList.value)
+ } else {
+ ElMessage.warning(res.msg)
+ router.push("/login")
+ }
+ })
+}
+
+</script>
+
+<template>
+<div>
+ <div style="width: 49%;height: 100%" v-for="(item,id) in produceList" :key="id">
+ <div style="height: 100%;width: 100%;">
+ <table>
+ <thead>
+ <tr>
+ <td colspan="5" style="text-align: center;font-weight: bolder">
+ <div>閲戝崕绂忓枩澶╂垚鐜荤拑鏈夐檺鍏徃</div>
+ </td>
+ </tr>
+ <tr style="width: 100%;" v-for="(itemFlow,index) in item.detail" :key="index">
+ <td colspan="5">
+ <div>瀹㈡埛鍚嶇О: {{itemFlow.customer_name}}</div>
+ <div>椤圭洰鍚嶇О: {{itemFlow.project}}</div>
+ <div>璁㈠崟鍙�: {{itemFlow.order_id}} 绠卞彿: {{itemFlow.remarks}}</div>
+ </td>
+ </tr>
+ <tr>
+ <td style="width: 170px;">缂栧彿</td>
+ <td style="width: 70px;">瀹�</td>
+ <td style="width: 70px;">楂�</td>
+ <td style="width: 70px;">鏁伴噺</td>
+ <td style="width: 70px;">闈㈢Н</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr v-for="(itemDatile,index) in item.detailList" :key="index">
+ <td>{{ itemDatile.building_number }}</td>
+ <td>{{ itemDatile.width }}</td>
+ <td>{{ itemDatile.height }}</td>
+ <td>{{ itemDatile.quantity }}</td>
+ <td>{{ itemDatile.area }}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+
+</template>
+
+<style scoped>
+* {
+ margin: 0;
+ padding: 0;
+}
+
+#contentTable{
+ width: 49%;
+ height: 100%;
+}
+
+#record{
+ display: flex;
+ flex-wrap: wrap
+}
+
+@media print {
+ @page {
+ size: auto; /* auto is the initial value */
+ margin: 4mm 5mm 0mm 5mm /* this affects the margin in the printer settings */
+
+ }
+
+ table {
+ page-break-before: always;
+ page-break-inside: auto;
+ }
+
+ thead {
+ display: table-header-group;
+ page-break-inside: avoid;
+ }
+
+}
+
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/router/index.js b/north-glass-erp/northglass-erp/src/router/index.js
index c7ca3dd..6831dfd 100644
--- a/north-glass-erp/northglass-erp/src/router/index.js
+++ b/north-glass-erp/northglass-erp/src/router/index.js
@@ -919,6 +919,12 @@
name: 'storageRecord',
component:()=>import('../views/mm/productStock/StorageRecord.vue'),
},
+ {
+ // 瑁呯鎵撳嵃
+ path: 'storageRecordPint',
+ name: 'storageRecordPint',
+ component:()=>import('../views/mm/productStock/StorageRecordPint.vue'),
+ },
{
path: '',
diff --git a/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue b/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue
index deee081..08c0e70 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue
@@ -227,6 +227,10 @@
{
'name': t('productStock.warehousingRecords'),status: 'primary',
'code':'jump'
+ },
+ {
+ 'name': "瑁呯鎵撳嵃",status: 'primary',
+ 'code':'pint'
}
],
/*import: false,
@@ -305,6 +309,12 @@
}
+ case 'pint': {
+ router.push({path: '/main/productStock/storageRecordPint'})
+ return;
+
+ }
+
}
}
},
diff --git a/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue b/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue
new file mode 100644
index 0000000..e316172
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue
@@ -0,0 +1,410 @@
+<!-- 棰嗗嚭璁板綍 -->
+<script setup>
+
+import {onMounted, reactive, ref} from "vue";
+import {useRoute, useRouter} from "vue-router"
+import request from "@/utils/request";
+import deepClone from "@/utils/deepClone";
+import useUserInfoStore from "@/stores/userInfo";
+import {ElMessage} from "element-plus";
+import {Search} from "@element-plus/icons-vue";
+import { useI18n } from 'vue-i18n'
+import footSum from "@/hook/footSum";
+import {VXETable} from "vxe-table";
+import PrintPackingList from "@/components/mm/PrintPackingList.vue";
+import {CircleCheck, Download, Printer} from "@element-plus/icons-vue/global";
+import print from "vue3-print-nb";
+
+//璇█鑾峰彇
+const { t } = useI18n()
+const router = useRouter()
+const route = useRoute()
+const dialogTableVisible = ref(false)
+let produceList = ref([])
+const getTableRow = (row,type) =>{
+ switch (type) {
+ case 'add' :{
+ alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑缂栬緫淇℃伅')
+ break
+ }
+ case 'delete':{
+ alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍒犻櫎淇℃伅')
+ break
+ }
+ }
+}
+
+//鎵撳嵃
+let printRow = ref({
+ list: null
+})
+
+const printRecord = ref({
+ id: 'record'
+})
+
+const hasDecimal=(value)=>{
+ const regex=/\./ // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+ return regex.test(value) //杩斿洖true/false
+}
+
+const hasDecimalhtml=(item,row)=>{
+ let aa=item.split('.').length
+ if (aa===2){
+ return row[item.split('.')[0]][item.split('.')[1]]
+ }else if(aa===3){
+ return row[item.split('.')[0]][item.split('.')[1]][item.split('.')[2]]
+ }
+
+
+}
+let selectDate = ref(["",""])
+
+let type = ref("")
+
+//绛涢�夋潯浠讹紝鏈夊閿渶瑕佸厛瀹氫箟鏄庣粏閲岄潰鐨勬暟鎹�
+let filterData = ref({
+ orderDetail:{
+ width:'',
+ height:'',
+ productId:'',
+ productName:''
+
+ }
+
+})
+
+let pageNum=ref(1)
+let total = reactive({
+ pageTotal : 0,
+ dataTotal : 0,
+ pageSize : 100
+})
+
+onMounted(()=>{
+
+ //绗竴娆¤皟鐢�
+ request.post(`/finishedGoodsInventory/getSelectStorageRecordPint/1/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => {
+
+ if(res.code==200){
+ total.dataTotal = res.data.total.total*1
+ total.pageTotal= res.data.total.pageTotal
+ selectDate.value = res.data.selectDate
+ produceList = deepClone(res.data.data)
+ xGrid.value.loadData(produceList)
+ gridOptions.loading=false
+ }else{
+ ElMessage.warning(res.msg)
+ router.push("/login")
+ }
+ })
+
+
+})
+
+
+
+let pageState = null
+
+/*浣跨敤绛涢�夛紝鍚庣鑾峰彇鏁版嵁*/
+const changeFilterEvent = (event, option, $panel,) => {
+ // 鎵嬪姩瑙﹀彂绛涢��
+ $panel.changeOption(event, !!option.data, option)
+}
+function filterChanged(column){
+ gridOptions.loading=true
+ //绛涢�夋潯浠跺彂鐢熷彉鍖栨潯浠跺彂鐢熷彉鍖�
+ let value = column.datas[0]!=undefined?column.datas[0]:''
+ value = value.trim()
+ //鍒ゆ柇鏄惁瀛樺湪澶栭敭
+ if (column.property.indexOf('.')>-1){
+ const columnArr = column.property.split('.')
+ filterData.value[columnArr[0]] = {
+ [columnArr[1]]:value
+ }
+ }else{
+ filterData.value[column.property] = value
+ }
+ request.post(`/finishedGoodsInventory/getSelectStorageRecordPint/1/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => {
+
+ if(res.code==200){
+ total.dataTotal = res.data.total.total*1
+ total.pageTotal= res.data.total.pageTotal
+
+ selectDate.value = res.data.selectDate
+ pageNum.value=1
+ produceList = deepClone(res.data.data)
+ xGrid.value.loadData(produceList)
+ gridOptions.loading=false
+ }else{
+ ElMessage.warning(res.msg)
+ router.push("/login")
+ }
+ })
+}
+
+
+
+const selectOrderList = ()=>{
+ request.post(`/finishedGoodsInventory/getSelectStorageRecordPint/${pageNum.value}/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => {
+ if(res.code==200){
+ selectDate.value = res.data.selectDate
+ if (res.data.total!=null){
+ total.dataTotal = res.data.total.total*1
+ total.pageTotal= res.data.total.pageTotal
+ }
+ produceList = deepClone(res.data.data)
+ xGrid.value.loadData(produceList)
+ gridOptions.loading=false
+ }else{
+ ElMessage.warning(res.msg)
+ router.push("/login")
+ }
+ })
+}
+
+const changeDate = ()=>{
+ selectOrderList()
+}
+
+//椤佃剼璺宠浆
+const handlePageChange = ({ currentPage, pageSize }) => {
+ total.pageTotal = pageSize
+ pageNum.value=currentPage
+
+ selectOrderList()
+}
+
+
+
+//瀛愮粍浠舵帴鏀跺弬鏁�
+const xGrid = ref();
+
+const gridOptions = reactive({
+ border: "full",//琛ㄦ牸鍔犺竟妗�
+ keepSource: true,//淇濇寔婧愭暟鎹�
+ align: 'center',//鏂囧瓧灞呬腑
+ stripe:true,//鏂戦┈绾�
+ rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+ id: 'StorageRecord',
+ showFooter: true,//鏄剧ず鑴�
+ printConfig: {},
+ importConfig: {},
+ exportConfig: {},
+ scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
+ showOverflow:true,
+ columnConfig: {
+ resizable: true,
+ useKey: true
+ },
+ filterConfig: { //绛涢�夐厤缃」
+ remote: true
+ },
+ customConfig: {
+ storage: true
+ },
+ editConfig: {
+ trigger: 'click',
+ mode: 'row',
+ showStatus: true
+ },//琛ㄥご鍙傛暟
+ columns:[
+
+
+ {type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
+ {type:'expand',fixed:"left",slots: { content:'content' },width: '80'},
+ {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
+ {field: 'remarks', width:'150', title: t('绠卞彿'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'processId', width: '150',title: t('processCard.processId'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'order.project', width: '100',title: t('椤圭洰鍚嶇О'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'order.customerName', width:'140', title: t('瀹㈡埛鍚嶇О'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ {field: 'order.deliveryAddress', width: '100',title: t('閫佽揣鍦板潃'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
+ ],//琛ㄥご鎸夐挳
+ toolbarConfig: {
+ buttons: [
+ {
+ 'name': t('鎵撳嵃'), status:"primary" ,
+ 'code':'pint'
+ }],
+ /*import: false,
+ export: true,
+ print: true,*/
+ zoom: true,
+ custom: true
+ },
+
+ footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
+ let footList = ['quantity']
+ return[
+ columns.map((column, columnIndex) => {
+ if (columnIndex === 0) {
+ return t('basicData.total')
+ }
+ if (footList.includes(column.field)) {
+ return footSum(data, column.field)
+ }
+ return ''
+ })
+ ]
+ }
+
+})
+
+const gridEvents = {
+ toolbarButtonClick ({ code }) {
+ const $grid = xGrid.value
+ if ($grid) {
+ switch (code) {
+
+ case 'pint': {
+ const $table = xGrid.value
+ //gridOptions.columns.unshift(a)
+ if ($table) {
+ const selectRecords = $table.getCheckboxRecords()
+
+ if (selectRecords.length <= 0) {
+ ElMessage.warning(t('productStock.unselectedData'))
+ return
+ }
+ printRow.value.list = JSON.stringify(selectRecords)
+ dialogTableVisible.value = true
+ }
+ return;
+
+ }
+ case 'return': {
+ router.go(-1)
+ break
+ }
+
+ }
+ }
+ },
+
+}
+
+const checkBoxConfig = {
+ checkMethod: ({ row }) => {
+ if (row['status']===t('productStock.approved')||row['status']===t('productStock.notPassed')){
+ return row.disable
+ }else{
+ return !row.disable
+ }
+
+ },
+ reserve:true
+}
+
+
+
+</script>
+
+<template>
+ <div class="main-div-customer">
+ <el-date-picker
+ v-model="selectDate"
+ type="daterange"
+ :start-placeholder="$t('basicData.startDate')"
+ :end-placeholder="$t('basicData.endDate')"
+ format="YYYY-MM-DD"
+ value-format="YYYY-MM-DD"
+
+ />
+ <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
+
+ <vxe-grid
+ max-height="100%"
+ @filter-change="filterChanged"
+ class="mytable-scrollbar"
+ ref="xGrid"
+ v-bind="gridOptions"
+ v-on="gridEvents"
+ :checkbox-config="checkBoxConfig"
+
+ >
+
+<!-- <template #state="{ row,column}">
+<!– <p>{{row[column.field]}}</p>–>
+<!– <el-checkbox v-model="row['isState']" :disabled="row[column.field]==='宸插鏍�'||row[column.field]==='鏈�氳繃'"/>–>
+ <vxe-checkbox v-model="row['isState']" :disabled="row[column.field]==='宸插鏍�'||row[column.field]==='鏈�氳繃'"></vxe-checkbox>
+ </template>-->
+
+
+ <!-- @toolbar-button-click="toolbarButtonClickEvent"-->
+ <!-- 涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�-->
+ <template #content="{ row }">
+ <ul class="expand-wrapper">
+ <li v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
+ <span style="font-weight: bold">{{item.title+': '}}</span>
+ <span v-if="hasDecimal(item.field)">{{ hasDecimalhtml(item.field,row) }}</span>
+ <span v-else>{{ row[item.field] }}</span>
+ </li>
+ </ul>
+ </template>
+
+ <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
+ <template #button_slot="{ row }">
+ <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
+ <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
+ </template>
+
+ <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>
+ </div>
+ </template>
+
+ <template #pager>
+ <!--浣跨敤 pager 鎻掓Ы-->
+ <vxe-pager
+ @page-change="handlePageChange"
+ :layouts="[ 'PrevPage', 'Jump','PageCount', 'NextPage', 'Total']"
+ v-model:current-page="pageNum"
+ v-model:page-size="total.pageSize"
+ v-model:pager-count="total.pageTotal"
+ :total="total.dataTotal"
+ >
+ </vxe-pager>
+ </template>
+
+
+ </vxe-grid>
+
+<!-- 瑁呯鍗曟墦鍗�-->
+ <el-dialog
+ id="sizePrintCalrd"
+ v-model="dialogTableVisible"
+ title="瑁呯鍗曟墦鍗�"
+ destroy-on-close
+ style="width: 75%;height:75% ">
+ <template #header="{ close, titleId, titleClass }">
+ <el-button v-print="printRecord" :icon="Printer" circle/>
+ </template>
+ <print-packing-list
+ id="record"
+ :printList="printRow.list"
+ style="width: 100%;height: 100%"/>
+ </el-dialog>
+ </div>
+</template>
+
+<style scoped>
+.main-div-customer{
+ width: 99%;
+ height: 100%;
+}
+:deep(#sizePrintCalrd .el-dialog__body) {
+ height: 90%;
+ width: 100%;
+ overflow-y: auto;
+ display: flex;
+ flex-wrap: wrap
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue
index 56318dc..04d1c20 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue
@@ -29,6 +29,7 @@
:title="detailPage ===1? '鍒涘缓宸ョ▼' : detailPage ===2? '宸ョ▼绠$悊' : detailPage ===3? '妯℃嫙璁$畻':''"
destroy-on-close
style="width: 90%;height:90%;margin-top: 3vh"
+ z-index="100"
>
<project-create v-if="detailPage===1" />
<project-mange v-if="detailPage===2" />
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectMange.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectMange.vue
index b09a120..44bddcd 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectMange.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectMange.vue
@@ -1,5 +1,5 @@
<script setup>
-import {reactive, ref} from "vue";
+import {computed, reactive, ref} from "vue";
import {useI18n} from "vue-i18n";
import deepClone from "@/utils/deepClone"
import {Search} from "@element-plus/icons-vue";
@@ -8,6 +8,8 @@
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
import useUserInfoStore from "@/stores/userInfo";
import userInfo from "@/stores/userInfo";
+import {VxeUI} from 'vxe-pc-ui'
+import GlassComputed from "@/views/pp/glassOptimize/GlassComputed.vue";
const {t} = useI18n()
const userStore = useUserInfoStore()
@@ -69,6 +71,30 @@
{field: 'modifyTime', width: 100, title: '淇敼鏃堕棿',},
],//琛ㄥご鍙傛暟
data: null,//琛ㄦ牸鏁版嵁
+ //鍙抽敭鑿滃崟閫夐」
+ menuConfig: {
+ body: {
+ options: [
+ [
+ {code: 'openproject', name: '鎵撳紑宸ョ▼', prefixIcon: 'vxe-icon-folder-open'},
+ {code: 'compute', name: '妯℃嫙璁$畻', prefixIcon: 'vxe-icon-subtable'},
+ {code: 'optimizetypography', name: '浼樺寲鎺掔増', prefixIcon: 'vxe-icon-menu'},
+ {code: 'production', name: '鍏佽鐢熶骇', prefixIcon: 'vxe-icon-square-checked'},
+ {code: 'novisible', name: '鐢熶骇涓嶅彲瑙�', prefixIcon: 'vxe-icon-eye-fill-close'},
+ {code: 'copyproject', name: '澶嶅埢宸ョ▼', prefixIcon: 'vxe-icon-copy'},
+ {code: 'undooptimize', name: '鎾ら攢浼樺寲', prefixIcon: 'vxe-icon-error-circle-fill'},
+ {code: 'undocompute', name: '鎾ら攢妯℃嫙璁$畻', prefixIcon: 'vxe-icon-error-circle-fill'},
+ {code: 'Initializeproject', name: '鍒濆鍖栧伐绋�', prefixIcon: 'vxe-icon-undo'},
+ {code: 'delproject', name: '鍒犻櫎宸ョ▼', prefixIcon: 'vxe-icon-delete'},
+ {code: 'viewtempered ', name: '鏌ョ湅閽㈠寲鐗堝浘', prefixIcon: 'vxe-icon-custom-column'},
+ {code: 'viewoptimize', name: '鏌ョ湅浼樺寲鐗堝浘', prefixIcon: 'vxe-icon-layout'},
+ {code: 'Export', name: '鏁版嵁瀵煎嚭', prefixIcon: 'vxe-icon-download', visible: true, disabled: false},
+
+ ],
+ []
+ ]
+ },
+ },
toolbarConfig: {
buttons: [],
slots: {
@@ -77,13 +103,89 @@
},
})
-
-
+//瀹氫箟妯℃嫙璁$畻寮圭獥榛樿闅愯棌
+const optimizecompute = ref(false)
+const Mange = ref(true)
+//鍙抽敭鑿滃崟鐐瑰嚮浜嬩欢
+const gridEvents = {
+ menuClick({menu, row, column}) {
+ const $grid = xGrid.value
+ if ($grid) {
+ switch (menu.code) {
+ case 'copy':
+ if (row && column) {
+ if (VxeUI.clipboard.copy(row[column.field])) {
+ VxeUI.modal.message({content: '宸插鍒跺埌鍓创鏉匡紒', status: 'success'})
+ }
+ }
+ break
+ case 'compute':
+ optimizecompute.value = true;
+ Mange.value = false;
+ break
+ case 'Export':
+ $grid.exportData()
+ break
+ case 'undocompute':
+ if (!row) {
+ ElMessage.warning('鏈�変腑宸ョ▼锛岃閫変腑宸ョ▼鍚庡啀杩涜褰撳墠鎿嶄綔锛�');
+ return;
+ }
+ if (String(row.state) === '10') {
+ row.state = '2';
+ const index = produceList.value.findIndex(item => item === row);
+ if (index!== -1) {
+ produceList.value.splice(index, 1, {...row });
+ xGrid.value.reloadData(produceList.value);
+ }
+ const projectNumber = row.projectNumber;
+ const state = 2; // 鏄庣‘瀹氫箟瑕佹洿鏂扮殑鐘舵�佸�间负2
+ const updateParams = {
+ projectNumber: projectNumber,
+ stateToUpdate: state
+ };
+ request.post(`/glassOptimize/updateProjectState/${projectNumber}/${state}`, updateParams, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then((res) => {
+ if (res.code === 200 && res.data && res.data.success) { // 鍋囪鍚庣杩斿洖鐨刣ata閲屾湁success瀛楁琛ㄧず鎿嶄綔鏄惁鎴愬姛锛屾牴鎹悗绔疄闄呰繑鍥炵粨鏋勮皟鏁�
+ ElMessage.success('鎾ら攢妯℃嫙璁$畻鎴愬姛锛屾暟鎹凡鏇存柊锛�');
+ } else {
+ console.log('鎾ら攢妯℃嫙璁$畻澶辫触锛屽悗绔繑鍥炵殑璇︾粏淇℃伅:', res);
+ const errorMsg = res.data? res.data.errorMessage : '鎾ら攢妯℃嫙璁$畻澶辫触锛屾湭鑾峰彇鍒板叿浣撳師鍥狅紝璇疯仈绯荤鐞嗗憳'; // 灏濊瘯鑾峰彇鍚庣杩斿洖鐨勮缁嗛敊璇秷鎭紝濡傛灉娌℃湁鍒欐樉绀洪�氱敤鎻愮ず
+ ElMessage.error(`鎾ら攢妯℃嫙璁$畻澶辫触锛屽師鍥�: ${errorMsg}`);
+ row.state = '10';
+ const rollbackIndex = produceList.value.findIndex(item => item === row);
+ if (rollbackIndex!== -1) {
+ produceList.value.splice(rollbackIndex, 1, {...row });
+ xGrid.value.reloadData(produceList.value);
+ }
+ }
+ }).catch((error) => {
+ console.error('璇锋眰鍑洪敊锛屾挙閿�妯℃嫙璁$畻鏈畬鎴愶紝璇︾粏閿欒淇℃伅:', error);
+ const errorMsg = error.message || '璇锋眰鍑洪敊锛屾湭鑾峰彇鍒板叿浣撳師鍥狅紝璇疯仈绯荤鐞嗗憳';
+ ElMessage.error(`璇锋眰鍑洪敊锛屾挙閿�妯℃嫙璁$畻鏈畬鎴愶紝鍘熷洜: ${errorMsg}`);
+ row.state = '10';
+ const rollbackIndex = produceList.value.findIndex(item => item === row);
+ if (rollbackIndex!== -1) {
+ produceList.value.splice(rollbackIndex, 1, {...row });
+ xGrid.value.reloadData(produceList.value);
+ }
+ });
+ } else {
+ ElMessage.warning('褰撳墠宸ョ▼鐘舵�佷笉绗﹀悎鎾ら攢妯℃嫙璁$畻鏉′欢锛岃纭宸ョ▼鐘舵�佸悗鍐嶆搷浣滐紒');
+ }
+ break;
+ }
+ }
+ }
+}
//瀹氫箟宸ョ▼鐘舵��
-const optionVal = ref('')
+const optionVal = ref('all')
const options = [
{
- value: '0',
+ value: 'all',
label: '鍏ㄩ儴',
},
{
@@ -95,22 +197,33 @@
label: '绗竴娆′紭鍖�',
},
{
- value: '3',
+ value: '10',
label: '妯℃嫙璁$畻淇濆瓨',
},
{
- value: '4',
+ value: '20',
label: '浼樺寲淇濆瓨',
},
{
- value: '5',
+ value: '100',
label: '瀹屾垚浼樺寲',
},
{
- value: '6',
+ value: '200',
label: '宸查鍙�',
},
]
+
+//宸ョ▼鐘舵�佸嚱鏁�
+function handleOptionChange() {
+ if (optionVal.value === 'all') {
+ // 娓呯┖宸ョ▼鐘舵�佺浉鍏崇殑宸叉湁绛涢�夋潯浠�
+ delete filterData.value['state'];
+ } else {
+ filterData.value['state'] = optionVal.value; // 鏄庣‘娣诲姞閫夋嫨鐨勫伐绋嬬姸鎬佸�煎埌绛涢�夋潯浠朵腑
+ }
+ getWorkOrder();
+}
//鍏叡鍑芥暟
function buildRequestParams() {
@@ -127,17 +240,17 @@
//绛涢�夋潯浠�
let filterData = ref({
- projectNumber: '',
+ projectNumber: '',
})
// 瀹氫箟鏁版嵁杩斿洖缁撴灉锛屼娇鐢╮ef鍒涘缓鍝嶅簲寮忔暟鎹紝鍒濆鍖栦负绌烘暟缁�
let produceList = ref([])
-// 鑾峰彇涓冨ぉ鍓嶅埌褰撳墠鏃堕棿
+// 鑾峰彇15澶╁墠鍒板綋鍓嶆椂闂�
function getNowTime() {
const start = new Date(new Date().getTime() - 3600 * 1000 * 24 * 15)
.toISOString()
.replace('T', ' ')
- .slice(0, 10) //榛樿寮�濮嬫椂闂�7澶╁墠
+ .slice(0, 10) //榛樿寮�濮嬫椂闂�15澶╁墠
const end = new Date(new Date().getTime())
.toISOString()
.replace('T', ' ')
@@ -145,7 +258,7 @@
return [start, end]
}
-// 鍒濆鍖栨椂闂磋寖鍥达紝鑻ヤ负绌哄垯璁句负杩戜竷澶╂椂闂�
+// 鍒濆鍖栨椂闂磋寖鍥达紝鑻ヤ负绌哄垯璁句负杩�15澶╂椂闂�
if (orderInfo.workOrderDate[0] === "" && orderInfo.workOrderDate[1] === "") {
orderInfo.workOrderDate = getNowTime();
}
@@ -174,25 +287,32 @@
//绛涢�夋潯浠跺彂鐢熷彉鍖栨潯浠跺彂鐢熷彉鍖�
let value = column.datas[0] != undefined ? column.datas[0] : ''
value = value.trim();
- //鍒ゆ柇鏄惁瀛樺湪澶栭敭
- if (column.property.indexOf('.') > -1) {
- const columnArr = column.property.split('.')
- filterData.value[columnArr[0]] = {
- [columnArr[1]]: value
+ //鍒ゆ柇鏄惁涓哄伐绋嬬姸鎬佸垪鐨勭瓫閫夋敼鍙橈紙鍋囪宸ョ▼鐘舵�佸瓧娈靛悕涓�'state'锛屽彲鏍规嵁瀹為檯鎯呭喌璋冩暣锛�
+ if (column.property === 'state') {
+ if (value === 'all') {
+ // 濡傛灉閫夋嫨鐨勬槸鍏ㄩ儴锛屼粠绛涢�夋暟鎹腑鍒犻櫎姝ゆ潯浠讹紝閬垮厤浼犻�掔粰鍚庣骞叉壈鑾峰彇鍏ㄩ儴鏁版嵁
+ delete filterData.value['state'];
+ } else {
+ filterData.value['state'] = value;
}
} else {
- filterData.value[column.property] = value
+ //鍒ゆ柇鏄惁瀛樺湪澶栭敭
+ if (column.property.indexOf('.') > -1) {
+ const columnArr = column.property.split('.');
+ filterData.value[columnArr[0]] = {
+ [columnArr[1]]: value,
+ };
+ } else {
+ filterData.value[column.property] = value;
+ }
}
const params = buildRequestParams();
- console.log('鍗冲皢鍙戦�佺粰鍚庣鐨勭瓫閫夊弬鏁帮細', filterData.value);
request.post(`/glassOptimize/optimizeProjectMange/${params.startSelectTime}/${params.endSelectTime}`, filterData.value).then((res) => {
- console.log('宸叉敹鍒版湇鍔″櫒鍝嶅簲锛屽搷搴旂爜锛�', res.code);
- console.log('鍝嶅簲鏁版嵁锛�', res.data);
if (res.code == 200) {
- produceList = deepClone(res.data.data)
+ produceList.value = deepClone(res.data.data);
xGrid.value.reloadData(produceList)
- gridOptions.loading=false
+ gridOptions.loading = false
} else {
ElMessage.warning(res.msg)
}
@@ -213,92 +333,108 @@
}
});
};
+// 璁$畻灏忕墖鏁伴噺
+const smallPieceQuantityInput = computed(() => {
+ return produceList.value.reduce((acc, item) => acc + item.quantity, 0);
+});
+// 璁$畻灏忕墖闈㈢Н
+const smallPieceAreaInput = computed(() => {
+ const sum = produceList.value.reduce((acc, item) => acc + item.area, 0);
+ return Number(sum.toFixed(2)); // 鍏堜娇鐢╰oFixed淇濈暀涓や綅灏忔暟锛屽啀杞崲鍥炴暟鍊肩被鍨嬶紙鍥犱负toFixed杩斿洖瀛楃涓诧級
+});
+
+// 璁$畻鍘熺墖鏁伴噺
+const originalPieceQuantityInput = computed(() => {
+ return produceList.value.reduce((acc, item) => acc + item.usingQuantity, 0);
+});
+
+// 鍘熺墖闈㈢Н鍥哄畾涓�0锛岀洿鎺ヨ繑鍥�0
+const originalPieceAreaInput = 0;
</script>
<template>
<div id="mange">
- <div id="select">
- <span>浼樺寲鏃ユ湡</span>
- <el-date-picker
- style="margin-left:10px; margin-top: -5px; "
- v-model="orderInfo.workOrderDate"
- :default-time="defaultTime"
- :start-placeholder="$t('basicData.startDate')"
- :end-placeholder="$t('basicData.endDate')"
- type="daterange"
- format="YYYY/MM/DD"
- value-format="YYYY-MM-DD"
- />
-<!-- <vxe-input-->
-<!-- style="margin-left:10px; "-->
-<!-- placeholder="杈撳叆宸ョ▼鍙锋垨娴佺▼鍗″彿"-->
-<!-- >-->
-<!-- </vxe-input>-->
-
- <span class="input">宸ョ▼鐘舵��</span>
- <el-select
- style="margin-left:10px; margin-top: -5px; width: 150px"
- :default-first-option="true"
- 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"
+ <glass-computed v-if="optimizecompute"/>
+ <div style="height: 100%; width: 100%" v-if="Mange">
+ <div id="select">
+ <span>浼樺寲鏃ユ湡</span>
+ <el-date-picker
+ style="margin-left:10px; margin-top: -5px; "
+ v-model="orderInfo.workOrderDate"
+ :default-time="defaultTime"
+ :start-placeholder="$t('basicData.startDate')"
+ :end-placeholder="$t('basicData.endDate')"
+ type="daterange"
+ format="YYYY/MM/DD"
+ value-format="YYYY-MM-DD"
/>
- </el-select>
- <!--鏌ヨ-->
- <el-button
- style="margin-left:10px;margin-top: -5px"
- :icon="Search"
- type="primary"
- @click="getWorkOrder">{{ $t('basicData.search') }}
- </el-button>
- </div>
+ <span class="input">宸ョ▼鐘舵��</span>
+ <el-select
+ style="margin-left:10px; margin-top: -5px; width: 150px"
+ :default-first-option="true"
+ ref="getSelect"
+ v-model="optionVal"
+ clearable
+ class="m-2"
+ @change="handleOptionChange"
+ >
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ <!--鏌ヨ-->
+ <el-button
+ style="margin-left:10px;margin-top: -5px"
+ :icon="Search"
+ type="primary"
+ @click="getWorkOrder">{{ $t('basicData.search') }}
+ </el-button>
+ </div>
- <vxe-grid
- height="100%"
- class="mytable-scrollbar"
- ref="xGrid"
- v-bind="gridOptions"
- @filter-change="filterChanged"
- >
- <template #select_filter="{ column, $panel }">
- <div>
- <div v-for="(option, index) in column.filters" :key="index">
- <vxe-select v-model="option.data" @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>
+ <vxe-grid
+ height="100%"
+ class="mytable-scrollbar"
+ ref="xGrid"
+ v-bind="gridOptions"
+ v-on="gridEvents"
+ @filter-change="filterChanged"
+ >
+ <template #select_filter="{ column, $panel }">
+ <div>
+ <div v-for="(option, index) in column.filters" :key="index">
+ <vxe-select v-model="option.data" @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>
</div>
- </div>
- </template>
+ </template>
- <template #num1_filter="{ column, $panel }">
- <div>
- <div v-for="(option, index) in column.filters" :key="index">
- <input v-model="option.data" type="text"
- @keyup.enter.native="$panel.confirmFilter()"
- @input="changeFilterEvent($event, option, $panel)"/>
+ <template #num1_filter="{ column, $panel }">
+ <div>
+ <div v-for="(option, index) in column.filters" :key="index">
+ <input v-model="option.data" type="text"
+ @keyup.enter.native="$panel.confirmFilter()"
+ @input="changeFilterEvent($event, option, $panel)"/>
+ </div>
</div>
- </div>
- </template>
- </vxe-grid>
- <div id="last">
- <span>
- 灏忕墖鏁�<vxe-input size="small" class="input" disabled></vxe-input>
- 灏忕墖闈�<vxe-input size="small" class="input" disabled></vxe-input>
- 鍘熺墖鏁�<vxe-input size="small" class="input" disabled></vxe-input>
- 鍘熺墖闈�<vxe-input size="small" class="input" disabled></vxe-input>
- </span>
+ </template>
+ </vxe-grid>
+ <div id="last">
+ 灏忕墖鏁伴噺
+ <el-input class="input" disabled v-model="smallPieceQuantityInput"></el-input>
+ 灏忕墖闈㈢Н
+ <el-input class="input" disabled v-model="smallPieceAreaInput"></el-input>
+ 鍘熺墖鏁伴噺
+ <el-input class="input" disabled v-model="originalPieceQuantityInput"></el-input>
+ 鍘熺墖闈㈢Н
+ <el-input class="input" disabled v-model="originalPieceAreaInput"></el-input>
+ </div>
</div>
</div>
</template>
@@ -315,6 +451,6 @@
.input {
width: 80px;
- margin-left: 15px;
+ margin-left: 10px;
}
</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectList.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectList.vue
index 43e5967..e336223 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectList.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectList.vue
@@ -1,6 +1,9 @@
<script setup>
-import {reactive, ref} from "vue";
+import {onMounted, reactive, ref} from "vue";
import {useI18n} from "vue-i18n";
+import request from "@/utils/request";
+import {ElMessage} from "element-plus";
+import {hiprint} from "vue-plugin-hiprint";
const { t } = useI18n()
const xGrid = ref()
@@ -55,28 +58,45 @@
},*/
columns:[
{type:'expand',fixed:"left",slots: { content:'content' },width: 50},
- {field: 'id',width: 70, title: 'ID',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
- {field: 'id',width: 100, 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: 150, title: '鑶滅郴',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 150, title: '鍘氬害',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 150, title: '绫诲瀷',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 150, title: '鐘舵��',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 150, title: t('order.quantity'),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: '娴佺▼鏁伴噺',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 150, title: '娴佺▼鍗″彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'id',width: 150, title: 'ID',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'project_no',width: 150, title: '宸ョ▼鍙�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'project_name',width: 150, title: '椤圭洰鍚嶇О',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'glass_type',width: 150, title: '鑶滅郴',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'glass_thickness',width: 150, title: '鍘氬害',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'type',width: 150, title: '绫诲瀷',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'state',width: 150, title: '鐘舵��',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'glass_total',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'glass_total_area',width: 150, title: t('order.grossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'process_qty',width: 150, title: '娴佺▼鏁伴噺',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'process_cards',width: 150, title: '娴佺▼鍗″彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
],//琛ㄥご鍙傛暟
data:null,//琛ㄦ牸鏁版嵁
toolbarConfig: {
- buttons: [],
- slots:{
- buttons: "toolbar_buttons"
- },
+ buttons: [
+ ],
+ import: false,
+ // export: true,
+ // print: true,
+ zoom: true,
+ custom: true
},
})
+
+onMounted(async () => {
+ getProject();
+})
+
+const getProject = ()=>{
+ request.post(`/glassOptimize/getProjectList`).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/mm/FinishedGoodsInventoryController.java b/north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
index dbd855f..a6811d6 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
@@ -185,4 +185,20 @@
return Result.seccess(finishedGoodsInventoryService.oneClickStorage(orderId,userName));
}
+
+ /*瑁呯鎵撳嵃鏌ヨ*/
+ @ApiOperation("瑁呯鎵撳嵃鏌ヨ鎺ュ彛")
+ @SaCheckPermission("storageRecordPint.search")
+ @PostMapping("/getSelectStorageRecordPint/{pageNum}/{pageSize}/{selectDate}")
+ public Result getSelectStorageRecordPint(@PathVariable Integer pageNum, @PathVariable Integer pageSize,@PathVariable List<String> selectDate, @RequestBody FinishedOperateLog finishedOperateLog){
+ return Result.seccess(finishedGoodsInventoryService.getSelectStorageRecordPint(pageNum,pageSize,selectDate,finishedOperateLog));
+ }
+
+ /*瑁呯鎵撳嵃鏌ヨ*/
+ @ApiOperation("瑁呯鎵撳嵃鍐呭鏌ヨ鎺ュ彛")
+ @SaCheckPermission("storageRecordPint.search")
+ @PostMapping("/getSelectPrint")
+ public Result getSelectPrint( @RequestBody Map<String, Object> object){
+ return Result.seccess(finishedGoodsInventoryService.getSelectPrintSv(object));
+ }
}
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 efb7a7d..d926a49 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,8 +1,10 @@
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;
+import com.example.erp.exception.ServiceException;
import com.example.erp.service.pp.GlassOptimizeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -27,6 +29,13 @@
return Result.seccess(glassOptimizeService.getFlowCardList(optionVal,radio));
}
+ //宸ョ▼鏌ヨ娴佺▼鍗�
+ @ApiOperation("宸ョ▼鏌ヨ娴佺▼鍗�")
+ @PostMapping ("/getProjectList")
+ public Result getProjectList(){
+ return Result.seccess(glassOptimizeService.getProjectListSv());
+ }
+
//宸ョ▼绠$悊鏌ヨ
@ApiOperation("宸ョ▼绠$悊鏌ヨ鎺ュ彛")
@PostMapping("/optimizeProjectMange/{startSelectTime}/{endSelectTime}")
@@ -36,4 +45,20 @@
@RequestBody OptimizeProjectMange optimizeProjectMange) {
return Result.seccess(glassOptimizeService.OptimizeProjectMange(startSelectTime,endSelectTime,optimizeProjectMange));
}
+
+ //淇敼宸ョ▼鐘舵��
+ @ApiOperation("淇敼宸ョ▼鐘舵�佹帴鍙�")
+ @PostMapping("/updateProjectState/{projectNumber}/{state}")
+ public Result updateProjectState(
+ @PathVariable String projectNumber,
+ @PathVariable Integer state
+ ) {
+ if (glassOptimizeService.updateProjectState(projectNumber, state)) {
+ return Result.seccess();
+ } else {
+ throw new ServiceException(Constants.Code_500, "淇敼澶辫触");
+
+ }
+ }
+
}
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedOperateLog.java b/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedOperateLog.java
index cc3bbf9..344a800 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedOperateLog.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedOperateLog.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
+import com.example.erp.entity.sd.Order;
import com.example.erp.entity.sd.OrderDetail;
import lombok.Data;
@@ -32,5 +33,7 @@
private OrderDetail orderDetail;
+ private Order order;
+
}
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
index 881e540..2439bb8 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
@@ -82,4 +82,13 @@
Boolean updateOrderFinishedOperateLog(@Param("orderDetail") OrderDetail orderDetail,@Param("userName") String userName,@Param("oddNumber") String oddNumber);
+ List<FinishedOperateLog> getSelectStorageRecordPint(@Param("offset") Integer offset,@Param("pageSize") Integer pageSize,String startDate, String endDate,
+ @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog);
+
+ Map<String,Integer> getSelectStorageRecordPintPageTotal(@Param("offset") Integer offset,@Param("pageSize") Integer pageSize,String startDate, String endDate,
+ @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog);
+
+ List<Map<String, String>> getPrimaryListLimt(String orderId, String processId, String remarks);
+
+ List<Map<String, Object>> getDetailList(String orderId, String processId, String remarks);
}
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 ec8d208..7170f99 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
@@ -20,4 +20,6 @@
//宸ョ▼绠$悊宸ョ▼鍙锋煡璇�
List<OptimizeProjectMange> optimizeProjectMangeMp(Date startSelectTime, Date endSelectTime, OptimizeProjectMange optimizeProjectMange);
-}
+ //淇敼宸ョ▼鐘舵��
+ Boolean updateProjectStateMp(String projectNumber,Integer state);
+ List<Map<String, Object>> getProjectListMp();}
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java b/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
index 2afd92f..47f47f8 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
@@ -820,6 +820,29 @@
}
+ public Map<String, Object> getSelectStorageRecordPint(Integer pageNum, Integer pageSize, List<String> selectDate, FinishedOperateLog finishedOperateLog) {
+ Integer offset = (pageNum-1)*pageSize;
+ String endDate = LocalDate.now().toString();
+ String startDate = LocalDate.now().minusDays(15).toString();
+ if(selectDate !=null && selectDate.size()==2){
+ if(!selectDate.get(0).isEmpty()){
+ startDate = selectDate.get(0);
+ }
+ if(!selectDate.get(1).isEmpty()){
+ endDate = selectDate.get(1);
+ }
+ }
+
+ Map<String, Object> map = new HashMap<>();
+ map.put("data", finishedOperateLogMapper.getSelectStorageRecordPint(offset, pageSize,startDate, endDate, finishedOperateLog));
+ map.put("total", finishedOperateLogMapper.getSelectStorageRecordPintPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog));
+ List<String> list = new ArrayList<>();
+ list.add(startDate);
+ list.add(endDate);
+ map.put("selectDate",list);
+ return map;
+ }
+
@@ -853,9 +876,23 @@
}
+ public Map<String, Object> getSelectPrintSv(Map<String, Object> object) {
+ Map<String, Object> map = new HashMap<>();
+ List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//鏈�缁堢粨鏋�
+ List<FinishedOperateLog> finishedOperateLogList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FinishedOperateLog.class);
+ if (!finishedOperateLogList.isEmpty()) {
+ for (FinishedOperateLog finishedOperateLog : finishedOperateLogList) {
+ Map<String, Object> itemmap = new HashMap<>();
+ itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimt(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks()));
+ List<Map<String, Object>> detailList = finishedOperateLogMapper.getDetailList(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks());
+ itemmap.put("detailList", detailList);
-
-
-
+ list.add(itemmap);
+ list.add(itemmap);
+ }
+ }
+ map.put("data", list);
+ return map;
+ }
}
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 eb9b71e..c9e1493 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
@@ -32,4 +32,19 @@
map.put("data", glassOptimizeMapper.optimizeProjectMangeMp(startSelectTime, endSelectTime , optimizeProjectMange));
return map;
}
-}
+//淇敼鎺掔増鐘舵��
+ public Boolean updateProjectState(String projectNumber, Integer state) {
+ if (!projectNumber.isEmpty()) {
+ glassOptimizeMapper.updateProjectStateMp(projectNumber, state);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ public Map<String, Object> getProjectListSv() {
+ Map<String, Object> map = new HashMap<>();
+ map.put("data", glassOptimizeMapper.getProjectListMp());
+ return map;
+ }}
diff --git a/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml b/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
index c760ba5..db5ea34 100644
--- a/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
+++ b/north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
@@ -27,6 +27,10 @@
<result column="product_id" property="orderDetail.productId"/>
<result column="product_name" property="orderDetail.productName"/>
+ <result column="project" property="order.project"/>
+ <result column="customer_name" property="order.customerName"/>
+ <result column="delivery_address" property="order.deliveryAddress"/>
+
</resultMap>
<select id="getSelectStorageRecord" resultMap="selectFinishedGoodsInventory">
@@ -693,7 +697,156 @@
update mm.finished_operate_log set status="宸蹭綔搴�" where order_id=#{orderDetail.orderId} and operation_number=#{orderDetail.orderNumber} and operate_type="鍏ュ簱";
</delete>
+ <select id="getSelectStorageRecordPint" resultMap="selectFinishedGoodsInventory">
+ select fol.id,
+ fol.operation_order_number,
+ fol.order_id,
+ fol.operate_type,
+ fol.process_id,
+ fol.operation_number,
+ fol.quantity,
+ fol.operator,
+ od.product_id,
+ od.product_name,
+ od.width,
+ od.height,
+ o.project,
+ o.customer_name,
+ o.delivery_address,
+ fol.operate_time,
+ fol.`status`,
+ fol.is_state,
+ fol.reviewed,
+ fol.reviewed_time,
+ fol.remarks
+ from (select *
+ from mm.finished_operate_log aa where aa.operate_type = '鍏ュ簱' and aa.status!='宸蹭綔搴�') fol
+ left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
+ left join sd.`order` o on o.order_id=fol.order_id
+ <where>
+ date(fol.operate_time)>=#{startDate} and date(fol.operate_time) <= #{endDate}
+ and (fol.remarks is not null and fol.remarks !="") and (fol.process_id !="" and fol.process_id is not null)
+ <if test="finishedOperateLog.orderId != null and finishedOperateLog.orderId != ''">
+ and fol.order_id regexp #{finishedOperateLog.orderId}
+ </if>
+ <if test="finishedOperateLog.processId != null and finishedOperateLog.processId != ''">
+ and od.process_id regexp #{finishedOperateLog.processId}
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.productId != null and finishedOperateLog.orderDetail.productId != '')">
+ and od.product_id regexp #{finishedOperateLog.orderDetail.productId}
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.productName != null and finishedOperateLog.orderDetail.productName != '')">
+ and od.product_name regexp #{finishedOperateLog.orderDetail.productName}
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.width != null and finishedOperateLog.orderDetail.width != '')">
+ and od.width regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.width},'\\.0+$','')
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.height != null and finishedOperateLog.orderDetail.height != '')">
+ and od.height regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.height},'\\.0+$','')
+ </if>
+ <if test="finishedOperateLog.order !=null and (finishedOperateLog.order.project != null and finishedOperateLog.order.project != '')">
+ and o.project regexp #{finishedOperateLog.order.project}
+ </if>
+ <if test="finishedOperateLog.order !=null and (finishedOperateLog.order.customerName != null and finishedOperateLog.order.customerName != '')">
+ and o.customer_name regexp #{finishedOperateLog.order.customerName}
+ </if>
+ <if test="finishedOperateLog.order !=null and (finishedOperateLog.order.deliveryAddress != null and finishedOperateLog.order.deliveryAddress != '')">
+ and o.delivery_address regexp #{finishedOperateLog.order.deliveryAddress}
+ </if>
+ <if test="finishedOperateLog.remarks != null and finishedOperateLog.remarks != ''">
+ and fol.remarks regexp #{finishedOperateLog.remarksr}
+ </if>
+ </where>
+ group by fol.remarks,od.order_id,fol.process_id
+ order by fol.operate_time desc
+ limit #{offset},#{pageSize};
+ </select>
+
+ <select id="getSelectStorageRecordPintPageTotal">
+ select
+ CEILING(count(zu.id)/#{pageSize}) as 'pageTotal',
+ count(zu.id) as 'total' from (
+ select fol.id
+ from (select *
+ from mm.finished_operate_log aa where aa.operate_type = '鍏ュ簱' and aa.status!='宸蹭綔搴�') fol
+ left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
+ <where>
+ date(fol.operate_time)>=#{startDate} and date(fol.operate_time) <= #{endDate}
+ and (fol.remarks is not null and fol.remarks !="") and (fol.process_id !="" and fol.process_id is not null)
+ <if test="finishedOperateLog.orderId != null and finishedOperateLog.orderId != ''">
+ and fol.order_id regexp #{finishedOperateLog.orderId}
+ </if>
+ <if test="finishedOperateLog.processId != null and finishedOperateLog.processId != ''">
+ and od.process_id regexp #{finishedOperateLog.processId}
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.productId != null and finishedOperateLog.orderDetail.productId != '')">
+ and od.product_id regexp #{finishedOperateLog.orderDetail.productId}
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.productName != null and finishedOperateLog.orderDetail.productName != '')">
+ and od.product_name regexp #{finishedOperateLog.orderDetail.productName}
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.width != null and finishedOperateLog.orderDetail.width != '')">
+ and od.width regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.width},'\\.0+$','')
+ </if>
+ <if test="finishedOperateLog.orderDetail !=null and (finishedOperateLog.orderDetail.height != null and finishedOperateLog.orderDetail.height != '')">
+ and od.height regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.height},'\\.0+$','')
+ </if>
+ <if test="finishedOperateLog.order !=null and (finishedOperateLog.order.project != null and finishedOperateLog.order.project != '')">
+ and o.project regexp #{finishedOperateLog.order.project}
+ </if>
+ <if test="finishedOperateLog.order !=null and (finishedOperateLog.order.customerName != null and finishedOperateLog.order.customerName != '')">
+ and o.customer_name regexp #{finishedOperateLog.order.customerName}
+ </if>
+ <if test="finishedOperateLog.order !=null and (finishedOperateLog.order.deliveryAddress != null and finishedOperateLog.order.deliveryAddress != '')">
+ and o.delivery_address regexp #{finishedOperateLog.order.deliveryAddress}
+ </if>
+ <if test="finishedOperateLog.remarks != null and finishedOperateLog.remarks != ''">
+ and fol.remarks regexp #{finishedOperateLog.remarksr}
+ </if>
+ </where>
+ group by fol.remarks,od.order_id,fol.process_id) as zu
+
+ </select>
+
+<select id="getPrimaryListLimt">
+ select o.order_id,
+ o.customer_name,
+ o.project,
+ fol.remarks,
+ fol.quantity
+ from (select *
+ from mm.finished_operate_log aa where aa.operate_type = '鍏ュ簱' and aa.status!='宸蹭綔搴�') fol
+ left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
+ left join sd.`order` o on o.order_id=fol.order_id
+ where
+ o.order_id=#{orderId} and fol.process_id=#{processId} and fol.remarks=#{remarks}
+ and (fol.remarks is not null and fol.remarks !="") and (fol.process_id !="" and fol.process_id is not null)
+
+ group by fol.remarks,od.order_id,fol.process_id
+ order by fol.operate_time desc
+</select>
+
+<select id="getDetailList">
+ SELECT
+ od.building_number,
+ od.width,
+ od.height,
+ fol.quantity,
+ ROUND(od.width * od.height * fol.quantity / 1000000, 2) AS area
+ FROM
+ (SELECT * FROM mm.finished_operate_log aa WHERE aa.operate_type = '鍏ュ簱' AND aa.STATUS != '宸蹭綔搴�') fol
+ LEFT JOIN sd.order_detail od ON fol.order_id = od.order_id
+ AND fol.operation_number = od.order_number
+ LEFT JOIN sd.`order` o ON o.order_id = fol.order_id
+ JOIN
+ (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
+ UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
+ UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) n
+ ORDER BY
+ fol.operate_time DESC
+ LIMIT 50
+</select>
</mapper>
\ No newline at end of file
diff --git a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
index 2257217..a09957e 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -165,7 +165,46 @@
<if test="optimizeProjectMange.projectNumber != null and optimizeProjectMange.projectNumber != ''">
and p.project_no regexp #{optimizeProjectMange.projectNumber}
</if>
+ <if test="optimizeProjectMange.state!= null">
+ and p.state = #{optimizeProjectMange.state}
+ </if>
order by `p`.`create_time` desc, `p`.`project_no`
</select>
+ <!--淇敼宸ョ▼鐘舵��-->
+ <update id="updateProjectStateMp">
+ update pp.optimize_project as p
+ set p.state = #{state}
+ where p.project_no = #{projectNumber}
+ </update>
+
+ <select id="getProjectListMp">
+ SELECT
+ p.id,
+ p.project_no,
+ p.project_name,
+ p.glass_type,
+ p.glass_thickness,
+ p.type,
+ p.state,
+ p.glass_total,
+ p.glass_total_area,
+ p.process_qty,
+ p.process_cards,
+ p.remark,
+ a.name,
+ p.create_time,
+ p.update_time
+ FROM
+ (
+ pp.optimize_project p
+ LEFT JOIN pp.optimize_admin a ON ((
+ p.creater = a.Id
+ )))
+ WHERE
+ ( p.state = 1 )
+ ORDER BY
+ p.create_time DESC,
+ p.project_no
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0