From 66e943c91e133eec5a0822ea22fd92cbc04bc9f3 Mon Sep 17 00:00:00 2001 From: zhuguifei <312353457@qq.com> Date: 星期三, 12 三月 2025 16:04:14 +0800 Subject: [PATCH] 保养工单汇总 --- eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java | 107 +++ eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts | 62 ++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java | 74 ++ eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue | 109 +++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java | 2 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml | 26 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java | 52 - eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue | 223 +++++++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java | 30 eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts | 1 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java | 109 +++ eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx | 6 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java | 220 +++++++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java | 5 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java | 6 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java | 9 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java | 15 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java | 7 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java | 70 ++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java | 77 ++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java | 42 - eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts | 85 ++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java | 106 +++ eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java | 11 eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts | 12 eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx | 194 ++++++ eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml | 7 eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts | 29 eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue | 6 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java | 69 ++ 30 files changed, 1,675 insertions(+), 96 deletions(-) diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts new file mode 100644 index 0000000..0866850 --- /dev/null +++ b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts @@ -0,0 +1,62 @@ +import type { MaintOrderStVO } from './model'; + +import type { ID, IDS } from '#/api/common'; + +import { commonExport } from '#/api/helper'; +import { requestClient } from '#/api/request'; + +enum Api { + maintOrderrStExport = '/eims/maintOrderSt/export', + maintOrderrStList = '/eims/maintOrderSt/list', + root = '/eims/maintOrderSt' +} + +/** + * 鏌ヨ淇濆吇宸ュ崟鍒楄〃 + * @param query + * @returns {*} + */ + +export function listMaintOrderSt(params?: any) { + return requestClient.get<MaintOrderStVO[]>(Api.maintOrderrStList, { params }); +} + + +/** + * 鏌ヨ淇濆吇宸ュ崟璇︾粏 + * @param maintOrderrStId + */ +export function getMaintOrderSt(maintOrderrStId: ID) { + return requestClient.get<MaintOrderStVO>(`${Api.root}/${maintOrderrStId}`); +} + +/** + * 鏂板淇濆吇宸ュ崟 + * @param data + */ +export function addMaintOrderSt(data: any) { + return requestClient.postWithMsg<void>(Api.root, data); +} + +/** + * 淇敼淇濆吇宸ュ崟 + * @param data + */ +export function updateMaintOrderSt(data: any) { + return requestClient.putWithMsg<void>(Api.root, data); +} + +/** + * 鍒犻櫎淇濆吇宸ュ崟 + * @param maintOrderrStId + */ +export function delMaintOrderSt(maintOrderrStId: IDS) { + return requestClient.deleteWithMsg<void>(`${Api.root}/${maintOrderrStId}`); +} +/** + * 瀵煎嚭 + * @param + */ +export function maintOrderrStExport(data: any) { + return commonExport(Api.maintOrderrStExport, data); +} diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts new file mode 100644 index 0000000..c5a7ea3 --- /dev/null +++ b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts @@ -0,0 +1,85 @@ +export interface MaintOrderStVO { + /** + * + */ + id: number | string; + + /** + * + */ + title: string; + + /** + * + */ + equId: number | string; + status: string; + + /** + * + */ + planTime: string; + + /** + * 淇濆吇浜� + */ + maintUser: number; + + /** + * 楠岃瘉浜� + */ + verifyUser: number; + verifyTime: string; + + /** + * 鐗硅浜嬮」 + */ + specialNote: string; + + /** + * 澶囨敞 + */ + remark: string; +} + +export interface MaintOrderStForm extends BaseEntity { + /** + * + */ + id?: number | string; + + /** + * + */ + title?: string; + + /** + * + */ + equId?: number | string; + + /** + * + */ + planTime?: string; + + /** + * 淇濆吇浜� + */ + maintUser?: number; + + /** + * 楠岃瘉浜� + */ + verifyUser?: number; + + /** + * 鐗硅浜嬮」 + */ + specialNote?: string; + + /** + * 澶囨敞 + */ + remark?: string; +} diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts index e30c0ac..c2dcfb5 100644 --- a/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts +++ b/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts @@ -1,4 +1,4 @@ -import type { MaintOrderVO } from './model'; +import type { MaintOrderGroupVO, MaintOrderVO } from './model'; import type { ID, IDS } from '#/api/common'; @@ -7,6 +7,8 @@ enum Api { maintOrderExport = '/eims/maintOrder/export', + maintOrderGroupList = '/eims/maintOrder/groupList', + maintOrderGroupDetailList = '/eims/maintOrder/detailList', maintOrderList = '/eims/maintOrder/list', root = '/eims/maintOrder' } @@ -21,6 +23,14 @@ return requestClient.get<MaintOrderVO[]>(Api.maintOrderList, { params }); } +export function listMaintOrderGroup(params?: any) { + return requestClient.get<MaintOrderGroupVO[]>(Api.maintOrderGroupList, { params }); +} + +export function listMaintOrderGroupDetail(params?: any) { + return requestClient.get<MaintOrderVO[]>(Api.maintOrderGroupDetailList, { params }); +} + /** * 鏌ヨ淇濆吇宸ュ崟璇︾粏 * @param maintOrderId diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts index 996513f..8605bb8 100644 --- a/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts +++ b/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts @@ -87,3 +87,32 @@ remark: string; } +export interface MaintOrderGroupVO { + /** + * + */ + id: number | string; + + /** + * + */ + equId: number | string; + + /** + * 璁″垝琛ㄥ啑浣�-淇濆吇浜� + */ + maintUserNames: string; + + + /** + * 楠岃瘉浜� + */ + verifyUserNames: string; + + /** + * 淇濆吇璁″垝鏃堕棿 + */ + planTime: string; + + +} diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx new file mode 100644 index 0000000..0629b80 --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx @@ -0,0 +1,194 @@ +import type { VxeGridProps } from '#/adapter/vxe-table'; + +import { DictEnum } from '@vben/constants'; +import { getPopupContainer } from '@vben/utils'; + +import { Tag } from 'ant-design-vue'; + +import { type FormSchemaGetter } from '#/adapter/form'; +import { getDictOptions } from '#/utils/dict'; +import { renderDict } from '#/utils/render'; + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'equName', + label: '璁惧鍚嶇О' + }, + { + component: 'RangePicker', + fieldName: 'planTime', + label: '淇濆吇鏃ユ湡' + }, + { + component: 'Select', + componentProps: { + options: getDictOptions(DictEnum.MAINT_ORDER_ST_STATUS) + }, + fieldName: 'status', + label: '鐘舵��' + } +]; + +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60, fixed: 'left' }, + { + title: '璁惧鍚嶇О', + field: 'equName', + minWidth: 200, + fixed: 'left' + }, + { + title: '璁″垝淇濆吇鏃ユ湡', + field: 'planTime', + minWidth: 200 + }, + { + title: '鐘舵��', + field: 'status', + minWidth: 80, + slots: { + default: ({ row }) => { + return renderDict(row.status, DictEnum.MAINT_ORDER_ST_STATUS); + } + } + }, + { + title: '璧勪骇缂栧彿', + field: 'assetNo', + minWidth: 160 + }, + { + title: '宸ュ崟鎬绘暟', + field: 'orderCount', + minWidth: 100 + }, + { + title: '寰呬繚鍏�', + field: 'dbyCount', + minWidth: 80, + slots: { + default: ({ row }) => { + return <Tag color="orange">{row.dbyCount}</Tag>; + } + } + }, + { + title: '淇濆吇涓�', + field: 'byCount', + minWidth: 80, + slots: { + default: ({ row }) => { + return <Tag color="blue">{row.byCount}</Tag>; + } + } + }, + { + title: '寰呴獙璇�', + field: 'dyzCount', + minWidth: 80, + slots: { + default: ({ row }) => { + return <Tag color="purple">{row.dyzCount}</Tag>; + } + } + }, + { + title: '瀹屾垚', + field: 'wcCount', + minWidth: 80, + slots: { + default: ({ row }) => { + return <Tag color="success">{row.wcCount}</Tag>; + } + } + }, + { + title: '鐗硅浜嬮」', + field: 'specialNote', + minWidth: 160 + }, + { + title: '淇濆吇鎴愬憳', + field: 'maintUserNames', + minWidth: 160 + }, + { + title: '绋芥煡鏃堕棿', + field: 'verifyTime', + minWidth: 200 + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '鎿嶄綔', + width: 200 + } +]; + +export const drawerSchema: FormSchemaGetter = () => [ + { + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''] + }, + fieldName: 'id' + }, + { + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''] + }, + fieldName: 'equId' + }, + { + component: 'DatePicker', + dependencies: { + show: () => false, + triggerFields: [''] + }, + componentProps: { + format: 'YYYY-MM-DD', + showTime: false, + valueFormat: 'YYYY-MM-DD', + getPopupContainer + }, + fieldName: 'planTime', + label: '璁″垝淇濆吇鏃ユ湡' + }, + { + component: 'Input', + componentProps: { + readonly: true + }, + fieldName: 'title', + label: '鏍囬' + }, + { + component: 'Textarea', + fieldName: 'specialNote', + label: '鐗硅浜嬮」' + }, + { + component: 'Input', + fieldName: 'verifyUser', + label: '绋芥煡浜�', + dependencies: { + show: () => false, + triggerFields: [''] + } + }, + { + component: 'Input', + fieldName: 'verifyUserName', + label: '绋芥煡浜�' + }, + { + component: 'Textarea', + fieldName: 'remark', + label: '澶囨敞' + } +]; diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue new file mode 100644 index 0000000..716379d --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue @@ -0,0 +1,223 @@ +<script setup lang="ts"> +import { onMounted, ref } from 'vue'; + +import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui'; +import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils'; + +import { Popconfirm, Space } from 'ant-design-vue'; + +import { useVbenVxeGrid, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table'; +import { listMaintOrderGroupDetail } from '#/api/eims/maint-order'; +import { delMaintOrderSt, listMaintOrderSt } from '#/api/eims/maint-order-st'; +import { getDeptTree, userList } from '#/api/system/user'; +import BasisSubTable from '#/views/eims/components/basis-sub-table.vue'; +import { columns as orderCol } from '#/views/eims/maint-order/data'; + +import { columns, querySchema } from './data'; +import maintOrderStDrawer from './maint-order-st-drawer.vue'; +import type { Recordable } from '@vben/types'; +import { MAINT_ORDER_STATUS } from '#/constants/dict'; +import { $t } from '@vben/locales'; + +defineExpose({ + tableSelect +}); + +const formOptions: VbenFormProps = { + commonConfig: { + labelWidth: 80, + componentProps: { + allowClear: true + } + }, + collapsed: true, + schema: querySchema(), + wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4', + // 鏃ユ湡閫夋嫨鏍煎紡鍖� + fieldMappingTime: [['planTime', ['params[beginPlanTime]', 'params[endPlanTime]'], ['YYYY-MM-DD 00:00:00', 'YYYY-MM-DD 23:59:59']]] +}; + +const gridOptions: VxeGridProps = { + checkboxConfig: { + // 楂樹寒 + highlight: true, + // 缈婚〉鏃朵繚鐣欓�変腑鐘舵�� + reserve: true + // 鐐瑰嚮琛岄�変腑 + // trigger: 'row' + }, + columns, + height: 'auto', + keepSource: true, + pagerConfig: {}, + proxyConfig: { + ajax: { + query: async ({ page }, formValues = {}) => { + return await listMaintOrderSt({ + pageNum: page.currentPage, + pageSize: page.pageSize, + ...formValues + }); + } + } + }, + rowConfig: { + isHover: true, + keyField: 'id' + }, + sortConfig: { + // 杩滅▼鎺掑簭 + remote: true, + // 鏀寔澶氬瓧娈垫帓搴� 榛樿鍏抽棴 + multiple: true + }, + id: 'maint-order-group-index' +}; +const orderId = ref<string>(); +const [BasicTable, tableApi] = useVbenVxeGrid({ + formOptions, + gridOptions, + gridEvents: { + sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams), + cellClick: (e: any) => { + const { row } = e; + orderId.value = `${row.equId}_${row.planTime}`; + } + } +}); + +/** + * 鍒濆鍖栭儴闂ㄩ�夋嫨 + */ +async function setupDeptSelect() { + // updateSchema + const deptTree = await getDeptTree(); + // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊� 鍗崇埗鑺傜偣 / 瀛愯妭鐐� + addFullName(deptTree, 'label', ' / '); + tableApi.formApi.updateSchema([ + { + componentProps: (formModel) => ({ + class: 'w-full', + fieldNames: { + key: 'id', + value: 'id', + children: 'children' + }, + getPopupContainer, + async onSelect(deptId: number | string) { + /** 鏍规嵁閮ㄩ棬ID鍔犺浇鐢ㄦ埛 */ + await setupUserOptions(deptId); + /** 鍙樺寲鍚庨渶瑕侀噸鏂伴�夋嫨鐢ㄦ埛 */ + formModel.maintUser = undefined; + }, + placeholder: '璇烽�夋嫨', + showSearch: true, + treeData: deptTree, + treeDefaultExpandAll: true, + treeLine: { showLeafIcon: false }, + // 绛涢�夌殑瀛楁 + treeNodeFilterProp: 'label', + // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊� + treeNodeLabelProp: 'fullName' + }), + fieldName: 'maintDept' + } + ]); +} + +/** + * 鐢ㄦ埛鐨勫姞杞� + */ +async function setupUserOptions(deptId: any) { + const params = { deptId }; + const userPageResult = await userList({ + pageNum: 1, + pageSize: 500, + ...params + }); + const options = userPageResult.rows.map((item) => ({ + label: item.nickName || item.userName, + value: item.userId + })); + // 绛涢�� + const filterOption = (input: string, option: any) => { + return option.label.toLowerCase().includes(input.toLowerCase()); + }; + + const placeholder = options.length > 0 ? '璇烽�夋嫨' : '璇ラ儴闂ㄤ笅鏆傛棤鐢ㄦ埛'; + tableApi.formApi.updateSchema([ + { + componentProps: { options, placeholder, filterOption }, + fieldName: 'maintUser' + } + ]); +} +const [MaintOrderStDrawer, maintOrderStDrawerApi] = useVbenDrawer({ + connectedComponent: maintOrderStDrawer +}); + +function handleAdd() { + maintOrderStDrawerApi.setData({}); + maintOrderStDrawerApi.open(); +} + +async function handleEdit(record: Recordable<any>) { + maintOrderStDrawerApi.setData({ id: record.id }); + maintOrderStDrawerApi.open(); +} +async function handleDelete(row: Recordable<any>) { + await delMaintOrderSt(row.id); + await tableApi.query(); +} + + +onMounted(async () => { + await setupDeptSelect(); +}); + +// 閫変腑鏁版嵁 +function tableSelect() { + return tableApi.grid.getCheckboxRecords(); +} +</script> + +<template> + <Page :auto-content-height="true"> + <div class="flex h-full gap-[8px] flex-col"> + <BasicTable class="h-3/5" table-title="淇濆吇宸ュ崟鍒楄〃"> + <template #toolbar-tools> + <Space /> + </template> + + <template #equName="{ row }"> + <Space> + <span>{{ row.equName }}</span> + </Space> + </template> + <template #action="{ row }"> + <Space> + <ghost-button v-access:code="['eims:maintOrderSt:edit']" @click.stop="handleEdit(row)"> + {{ $t('pages.common.edit') }} + </ghost-button> + <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="纭鍒犻櫎锛�" + @confirm="handleDelete(row)"> + <ghost-button danger v-access:code="['eims:maintOrderSt:remove']" @click.stop=""> + {{ $t('pages.common.delete') }} + </ghost-button> + </Popconfirm> + </Space> + </template> + + </BasicTable> + <BasisSubTable + :columns="orderCol" + :list-api="listMaintOrderGroupDetail" + :req-value="orderId" + class="h-2/5" + req-key="maintCode" + title="淇濆吇瀹炴柦椤圭洰" + /> + </div> + <MaintOrderStDrawer @reload="tableApi.query()" /> + </Page> +</template> diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue new file mode 100644 index 0000000..414ec0f --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue @@ -0,0 +1,109 @@ +<script setup lang="ts"> +import { computed, ref } from 'vue'; + +import { useVbenDrawer, useVbenModal } from '@vben/common-ui'; +import { cloneDeep } from '@vben/utils'; + +import { InputSearch } from 'ant-design-vue'; + +import { useVbenForm } from '#/adapter/form'; +import { getMaintOrderSt, updateMaintOrderSt } from '#/api/eims/maint-order-st'; +import userModal from '#/views/eims/components/user-modal.vue'; + +import { drawerSchema } from './data'; + +const emit = defineEmits<{ reload: [] }>(); + +const isUpdate = ref(false); +const title = computed(() => { + return isUpdate.value ? '淇濆吇宸ュ崟姹囨�荤ń鏌�' : '淇濆吇宸ュ崟姹囨��'; +}); + +const [BasicForm, formApi] = useVbenForm({ + commonConfig: { + formItemClass: 'col-span-2', + componentProps: { + class: 'w-full' + }, + labelWidth: 120 + }, + schema: drawerSchema(), + showDefaultActions: false, + wrapperClass: 'grid-cols-2' +}); + +const [BasicDrawer, drawerApi] = useVbenDrawer({ + onCancel: handleCancel, + onConfirm: handleConfirm, + async onOpenChange(isOpen) { + if (!isOpen) { + return null; + } + drawerApi.drawerLoading(true); + const { id } = drawerApi.getData() as { id?: number | string }; + isUpdate.value = !!id; + // 鏇存柊 && 璧嬪�� + if (isUpdate.value && id) { + const record = await getMaintOrderSt(id); + await formApi.setValues(record); + } + + drawerApi.drawerLoading(false); + } +}); + +async function handleConfirm() { + try { + drawerApi.drawerLoading(true); + const { valid } = await formApi.validate(); + if (!valid) { + return; + } + const data = cloneDeep(await formApi.getValues()); + // await (isUpdate.value ? updateMaintOrderSt(data) : addMaintOrderSt(data)); + await (isUpdate.value ? updateMaintOrderSt(data) : updateMaintOrderSt(data)); + emit('reload'); + await handleCancel(); + } catch (error) { + console.error(error); + } finally { + drawerApi.drawerLoading(false); + } +} + +async function handleCancel() { + drawerApi.close(); + await formApi.resetForm(); +} + +// user modal +const [UserModal, userModalApi] = useVbenModal({ + connectedComponent: userModal, + draggable: true, + title: '閫夋嫨绋芥煡浜�' +}); + +function handleUserModal() { + userModalApi.setData({}); + userModalApi.open(); +} + +/** + * 鏇存柊閫夋嫨鐨勭敤鎴� + * @param user + */ +async function updateUser(user: any) { + await formApi.setValues({ 'verifyUserName': user.nickName, 'verifyUser': user.userId }); +} +</script> + +<template> + <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]"> + <BasicForm> + <template #verifyUserName="slotProps"> + <InputSearch :enter-button="true" placeholder="璇烽�夋嫨" @search="handleUserModal()" v-bind="slotProps" /> + </template> + </BasicForm> + <UserModal class="w-[1200px]" @select-user="updateUser" /> + </BasicDrawer> +</template> diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx b/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx index aa5d7cf..dcf9cfa 100644 --- a/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx +++ b/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx @@ -256,7 +256,7 @@ getPopupContainer }, fieldName: 'maintFirstTime', - label: '棣栨鎵ц鏃堕棿' + label: '棣栨淇濆吇鏃堕棿' }, { component: 'DatePicker', @@ -267,7 +267,7 @@ getPopupContainer }, fieldName: 'maintLastTime', - label: '涓婃鎵ц鏃堕棿' + label: '涓婃淇濆吇鏃堕棿' }, { component: 'DatePicker', @@ -278,7 +278,7 @@ getPopupContainer }, fieldName: 'maintNextTime', - label: '涓嬫鎵ц鏃堕棿', + label: '涓嬫淇濆吇鏃堕棿', }, { component: 'Textarea', diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue index 9f094eb..c4d5f4d 100644 --- a/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue +++ b/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue @@ -54,14 +54,14 @@ show: () => isUpdate.value, triggerFields: [''] }, - fieldName: 'maintLastTime' + fieldName: 'maintFirstTime' }, { dependencies: { show: () => isUpdate.value, triggerFields: [''] }, - fieldName: 'maintNextTime' + fieldName: 'maintLastTime' } ]); // 鏇存柊 && 璧嬪�� @@ -126,7 +126,7 @@ * @param equ */ async function updateEqu(equ: any) { - await formApi.setValues(equ); + await formApi.setValues({ 'equId': equ.equId, 'equName': equ.equName }); } /** diff --git a/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts b/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts index 1e5e3a5..cc14eac 100644 --- a/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts +++ b/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts @@ -10,6 +10,7 @@ FIXTURE_BORROW_STATUS = 'fixture_borrow_status', // 宸ュ叿锛堟不鍏凤級鍊熺敤鐘舵�� MAINT_CYCLE_UNIT = 'maint_cycle_unit', // 淇濆吇鍛ㄦ湡鍗曚綅 MAINT_ORDER_STATUS = 'maint_order_status', // 淇濆吇宸ュ崟鐘舵�� + MAINT_ORDER_ST_STATUS = 'maint_order_st_status', // 淇濆吇宸ュ崟姹囨�荤ń鏌ョ姸鎬� MAINT_TIME_RULE = 'maint_time_rule', // 淇濆吇瑙勫垯 REPAIR_FAULT_TYPE = 'repair_fault_type', // 鎶ヤ慨鐘舵�� REPAIR_RECORD_HANDLE = 'repair_record_handle', // 缁翠慨璁板綍鎿嶄綔 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 bb8dca6..f4e85ac 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 @@ -127,7 +127,7 @@ String MAINT_ORDER_STATUS = "maint_order_status"; interface MAINT_ORDER_STATUS_DETAIL { - String BAOYANG = "1";// 淇濆吇缁� + String BAOYANG = "1";// 淇濆吇 String DAIBAOYANG = "0"; // 寰呬繚鍏� String DAIYANZHENG = "2"; // 寰呴獙璇� String WANCHENG = "3"; // 瀹屾垚 @@ -141,4 +141,13 @@ String WEIWANCHENG = "0";// 鏈畬鎴� String YIWANCHENG = "1"; // 宸插畬鎴� } + + /** + * 淇濆吇宸ュ崟姹囨�荤ń鏌ョ姸鎬� + */ + String MAINT_ORDER_ST_STATUS = "maint_order_st_status"; + interface MAINT_ORDER_ST_STATUS_DETAIL { + String N = "0";// 鏈畬鎴� + String Y = "1"; // 宸插畬鎴� + } } 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 5610c22..4eeba76 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 @@ -2,10 +2,14 @@ import java.util.List; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.eims.domain.vo.MaintOrdeGroupVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -46,6 +50,30 @@ return eimsMaintOrderService.queryPageListCustom(bo, pageQuery); } + + @SaCheckPermission("eims:maintOrder:list") + @GetMapping("/groupList") + public TableDataInfo<MaintOrdeGroupVo> group(EimsMaintOrderBo bo, PageQuery pageQuery) { +// return eimsMaintOrderService.queryPageList(bo, pageQuery); + return eimsMaintOrderService.queryPageGroupList(bo, pageQuery); + } + + @SaCheckPermission("eims:maintOrder:list") + @GetMapping("/detailList") + public TableDataInfo<EimsMaintOrderVo> groupDetail(EimsMaintOrderBo bo, PageQuery pageQuery) { + // 杩欓噷浣跨敤mintCode浼犻�掍簡 equid + plantime + String maintCode = bo.getMaintCode(); + if (StringUtils.isEmpty(maintCode) || !maintCode.contains("_")) { + return TableDataInfo.build(new Page<>(0,0)); + } + String[] split = maintCode.split("_"); + bo.setEquId(Long.valueOf(split[0])); + bo.setPlanTime(DateUtils.parseDate(split[1])); + bo.setMaintCode(null); +// return eimsMaintOrderService.queryPageList(bo, pageQuery); + return eimsMaintOrderService.queryPageListCustom(bo, pageQuery); + } + /** * 瀵煎嚭淇濆吇宸ュ崟鍒楄〃 */ @@ -65,7 +93,7 @@ @SaCheckPermission("eims:maintOrder:query") @GetMapping("/{id}") public R<EimsMaintOrderVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(eimsMaintOrderService.queryById(id)); } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java new file mode 100644 index 0000000..02e2735 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java @@ -0,0 +1,106 @@ +package org.dromara.eims.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.eims.domain.vo.EimsMaintOrderStVo; +import org.dromara.eims.domain.bo.EimsMaintOrderStBo; +import org.dromara.eims.service.IEimsMaintOrderStService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 淇濆吇宸ュ崟姹囨�� + * + * @author zhuguifei + * @date 2025-03-12 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/eims/maintOrderSt") +public class EimsMaintOrderStController extends BaseController { + + private final IEimsMaintOrderStService eimsMaintOrderStService; + + /** + * 鏌ヨ淇濆吇宸ュ崟姹囨�诲垪琛� + */ + @SaCheckPermission("eims:maintOrderSt:list") + @GetMapping("/list") + public TableDataInfo<EimsMaintOrderStVo> list(EimsMaintOrderStBo bo, PageQuery pageQuery) { + return eimsMaintOrderStService.queryPageList(bo, pageQuery); + } + + /** + * 瀵煎嚭淇濆吇宸ュ崟姹囨�诲垪琛� + */ + @SaCheckPermission("eims:maintOrderSt:export") + @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EimsMaintOrderStBo bo, HttpServletResponse response) { + List<EimsMaintOrderStVo> list = eimsMaintOrderStService.queryList(bo); + ExcelUtil.exportExcel(list, "淇濆吇宸ュ崟姹囨��", EimsMaintOrderStVo.class, response); + } + + /** + * 鑾峰彇淇濆吇宸ュ崟姹囨�昏缁嗕俊鎭� + * + * @param id 涓婚敭 + */ + @SaCheckPermission("eims:maintOrderSt:query") + @GetMapping("/{id}") + public R<EimsMaintOrderStVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long id) { + return R.ok(eimsMaintOrderStService.queryById(id)); + } + + /** + * 鏂板淇濆吇宸ュ崟姹囨�� + */ + @SaCheckPermission("eims:maintOrderSt:add") + @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsMaintOrderStBo bo) { + return toAjax(eimsMaintOrderStService.insertByBo(bo)); + } + + /** + * 淇敼淇濆吇宸ュ崟姹囨�� + */ + @SaCheckPermission("eims:maintOrderSt:edit") + @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsMaintOrderStBo bo) { + return toAjax(eimsMaintOrderStService.updateByBo(bo)); + } + + /** + * 鍒犻櫎淇濆吇宸ュ崟姹囨�� + * + * @param ids 涓婚敭涓� + */ + @SaCheckPermission("eims:maintOrderSt:remove") + @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long[] ids) { + + return eimsMaintOrderStService.deleteWithValidByIds(List.of(ids), true); + } +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java new file mode 100644 index 0000000..051fadd --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java @@ -0,0 +1,74 @@ +package org.dromara.eims.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 淇濆吇宸ュ崟姹囨�诲璞� eims_maint_order_st + * + * @author zhuguifei + * @date 2025-03-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("eims_maint_order_st") +public class EimsMaintOrderSt extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * + */ + private String title; + + /** + * + */ + private String equId; + + /** + * + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date planTime; + + @JsonFormat(pattern = "yyyy-MM-dd") + private Date verifyTime; + + private String status; + + /** + * 淇濆吇浜� + */ + private Long maintUser; + + /** + * 楠岃瘉浜� + */ + private Long verifyUser; + + /** + * 鐗硅浜嬮」 + */ + private String specialNote; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java index d89d93e..d8c55b6 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java @@ -1,8 +1,5 @@ package org.dromara.eims.domain; -import jakarta.validation.constraints.NotNull; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import org.dromara.common.mybatis.core.domain.BaseEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; @@ -115,7 +112,7 @@ * 涓婃鐢熸垚宸ュ崟鏃堕棿 */ @JsonFormat(pattern = "yyyy-MM-dd") - private Date lastGenerateDate; + private Date lastOrderDate; } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java new file mode 100644 index 0000000..132d076 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java @@ -0,0 +1,77 @@ +package org.dromara.eims.domain.bo; + +import org.dromara.eims.domain.EimsMaintOrderSt; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 淇濆吇宸ュ崟姹囨�讳笟鍔″璞� eims_maint_order_st + * + * @author zhuguifei + * @date 2025-03-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = EimsMaintOrderSt.class, reverseConvertGenerate = false) +public class EimsMaintOrderStBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * + */ + @NotBlank(message = "涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String title; + + /** + * + */ + @NotBlank(message = "涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String equId; + + /** + * + */ + @NotNull(message = "涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd") + private Date planTime; + + @JsonFormat(pattern = "yyyy-MM-dd") + private Date verifyTime; + + /** + * 淇濆吇浜� + */ + private Long maintUser; + + + private String status; + + /** + * 楠岃瘉浜� + */ + private Long verifyUser; + + /** + * 鐗硅浜嬮」 + */ + private String specialNote; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java index f59e6cf..cf189bb 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java @@ -97,19 +97,21 @@ /** * 棣栨鎵ц鏃堕棿 */ - @NotNull(message = "淇濆吇璁″垝棣栨鎵ц鏃堕棿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd") private Date maintFirstTime; /** * 涓婃鎵ц鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date maintLastTime; /** * 涓嬫鎵ц鏃堕棿 */ + @NotNull(message = "涓嬫淇濆吇鏃堕棿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) @JsonFormat(pattern = "yyyy-MM-dd") private Date maintNextTime; @@ -122,7 +124,7 @@ * 涓婃鐢熸垚宸ュ崟鏃堕棿 */ @JsonFormat(pattern = "yyyy-MM-dd") - private Date lastGenerateDate; + private Date lastOrderDate; // 鍏宠仈琛ㄥ瓧娈� private String equName; diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java new file mode 100644 index 0000000..69e1a4c --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java @@ -0,0 +1,109 @@ +package org.dromara.eims.domain.vo; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.eims.domain.EimsMaintOrderSt; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 淇濆吇宸ュ崟姹囨�昏鍥惧璞� eims_maint_order_st + * + * @author zhuguifei + * @date 2025-03-12 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = EimsMaintOrderSt.class) +public class EimsMaintOrderStVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * + */ + @ExcelProperty(value = "") + private String title; + + /** + * + */ + @ExcelProperty(value = "") + private Long equId; + /** + * 璁惧鍚嶇О + */ + @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId") + private String equName; + private String assetNo; + /** + * + */ + @ExcelProperty(value = "") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date planTime; + /** + *绋芥煡鏃ユ湡 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date verifyTime; + + + private String status; + + /** + * 淇濆吇浜� + */ + @ExcelProperty(value = "淇濆吇浜�") + private Long maintUser; + + /** + * 楠岃瘉浜� + */ + @ExcelProperty(value = "楠岃瘉浜�") + private Long verifyUser; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "verifyUser") + private String verifyUserName; + + /** + * 鐗硅浜嬮」 + */ + @ExcelProperty(value = "鐗硅浜嬮」") + private String specialNote; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + + private Integer orderCount; + private Integer dbyCount; + private Integer byCount; + private Integer dyzCount; + private Integer wcCount; + private String maintUserNames; + private String verifyUserNames; + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java index c268369..3df1153 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java @@ -2,9 +2,6 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; -import jakarta.validation.constraints.NotNull; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.constant.TransConstant; import org.dromara.eims.domain.EimsMaintPlan; @@ -17,8 +14,6 @@ import java.io.Serial; import java.io.Serializable; -import java.util.Date; - /** @@ -160,7 +155,7 @@ * 涓婃鐢熸垚宸ュ崟鏃堕棿 */ @JsonFormat(pattern = "yyyy-MM-dd") - private Date lastGenerateDate; + private Date lastOrderDate; } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java new file mode 100644 index 0000000..ad87dab --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java @@ -0,0 +1,70 @@ +package org.dromara.eims.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.eims.domain.EimsMaintOrder; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 淇濆吇宸ュ崟鍒嗙粍鏌ヨ + * + * @author zhuguifei + * @date 2025-03-011 + */ +@Data +@ExcelIgnoreUnannotated +public class MaintOrdeGroupVo extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * + */ + @ExcelProperty(value = "") + private Long equId; + + private String equName; + + /** + * 璁惧璧勪骇缂栧彿 + */ + private String assetNo; + + private Integer orderCount; + private Integer dbyCount; + private Integer byCount; + private Integer dyzCount; + private Integer wcCount; + private String maintUserNames; + private String verifyUserNames; + + + /** + * 淇濆吇璁″垝鏃堕棿 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date planTime; + + + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java index 4b388cb..cb01ba0 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java @@ -3,10 +3,7 @@ import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; import com.aizuda.snailjob.client.job.core.dto.JobArgs; import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import com.aizuda.snailjob.common.log.SnailJobLog; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -14,15 +11,11 @@ import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.eims.domain.*; -import org.dromara.eims.domain.bo.EimsMaintPlanBo; import org.dromara.eims.domain.vo.EimsMaintPlanVo; import org.dromara.eims.mapper.EimsMaintOrderMapper; import org.dromara.eims.mapper.EimsMaintPlanMapper; -import org.dromara.eims.service.IEimsMaintOrderService; -import org.dromara.eims.service.IEimsMaintPlanService; import org.dromara.eims.service.IGenerateCodeService; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -34,7 +27,6 @@ @JobExecutor(name = "maintPlanToOrderJob") public class MaintPlanToOrderJob { private final EimsMaintOrderMapper orderMapper; - private final EimsMaintPlanMapper planMapper; @@ -51,8 +43,6 @@ LambdaQueryWrapper<EimsMaintPlan> planBoQueryWrapper = Wrappers.lambdaQuery(); // 鏌ヨ鍚敤鐨勪繚鍏昏鍒� planBoQueryWrapper.eq(EimsMaintPlan::getStatus, DictConstants.SYS_NORMAL_DISABLE_DETAIL.NORMAL); - // 杩囨护娌℃湁棣栨杩愯鏃堕棿 - planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintFirstTime); // 杩囨护娌℃湁涓嬫杩愯鏃堕棿 planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintNextTime); // 杩囨护娌℃湁淇濆吇鍛ㄦ湡鐨勬暟鎹� @@ -64,8 +54,8 @@ for (int i = 0; i < planVoList.size(); i++) { EimsMaintPlanVo planVo = planVoList.get(i); // 淇濆吇璁″垝add鐨勬椂鍊欎細鑷姩鐢熸垚涓嬫杩愯鏃堕棿 - Date createOrderTime = planVo.getMaintNextTime(); - int day = DateUtils.differentDays(today,createOrderTime ); + Date oldNext = planVo.getMaintNextTime(); + int day = DateUtils.differentDays(today, oldNext); // 濡傛灉璁″垝鐢熸垚宸ュ崟鏃ユ湡澶т簬浠婂ぉ鍒欎笉鐢熸垚宸ュ崟 if (day >= 1) { continue; @@ -76,48 +66,50 @@ String maintRule = planVo.getMaintRule(); Date firstTime = planVo.getMaintFirstTime(); Date lastTime = planVo.getMaintLastTime(); - Date nextTime = null; + Date newNext = null; String maintCycleUnit = planVo.getMaintCycleUnit(); switch (maintCycleUnit) { case DictConstants.MAINT_CYCLE_UNIT_DETAIL.DAY: + newNext = DateUtils.addDays(oldNext, maintCycle.intValue()); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.WEEK: - maintCycle *= 7; + + newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue()); + break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.MONTH: - maintCycle *= 30; + + newNext = DateUtils.addMonths(oldNext, maintCycle.intValue()); + break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.SEASON: - maintCycle *= 90; + newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3); + break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.YEAR: - maintCycle *= 365; + + newNext = DateUtils.addYears(oldNext, maintCycle.intValue()); + break; } - // 棣栨 - if (lastTime == null ) { - nextTime = DateUtils.addDays(createOrderTime, maintCycle.intValue()); - } else { - nextTime = DateUtils.addDays(lastTime, maintCycle.intValue()); - } + EimsMaintOrder order = new EimsMaintOrder(); BeanUtils.copyProperties(planVo, order); order.setId(null); order.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIBAOYANG); - order.setPlanTime(createOrderTime); + order.setPlanTime(oldNext); order.setPlanId(planVo.getId()); order.setMaintCode(codeService.generateCode("BYZD")); EimsMaintPlan plan = MapstructUtils.convert(planVo, EimsMaintPlan.class); assert plan != null; - plan.setLastGenerateDate(new Date()); - plan.setMaintLastTime(createOrderTime); - plan.setMaintNextTime(nextTime); - boolean flag = orderMapper.insert(order) > 0; + plan.setLastOrderDate(new Date()); + plan.setMaintLastTime(oldNext); + plan.setMaintNextTime(newNext); + if(plan.getMaintFirstTime()==null)plan.setMaintFirstTime(oldNext); + boolean flag = orderMapper.insert(order) > 0; //TODO 鐢熸垚澶辫触锛屾坊鍔犲紓甯歌褰� if (!flag) continue; planMapper.updateById(plan); - - } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java index caa3aab..2473d57 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java @@ -9,6 +9,7 @@ import org.dromara.eims.domain.vo.EimsMaintOrderVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.eims.domain.vo.EimsMaintPlanVo; +import org.dromara.eims.domain.vo.MaintOrdeGroupVo; /** * 淇濆吇宸ュ崟Mapper鎺ュ彛 @@ -18,5 +19,6 @@ */ public interface EimsMaintOrderMapper extends BaseMapperPlus<EimsMaintOrder, EimsMaintOrderVo> { Page<EimsMaintOrderVo> selectMaintOrderList(@Param("page") Page<EimsMaintOrderVo> page, @Param(Constants.WRAPPER) Wrapper<EimsMaintOrder> queryWrapper); + Page<MaintOrdeGroupVo> selectMaintOrderGroupList(@Param("page") Page<EimsMaintOrderVo> page, @Param(Constants.WRAPPER) Wrapper<EimsMaintOrder> queryWrapper); } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java new file mode 100644 index 0000000..0ea0b0f --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java @@ -0,0 +1,15 @@ +package org.dromara.eims.mapper; + +import org.dromara.eims.domain.EimsMaintOrderSt; +import org.dromara.eims.domain.vo.EimsMaintOrderStVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 淇濆吇宸ュ崟姹囨�籑apper鎺ュ彛 + * + * @author zhuguifei + * @date 2025-03-12 + */ +public interface EimsMaintOrderStMapper extends BaseMapperPlus<EimsMaintOrderSt, EimsMaintOrderStVo> { + +} 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 8894366..0496614 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 @@ -4,6 +4,7 @@ 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.MaintOrdeGroupVo; import java.util.Collection; import java.util.List; @@ -74,4 +75,12 @@ * @return 淇濆吇宸ュ崟鍒嗛〉鍒楄〃 */ TableDataInfo<EimsMaintOrderVo> queryPageListCustom(EimsMaintOrderBo bo, PageQuery pageQuery); + + /** + * 鏁版嵁鏍规嵁 璁惧+鏃ユ湡 鍒嗙粍 + * @param bo + * @param pageQuery + * @return + */ + TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery); } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java new file mode 100644 index 0000000..f0bd81f --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java @@ -0,0 +1,69 @@ +package org.dromara.eims.service; + +import org.dromara.common.core.domain.R; +import org.dromara.eims.domain.vo.EimsMaintOrderStVo; +import org.dromara.eims.domain.bo.EimsMaintOrderStBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 淇濆吇宸ュ崟姹囨�籗ervice鎺ュ彛 + * + * @author zhuguifei + * @date 2025-03-12 + */ +public interface IEimsMaintOrderStService { + + /** + * 鏌ヨ淇濆吇宸ュ崟姹囨�� + * + * @param id 涓婚敭 + * @return 淇濆吇宸ュ崟姹囨�� + */ + EimsMaintOrderStVo queryById(Long id); + + /** + * 鍒嗛〉鏌ヨ淇濆吇宸ュ崟姹囨�诲垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @param pageQuery 鍒嗛〉鍙傛暟 + * @return 淇濆吇宸ュ崟姹囨�诲垎椤靛垪琛� + */ + TableDataInfo<EimsMaintOrderStVo> queryPageList(EimsMaintOrderStBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曟眹鎬诲垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @return 淇濆吇宸ュ崟姹囨�诲垪琛� + */ + List<EimsMaintOrderStVo> queryList(EimsMaintOrderStBo bo); + + /** + * 鏂板淇濆吇宸ュ崟姹囨�� + * + * @param bo 淇濆吇宸ュ崟姹囨�� + * @return 鏄惁鏂板鎴愬姛 + */ + Boolean insertByBo(EimsMaintOrderStBo bo); + + /** + * 淇敼淇濆吇宸ュ崟姹囨�� + * + * @param bo 淇濆吇宸ュ崟姹囨�� + * @return 鏄惁淇敼鎴愬姛 + */ + Boolean updateByBo(EimsMaintOrderStBo bo); + + /** + * 鏍¢獙骞舵壒閲忓垹闄や繚鍏诲伐鍗曟眹鎬讳俊鎭� + * + * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎 + * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠� + * @return 鏄惁鍒犻櫎鎴愬姛 + */ + R<Void> deleteWithValidByIds(Collection<Long> ids, Boolean isValid); +} 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 472878a..529c96b 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 @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.SneakyThrows; import org.dromara.common.core.constant.DictConstants; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.service.MaintOrderService; +import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; @@ -16,6 +18,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +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.MaintOrdeGroupVo; +import org.dromara.eims.mapper.EimsMaintPlanMapper; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.mapper.SysDeptMapper; @@ -27,10 +34,7 @@ import org.dromara.eims.service.IEimsMaintOrderService; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 淇濆吇宸ュ崟Service涓氬姟灞傚鐞� @@ -43,6 +47,7 @@ public class EimsMaintOrderServiceImpl implements IEimsMaintOrderService, MaintOrderService { private final EimsMaintOrderMapper baseMapper; + private final EimsMaintPlanMapper planMapper; private final SysDeptMapper sysDeptMapper; /** @@ -76,6 +81,12 @@ return TableDataInfo.build(page); } + @Override + public TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery) { + Page<MaintOrdeGroupVo> page = baseMapper.selectMaintOrderGroupList(pageQuery.build(), buildGroupWrapper(bo)); + return TableDataInfo.build(page); + } + /** * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曞垪琛� * @@ -92,13 +103,33 @@ QueryWrapper<EimsMaintOrder> qw = Wrappers.query(); qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode()); qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName()); + qw.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId()); qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType()); qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit()); qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule()); qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser()); qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept())); qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus()); + qw.eq(bo.getPlanTime()!=null, + "mo.plan_time", bo.getPlanTime()); qw.orderByDesc("mo.create_time"); + return qw; + } + private QueryWrapper<EimsMaintOrder> buildGroupWrapper(EimsMaintOrderBo bo) { + Map<String, Object> params = bo.getParams(); + QueryWrapper<EimsMaintOrder> qw = Wrappers.query(); + qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode()); + qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName()); + qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType()); + qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit()); + qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule()); + qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser()); + qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept())); + qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus()); + qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null, + "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime")); + qw.groupBy(Arrays.asList("mo.equ_id","mo.plan_time")); + qw.orderByDesc("mo.plan_time"); return qw; } @@ -152,9 +183,20 @@ * @param bo 淇濆吇宸ュ崟 * @return 鏄惁鏂板鎴愬姛 */ + @Transactional(rollbackFor = Exception.class) @Override public Boolean insertByBo(EimsMaintOrderBo bo) { EimsMaintOrder add = MapstructUtils.convert(bo, EimsMaintOrder.class); + //閫氳繃淇濆吇璁″垝鐢熸垚鐨勬暟鎹渶瑕佹洿鏂颁繚鍏昏鍒� + Long planId = bo.getPlanId(); + if(planId!=null){ + EimsMaintPlan eimsMaintPlan = planMapper.selectById(planId); + setMaintNextTime(eimsMaintPlan); + planMapper.updateById(eimsMaintPlan); + } + + + validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { @@ -162,6 +204,50 @@ } return flag; + } + + /** + * 璁$畻淇濆吇璁″垝涓嬫鎵ц鏃堕棿 + */ + @SneakyThrows + private void setMaintNextTime(EimsMaintPlan bo) { + Date oldNext = bo.getMaintNextTime(); + //TODO 涓嬫淇濆吇鏃堕棿璁$畻瑙勫垯 0-鎸夊浐瀹氬懆鏈� 1-鎸変笂娆′繚鍏绘椂闂� + Date newNext = null; + + //涓嬫娆℃墽琛屾椂闂翠负绌烘姏鍑哄紓甯� + if (oldNext == null) { + throw new Exception("涓嬫淇濆吇鏃堕棿涓嶈兘涓虹┖!"); + } + //鍛ㄦ湡 + Long maintCycle = bo.getMaintCycle(); + //鍗曚綅 1-澶� 2-鍛� 3-鏈� 4-瀛� 5-骞� + String maintCycleUnit = bo.getMaintCycleUnit(); + switch (maintCycleUnit) { + case "1": + newNext = DateUtils.addDays(oldNext, maintCycle.intValue()); + break; + case "2": + newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue()); + break; + case "3": + newNext = DateUtils.addMonths(oldNext, maintCycle.intValue()); + break; + case "4": + newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3); + break; + case "5": + newNext = DateUtils.addYears(oldNext, maintCycle.intValue()); + break; + + } + bo.setMaintNextTime(newNext); + if(bo.getMaintFirstTime()==null){ + bo.setMaintFirstTime(oldNext); + } + bo.setMaintLastTime(oldNext); + + } /** @@ -175,8 +261,19 @@ @Override public Boolean updateByBo(EimsMaintOrderBo bo) { EimsMaintOrder update = MapstructUtils.convert(bo, EimsMaintOrder.class); + if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.BAOYANG) && bo.getStartTime() == null){ + update.setStartTime(new Date()); + } - EimsMaintOrder old = baseMapper.selectById(bo.getId()); + if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG) && bo.getEndTime() == null){ + update.setEndTime(new Date()); + } + + if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.WANCHENG) && bo.getVerifyUser() == null){ + LoginUser loginUser = LoginHelper.getLoginUser(); + update.setVerifyUser(loginUser.getUserId()); + } + validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java new file mode 100644 index 0000000..ea64041 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java @@ -0,0 +1,220 @@ +package org.dromara.eims.service.impl; + +import lombok.SneakyThrows; +import org.dromara.common.core.constant.DictConstants; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.eims.domain.EimsEqu; +import org.dromara.eims.domain.EimsMaintOrder; +import org.dromara.eims.domain.vo.EimsMaintOrderVo; +import org.dromara.eims.mapper.EimsEquMapper; +import org.dromara.eims.mapper.EimsMaintOrderMapper; +import org.springframework.stereotype.Service; +import org.dromara.eims.domain.bo.EimsMaintOrderStBo; +import org.dromara.eims.domain.vo.EimsMaintOrderStVo; +import org.dromara.eims.domain.EimsMaintOrderSt; +import org.dromara.eims.mapper.EimsMaintOrderStMapper; +import org.dromara.eims.service.IEimsMaintOrderStService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.TemporalAdjusters; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; + +/** + * 淇濆吇宸ュ崟姹囨�籗ervice涓氬姟灞傚鐞� + * + * @author zhuguifei + * @date 2025-03-12 + */ +@RequiredArgsConstructor +@Service +public class EimsMaintOrderStServiceImpl implements IEimsMaintOrderStService { + + private final EimsMaintOrderStMapper baseMapper; + private final EimsEquMapper equMapper; + private final EimsMaintOrderMapper orderMapper; + + /** + * 鏌ヨ淇濆吇宸ュ崟姹囨�� + * + * @param id 涓婚敭 + * @return 淇濆吇宸ュ崟姹囨�� + */ + @Override + public EimsMaintOrderStVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 鍒嗛〉鏌ヨ淇濆吇宸ュ崟姹囨�诲垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @param pageQuery 鍒嗛〉鍙傛暟 + * @return 淇濆吇宸ュ崟姹囨�诲垎椤靛垪琛� + */ + @Override + public TableDataInfo<EimsMaintOrderStVo> queryPageList(EimsMaintOrderStBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<EimsMaintOrderSt> lqw = buildQueryWrapper(bo); + Page<EimsMaintOrderStVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + // 濉厖鏁版嵁 + fillStData(result); + return TableDataInfo.build(result); + } + + private void fillStData(Page<EimsMaintOrderStVo> result) { + List<EimsMaintOrderStVo> records = result.getRecords(); + for (int i = 0; i < records.size(); i++) { + EimsMaintOrderStVo stVo = records.get(i); + //1.濉厖璁惧 + EimsEqu eimsEqu = equMapper.selectById(stVo.getEquId()); + stVo.setAssetNo(eimsEqu.getAssetNo()); + //2.缁熻鏁版嵁 + LambdaQueryWrapper<EimsMaintOrder> orderLqw = Wrappers.lambdaQuery(); + orderLqw.eq(EimsMaintOrder::getEquId, stVo.getEquId()); + LocalDate planTime = stVo.getPlanTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + ; + LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth()); + LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth()); + orderLqw.between(EimsMaintOrder::getPlanTime, startOfMonth, endOfMonth); + // 鎵ц鏌ヨ + List<EimsMaintOrderVo> orderList = orderMapper.selectVoList(orderLqw); + // TODO 鏍规嵁瀛楀吀maint_order_status + Map<String, Long> cMap = orderList.stream() + .filter(order -> List.of("0", "1", "2", "3").contains(order.getStatus())) + .collect(Collectors.groupingBy(EimsMaintOrderVo::getStatus, Collectors.counting())); + stVo.setOrderCount(orderList.size()); + stVo.setDbyCount(cMap.getOrDefault("0", 0L).intValue()); + stVo.setByCount(cMap.getOrDefault("1", 0L).intValue()); + stVo.setDyzCount(cMap.getOrDefault("2", 0L).intValue()); + stVo.setWcCount(cMap.getOrDefault("3", 0L).intValue()); + + } + + } + + /** + * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曟眹鎬诲垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @return 淇濆吇宸ュ崟姹囨�诲垪琛� + */ + @Override + public List<EimsMaintOrderStVo> queryList(EimsMaintOrderStBo bo) { + LambdaQueryWrapper<EimsMaintOrderSt> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<EimsMaintOrderSt> buildQueryWrapper(EimsMaintOrderStBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<EimsMaintOrderSt> lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTitle()), EimsMaintOrderSt::getTitle, bo.getTitle()); + lqw.eq(StringUtils.isNotBlank(bo.getEquId()), EimsMaintOrderSt::getEquId, bo.getEquId()); + lqw.eq(bo.getPlanTime() != null, EimsMaintOrderSt::getPlanTime, bo.getPlanTime()); + lqw.eq(bo.getMaintUser() != null, EimsMaintOrderSt::getMaintUser, bo.getMaintUser()); + lqw.eq(bo.getVerifyUser() != null, EimsMaintOrderSt::getVerifyUser, bo.getVerifyUser()); + return lqw; + } + + /** + * 鏂板淇濆吇宸ュ崟姹囨�� + * + * @param bo 淇濆吇宸ュ崟姹囨�� + * @return 鏄惁鏂板鎴愬姛 + */ + @Override + public Boolean insertByBo(EimsMaintOrderStBo bo) { + EimsMaintOrderSt add = MapstructUtils.convert(bo, EimsMaintOrderSt.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼淇濆吇宸ュ崟姹囨�� + * + * @param bo 淇濆吇宸ュ崟姹囨�� + * @return 鏄惁淇敼鎴愬姛 + */ + @Override + public Boolean updateByBo(EimsMaintOrderStBo bo) { + EimsMaintOrderSt update = MapstructUtils.convert(bo, EimsMaintOrderSt.class); + + if(bo.getVerifyUser()!=null){ + EimsMaintOrderSt eimsMaintOrderSt = baseMapper.selectById(bo.getId()); + String status = eimsMaintOrderSt.getStatus(); + if(status==null || status.equals(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.N)){ + if(update.getVerifyTime()==null) update.setStatus(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.Y); + if(update.getVerifyTime()==null) update.setVerifyTime(new Date()); + } + } + + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(EimsMaintOrderSt entity) { + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鏍¢獙骞舵壒閲忓垹闄や繚鍏诲伐鍗曟眹鎬讳俊鎭� + * + * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎 + * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠� + * @return 鏄惁鍒犻櫎鎴愬姛 + */ + @Transactional(rollbackFor = Exception.class) + @SneakyThrows + @Override + public R<Void> deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if (isValid) { + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + AtomicBoolean flag = new AtomicBoolean(false); + ids.stream().anyMatch(id -> { + EimsMaintOrderStVo stVo = baseMapper.selectVoById(id); + LocalDate planTime = stVo.getPlanTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth()); + LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth()); + + LambdaQueryWrapper<EimsMaintOrder> orderLqw = Wrappers.lambdaQuery(EimsMaintOrder.class) + .eq(EimsMaintOrder::getEquId, stVo.getEquId()) + .between(EimsMaintOrder::getPlanTime, startOfMonth, endOfMonth); + + List<EimsMaintOrderVo> orderList = orderMapper.selectVoList(orderLqw); + if (!orderList.isEmpty()) { + flag.set(true); + return true; // 鏈夊尮閰嶇粨鏋滐紝鍋滄閬嶅巻 + } + return false; + }); + + if (flag.get()) { + return R.fail("瀛樺湪瀛愰」锛屼笉鑳藉垹闄わ紒"); + } + boolean result = baseMapper.deleteByIds(ids) > 0; + return result ? R.ok("鎿嶄綔鎴愬姛锛�") : R.fail("鎿嶄綔澶辫触锛�"); + } +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java index 8cbc9af..937832b 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java @@ -106,6 +106,7 @@ qw.eq(bo.getMaintUser() != null, "mp.maint_user", bo.getMaintUser()); qw.in(bo.getMaintDept() != null, "mp.maint_dept", getAllDescendantIds(bo.getMaintDept())); qw.eq(bo.getStatus() != null, "mp.status", bo.getStatus()); + qw.orderByDesc("mp.create_time"); return qw; } @@ -144,7 +145,7 @@ */ @Override public Boolean insertByBo(EimsMaintPlanBo bo) { - setMaintNextTime(bo); + //setMaintNextTime(bo); EimsMaintPlan add = MapstructUtils.convert(bo, EimsMaintPlan.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; @@ -154,46 +155,7 @@ return flag; } - /** - * 璁$畻淇濆吇璁″垝涓嬫鎵ц鏃堕棿 - */ - @SneakyThrows - private void setMaintNextTime(EimsMaintPlanBo bo) { - Date maintFirstTime = bo.getMaintFirstTime(); - Date maintLastTime = bo.getMaintLastTime(); - //涓嬫淇濆吇鏃堕棿璁$畻瑙勫垯 0-鎸夊浐瀹氬懆鏈� 1-鎸変笂娆′繚鍏绘椂闂� - Date nextDate = (maintLastTime != null && bo.getMaintRule().equals(DictConstants.MAINT_TIME_RULE_DETAIL.LAST)) ? maintLastTime :maintFirstTime; - //棣栨鎵ц鏃堕棿涓虹┖鎶涘嚭寮傚父 - if (maintFirstTime == null) { - throw new Exception("棣栨鎵ц鏃堕棿涓嶈兘涓虹┖!"); - } - //鍛ㄦ湡 - Long maintCycle = bo.getMaintCycle(); - //鍗曚綅 1-澶� 2-鍛� 3-鏈� 4-瀛� 5-骞� - String maintCycleUnit = bo.getMaintCycleUnit(); - switch (maintCycleUnit) { - case "1": - nextDate = DateUtils.addDays(nextDate, maintCycle.intValue()); - break; - case "2": - nextDate = DateUtils.addWeeks(nextDate, maintCycle.intValue()); - break; - case "3": - nextDate = DateUtils.addMonths(nextDate, maintCycle.intValue()); - break; - case "4": - nextDate = DateUtils.addMonths(nextDate, maintCycle.intValue() * 3); - break; - case "5": - nextDate = DateUtils.addYears(nextDate, maintCycle.intValue()); - break; - - } - bo.setMaintNextTime(nextDate); - - - } /** * 淇敼淇濆吇璁″垝 diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml index 5497c48..40acd9e 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml +++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml @@ -5,6 +5,9 @@ <mapper namespace="org.dromara.eims.mapper.EimsMaintOrderMapper"> <resultMap type="org.dromara.eims.domain.vo.EimsMaintOrderVo" id="EimsMaintOrderResult"> </resultMap> + + <resultMap type="org.dromara.eims.domain.vo.MaintOrdeGroupVo" id="MaintOrdeGroupVoResult"> + </resultMap> <select id="selectMaintOrderList" resultMap="EimsMaintOrderResult"> SELECT mo.*,equ.equ_name equName,equ.equ_code equCode,equ.asset_no assetNo,equ.model_no modelNo,mo.create_time createTime, pl.maint_name maintName, @@ -19,4 +22,27 @@ LEFT JOIN sys_dict_data dd on dd.dict_type = 'maint_cycle_unit' and dd.dict_value = mo.maint_cycle_unit ${ew.getCustomSqlSegment} </select> + <select id="selectMaintOrderGroupList" resultMap="MaintOrdeGroupVoResult"> + SELECT + mo.equ_id, + mo.plan_time, + MAX(equ.equ_name) AS equName, + MAX(equ.equ_code) AS equCode, + MAX(equ.asset_no) AS assetNo, + MAX(equ.model_no) AS modelNo, + GROUP_CONCAT(us.nick_name SEPARATOR ', ') AS maintUserNames, + GROUP_CONCAT(ue.nick_name SEPARATOR ', ') AS verifyUserNames, + COUNT(mo.id) AS orderCount, -- 缁存姢璁㈠崟鐨勬�绘暟 + SUM(CASE WHEN mo.status = 0 THEN 1 ELSE 0 END) AS dbyCount, + SUM(CASE WHEN mo.status = 1 THEN 1 ELSE 0 END) AS byCount, + SUM(CASE WHEN mo.status = 2 THEN 1 ELSE 0 END) AS dyzCount, + SUM(CASE WHEN mo.status = 3 THEN 1 ELSE 0 END) AS wcCount + FROM eims_maint_order mo + LEFT JOIN eims_equ equ ON mo.equ_id = equ.equ_id + LEFT JOIN sys_user us ON mo.maint_user = us.user_id + LEFT JOIN sys_user ue ON mo.verify_user = ue.user_id + LEFT JOIN sys_dept dp ON mo.maint_dept = dp.dept_id + LEFT JOIN eims_maint_plan pl ON pl.id = mo.plan_id + ${ew.getCustomSqlSegment} + </select> </mapper> diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml new file mode 100644 index 0000000..892a6b6 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.dromara.eims.mapper.EimsMaintOrderStMapper"> + +</mapper> -- Gitblit v1.9.3