From df64c34d92cbe8501bbbfe837bc491a47452c0b6 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 09 六月 2025 10:58:19 +0800 Subject: [PATCH] feat(eims): 新增保养工单批量修改功能并优化相关领域对象 --- eims-ui-mobile/env/.env.production | 2 eims-ui-mobile/env/.env | 3 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java | 10 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java | 66 +++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java | 81 ++-- eims-ui-mobile/src/pages/inspect/insp-st.vue | 12 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java | 9 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java | 19 + eims-ui-mobile/src/pages/maint/maint-order.vue | 467 ++++++++++++++++++++-------- eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java | 15 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java | 13 eims-ui-mobile/src/pages/inspect/insp-record.vue | 151 +++++++-- eims-ui-mobile/package.json | 2 eims-ui-mobile/src/pages/repair/repair-fb.vue | 10 eims-ui-mobile/src/pages/fixture/fixture-list.vue | 4 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java | 2 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java | 15 eims-ui-mobile/src/pages/spare/spare-list.vue | 6 eims-ui-mobile/src/service/maint.ts | 7 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java | 2 eims-ui-mobile/env/.env.development | 2 eims-ui-mobile/src/pages/repair/res-list.vue | 2 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java | 10 eims-ui-mobile/src/pages/maint/maint-st.vue | 10 eims-ui-mobile/src/pages/scan/index.vue | 4 eims-ui-mobile/src/pages/equ/equ-list.vue | 4 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java | 15 eims-ui-mobile/src/pages/home/index.vue | 8 eims-ui-mobile/src/pages/repair/req-list.vue | 4 29 files changed, 695 insertions(+), 260 deletions(-) diff --git a/eims-ui-mobile/env/.env b/eims-ui-mobile/env/.env index c2a782d..e417350 100644 --- a/eims-ui-mobile/env/.env +++ b/eims-ui-mobile/env/.env @@ -7,8 +7,7 @@ # h5閮ㄧ讲缃戠珯鐨刡ase锛岄厤缃埌 manifest.config.ts 閲岀殑 h5.router.base VITE_APP_PUBLIC_BASE=/ -VITE_SERVER_BASEURL = 'http://lanpucloud.cn:8091' -VITE_UPLOAD_BASEURL = 'http://lanpucloud.cn:8091/resource/oss/upload' + # 鏈変簺鍚屽鍙兘闇�瑕佸湪寰俊灏忕▼搴忛噷闈㈡牴鎹� develop銆乼rial銆乺elease 鍒嗗埆璁剧疆涓婁紶鍦板潃锛屽弬鑰冧唬鐮佸涓嬨�� # 涓嬮潰鐨勫彉閲忓鏋滄病鏈夎缃紝浼氶粯璁や娇鐢� VITE_SERVER_BASEURL or VITE_UPLOAD_BASEURL diff --git a/eims-ui-mobile/env/.env.development b/eims-ui-mobile/env/.env.development index 04fa273..28d8b10 100644 --- a/eims-ui-mobile/env/.env.development +++ b/eims-ui-mobile/env/.env.development @@ -4,3 +4,5 @@ VITE_DELETE_CONSOLE = false # 鏄惁寮�鍚痵ourcemap VITE_SHOW_SOURCEMAP = true +VITE_SERVER_BASEURL = 'http://192.168.21.236:8080' +VITE_UPLOAD_BASEURL = 'http://192.168.21.236:8080/resource/oss/upload' diff --git a/eims-ui-mobile/env/.env.production b/eims-ui-mobile/env/.env.production index 8a1b50c..b6ac6b3 100644 --- a/eims-ui-mobile/env/.env.production +++ b/eims-ui-mobile/env/.env.production @@ -4,3 +4,5 @@ VITE_DELETE_CONSOLE = true # 鏄惁寮�鍚痵ourcemap VITE_SHOW_SOURCEMAP = false +VITE_SERVER_BASEURL = 'http://lanpucloud.cn:8091' +VITE_UPLOAD_BASEURL = 'http://lanpucloud.cn:8091/resource/oss/upload' diff --git a/eims-ui-mobile/package.json b/eims-ui-mobile/package.json index 06ef415..d581eb7 100644 --- a/eims-ui-mobile/package.json +++ b/eims-ui-mobile/package.json @@ -110,7 +110,7 @@ "qs": "6.5.3", "vue": "3.4.21", "vue-i18n": "^9.1.9", - "wot-design-uni": "^1.4.0", + "wot-design-uni": "^1.9.1", "z-paging": "^2.8.4" }, "devDependencies": { diff --git a/eims-ui-mobile/src/pages/equ/equ-list.vue b/eims-ui-mobile/src/pages/equ/equ-list.vue index e185716..3223131 100644 --- a/eims-ui-mobile/src/pages/equ/equ-list.vue +++ b/eims-ui-mobile/src/pages/equ/equ-list.vue @@ -39,7 +39,7 @@ <view class="flex justify-between items-baseline"> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <text class="ml-1 text-xs">{{ item.assetNo }}</text> + <text class="ml-1 text-sm">{{ item.assetNo }}</text> <wd-tag v-if="item.status === '0'" class="ml-2" bg-color="cyan">璇曠敤</wd-tag> <wd-tag v-else-if="item.status === '1'" class="ml-2" type="success">浣跨敤</wd-tag> <wd-tag v-else-if="item.status === '2'" class="ml-2" type="danger">鍋滅敤</wd-tag> @@ -61,7 +61,7 @@ {{ item.equName }} <text class="text-color-gray ml-2 text-mini">{{ item.modelNo }}</text> </view> - <view class="text-color-gray text-xs mt-1"> + <view class="text-color-gray text-sm mt-1"> {{ item.location }} | {{ item.madeIn }} </view> </view> diff --git a/eims-ui-mobile/src/pages/fixture/fixture-list.vue b/eims-ui-mobile/src/pages/fixture/fixture-list.vue index e245676..5d1dabc 100644 --- a/eims-ui-mobile/src/pages/fixture/fixture-list.vue +++ b/eims-ui-mobile/src/pages/fixture/fixture-list.vue @@ -22,7 +22,7 @@ <view class="flex justify-between items-center"> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <text class="ml-1 text-xs">{{ item.fixtureName }}</text> + <text class="ml-1 text-sm">{{ item.fixtureName }}</text> <text class="ml-1 text-mini text-color-gray">{{ item.assetNo }}</text> </view> @@ -40,7 +40,7 @@ <text class="text-color-gray ml-2 text-mini">瑙勬牸: {{ item.specNo }}</text> <text class="text-color-gray ml-2 text-mini">鍨嬪彿: {{ item.modelNo }}</text> </view> - <view class="text-color-gray text-xs mt-1 flex"> + <view class="text-color-gray text-sm mt-1 flex"> <template v-if="!item.borrowStatus || item.borrowStatus === '0'" > diff --git a/eims-ui-mobile/src/pages/home/index.vue b/eims-ui-mobile/src/pages/home/index.vue index 5bac502..52dcd4e 100644 --- a/eims-ui-mobile/src/pages/home/index.vue +++ b/eims-ui-mobile/src/pages/home/index.vue @@ -61,7 +61,7 @@ <template #title> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <view class="ml-1 text-xs">鏁版嵁鎬昏</view> + <view class="ml-1 text-sm">鏁版嵁鎬昏</view> </view> </template> <view class="flex flex-row justify-around"> @@ -85,7 +85,7 @@ <template #title> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <view class="ml-1 text-xs">蹇嵎鎿嶄綔</view> + <view class="ml-1 text-sm">蹇嵎鎿嶄綔</view> </view> </template> <wd-grid :column="4"> @@ -108,7 +108,7 @@ <template #title> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <view class="ml-1 text-xs">璁惧绠$悊</view> + <view class="ml-1 text-sm">璁惧绠$悊</view> </view> </template> <wd-grid :column="4"> @@ -130,7 +130,7 @@ <template #title> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <view class="ml-1 text-xs">鍙拌处鐩稿叧</view> + <view class="ml-1 text-sm">鍙拌处鐩稿叧</view> </view> </template> <wd-grid :column="4"> diff --git a/eims-ui-mobile/src/pages/inspect/insp-record.vue b/eims-ui-mobile/src/pages/inspect/insp-record.vue index a276635..42d7841 100644 --- a/eims-ui-mobile/src/pages/inspect/insp-record.vue +++ b/eims-ui-mobile/src/pages/inspect/insp-record.vue @@ -6,7 +6,13 @@ } </route> <template> - <z-paging ref="paging" v-model="dataList" :auto="false" @query="queryList" show-refresher-update-time> + <z-paging + ref="paging" + v-model="dataList" + :auto="false" + @query="queryList" + show-refresher-update-time + > <template #top> <wd-navbar title="鐐规璁板綍" @@ -24,10 +30,13 @@ <wd-card type="rectangle"> <template #title> <view class="flex justify-between"> - <view class="flex items-center menu-title-box"> + <view + class="flex items-center menu-title-box center" + style="align-content: center; flex-wrap: wrap" + > <view class="menu-indicator"></view> - <view class="ml-1 text-sm align-center">{{ inspSt.equName }}</view> - <view class="text-color-gray ml-2 text-mini">{{ inspSt.assetNo }}</view> + <view class="ml-1 text-lg align-center">{{ inspSt.equName }}</view> + <view class="text-color-gray ml-2 text-sm">{{ inspSt.assetNo }}</view> </view> <view class="flex items-center"> @@ -38,19 +47,19 @@ <view class="flex h-[140rpx]" items-center> <image class="slot-img text-center" src="/static/images/camera.png" /> <view class="flex-1"> - <view class="text-color-gray text-xs mt-1 flex"> + <view class="text-color-gray text-sm mt-1 flex"> <text class="mr-3">鐐规鎬绘暟: {{ dataCount }}</text> | <text class="mx-3">宸茬偣妫�: {{ checkCount }}</text> | <text class="ml-3">鏈偣妫�: {{ dataCount - checkCount }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text class="mr-3">姝e父: {{ normalNum }}</text> | <text class="mx-3">寮傚父: {{ abNormalNum }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text>鐘舵�侊細</text> <template v-if="dataCount > 0 && dataCount === checkCount"> <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon> @@ -61,7 +70,7 @@ <text class="ml-1">杩涜涓�</text> </template> </view> - <view class="text-color-gray text-xs mt-2 flex">鍒涘缓鏃堕棿: {{ inspSt.createTime }}</view> + <view class="text-color-gray text-sm mt-2 flex">鍒涘缓鏃堕棿: {{ inspSt.createTime }}</view> </view> </view> </wd-card> @@ -71,18 +80,23 @@ <view class="w-full h-[24rpx]"></view> <wd-cell> <template #title> - <text class="text-color-gray">鐐规椤�</text> + <text class="text-color-gray text-sm">鐐规椤�</text> </template> - <wd-button size="small" type="text" @click.stop="toggleCollapse"> - {{ isAllExpanded ? '鍏ㄩ儴鎶樺彔' : '鍏ㄩ儴灞曞紑' }} - </wd-button> + <!-- <wd-button size="small" type="text" @click.stop="toggleCollapse">--> + <!-- {{ isAllExpanded ? '鍏ㄩ儴鎶樺彔' : '鍏ㄩ儴灞曞紑' }}--> + <!-- </wd-button>--> </wd-cell> - <wd-collapse v-model="collSelects" title="鐐规椤�" ref="collapseRef"> - <wd-collapse-item :name="item.id" v-for="(item, index) in dataList" disabled> + <wd-collapse v-model="collSelects" title="鐐规椤�" ref="collapseRef" accordion> + <wd-collapse-item + :name="item.id" + v-for="(item, index) in dataList" + :key="item.id" + :class="getItemClass(item)" + > <template #title="{ expanded, disabled, isFirst }"> <view class="flex justify-between"> - <view class="flex justify-center items-center" style="max-width: 60%;"> - <text class="text-sm" >{{ item.inspName }}</text> + <view class="flex justify-center items-center" style="max-width: 60%"> + <text class="text-sm">{{ item.inspName }}</text> </view> <view class="flex items-center"> @@ -105,18 +119,27 @@ </view> </view> </template> - <view class="text-color-gray text-xs flex justify-between"> + + <view v-if="item.showDesc" class="mt-2"> + <wd-input + v-model="item.inspDesc" + placeholder="璇疯緭鍏ュ紓甯告弿杩�" + clearable + :maxlength="200" + /> + </view> + <view class="text-color-gray text-sm flex justify-between"> <text class="mr-3">鐐规浜�: {{ item.inspUserName }}</text> <text class="mx-3">鐐规鏃堕棿: {{ item.inspTime }}</text> </view> </wd-collapse-item> </wd-collapse> - <view class="w-full h-[24rpx]"></view> - <wd-cell> - <template #title> - <text class="text-color-gray">鍏朵粬</text> - </template> - </wd-cell> + <!-- <view class="w-full h-[24rpx]"></view>--> + <!-- <wd-cell>--> + <!--<!– <template #title>–>--> + <!--<!– <text class="text-color-gray">鍏朵粬</text>–>--> + <!--<!– </template>–>--> + <!-- </wd-cell>--> <view class="w-full h-[1px] bg-base"></view> <wd-input label="杩愯鏃堕棿" @@ -125,6 +148,7 @@ v-model="inspSt.runTimes" placeholder="璇疯緭鍏ヨ繍琛屾椂闂�(h)" inputmode="numeric" + size="large" /> <wd-input label="鏁呴殰鏃堕棿" @@ -133,6 +157,7 @@ v-model="inspSt.faultTimes" placeholder="璇疯緭鍏ユ晠闅滄椂闂�(h)" inputmode="numeric" + size="large" /> <wd-textarea label="鐗硅浜嬮」" @@ -144,13 +169,17 @@ show-word-limit placeholder="璇疯緭鍏ョ壒璁颁簨椤�" clearable + size="large" /> + <!-- 鏂板鎻愪氦鎸夐挳 --> + <view class="flex justify-center mt-4"> + <wd-button type="primary" block size="large" @click="handleClickRight">鎻愪氦</wd-button> + </view> </view> </z-paging> </template> <script setup lang="ts"> -import { ref } from 'vue' import { useUserStore, useAccessStore, useSystemConfigStore } from '@/store' import { isLeader, isOperatorOrRepair } from '@/utils/RoleUtils' import { @@ -194,7 +223,8 @@ const userStore = useUserStore() -const collSelects = ref<string[]>([]) +const collSelects = ref('') +const selectedItems = ref([]) // 鐐规姹囨�绘暟鎹�(涓婁釜椤甸潰浼犲��) const inspSt = reactive<InspSt>({ @@ -237,7 +267,19 @@ } function inspResultClick(item: any) { - // userStore?.userInfo?.userId + console.log('inspResultClick', userStore.userInfo) + // 鑷姩濉厖鐐规浜哄拰鏃堕棿 + item.inspUserName = userStore?.userInfo?.realName || '' + // 淇敼鏃堕棿鏍煎紡涓� YYYY-MM-DD HH:mm:ss + const now = new Date() + item.inspTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}` + + if (item.inspResult === '2') { + item.showDesc = true + } else { + item.showDesc = false + item.inspDesc = '' + } } const goBack = () => { @@ -245,10 +287,9 @@ } function handleClickRight() { - if(isOperatorOrRepair()){ + if (isOperatorOrRepair()) { handleConfirm() } - } const toggleCollapse = () => { @@ -257,10 +298,31 @@ } function handleConfirm() { + console.log('handleConfirm') if (!dataChange.value) { message.alert('璇锋搷浣滃悗鎻愪氦!') return false } + + // 妫�鏌ユ槸鍚︽湁寮傚父椤规湭濉啓鎻忚堪 + const invalidItems = dataList.value.filter( + (item) => item.inspResult === '2' && !item.inspDesc?.trim(), + ) + if (invalidItems.length > 0) { + message.alert('璇峰~鍐欐墍鏈夊紓甯搁」鐨勫紓甯告弿杩�!') + return false + } + + // 杩囨护鍑哄凡閫夋嫨鐨勯」鐩� + selectedItems.value = dataList.value.filter( + (item) => item.inspResult === '1' || item.inspResult === '2', + ) + + if (selectedItems.value.length === 0) { + message.alert('璇疯嚦灏戦�夋嫨涓�涓偣妫�椤�!') + return false + } + message .confirm({ msg: '纭畾鎻愪氦锛�', @@ -278,8 +340,9 @@ } function updateData(resolve: any) { + console.log('updateData', selectedItems.value) const params = { - inspRecordList: dataList.value, + inspRecordList: selectedItems.value, } // 鏇存柊鐐规璁板綍 updateInspRecordBatch(params) @@ -313,8 +376,17 @@ */ function itemClick(item: any) {} +function getItemClass(item: any) { + if (item.inspResult === '1') { + return 'status-normal' + } else if (item.inspResult === '2') { + return 'status-abnormal' + } + return '' +} + watch( - () => [...dataList.value], // 浣跨敤鎵╁睍杩愮畻绗﹀垱寤烘柊鏁扮粍浠ヨЕ鍙戠洃鍚� + () => [...dataList.value, inspSt], // 浣跨敤鎵╁睍杩愮畻绗﹀垱寤烘柊鏁扮粍浠ヨЕ鍙戠洃鍚� (newVal, oldVal) => { if (oldVal.length > 0) { dataChange.value = true @@ -375,7 +447,7 @@ margin-right: 24rpx; } .text-mini { - font-size: 22rpx; + font-size: 24rpx; } .menu-indicator { @@ -394,13 +466,26 @@ background: $uni-color-primary; } :deep(.wd-navbar__text) { - font-size: 26rpx; + font-size: 28rpx; color: white; } :deep(.wd-icon-arrow-left:before), :deep(.wd-navbar__title) { color: white; font-weight: 0; - font-size: 32rpx; + font-size: 34rpx; +} + +// 鏂板鏍峰紡锛氱偣妫�椤硅儗鏅壊 +.status-normal { + background-color: #e6f7ff; // 姝e父鐘舵�佽儗鏅壊锛堢豢鑹诧級 +} + +.status-abnormal { + background-color: #fffbe6; // 寮傚父鐘舵�佽儗鏅壊锛堥粍鑹诧級 +} +:deep(.wd-radio-group) { + // 鏀逛负鏃犺儗鏅壊 + background-color: transparent; } </style> diff --git a/eims-ui-mobile/src/pages/inspect/insp-st.vue b/eims-ui-mobile/src/pages/inspect/insp-st.vue index 9e495be..0eb3a03 100644 --- a/eims-ui-mobile/src/pages/inspect/insp-st.vue +++ b/eims-ui-mobile/src/pages/inspect/insp-st.vue @@ -43,19 +43,19 @@ <view class="flex h-[140rpx]" items-center> <image class="slot-img text-center" src="/static/images/camera.png" /> <view class="flex-1"> - <view class="text-color-gray text-xs mt-1 flex"> - <text class="mr-3">鐐规鎬绘暟: {{ item.recordCount }}</text> + <view class="text-color-gray text-sm mt-1 flex"> + <text class="mr-3">鎬绘暟: {{ item.recordCount }}</text> | <text class="mx-3">宸茬偣妫�: {{ item.checkCount }}</text> | <text class="ml-3">鏈偣妫�: {{ item.unCheckCount }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text class="mr-3">姝e父: {{ item.normalNum }}</text> | <text class="mx-3">寮傚父: {{ item.abNormalNum }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text>鐘舵�侊細</text> <template v-if="item.recordCount === item.checkCount"> <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon> @@ -66,7 +66,7 @@ <text class="ml-1">杩涜涓�</text> </template> </view> - <view class="text-color-gray text-xs mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view> + <view class="text-color-gray text-sm mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view> </view> <wd-button size="small" icon="edit-outline" @click.stop="itemClick(item)">鏄庣粏</wd-button> </view> @@ -164,7 +164,7 @@ height: 40rpx; } .text-mini { - font-size: 22rpx; + font-size: 24rpx; } .menu-indicator { diff --git a/eims-ui-mobile/src/pages/maint/maint-order.vue b/eims-ui-mobile/src/pages/maint/maint-order.vue index 7f2da57..88398ec 100644 --- a/eims-ui-mobile/src/pages/maint/maint-order.vue +++ b/eims-ui-mobile/src/pages/maint/maint-order.vue @@ -39,31 +39,31 @@ <view class="flex justify-between"> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <view class="ml-1 text-sm align-center">{{ maintSt.equName }}</view> - <view class="text-color-gray ml-2 text-mini">{{ maintSt.assetNo }}</view> + <view class="ml-1 text-lg align-center">{{ maintSt.equName }}</view> + <view class="text-color-gray ml-2 text-sm">{{ maintSt.assetNo }}</view> </view> <view class="flex items-center"> - <text class="text-color-gray text-mini">{{ maintSt.planTime }}</text> + <text class="text-color-gray text-sm">{{ maintSt.planTime }}</text> </view> </view> </template> <view class="flex h-[140rpx]" items-center> <image class="slot-img text-center" src="/static/images/camera.png" /> <view class="flex-1"> - <view class="text-color-gray text-xs mt-1 flex"> + <view class="text-color-gray text-sm mt-1 flex"> <text class="mr-3">宸ュ崟鎬绘暟: {{ maintSt.orderCount }}</text> | <text class="mx-3">宸插畬鎴�: {{ maintSt.wcCount }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text class="mr-3">寰呬繚鍏�: {{ maintSt.dbyCount }}</text> | <text class="mx-3">淇濆吇涓�: {{ maintSt.byCount }}</text> | <text class="ml-3">寰呴獙璇�: {{ maintSt.dyzCount }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text>鐘舵�侊細</text> <template v-if="maintSt.status === '1'"> <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon> @@ -75,7 +75,7 @@ </template> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> 鍒涘缓鏃堕棿: {{ maintSt.createTime }} </view> </view> @@ -87,145 +87,118 @@ <view class="w-full h-[24rpx]"></view> <wd-cell class="mb-[2px]"> <template #title> - <text class="text-color-gray">淇濆吇椤�</text> + <text class="text-color-gray text-sm">淇濆吇椤�</text> </template> </wd-cell> - <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id"> + <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id" :class="['status-' + item.maintFun]"> <template #title> - <view class="flex justify-between"> - <view class="flex items-center menu-title-box"> - <view class="menu-indicator"></view> - <view class="ml-1 text-sm align-center"> - <wd-text :text="item.maintName" :lines="1"></wd-text> - </view> + <view class="flex items-center"> + <view class="menu-indicator"></view> + <view class="ml-1 text-sm align-center"> + <wd-text color="black" :text="item.maintName"></wd-text> </view> - - <view class="flex items-center w-[20%] justify-end"> - <text class="text-color-gray text-mini"> - {{ item?.planTime }} - </text> + <!-- 鏂板鐘舵�佹樉绀猴紝缁戝畾鐐瑰嚮浜嬩欢 --> + <view + v-if="item.status === '2'" + class="ml-auto text-sm" + style="width: 60px; text-align: end" + :style="{ color: getStatusColor(item.maintFun) }" + @click.stop="handleUndoAction(item)" + > + {{ getStatusText(item.maintFun) }} </view> </view> </template> - <view class="flex h-[200rpx]" items-center> - <image class="slot-img text-center" src="/static/ico/ico-platform.png" /> - <view class="flex-1 text-color-gray text-xs flex-row"> - <view class="mr-3 mt-2">淇濆吇鍗曞彿: {{ item.maintCode }}</view> - <view class="mr-3 mt-2">璁″垝淇濆吇鏃ユ湡: {{ item.planTime }}</view> - <view class="mr-3 mt-2">淇濆吇寮�濮嬫椂闂�: {{ item.startTime }}</view> - <view class="mr-3 mt-2">淇濆吇缁撴潫鏃堕棿: {{ item.endTime }}</view> - <view class="text-color-gray text-xs mt-2 flex"> - <text>鐘舵�侊細</text> - <template v-if="item.status === '0'"> - <wd-icon class="icon-color-warning" name="books" size="34rpx"></wd-icon> - <text class="ml-1">寰呬繚鍏�</text> - </template> - <template v-else-if="item.status === '1'"> - <wd-icon class="icon-color-base" name="books" size="34rpx"></wd-icon> - <text class="ml-1">淇濆吇涓�</text> - </template> - <template v-else-if="item.status === '2'"> - <wd-icon class="icon-color-purple" name="books" size="34rpx"></wd-icon> - <text class="ml-1">寰呴獙璇�</text> - </template> - <template v-else-if="item.status === '3'"> - <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon> - <text class="ml-1">宸插畬鎴�</text> - </template> - <text class="mx-3">|</text> - <wd-icon class="icon-color-base" name="camera" size="30rpx"></wd-icon> - <text class="ml-1">{{ item.maintUserName }}</text> + + <!-- 鎸夐挳鍖哄煙 --> + <view v-if="item.maintFun == null" class="flex justify-around mt-2"> + <wd-button + type="primary" + size="small" + class="mr-2" + @click.stop="handleAction(item, '0')" + > + 妫�鏌� + </wd-button> + <wd-button + type="success" + size="small" + class="mr-2" + @click.stop="handleAction(item, '1')" + > + 淇濆吇 + </wd-button> + <wd-button type="warning" size="small" @click.stop="handleAction(item, '2')"> + 缁翠慨 + </wd-button> + </view> + + <!-- 姝f枃鍖哄煙 --> + <view v-else class="mt-2"> + <!-- 淇濆吇璇存槑鍖哄煙 --> + <view v-if="item.maintFun === '1'" class="mt-2"> + <wd-input + v-model="item.maintDesc" + placeholder="璇疯緭鍏ヤ繚鍏昏鏄�" + clearable + :maxlength="200" + /> + </view> + + <!-- 缁翠慨璇存槑鍖哄煙 --> + <view v-if="item.maintFun === '2'" class="mt-2"> + <wd-input + v-model="item.repairDesc" + placeholder="璇疯緭鍏ョ淮淇鏄�" + clearable + :maxlength="200" + /> + </view> + + + <!-- 澶囦欢淇℃伅褰曞叆鍖哄煙 --> + <view v-if="item.spareParts && item.spareParts.length > 0" class="mt-2"> + <view + v-for="(part, partIndex) in item.spareParts" + :key="partIndex" + class="flex justify-between mt-1" + > + <wd-input + v-model="part.name" + label="鍚嶇О" + label-width="100rpx" + placeholder="澶囦欢鍚嶇О" + + + /> + <wd-input + v-model="part.quantity" + label="鏁伴噺" label-width="100rpx" + placeholder="鏁伴噺" type="number" :maxlength="5" /> </view> </view> - <!--鎿嶄綔宸ユ垨缁翠慨宸ヨ鑹�--> - <template v-if="isOperatorOrRepair()"> - <view class="flex flex-col justify-between" v-if="item.status === '0'"> - <wd-button - size="small" - icon="edit-outline" - @click.stop="handleStartMaint(item)" - > - 寮�濮嬩繚鍏� - </wd-button> + <!-- 缁翠慨璇存槑鍖哄煙 --> + <view v-if="item.maintFun === '2'" class="mt-2"> + <wd-button type="info" size="small" @click.stop="addSparePart(item, index)"> + 娣诲姞澶囦欢 + </wd-button> + </view> - <wd-button - class="mt-3" - size="small" - icon="edit-outline" - @click.stop="handleMaintFinish(item)" - > - 涓�閿繚鍏� - </wd-button> - </view> - <wd-button - v-if="item.status === '1'" - size="small" - icon="edit-outline" - @click.stop="itemClick(item)" - > - 淇濆吇涓� - </wd-button> - <wd-button - v-if="item.status === '2'" - size="small" - icon="edit-outline" - @click.stop="itemClick(item)" - > - 寰呴獙璇� - </wd-button> - - <wd-button - v-if="item.status === '3'" - size="small" - icon="check-outline" - @click.stop="itemClick(item)" - > - 宸插畬鎴� - </wd-button> - </template> - - <!--绠$悊鍛樿鑹�--> - <template v-else-if="isLeader()"> - <wd-button v-if="item.status === '0'" size="small" icon="warn-bold" disabled> - 寰呬繚鍏� - </wd-button> - <wd-button v-if="item.status === '1'" size="small" icon="warn-bold" disabled> - 淇濆吇涓� - </wd-button> - - <wd-button - v-if="item.status === '2'" - size="small" - icon="edit-outline" - @click.stop="itemClick(item)" - > - 寰呴獙璇� - </wd-button> - - <wd-button - v-if="item.status === '3'" - size="small" - icon="check-outline" - @click.stop="itemClick(item)" - > - 宸插畬鎴� - </wd-button> - </template> + <!-- 淇濆吇浜哄拰淇濆吇鏃堕棿鍖哄煙 --> + <view class="flex justify-between mt-2"> + <text>淇濆吇浜�: {{ item.maintUserName }}</text> + <text>淇濆吇鏃堕棿: {{ item.endTime }}</text> + </view> </view> </wd-card> - <wd-cell> - <template #title> - <text class="text-color-gray">鍏朵粬淇℃伅</text> - </template> - </wd-cell> - <view class="h-[2px] w-full bg-base"></view> + <wd-textarea label="鐗硅浜嬮」" label-width="200rpx" type="textarea" - v-model="maintSt.specialNote" + v-model="specialNote" auto-height :maxlength="200" show-word-limit @@ -233,22 +206,63 @@ clearable /> </view> + <!-- 鏂板鎻愪氦鎸夐挳 --> + <view class="flex justify-center mt-4"> + <wd-button type="primary" block size="large" @click="handleClickRight">鎻愪氦</wd-button> + </view> </z-paging> + + <!-- 澶囦欢閫夋嫨寮瑰嚭灞� --> + <wd-popup v-model="showSparePopup" position="bottom" height="33.33vh"> + <view class="flex justify-between p-2 bg-white"> + <wd-button type="text" @click="closeSparePopup">鍙栨秷</wd-button> + <wd-button type="text" @click="addOtherSparePart">鍏朵粬</wd-button> + + </view> + <wd-input + v-model="searchKeyword" + placeholder="璇疯緭鍏ュ浠跺悕绉版垨鍨嬪彿" + clearable + @input="filterSpareParts" + /> + <view class="p-2"> + <view + v-for="(part, index) in sparePartsList" + :key="index" + class="flex justify-between items-center p-2 border-b" + @click="selectFilteredSparePart(part)" + > + <text>{{ part.name }} ({{ part.code }})</text> + <text>鍓╀綑: {{ part.actualStock }}</text> + </view> + </view> + </wd-popup> + + </template> + <script setup lang="ts"> import type { MaintStVO } from '@/service/maint.d' -import { getMaintSt, getMaintStOrderList, updateMaintOrder, updateMaintSt } from '@/service/maint' +import { getMaintSt, getMaintStOrderList, updateMaintOrder, updateMaintSt, updateMaintOrderBatch } from '@/service/maint' import { ref, reactive } from 'vue' import { useToast, useMessage } from 'wot-design-uni' import { isLeader, isOperatorOrRepair } from '@/utils/RoleUtils' import { formatDate } from '@/utils/DateUtils' +import { useUserStore } from "@/store"; +import { getSpareList } from '@/service/spare' + const message = useMessage() const toast = useToast() - +const userStore = useUserStore() const paging = ref(null) const dataList = ref([]) const maintStId = ref('') - +const showSparePopup = ref(false) +const selectedPartIndex = ref(-1) +const sparePartsList = ref([]) +const searchKeyword = ref('') +const dataChange = ref(false) +const specialNote = ref('') interface QueryParams { pageNum: number pageSize: number @@ -272,7 +286,7 @@ const queryList = (pageNum?: number, pageSize?: number) => { const params: QueryParams = { pageNum, - pageSize, + pageSize: 30, maintCode: maintCode.value, } getMaintStOrderList(params) @@ -307,6 +321,65 @@ uni.navigateTo({ url: `/pages/maint/order-detail?id=${item.id}`, }) +} + +// 澶囦欢閫夋嫨鐩稿叧閫昏緫 +function addSparePart(item: any, index: number) { + if (!item.spareParts) { + item.spareParts = [] + } + selectedPartIndex.value = index + // item.spareParts.push({ name: '', quantity: '' }) + selectSparePart(item) +} + +function selectSparePart(item: any) { + showSparePopup.value = true + + loadSpareParts() +} + +function loadSpareParts(value?: string) { + getSpareList({ name: value }).then((res: any) => { + sparePartsList.value = res.rows + + }) +} + +function filterSpareParts() { + if (!searchKeyword.value) { + loadSpareParts() + } else { + loadSpareParts(searchKeyword.value) + } +} + +function selectFilteredSparePart(part: any) { + dataList.value[selectedPartIndex.value].spareParts.push({ + id: part.id, + name: part.name, + quantity: '', + }) + closeSparePopup() +} + +function closeSparePopup() { + showSparePopup.value = false + selectedPartIndex.value = -1 + searchKeyword.value = '' +} + +function confirmSpareSelection() { + closeSparePopup() +} + +function addOtherSparePart() { + dataList.value[selectedPartIndex.value].spareParts.push({ + id: '', + name: '', + quantity: '', + }) + closeSparePopup(); } /** @@ -380,19 +453,36 @@ } function handleUpdateMaintSt() { - if (maintSt.orderCount !== maintSt.wcCount) { - toast.info('璇峰厛瀹屾垚鎵�鏈変繚鍏婚」锛�') + // if (maintSt.orderCount !== maintSt.wcCount) { + // toast.info('璇峰厛瀹屾垚鎵�鏈変繚鍏婚」锛�') + // return false + // } + // 鍏堝垽鏂繚鍏婚」鏄惁鏈夋洿鏀� + console.log('handleUPdateMaintst', dataChange.value) + if (!dataChange.value) { + message.alert('璇锋搷浣滃悗鎻愪氦!') return false } + // 杩囨护鎺� maintFun涓虹┖鐨勪繚鍏婚」 + const submitList = dataList.value.filter((item) => item.maintFun != null) + // 濡傛灉maintFun涓�1鐨勫垯鍒ゆ柇淇濆吇璇存槑涓嶈兘涓虹┖锛屽鏋滀负2鍒欏垽鏂淮淇鏄庝笉鑳戒负绌� + if (submitList.some((item) => item.maintFun === '1' && !item.maintDesc)) { + toast.info('璇峰~鍐欎繚鍏昏鏄庯紒') + return false + } else if (submitList.some((item) => item.maintFun === '2' && !item.repairDesc)) { + toast.info('璇峰~鍐欑淮淇鏄庯紒') + return false + } + const data: any = Object.assign( {}, { id: maintSt.id, orderCount: maintSt.orderCount, - wcCount: maintSt.wcCount, + wcCount: submitList.length, status: maintSt.status, - specialNote: maintSt.specialNote, + specialNote: specialNote.value, }, ) if (data.orderCount === data.wcCount) { @@ -403,6 +493,7 @@ msg: '纭畾鏇存柊宸ュ崟姹囨�绘暟鎹紵', title: '鎻愮ず', beforeConfirm: ({ resolve }) => { + updateMaintOrderBatch({maintOrderList:submitList}) updateMaintSt(data) .then((res: any) => { resolve(true) @@ -457,6 +548,90 @@ maintStId.value = options.id reloadData() }) +watch( + () => [...dataList.value, specialNote.value ], // 浣跨敤鎵╁睍杩愮畻绗﹀垱寤烘柊鏁扮粍浠ヨЕ鍙戠洃鍚� + (newVal, oldVal) => { + if (oldVal.length > 0) { + console.log('dataChange',oldVal, newVal) + dataChange.value = true + } + }, + { deep: true }, +) +/** + * 澶勭悊鎸夐挳鐐瑰嚮浜嬩欢 + * @param item 淇濆吇椤� + * @param action 鎿嶄綔绫诲瀷锛坈heck/check/maintain/repair锛� + */ +function handleAction(item: any, action: number) { + // 璁剧疆褰撳墠閫変腑鐨勬搷浣滅被鍨� + item.maintFun = action + item.status = '2' + // 鑷姩濉厖淇濆吇浜哄拰鏃堕棿 + item.maintUserName = userStore?.userInfo?.realName || '' + const now = new Date() + item.endTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`; + console.log('handleAction', item) +} + +/** + * 鎾ら攢淇濆吇鎿嶄綔 + * @param item 淇濆吇椤� + */ +function handleUndoAction(item: any) { + message + .confirm({ + msg: '纭畾鎾ら攢褰撳墠鎿嶄綔锛�', + title: '鎻愮ず', + beforeConfirm: ({ resolve }) => { + // 閲嶇疆鐘舵�佸拰鐩稿叧瀛楁 + item.maintFun = null; + item.status = '0'; + item.maintDesc = ''; + item.repairDesc = ''; + item.spareParts = []; + item.maintUserName = ''; + item.endTime = ''; + resolve(true); + }, + }) + .then(() => { + toast.success('鎿嶄綔宸叉挙閿�'); + dataChange.value = true; + }) + .catch((error) => { + console.log(error); + }); +} + +// 鏂板鏂规硶锛氳幏鍙栫姸鎬佹枃鏈� +function getStatusText(maintFun: string): string { + switch (maintFun) { + case '0': + return '宸叉鏌�'; + case '1': + return '宸蹭繚鍏�'; + case '2': + return '宸茬淮淇�'; + default: + return ''; + } +} + +// 鏂板鏂规硶锛氳幏鍙栫姸鎬侀鑹� +function getStatusColor(maintFun: string): string { + switch (maintFun) { + case '0': + return '#007bff'; // 妫�鏌ユ寜閽鑹� + case '1': + return '#28a745'; // 淇濆吇鎸夐挳棰滆壊 + case '2': + return '#ffc107'; // 缁翠慨鎸夐挳棰滆壊 + default: + return '#000'; + } +} + </script> <style scoped lang="scss"> @@ -472,7 +647,7 @@ } .text-mini { - font-size: 22rpx; + font-size: 24rpx; } .menu-indicator { @@ -494,7 +669,7 @@ } :deep(.wd-navbar__text) { - font-size: 26rpx; + font-size: 28rpx; color: white; } @@ -502,6 +677,20 @@ :deep(.wd-navbar__title) { color: white; font-weight: 0; - font-size: 32rpx; + font-size: 34rpx; +} + +// 鏂板鏍峰紡锛氬姩鎬佽缃崱鐗囪儗鏅壊 +:deep(.wd-card) { + transition: background-color 0.3s ease; + &.status-0 { + background-color: #e6f7ff; // 妫�鏌ョ姸鎬佽儗鏅壊 + } + &.status-1 { + background-color: #f6ffed; // 淇濆吇鐘舵�佽儗鏅壊 + } + &.status-2 { + background-color: #fffbe6; // 缁翠慨鐘舵�佽儗鏅壊 + } } </style> diff --git a/eims-ui-mobile/src/pages/maint/maint-st.vue b/eims-ui-mobile/src/pages/maint/maint-st.vue index c535f0b..6704e0b 100644 --- a/eims-ui-mobile/src/pages/maint/maint-st.vue +++ b/eims-ui-mobile/src/pages/maint/maint-st.vue @@ -43,19 +43,19 @@ <view class="flex h-[140rpx]" items-center> <image class="slot-img text-center" src="/static/images/camera.png" /> <view class="flex-1"> - <view class="text-color-gray text-xs mt-1 flex"> + <view class="text-color-gray text-sm mt-1 flex"> <text class="mr-3">宸ュ崟鎬绘暟: {{ item.orderCount }}</text> | <text class="mx-3">宸插畬鎴�: {{ item.wcCount }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text class="mr-3">寰呬繚鍏�: {{ item.dbyCount }}</text> | <text class="mx-3">淇濆吇涓�: {{ item.byCount }}</text> | <text class="ml-3">寰呴獙璇�: {{ item.dyzCount }}</text> </view> - <view class="text-color-gray text-xs mt-2 flex"> + <view class="text-color-gray text-sm mt-2 flex"> <text>鐘舵�侊細</text> <template v-if="item.status === '1'"> <wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon> @@ -66,7 +66,7 @@ <text class="ml-1">杩涜涓�</text> </template> </view> - <view class="text-color-gray text-xs mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view> + <view class="text-color-gray text-sm mt-2 flex">鍒涘缓鏃堕棿: {{ item.createTime }}</view> </view> <wd-button size="small" icon="edit-outline" @click.stop="itemClick(item)">鏄庣粏</wd-button> </view> @@ -208,7 +208,7 @@ height: 40rpx; } .text-mini { - font-size: 22rpx; + font-size: 24rpx; } .menu-indicator { diff --git a/eims-ui-mobile/src/pages/repair/repair-fb.vue b/eims-ui-mobile/src/pages/repair/repair-fb.vue index ae8aaea..125226f 100644 --- a/eims-ui-mobile/src/pages/repair/repair-fb.vue +++ b/eims-ui-mobile/src/pages/repair/repair-fb.vue @@ -29,20 +29,20 @@ <template #title> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <view class="ml-1 text-xs">缁翠慨姒傝</view> + <view class="ml-1 text-sm">缁翠慨姒傝</view> </view> </template> <wd-steps :active="repairRecordList.length" vertical class="px-4"> <wd-step v-for="(item, index) in repairRecordList"> <template #title> <view class="flex items-center menu-title-box"> - <view class="ml-1 text-xs">{{ item?.operaResult }}</view> + <view class="ml-1 text-sm">{{ item?.operaResult }}</view> </view> </template> <template #description> <view class="flex items-center menu-title-box"> - <view class="ml-1 text-xs">{{ item?.operaUserName }}</view> - <view class="ml-1 text-xs">{{ item?.handleTime }}</view> + <view class="ml-1 text-sm">{{ item?.operaUserName }}</view> + <view class="ml-1 text-sm">{{ item?.handleTime }}</view> </view> </template> </wd-step> @@ -53,7 +53,7 @@ <template #title> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <view class="ml-1 text-xs">缁翠慨璇勪环</view> + <view class="ml-1 text-sm">缁翠慨璇勪环</view> </view> </template> <wd-cell title="缁翠慨婊℃剰搴�"> diff --git a/eims-ui-mobile/src/pages/repair/req-list.vue b/eims-ui-mobile/src/pages/repair/req-list.vue index 5759003..c93a9ea 100644 --- a/eims-ui-mobile/src/pages/repair/req-list.vue +++ b/eims-ui-mobile/src/pages/repair/req-list.vue @@ -52,7 +52,7 @@ <view class="flex justify-between items-center"> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <text class="ml-1 text-xs">{{ item.code }}</text> + <text class="ml-1 text-sm">{{ item.code }}</text> </view> <view> @@ -114,7 +114,7 @@ <text>鎶ヤ慨浜�: {{ item.reqUserName }}</text> </view> </view> - <view class="text-color-gray text-xs mt-1"> + <view class="text-color-gray text-sm mt-1"> {{ item.location }} {{ item.madeIn }} </view> </view> diff --git a/eims-ui-mobile/src/pages/repair/res-list.vue b/eims-ui-mobile/src/pages/repair/res-list.vue index 087fb22..914a751 100644 --- a/eims-ui-mobile/src/pages/repair/res-list.vue +++ b/eims-ui-mobile/src/pages/repair/res-list.vue @@ -50,7 +50,7 @@ <view class="flex justify-between items-center"> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <text class="ml-1 text-xs">{{ item.resCode }}</text> + <text class="ml-1 text-sm">{{ item.resCode }}</text> <text class="text-color-gray ml-2 text-mini">鎺ュ崟:{{ item.createTime }}</text> </view> diff --git a/eims-ui-mobile/src/pages/scan/index.vue b/eims-ui-mobile/src/pages/scan/index.vue index 0d2ee20..b9ccad5 100644 --- a/eims-ui-mobile/src/pages/scan/index.vue +++ b/eims-ui-mobile/src/pages/scan/index.vue @@ -19,7 +19,7 @@ <view class="flex justify-between items-baseline"> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <text class="ml-1 text-xs">{{ model.assetNo }}</text> + <text class="ml-1 text-sm">{{ model.assetNo }}</text> <wd-tag v-if="model.status === '0'" class="ml-2" bg-color="cyan">璇曠敤</wd-tag> <wd-tag v-else-if="model.status === '1'" class="ml-2" type="success">浣跨敤</wd-tag> <wd-tag v-else-if="model.status === '2'" class="ml-2" type="danger">鍋滅敤</wd-tag> @@ -41,7 +41,7 @@ {{ model.equName }} <text class="text-color-gray ml-2 text-mini">{{ model.modelNo }}</text> </view> - <view class="text-color-gray text-xs mt-1"> + <view class="text-color-gray text-sm mt-1"> {{ model.location }} | {{ model.madeIn }} </view> </view> diff --git a/eims-ui-mobile/src/pages/spare/spare-list.vue b/eims-ui-mobile/src/pages/spare/spare-list.vue index 6d2fd19..56d23f4 100644 --- a/eims-ui-mobile/src/pages/spare/spare-list.vue +++ b/eims-ui-mobile/src/pages/spare/spare-list.vue @@ -22,7 +22,7 @@ <view class="flex justify-between items-baseline"> <view class="flex items-center menu-title-box"> <view class="menu-indicator"></view> - <text class="ml-1 text-xs">{{ item.code }}</text> + <text class="ml-1 text-sm">{{ item.code }}</text> </view> <view> @@ -38,10 +38,10 @@ {{ item.name }} <text class="text-color-gray ml-2 text-mini">{{ item.modelNo }}</text> </view> - <view class="text-color-gray text-xs mt-1"> + <view class="text-color-gray text-sm mt-1"> 搴撳瓨: {{ item.actualStock }} | 鍗曚环: {{ item.referPrice }} </view> - <view class="text-color-gray text-xs mt-1"> + <view class="text-color-gray text-sm mt-1"> 渚涘簲鍟�: {{ item.supplier }} </view> </view> diff --git a/eims-ui-mobile/src/service/maint.ts b/eims-ui-mobile/src/service/maint.ts index 4ffeaa9..efa2c6d 100644 --- a/eims-ui-mobile/src/service/maint.ts +++ b/eims-ui-mobile/src/service/maint.ts @@ -48,3 +48,10 @@ export const updateMaintOrder = (data: any) => { return http.put<void>('/eims/maintOrder', data) } + +/** + * 鎵归噺鏇存柊淇濆吇宸ュ崟 + */ +export const updateMaintOrderBatch = (data: any) => { + return http.put<void>('/eims/maintOrder/editBatch', data) +} diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java index b659746..e1f3e62 100644 --- a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java +++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java @@ -219,6 +219,16 @@ String CK = "2"; // 棰嗙敤鍑哄簱 } + /** + * 淇濆吇鏂规硶 + */ + String MAINT_METHOD = "maint_method"; + interface MAINT_METHOD_DETAIL { + String CHECK = "0"; + String MAINT = "1"; + String REPAIR = "2"; + } + diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java index b633ce4..fe4f775 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java @@ -11,8 +11,10 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.eims.domain.bo.MaintOrderBo; import org.dromara.eims.domain.vo.MaintOrdeGroupVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; @@ -79,7 +81,14 @@ params.put("beginPlanTime",startOfMonth); params.put("endPlanTime",endOfMonth); - return eimsMaintOrderService.queryPageListCustom(bo, pageQuery); + TableDataInfo<EimsMaintOrderVo> tableDataInfo = eimsMaintOrderService.queryPageListCustom(bo, pageQuery); + tableDataInfo.getRows().forEach(e -> { + // 濡傛灉淇濆吇鏂规硶鏄淮淇紝鏌ヨ鍏宠仈鐨勫浠� + if (DictConstants.MAINT_METHOD_DETAIL.REPAIR.equals(e.getMaintFun())) { + e.setSpareParts(eimsMaintOrderService.querySpareParts(e.getMaintCode())); + } + }); + return tableDataInfo; } /** @@ -127,6 +136,14 @@ return toAjax(eimsMaintOrderService.updateByBo(bo)); } + @SaCheckPermission("eims:maintOrder:edit") + @Log(title = "淇濆吇宸ュ崟-鎵归噺淇敼", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("editBatch") + public R<Void> editBatch(@Validated(EditGroup.class) @RequestBody MaintOrderBo bo) { + return toAjax(eimsMaintOrderService.updateBatchByBo(bo)); + } + /** * 鍒犻櫎淇濆吇宸ュ崟 * diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java index af7cf77..8aae23b 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java @@ -113,5 +113,14 @@ */ private String remark; + /** + * 淇濆吇鏂瑰紡锛�0-妫�鏌ワ紝1-淇濆吇锛�2-缁翠慨锛� + */ + private String maintFun; + + /** + * 缁翠慨璇存槑 + */ + private String repairDesc; } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java index 0ff70f0..625c6ee 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java @@ -9,7 +9,10 @@ import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.util.Date; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.eims.domain.EimsSpareInout; /** * 淇濆吇宸ュ崟涓氬姟瀵硅薄 eims_maint_order @@ -114,9 +117,21 @@ */ private String remark; + /** + * 淇濆吇鏂瑰紡锛�0-妫�鏌ワ紝1-淇濆吇锛�2-缁翠慨锛� + */ + private String maintFun; + + /** + * 缁翠慨璇存槑 + */ + private String repairDesc; // 鍏宠仈琛ㄥ瓧娈� private String equName; + private String maintUserName; + + private List<EimsSpareBo> spareParts; } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java index f46d491..a996c44 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java @@ -33,7 +33,6 @@ /** * 绫诲瀷 */ - @NotNull(message = "绫诲瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) private Long type; /** @@ -45,7 +44,6 @@ /** * 澶囦欢缂栫爜 */ - @NotBlank(message = "澶囦欢缂栫爜涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) private String code; /** diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java index 5f62b5a..f68725b 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java @@ -21,7 +21,7 @@ public class EimsSpareInoutdtBo extends BaseEntity { /** - * + * */ @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) private Long id; @@ -29,7 +29,7 @@ /** * 鍑哄簱鍗曟垨鍏ュ簱鍗昳d */ - @NotNull(message = "鍑哄簱鍗曟垨鍏ュ簱鍗昳d涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long inoutId; /** @@ -41,13 +41,13 @@ /** * 涔嬪墠搴撳瓨 */ - @NotNull(message = "涔嬪墠搴撳瓨涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long beforeStock; /** * 瀹為檯搴撳瓨 */ - @NotNull(message = "瀹為檯搴撳瓨涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long actualStock; /** @@ -59,13 +59,13 @@ /** * 鍗曚环 */ - @NotNull(message = "鍗曚环涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long unitPrice; /** * 閲戦 */ - @NotNull(message = "閲戦涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long amount; /** @@ -74,4 +74,7 @@ private String remark; + private String spareName; + + } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java new file mode 100644 index 0000000..24e3fe9 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/MaintOrderBo.java @@ -0,0 +1,10 @@ +package org.dromara.eims.domain.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class MaintOrderBo { + private List<EimsMaintOrderBo> maintOrderList; +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java index 4ba8284..1a43656 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java @@ -12,11 +12,12 @@ import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.eims.domain.bo.EimsSpareBo; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -155,5 +156,17 @@ @ExcelProperty(value = "澶囨敞") private String remark; + /** + * 淇濆吇鏂瑰紡锛�0-妫�鏌ワ紝1-淇濆吇锛�2-缁翠慨锛� + */ + private String maintFun; + + /** + * 缁翠慨璇存槑 + */ + private String repairDesc; + + private List<EimsSpareVo> spareParts; + } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java index a4203cf..90d66ee 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java @@ -94,4 +94,6 @@ private String unit; + + } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java index 0496614..61b350c 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java @@ -1,9 +1,12 @@ package org.dromara.eims.service; +import org.dromara.eims.domain.bo.EimsSpareBo; +import org.dromara.eims.domain.bo.MaintOrderBo; import org.dromara.eims.domain.vo.EimsMaintOrderVo; import org.dromara.eims.domain.bo.EimsMaintOrderBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.eims.domain.vo.EimsSpareVo; import org.dromara.eims.domain.vo.MaintOrdeGroupVo; import java.util.Collection; @@ -59,6 +62,14 @@ Boolean updateByBo(EimsMaintOrderBo bo); /** + * 鎵归噺淇敼淇濆吇宸ュ崟 + * + * @param bo 淇濆吇宸ュ崟涓氬姟瀵硅薄 + * @return 鎿嶄綔缁撴灉 + */ + boolean updateBatchByBo(MaintOrderBo bo); + + /** * 鏍¢獙骞舵壒閲忓垹闄や繚鍏诲伐鍗曚俊鎭� * * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎 @@ -83,4 +94,6 @@ * @return */ TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery); + + List<EimsSpareVo> querySpareParts(String id); } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java index b01acb4..c85145d 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java @@ -20,17 +20,19 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.eims.domain.EimsMaintPlan; -import org.dromara.eims.domain.bo.EimsMaintPlanBo; -import org.dromara.eims.domain.vo.EimsEquVo; -import org.dromara.eims.domain.vo.MaintOrdeGroupVo; +import org.dromara.eims.domain.EimsSpareInout; +import org.dromara.eims.domain.bo.EimsSpareBo; +import org.dromara.eims.domain.bo.EimsSpareInoutBo; +import org.dromara.eims.domain.bo.MaintOrderBo; +import org.dromara.eims.domain.vo.*; import org.dromara.eims.mapper.EimsEquMapper; import org.dromara.eims.mapper.EimsMaintPlanMapper; +import org.dromara.eims.service.IEimsSpareInoutService; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.mapper.SysDeptMapper; import org.springframework.stereotype.Service; import org.dromara.eims.domain.bo.EimsMaintOrderBo; -import org.dromara.eims.domain.vo.EimsMaintOrderVo; import org.dromara.eims.domain.EimsMaintOrder; import org.dromara.eims.mapper.EimsMaintOrderMapper; import org.dromara.eims.service.IEimsMaintOrderService; @@ -52,6 +54,7 @@ private final EimsMaintPlanMapper planMapper; private final SysDeptMapper sysDeptMapper; private final EimsEquMapper equMapper; + private final IEimsSpareInoutService spareInoutService; /** * 鏌ヨ淇濆吇宸ュ崟 @@ -293,6 +296,45 @@ } /** + * 鎵归噺淇敼淇濆吇宸ュ崟 + * + * @param bo 淇濆吇宸ュ崟 + * @return 鏄惁淇敼鎴愬姛 + */ + @Override + public boolean updateBatchByBo(MaintOrderBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + List<EimsMaintOrder> list = MapstructUtils.convert(bo.getMaintOrderList(), EimsMaintOrder.class); + list.forEach(e -> { + e.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG); + e.setEndTime(new Date()); + e.setMaintUser(loginUser.getUserId()); + e.setUpdateTime(new Date()); + }); + bo.getMaintOrderList().forEach(item -> { + // 鍒ゆ柇澶囦欢鍒楄〃鏄惁涓虹┖锛屼笉涓虹┖鍒欐柊澧炰竴涓浠跺嚭搴撳崟锛屽悓鏃跺鍔犲嚭搴撴槑缁� + if (item.getSpareParts() != null && item.getSpareParts().size() > 0) { + EimsSpareInoutBo spareInoutBo = new EimsSpareInoutBo(); + // 鏍规嵁鏃ユ湡鐢熸垚鍗曞彿锛屾牸寮忎负CK+鏃ユ湡+娴佹按鍙� + spareInoutBo.setOrderCode("CK"+DateUtils.dateTimeNow("yyyyMMddHHmmss")); + spareInoutBo.setOrderTime(new Date()); + spareInoutBo.setType(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK); + spareInoutBo.setPartnerName(loginUser.getNickname()); + spareInoutBo.setSpareList(item.getSpareParts()); + spareInoutBo.setChargeUser(loginUser.getUserId()); + spareInoutBo.setChargeDept(loginUser.getDeptId()); + spareInoutBo.setAssociatedOrder(item.getMaintCode()); + // 淇濆瓨杩涙暟鎹簱 + Boolean b = spareInoutService.insertByBo(spareInoutBo); + + + } + }); + + return baseMapper.updateBatchById(list); + } + + /** * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 */ private void validEntityBeforeSave(EimsMaintOrder entity){ @@ -326,4 +368,20 @@ } return String.join(StringUtils.SEPARATOR, list); } + + + @Override + public List<EimsSpareVo> querySpareParts(String code) { + // 鏌ヨ鍏宠仈鐨勫浠讹紝鍏崇郴濡備笅锛氬浠跺嚭鍏ュ簱鍗曠殑associatedOrder 鍏宠仈浼犲叆鐨刢ode,澶囦欢鍑哄叆搴撴槑缁嗛�氳繃鍑哄叆搴撳崟鐨刬d鍏宠仈锛屽浠跺悕绉伴�氳繃鍑哄叆搴撴槑缁嗕腑鐨剆pareId鍏宠仈 + + EimsSpareInoutBo bo = new EimsSpareInoutBo(); + bo.setAssociatedOrder(code); + List<EimsSpareInoutVo> list = spareInoutService.queryList(bo); + if (!list.isEmpty()) { + // 鏌ヨ澶囦欢鏄庣粏鍜屽悕绉� + EimsSpareInoutVo eimsSpareInoutVo = spareInoutService.queryById(list.get(0).getId()); + return eimsSpareInoutVo.getSpareList(); + } + return List.of(); + } } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java index 334eb44..28f0446 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java @@ -136,58 +136,61 @@ if (flag) { bo.setId(add.getId()); } - //鍏ュ簱锛嬪簱瀛� 鍑哄簱-搴撳瓨 锛堥粯璁ゅ叆搴擄級 - int OperationType; - - //鍑哄簱 - if(bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK)){ - OperationType = -1; - } else { - OperationType = 1; - } + // 鍏ュ簱锛嬪簱瀛� 鍑哄簱-搴撳瓨 锛堥粯璁ゅ叆搴擄級 + int OperationType = bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK) ? -1 : 1; List<EimsSpareBo> spareList = Optional.ofNullable(bo.getSpareList()).orElse(new ArrayList<>()); - // 鎻掑叆鍑哄簱鏄庣粏 - List<EimsSpareInoutdt> dtList = spareList.stream() - .map(eimsSpareBo -> { - EimsSpareInoutdt dt = new EimsSpareInoutdt(); - dt.setInoutId(add.getId()); - dt.setSpareId(eimsSpareBo.getId()); - dt.setBeforeStock(eimsSpareBo.getActualStock()); - // 娉ㄦ剰鍏ュ簱鍑哄簱 - dt.setActualStock(eimsSpareBo.getActualStock() + (eimsSpareBo.getQuantity() * OperationType)); - dt.setQuantity(eimsSpareBo.getQuantity()); - // 璁剧疆鍗曚环鍜岄噾棰� - Optional.ofNullable(eimsSpareBo.getReferPrice()).ifPresent(referPrice -> { - dt.setUnitPrice(referPrice); - dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity()))); - }); + // 鍚堝苟涓ゆ寰幆涓轰竴娆″惊鐜� + List<EimsSpareInoutdt> dtList = new ArrayList<>(); + List<EimsSpare> updateSpareList = new ArrayList<>(); - return dt; - }) - .toList(); + for (EimsSpareBo eimsSpareBo : spareList) { + EimsSpare spare = spareMapper.selectById(eimsSpareBo.getId()); + if (spare == null) { + spare = new EimsSpare(); + spare.setName(eimsSpareBo.getName()); + spare.setCode(eimsSpareBo.getCode()); + spare.setActualStock(100L); + spareMapper.insert(spare); + eimsSpareBo.setId(spare.getId()); + } + + // 鎻掑叆鍑哄簱鏄庣粏 + EimsSpareInoutdt dt = new EimsSpareInoutdt(); + dt.setInoutId(add.getId()); + dt.setSpareId(spare.getId()); + dt.setBeforeStock(spare.getActualStock()); + dt.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType)); + dt.setQuantity(eimsSpareBo.getQuantity()); + + // 璁剧疆鍗曚环鍜岄噾棰� + Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> { + dt.setUnitPrice(referPrice); + dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity()))); + }); + dtList.add(dt); + + // 鏇存柊澶囦欢搴撳瓨 + EimsSpare updatedSpare = new EimsSpare(); + updatedSpare.setId(spare.getId()); + updatedSpare.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType)); + Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> { + updatedSpare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(updatedSpare.getActualStock()))); + }); + updateSpareList.add(updatedSpare); + } // 鎵归噺鎻掑叆鏁版嵁 if (!dtList.isEmpty()) { inoutdtMapper.insertBatch(dtList); } - // 鏇存柊澶囦欢鐨勫簱瀛� - List<EimsSpare> updateSpareList = spareList.stream().map(spareBo -> { - EimsSpare spare = new EimsSpare(); - spare.setId(spareBo.getId()); - spare.setActualStock(spareBo.getActualStock() + (spareBo.getQuantity() * OperationType)); - // 璁剧疆鍗曚环鍜岄噾棰� - Optional.ofNullable(spareBo.getReferPrice()).ifPresent(referPrice -> { - spare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(spare.getActualStock()))); - }); - return spare; - }).toList(); - + // 鎵归噺鏇存柊澶囦欢搴撳瓨 if (!updateSpareList.isEmpty()) { spareMapper.updateBatchById(updateSpareList); } + return flag; } -- Gitblit v1.9.3