From ec4d16c8a630960a4671a60f4d1957fd3de9def3 Mon Sep 17 00:00:00 2001 From: zhuguifei <zhuguifei@zhuguifeideiMac.local> Date: 星期四, 27 二月 2025 16:53:59 +0800 Subject: [PATCH] 完成维修工单查看维修记录子表 --- eims-ui/apps/web-antd/src/constants/dict/index.ts | 9 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairRecordServiceImpl.java | 133 ++++++ eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts | 10 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairRecordBo.java | 73 +++ eims-ui/apps/web-antd/src/views/eims/repair-record/data.tsx | 27 + eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java | 3 eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue | 2 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairRecordController.java | 105 ++++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.java | 10 eims-ui/apps/web-antd/src/api/eims/repair-record/index.ts | 60 ++ eims-ui/apps/web-antd/src/views/eims/repair-record/index.vue | 87 +++ eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java | 10 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java | 82 +++ eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairRecordMapper.xml | 7 eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java | 7 eims-ui/apps/web-antd/src/views/eims/fixture/index.vue | 1 eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue | 17 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/utils/DataFilterUtil.java | 14 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java | 4 eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java | 29 + eims-ui/apps/web-antd/src/views/eims/repair-req/send-work-drawer.vue | 142 ++++++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRecord.java | 68 +++ eims-ui/apps/web-antd/src/api/system/user/index.ts | 35 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java | 20 eims-ui/apps/web-antd/src/views/eims/repair-req/data.tsx | 38 + eims-ui/apps/web-antd/src/views/eims/repair-req/index.vue | 34 + eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairRecordService.java | 68 +++ eims-ui/apps/web-antd/src/views/eims/repair-req/repair-req-drawer.vue | 9 eims-ui/apps/web-antd/src/api/eims/repair-record/model.d.ts | 41 + eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairRecordMapper.java | 15 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java | 8 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java | 16 eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx | 20 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java | 4 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairRecordVo.java | 82 +++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairReqServiceImpl.java | 23 36 files changed, 1,254 insertions(+), 59 deletions(-) diff --git a/eims-ui/apps/web-antd/src/api/eims/repair-record/index.ts b/eims-ui/apps/web-antd/src/api/eims/repair-record/index.ts new file mode 100644 index 0000000..66f7458 --- /dev/null +++ b/eims-ui/apps/web-antd/src/api/eims/repair-record/index.ts @@ -0,0 +1,60 @@ +import type { RepairRecordVO } from './model'; + +import type { ID, IDS } from '#/api/common'; + +import { commonExport } from '#/api/helper'; +import { requestClient } from '#/api/request'; + +enum Api { + repairRecordExport = '/eims/repairRecord/export', + repairRecordList = '/eims/repairRecord/list', + root = '/eims/repairRecord' +} + +/** + * 鏌ヨ缁翠慨璁板綍鍒楄〃 + * @param query + * @returns {*} + */ + +export function listRepairRecord(params?: any) { + return requestClient.get<RepairRecordVO[]>(Api.repairRecordList, { params }); +} + +/** + * 鏌ヨ缁翠慨璁板綍璇︾粏 + * @param RepairRecordId + */ +export function getRepairRecord(RepairRecordId: ID) { + return requestClient.get<RepairRecordVO>(`${Api.root}/${RepairRecordId}`); +} + +/** + * 鏂板缁翠慨璁板綍 + * @param data + */ +export function addRepairRecord(data: any) { + return requestClient.postWithMsg<void>(`${Api.root}`, data); +} +/** + * 淇敼缁翠慨璁板綍 + * @param data + */ +export function updateRepairRecord(data: any) { + return requestClient.putWithMsg<void>(Api.root, data); +} + +/** + * 鍒犻櫎缁翠慨璁板綍 + * @param RepairRecordId + */ +export function delRepairRecord(RepairRecordId: IDS) { + return requestClient.deleteWithMsg<void>(`${Api.root}/${RepairRecordId}`); +} +/** + * 瀵煎嚭 + * @param + */ +export function RepairRecordExport(data: any) { + return commonExport(Api.repairRecordExport, data); +} diff --git a/eims-ui/apps/web-antd/src/api/eims/repair-record/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/repair-record/model.d.ts new file mode 100644 index 0000000..749ab97 --- /dev/null +++ b/eims-ui/apps/web-antd/src/api/eims/repair-record/model.d.ts @@ -0,0 +1,41 @@ +export interface RepairRecordVO { + /** + * + */ + id: number | string; + + /** + * 鎶ヤ慨鍗昳d + */ + reqId: number | string; + + /** + * 缁翠慨鍗昳d + */ + resId: number | string; + + /** + * 澶勭悊鏃堕棿 + */ + handleTime: string; + + /** + * 鎿嶄綔鐢ㄦ埛 + */ + operaUser: number; + + /** + * 鎿嶄綔(瀛楀吀) + */ + opera: string; + + /** + * 鎿嶄綔缁撴灉 + */ + operaResult: string; + + /** + * 澶囨敞 + */ + remark: string; +} diff --git a/eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts b/eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts index 40b166f..9d4bd8a 100644 --- a/eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts +++ b/eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts @@ -34,7 +34,15 @@ * @param data */ export function addRepairRes(data: any) { - return requestClient.postWithMsg<void>(Api.root, data); + return requestClient.postWithMsg<void>(`${Api.root}/add`, data); +} + +/** + * 鏂板缁翠慨宸ュ崟-鎵归噺 + * @param data + */ +export function addBatchRepairRes(data: any) { + return requestClient.postWithMsg<void>(`${Api.root}/addBatch`, data); } /** diff --git a/eims-ui/apps/web-antd/src/api/system/user/index.ts b/eims-ui/apps/web-antd/src/api/system/user/index.ts index ff2a3d5..249ebc2 100644 --- a/eims-ui/apps/web-antd/src/api/system/user/index.ts +++ b/eims-ui/apps/web-antd/src/api/system/user/index.ts @@ -1,10 +1,4 @@ -import type { - DeptTree, - ResetPwdParam, - User, - UserImportParam, - UserInfoResponse, -} from './model'; +import type { DeptTree, ResetPwdParam, User, UserImportParam, UserInfoResponse } from './model'; import type { ID, IDS, PageQuery, PageResult } from '#/api/common'; @@ -12,6 +6,7 @@ import { requestClient } from '#/api/request'; enum Api { + deptRoleUserList = '/system/user/deptRoleUser', deptTree = '/system/user/deptTree', listDeptUsers = '/system/user/list/dept', root = '/system/user', @@ -21,7 +16,7 @@ userImportTemplate = '/system/user/importTemplate', userList = '/system/user/list', userResetPassword = '/system/user/resetPwd', - userStatusChange = '/system/user/changeStatus', + userStatusChange = '/system/user/changeStatus' } /** @@ -31,6 +26,10 @@ */ export function userList(params?: PageQuery) { return requestClient.get<PageResult<User>>(Api.userList, { params }); +} + +export function deptRoleUserList(params?: any) { + return requestClient.get<User[]>(Api.deptRoleUserList, { params }); } /** @@ -48,16 +47,12 @@ * @returns void */ export function userImportData(data: UserImportParam) { - return requestClient.post<{ code: number; msg: string }>( - Api.userImport, - data, - { - headers: { - 'Content-Type': ContentTypeEnum.FORM_DATA, - }, - isTransformResponse: false, + return requestClient.post<{ code: number; msg: string }>(Api.userImport, data, { + headers: { + 'Content-Type': ContentTypeEnum.FORM_DATA }, - ); + isTransformResponse: false + }); } /** @@ -70,8 +65,8 @@ {}, { isTransformResponse: false, - responseType: 'blob', - }, + responseType: 'blob' + } ); } @@ -129,7 +124,7 @@ */ export function userResetPassword(data: ResetPwdParam) { return requestClient.putWithMsg<void>(Api.userResetPassword, data, { - encrypt: true, + encrypt: true }); } diff --git a/eims-ui/apps/web-antd/src/constants/dict/index.ts b/eims-ui/apps/web-antd/src/constants/dict/index.ts index e43f742..8856576 100644 --- a/eims-ui/apps/web-antd/src/constants/dict/index.ts +++ b/eims-ui/apps/web-antd/src/constants/dict/index.ts @@ -20,5 +20,12 @@ EQU = '1', // 璁惧鏁呴殰 FIXTURE = '2', // 宸ュ叿鏁呴殰 OTHER = '3' // 鍏朵粬鏁呴殰 - +} +/** + * 鎶ヤ慨鐘舵�� + */ +export enum REPAIR_REQ_STATUS { + JIEDAN = '0', // 寰呮帴鍗� + WEIXIU = '1', // 缁翠慨涓� + WANCHENG = '2' // 宸插畬鎴� } diff --git a/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue b/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue index 91c51ba..cdcde58 100644 --- a/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue +++ b/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue @@ -108,7 +108,6 @@ sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams), cellClick: (e: any) => { const { row } = e; - console.error() handleBorroeList(row) } } diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-record/data.tsx b/eims-ui/apps/web-antd/src/views/eims/repair-record/data.tsx new file mode 100644 index 0000000..ba5426d --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/repair-record/data.tsx @@ -0,0 +1,27 @@ +import type { VxeGridProps } from '#/adapter/vxe-table'; + + + +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60, fixed: 'left' }, + { + title: '鎿嶄綔鐢ㄦ埛', + field: 'operaUser', + width: 160, + }, + { + title: '鎿嶄綔', + field: 'opera', + width: 100, + }, + { + title: '鎿嶄綔缁撴灉', + field: 'operaResult', + width: 160, + }, + { + title: '', + field: 'blank', + minWidth: 100, + } +]; diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-record/index.vue b/eims-ui/apps/web-antd/src/views/eims/repair-record/index.vue new file mode 100644 index 0000000..84de92f --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/repair-record/index.vue @@ -0,0 +1,87 @@ +<script setup lang="ts"> +import { watch } from 'vue'; + +import { useVbenVxeGrid, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table'; +import { listRepairRecord } from '#/api/eims/repair-record'; + +import { columns } from '../repair-record/data'; + +interface Props { + reqId?: string; + resId?: string; +} + +const props = defineProps<Props>(); + +const gridOptions: VxeGridProps = { + checkboxConfig: { + // 楂樹寒 + highlight: true, + // 缈婚〉鏃朵繚鐣欓�変腑鐘舵�� + reserve: true + // 鐐瑰嚮琛岄�変腑 + // trigger: 'row' + }, + columns, + height: 'auto', + keepSource: true, + pagerConfig: {}, + proxyConfig: { + ajax: { + query: async ({ page }, formValues = {}) => { + if (props.reqId) { + const params = { reqId: props.reqId }; + Object.assign(formValues, params); + } else if (props.resId) { + const params = { resId: props.resId }; + Object.assign(formValues, params); + } else { + const params = { resId: -1 }; + Object.assign(formValues, params); + } + return await listRepairRecord({ + pageNum: page.currentPage, + pageSize: page.pageSize, + ...formValues + // ...useRoleBaseFilters() + }); + } + } + }, + rowConfig: { + isHover: true, + keyField: 'id' + }, + sortConfig: { + // 杩滅▼鎺掑簭 + remote: true, + // 鏀寔澶氬瓧娈垫帓搴� 榛樿鍏抽棴 + multiple: true + }, + id: 'eims-repair-record-index' +}; + +const [BasicTable, tableApi] = useVbenVxeGrid({ + gridOptions, + gridEvents: { + sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams) + } +}); + +// 浣跨敤 watch 鐩戝惉 resId 鐨勫彉鍖� +watch( + () => props.resId, + (newVal, oldVal) => { + if (newVal !== oldVal && newVal) { + tableApi.query(); + } + }, + { immediate: false } +); +</script> + +<template> + <div class="w-full"> + <BasicTable table-title="鎿嶄綔璁板綍" /> + </div> +</template> diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-req/data.tsx b/eims-ui/apps/web-antd/src/views/eims/repair-req/data.tsx index 972afef..a2afe69 100644 --- a/eims-ui/apps/web-antd/src/views/eims/repair-req/data.tsx +++ b/eims-ui/apps/web-antd/src/views/eims/repair-req/data.tsx @@ -303,3 +303,41 @@ label: '鎶ヤ慨浜�' } ]; + +export const modalSchema: FormSchemaGetter = () => [ + { + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''] + }, + fieldName: 'id' + }, + { + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''] + }, + fieldName: 'batchReqIds' + }, + { + component: 'TreeSelect', + // 鍦╠rawer閲屾洿鏂� 杩欓噷涓嶉渶瑕侀粯璁ょ殑componentProps + defaultValue: undefined, + fieldName: 'resDept', + label: '缁翠慨閮ㄩ棬', + help: `鎶ヤ慨浜哄憳鎵�灞為儴闂╜ + // rules: 'selectRequired', + }, + { + component: 'Select', + componentProps: { + showSearch: true, + allowClear: true, + getPopupContainer + }, + fieldName: 'resUser', + label: '缁翠慨浜�' + } +]; diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-req/index.vue b/eims-ui/apps/web-antd/src/views/eims/repair-req/index.vue index fae59d3..3dff59f 100644 --- a/eims-ui/apps/web-antd/src/views/eims/repair-req/index.vue +++ b/eims-ui/apps/web-antd/src/views/eims/repair-req/index.vue @@ -8,23 +8,23 @@ import { useUserStore } from '@vben/stores'; import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils'; -import { Modal, Popconfirm, Space } from 'ant-design-vue'; +import { message, Modal, Popconfirm, Space } from 'ant-design-vue'; import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table'; import { delRepairReq, listRepairReq, repairReqExport } from '#/api/eims/repair-req'; import { getDeptTree, userList } from '#/api/system/user'; +import { REPAIR_REQ_STATUS } from '#/constants/dict'; import { commonDownloadExcel } from '#/utils/file/download'; import { columns, querySchema } from './data'; import repairReqDrawer from './repair-req-drawer.vue'; - +import sendWorkDrawer from './send-work-drawer.vue'; interface Props { filterFlag?: boolean; status?: string; } const props = withDefaults(defineProps<Props>(), { filterFlag: false, status: undefined }); - const userStore = useUserStore(); const userId = userStore.userInfo?.userId; @@ -33,7 +33,6 @@ defineExpose({ tableSelect }); - const formOptions: VbenFormProps = { commonConfig: { @@ -107,6 +106,26 @@ connectedComponent: repairReqDrawer }); +const [SendWorkDrawer, drawerApi] = useVbenDrawer({ + connectedComponent: sendWorkDrawer, + title: '娲惧伐' +}); + +function openSendWork() { + const rows = tableApi.grid.getCheckboxRecords(); + const ids = rows.map((row: any) => row.id).join(','); + const filterData = rows.filter((item) => item.status === REPAIR_REQ_STATUS.WEIXIU || item.status === REPAIR_REQ_STATUS.WANCHENG); + if (rows.length === 0) { + message.warn('璇烽�夋嫨鎶ヤ慨鍗曞悗娲惧伐锛�'); + return; + } else if (filterData.length > 0) { + message.warn('璇烽�夋嫨鏈帴鍗曟姤淇崟鍚庢淳宸ワ紒'); + return; + } + drawerApi.setData({ batchReqIds: ids }); + drawerApi.open(); +} + function handleAdd() { repairReqDrawerApi.setData({ reqUser: userId, reqDept: deptId }); repairReqDrawerApi.open(); @@ -141,6 +160,11 @@ fieldMappingTime: formOptions.fieldMappingTime }); } + +/** + * 娲惧伐 + */ +function handleSendWork() {} onMounted(async () => { await setupDeptSelect(); @@ -224,6 +248,7 @@ <BasicTable class="flex-1 overflow-hidden" table-title="鏁呴殰鎶ヤ慨鍒楄〃"> <template #toolbar-tools> <Space> + <a-button v-access:code="['eims:repairReq:send']" @click="openSendWork"> 娲惧伐 </a-button> <a-button v-access:code="['eims:repairReq:export']" @click="handleDownloadExcel"> {{ $t('pages.common.export') }} </a-button> @@ -257,5 +282,6 @@ </BasicTable> </div> <RepairReqDrawer @reload="tableApi.query()" /> + <SendWorkDrawer @reload="tableApi.query()" /> </Page> </template> diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-req/repair-req-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/repair-req/repair-req-drawer.vue index 5314997..13c08df 100644 --- a/eims-ui/apps/web-antd/src/views/eims/repair-req/repair-req-drawer.vue +++ b/eims-ui/apps/web-antd/src/views/eims/repair-req/repair-req-drawer.vue @@ -98,7 +98,7 @@ await setupDeptSelect(); await setupEquTypeSelect(); // 鏂板鏃堕粯璁ゅ~鍏呯櫥褰曚汉涓烘姤淇汉 - if (!isUpdate.value && reqUser !== null && reqDept !== null) { + if (!isUpdate.value && reqUser && reqDept ) { await formApi.setValues({ 'reqUser': reqUser, 'reqDept': reqDept }); await setupUserOptions(reqDept); } @@ -291,6 +291,7 @@ async function updateEqu(equ: any) { await formApi.setValues({ 'equId': equ.equId, 'equName': equ.equName }); } + /** * 鏇存柊閫夋嫨鐨勫伐鍏� * @param fixture @@ -307,10 +308,12 @@ <CodeInput v-bind="slotProps" :disabled="isUpdate" prefix="BXD" /> </template> <template #equName="slotProps"> - <InputSearch :enter-button="true" placeholder="璇烽�夋嫨璁惧" @search="onSearchEqu" v-bind="slotProps" :disabled="isUpdate" /> + <InputSearch :enter-button="true" placeholder="璇烽�夋嫨璁惧" @search="onSearchEqu" v-bind="slotProps" + :disabled="isUpdate" /> </template> <template #fixtureName="slotProps"> - <InputSearch :enter-button="true" placeholder="璇烽�夋嫨宸ュ叿" @search="onSearchFixture" v-bind="slotProps" :disabled="isUpdate" /> + <InputSearch :enter-button="true" placeholder="璇烽�夋嫨宸ュ叿" @search="onSearchFixture" v-bind="slotProps" + :disabled="isUpdate" /> </template> </BasicForm> <EquModal class="w-[1200px]" @update-equ="updateEqu" /> diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-req/send-work-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/repair-req/send-work-drawer.vue new file mode 100644 index 0000000..241ddee --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/repair-req/send-work-drawer.vue @@ -0,0 +1,142 @@ +<script setup lang="ts"> +import { ref } from 'vue'; +import { useVbenDrawer } from '@vben/common-ui'; +import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils'; + +import { useVbenForm } from '#/adapter/form'; +import { addBatchRepairRes, getRepairRes, updateRepairRes } from '#/api/eims/repair-res'; +import { deptRoleUserList, getDeptTree } from '#/api/system/user'; + +import { modalSchema } from './data'; + +const emit = defineEmits<{ reload: [] }>(); + +const isUpdate = ref(false); +const [BasicForm, formApi] = useVbenForm({ + commonConfig: { + formItemClass: 'col-span-2', + componentProps: { + class: 'w-full' + }, + labelWidth: 120 + }, + schema: modalSchema(), + 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 }; + const { batchReqIds } = drawerApi.getData() as { batchReqIds?: string }; + await formApi.setValues({ batchReqIds }); + isUpdate.value = !!id; + // 鍒濆鍖� + await setupDeptSelect(); + // 鏇存柊 && 璧嬪�� + if (isUpdate.value && id) { + const record = await getRepairRes(id); + await formApi.setValues(record); + } + drawerApi.drawerLoading(false); + } +}); + +/** + * 鐢ㄦ埛鐨勫姞杞� + */ +async function setupUserOptions(deptId: any) { + const params = { deptId, roleKey: 'repair' }; + const userList = await deptRoleUserList(params); + const options = userList.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 ? '璇烽�夋嫨' : '璇ラ儴闂ㄤ笅鏆傛棤鐢ㄦ埛'; + formApi.updateSchema([ + { + componentProps: { options, placeholder, filterOption }, + fieldName: 'resUser' + } + ]); +} + +/** + * 鍒濆鍖栭儴闂ㄩ�夋嫨 + */ +async function setupDeptSelect() { + // updateSchema + const deptTree = await getDeptTree(); + // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊� 鍗崇埗鑺傜偣 / 瀛愯妭鐐� + addFullName(deptTree, 'label', ' / '); + 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.resUser = undefined; + }, + placeholder: '璇烽�夋嫨', + showSearch: true, + treeData: deptTree, + treeDefaultExpandAll: true, + treeLine: { showLeafIcon: false }, + // 绛涢�夌殑瀛楁 + treeNodeFilterProp: 'label', + // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊� + treeNodeLabelProp: 'fullName' + }), + fieldName: 'resDept' + } + ]); +} + +async function handleConfirm() { + try { + drawerApi.drawerLoading(true); + const { valid } = await formApi.validate(); + if (!valid) { + return; + } + const data = cloneDeep(await formApi.getValues()); + await (isUpdate.value ? updateRepairRes(data) : addBatchRepairRes(data)); + emit('reload'); + await handleCancel(); + } catch (error) { + console.error(error); + } finally { + drawerApi.drawerLoading(false); + } +} + +async function handleCancel() { + drawerApi.close(); + await formApi.resetForm(); +} +</script> + +<template> + <BasicDrawer :close-on-click-modal="false" class="w-[600px]"> + <BasicForm /> + </BasicDrawer> +</template> diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx b/eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx index 7056d1a..22f5166 100644 --- a/eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx +++ b/eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx @@ -191,6 +191,24 @@ }, { component: 'Input', + fieldName: 'reqUser', + dependencies: { + show: () => false, + triggerFields: [''] + }, + label: '鎶ヤ慨浜�' + }, + { + component: 'Input', + fieldName: 'reqDept', + dependencies: { + show: () => false, + triggerFields: [''] + }, + label: '鎶ヤ慨閮ㄩ棬' + }, + { + component: 'Input', fieldName: 'reqCode', label: '鎶ヤ慨鍗曞彿' }, @@ -294,3 +312,5 @@ label: '澶囨敞' }, ]; + + diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue b/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue index d4f5852..3b24afa 100644 --- a/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue +++ b/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue @@ -1,10 +1,11 @@ <script setup lang="ts"> import type { Recordable } from '@vben/types'; -import { onMounted } from 'vue'; +import { onMounted, ref } from 'vue'; import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui'; import { $t } from '@vben/locales'; +import { useUserStore } from '@vben/stores'; import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils'; import { Modal, Popconfirm, Space } from 'ant-design-vue'; @@ -14,9 +15,9 @@ import { getDeptTree, userList } from '#/api/system/user'; import { commonDownloadExcel } from '#/utils/file/download'; +import RepairRecord from '../repair-record/index.vue'; import { columns, querySchema } from './data'; import repairResDrawer from './repair-res-drawer.vue'; -import { useUserStore } from '@vben/stores'; const userStore = useUserStore(); const userId = userStore.userInfo?.userId; @@ -74,11 +75,16 @@ id: 'eims-repair-res-index' }; +const resId = ref<string>(); const [BasicTable, tableApi] = useVbenVxeGrid({ formOptions, gridOptions, gridEvents: { - sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams) + sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams), + cellClick: (e: any) => { + const { row } = e; + resId.value = row.id; + } } }); @@ -195,8 +201,8 @@ <template> <Page :auto-content-height="true"> - <div class="flex h-full gap-[8px]"> - <BasicTable class="flex-1 overflow-hidden" table-title="缁翠慨宸ュ崟鍒楄〃"> + <div class="flex h-full gap-[8px] flex-col"> + <BasicTable class="h-2/3" table-title="缁翠慨宸ュ崟鍒楄〃"> <template #toolbar-tools> <Space> <a-button v-access:code="['eims:repairRes:export']" @click="handleDownloadExcel"> @@ -230,6 +236,7 @@ </Space> </template> </BasicTable> + <RepairRecord :res-id="resId" class="h-1/3" table-title="缁翠慨璁板綍" /> </div> <RepairResDrawer @reload="tableApi.query()" /> </Page> diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue index c2eb892..a38953a 100644 --- a/eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue +++ b/eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue @@ -194,7 +194,7 @@ }); } const resCode = `WXD${req.code.slice(3)}`; - await formApi.setValues({ 'reqId': req.id, 'reqCode': req.code, 'resCode': resCode }); + await formApi.setValues({ 'reqId': req.id, 'reqUser': req.reqUser, 'reqDept': req.reqDept, 'reqCode': req.code, 'resCode': resCode }); } </script> 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 23c83b8..a8332e8 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 @@ -49,4 +49,24 @@ String WANCHENG = "1"; } + /** + * 缁翠慨宸ュ崟鐘舵�� + */ + String REPAIR_RECORD_HANDLE = "repair_record_handle"; + interface REPAIR_RECORD_HANDLE_DETAIL { + /** + * 鏂板 + */ + String XINZENG = "1"; + /** + * 鎺ュ崟 + */ + String JIEDAN = "2"; + + /** + * 瀹屾垚 + */ + String WANCHENG = "3"; + } + } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairRecordController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairRecordController.java new file mode 100644 index 0000000..d653cce --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairRecordController.java @@ -0,0 +1,105 @@ +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.EimsRepairRecordVo; +import org.dromara.eims.domain.bo.EimsRepairRecordBo; +import org.dromara.eims.service.IEimsRepairRecordService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 缁翠慨璁板綍 + * + * @author zhuguifei + * @date 2025-02-26 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/eims/repairRecord") +public class EimsRepairRecordController extends BaseController { + + private final IEimsRepairRecordService eimsRepairRecordService; + + /** + * 鏌ヨ缁翠慨璁板綍鍒楄〃 + */ + @SaCheckPermission("eims:repairRecord:list") + @GetMapping("/list") + public TableDataInfo<EimsRepairRecordVo> list(EimsRepairRecordBo bo, PageQuery pageQuery) { + return eimsRepairRecordService.queryPageList(bo, pageQuery); + } + + /** + * 瀵煎嚭缁翠慨璁板綍鍒楄〃 + */ + @SaCheckPermission("eims:repairRecord:export") + @Log(title = "缁翠慨璁板綍", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EimsRepairRecordBo bo, HttpServletResponse response) { + List<EimsRepairRecordVo> list = eimsRepairRecordService.queryList(bo); + ExcelUtil.exportExcel(list, "缁翠慨璁板綍", EimsRepairRecordVo.class, response); + } + + /** + * 鑾峰彇缁翠慨璁板綍璇︾粏淇℃伅 + * + * @param id 涓婚敭 + */ + @SaCheckPermission("eims:repairRecord:query") + @GetMapping("/{id}") + public R<EimsRepairRecordVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long id) { + return R.ok(eimsRepairRecordService.queryById(id)); + } + + /** + * 鏂板缁翠慨璁板綍 + */ + @SaCheckPermission("eims:repairRecord:add") + @Log(title = "缁翠慨璁板綍", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsRepairRecordBo bo) { + return toAjax(eimsRepairRecordService.insertByBo(bo)); + } + + /** + * 淇敼缁翠慨璁板綍 + */ + @SaCheckPermission("eims:repairRecord:edit") + @Log(title = "缁翠慨璁板綍", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsRepairRecordBo bo) { + return toAjax(eimsRepairRecordService.updateByBo(bo)); + } + + /** + * 鍒犻櫎缁翠慨璁板綍 + * + * @param ids 涓婚敭涓� + */ + @SaCheckPermission("eims:repairRecord:remove") + @Log(title = "缁翠慨璁板綍", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long[] ids) { + return toAjax(eimsRepairRecordService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.java index b770326..ff1be67 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.java @@ -75,11 +75,19 @@ @SaCheckPermission("eims:repairRes:add") @Log(title = "缁翠慨宸ュ崟", businessType = BusinessType.INSERT) @RepeatSubmit() - @PostMapping() + @PostMapping("add") public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsRepairResBo bo) { return toAjax(eimsRepairResService.insertByBo(bo)); } + @SaCheckPermission("eims:repairRes:add") + @Log(title = "缁翠慨宸ュ崟-鎵归噺", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("addBatch") + public R<Void> addBatch(@RequestBody EimsRepairResBo bo) { + return toAjax(eimsRepairResService.insertBatchByBo(bo)); + } + /** * 淇敼缁翠慨宸ュ崟 */ diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRecord.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRecord.java new file mode 100644 index 0000000..3b65277 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRecord.java @@ -0,0 +1,68 @@ +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_repair_record + * + * @author zhuguifei + * @date 2025-02-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("eims_repair_record") +public class EimsRepairRecord extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 鎶ヤ慨鍗昳d + */ + private Long reqId; + + /** + * 缁翠慨鍗昳d + */ + private Long resId; + + /** + * 澶勭悊鏃堕棿 + */ + private Date handleTime; + + /** + * 鎿嶄綔鐢ㄦ埛 + */ + private Long operaUser; + + /** + * 鎿嶄綔(瀛楀吀) + */ + private String opera; + + /** + * 鎿嶄綔缁撴灉 + */ + private String operaResult; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java index ee1b8a3..32c55c9 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java @@ -35,6 +35,10 @@ */ private Long reqId; + private Long reqUser;//鎶ヤ慨浜� + + private Long reqDept;//鎶ヤ慨浜洪儴闂� + /** * 缁翠慨鍗曞彿 */ diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairRecordBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairRecordBo.java new file mode 100644 index 0000000..58bf446 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairRecordBo.java @@ -0,0 +1,73 @@ +package org.dromara.eims.domain.bo; + +import org.dromara.eims.domain.EimsRepairRecord; +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_repair_record + * + * @author zhuguifei + * @date 2025-02-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = EimsRepairRecord.class, reverseConvertGenerate = false) +public class EimsRepairRecordBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 鎶ヤ慨鍗昳d + */ + @NotNull(message = "鎶ヤ慨鍗昳d涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long reqId; + + /** + * 缁翠慨鍗昳d + */ + @NotNull(message = "缁翠慨鍗昳d涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long resId; + + /** + * 澶勭悊鏃堕棿 + */ + @NotNull(message = "澶勭悊鏃堕棿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Date handleTime; + + /** + * 鎿嶄綔鐢ㄦ埛 + */ + @NotNull(message = "鎿嶄綔鐢ㄦ埛涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long operaUser; + + /** + * 鎿嶄綔(瀛楀吀) + */ + @NotBlank(message = "鎿嶄綔(瀛楀吀)涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String opera; + + /** + * 鎿嶄綔缁撴灉 + */ + @NotBlank(message = "鎿嶄綔缁撴灉涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String operaResult; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java index 54407d4..2ab96cc 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java @@ -35,6 +35,10 @@ @NotNull(message = "鎶ヤ慨鍗曚笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) private Long reqId; + private Long reqUser;//鎶ヤ慨浜� + + private Long reqDept;//鎶ヤ慨浜洪儴闂� + /** * 缁翠慨鍗曞彿 */ @@ -102,9 +106,19 @@ private String remark; + //杈呭姪瀛楁 + /** + * 闇�瑕佹壒閲忔坊鍔犵殑鎶ヤ慨鍗曞彿 + */ + private String batchReqIds; + + // 鍏宠仈琛ㄥ瓧娈� private String reqCode;//鎶ヤ慨鍗曠紪鐮� - private String reqUser;//鎶ヤ慨浜� + + + + } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairRecordVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairRecordVo.java new file mode 100644 index 0000000..b548da6 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairRecordVo.java @@ -0,0 +1,82 @@ +package org.dromara.eims.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.eims.domain.EimsRepairRecord; +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_repair_record + * + * @author zhuguifei + * @date 2025-02-26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = EimsRepairRecord.class) +public class EimsRepairRecordVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 鎶ヤ慨鍗昳d + */ + @ExcelProperty(value = "鎶ヤ慨鍗昳d") + private Long reqId; + + /** + * 缁翠慨鍗昳d + */ + @ExcelProperty(value = "缁翠慨鍗昳d") + private Long resId; + + /** + * 澶勭悊鏃堕棿 + */ + @ExcelProperty(value = "澶勭悊鏃堕棿") + private Date handleTime; + + /** + * 鎿嶄綔鐢ㄦ埛 + */ + @ExcelProperty(value = "鎿嶄綔鐢ㄦ埛") + private Long operaUser; + + /** + * 鎿嶄綔(瀛楀吀) + */ + @ExcelProperty(value = "鎿嶄綔(瀛楀吀)") + private String opera; + + /** + * 鎿嶄綔缁撴灉 + */ + @ExcelProperty(value = "鎿嶄綔缁撴灉") + private String operaResult; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java index 1060606..397e720 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java @@ -44,6 +44,10 @@ @ExcelProperty(value = "鎶ヤ慨鍗昳d") private Long reqId; + private Long reqUser;//鎶ヤ慨浜� + + private Long reqDept;//鎶ヤ慨浜洪儴闂� + /** * 缁翠慨鍗曞彿 */ diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairRecordMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairRecordMapper.java new file mode 100644 index 0000000..5c2205d --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairRecordMapper.java @@ -0,0 +1,15 @@ +package org.dromara.eims.mapper; + +import org.dromara.eims.domain.EimsRepairRecord; +import org.dromara.eims.domain.vo.EimsRepairRecordVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 缁翠慨璁板綍Mapper鎺ュ彛 + * + * @author zhuguifei + * @date 2025-02-26 + */ +public interface EimsRepairRecordMapper extends BaseMapperPlus<EimsRepairRecord, EimsRepairRecordVo> { + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairRecordService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairRecordService.java new file mode 100644 index 0000000..b25f3dc --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairRecordService.java @@ -0,0 +1,68 @@ +package org.dromara.eims.service; + +import org.dromara.eims.domain.vo.EimsRepairRecordVo; +import org.dromara.eims.domain.bo.EimsRepairRecordBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 缁翠慨璁板綍Service鎺ュ彛 + * + * @author zhuguifei + * @date 2025-02-26 + */ +public interface IEimsRepairRecordService { + + /** + * 鏌ヨ缁翠慨璁板綍 + * + * @param id 涓婚敭 + * @return 缁翠慨璁板綍 + */ + EimsRepairRecordVo queryById(Long id); + + /** + * 鍒嗛〉鏌ヨ缁翠慨璁板綍鍒楄〃 + * + * @param bo 鏌ヨ鏉′欢 + * @param pageQuery 鍒嗛〉鍙傛暟 + * @return 缁翠慨璁板綍鍒嗛〉鍒楄〃 + */ + TableDataInfo<EimsRepairRecordVo> queryPageList(EimsRepairRecordBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ绗﹀悎鏉′欢鐨勭淮淇褰曞垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @return 缁翠慨璁板綍鍒楄〃 + */ + List<EimsRepairRecordVo> queryList(EimsRepairRecordBo bo); + + /** + * 鏂板缁翠慨璁板綍 + * + * @param bo 缁翠慨璁板綍 + * @return 鏄惁鏂板鎴愬姛 + */ + Boolean insertByBo(EimsRepairRecordBo bo); + + /** + * 淇敼缁翠慨璁板綍 + * + * @param bo 缁翠慨璁板綍 + * @return 鏄惁淇敼鎴愬姛 + */ + Boolean updateByBo(EimsRepairRecordBo bo); + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ淮淇褰曚俊鎭� + * + * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎 + * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠� + * @return 鏄惁鍒犻櫎鎴愬姛 + */ + Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java index 00c9d02..3f0da6e 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java @@ -52,6 +52,14 @@ Boolean insertByBo(EimsRepairResBo bo); /** + * 鏂板缁翠慨宸ュ崟-鎵归噺 + * + * @param bo 缁翠慨宸ュ崟 + * @return 鏄惁鏂板鎴愬姛 + */ + Boolean insertBatchByBo(EimsRepairResBo bo); + + /** * 淇敼缁翠慨宸ュ崟 * * @param bo 缁翠慨宸ュ崟 diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairRecordServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairRecordServiceImpl.java new file mode 100644 index 0000000..a6221c5 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairRecordServiceImpl.java @@ -0,0 +1,133 @@ +package org.dromara.eims.service.impl; + +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.springframework.stereotype.Service; +import org.dromara.eims.domain.bo.EimsRepairRecordBo; +import org.dromara.eims.domain.vo.EimsRepairRecordVo; +import org.dromara.eims.domain.EimsRepairRecord; +import org.dromara.eims.mapper.EimsRepairRecordMapper; +import org.dromara.eims.service.IEimsRepairRecordService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 缁翠慨璁板綍Service涓氬姟灞傚鐞� + * + * @author zhuguifei + * @date 2025-02-26 + */ +@RequiredArgsConstructor +@Service +public class EimsRepairRecordServiceImpl implements IEimsRepairRecordService { + + private final EimsRepairRecordMapper baseMapper; + + /** + * 鏌ヨ缁翠慨璁板綍 + * + * @param id 涓婚敭 + * @return 缁翠慨璁板綍 + */ + @Override + public EimsRepairRecordVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 鍒嗛〉鏌ヨ缁翠慨璁板綍鍒楄〃 + * + * @param bo 鏌ヨ鏉′欢 + * @param pageQuery 鍒嗛〉鍙傛暟 + * @return 缁翠慨璁板綍鍒嗛〉鍒楄〃 + */ + @Override + public TableDataInfo<EimsRepairRecordVo> queryPageList(EimsRepairRecordBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<EimsRepairRecord> lqw = buildQueryWrapper(bo); + Page<EimsRepairRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 鏌ヨ绗﹀悎鏉′欢鐨勭淮淇褰曞垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @return 缁翠慨璁板綍鍒楄〃 + */ + @Override + public List<EimsRepairRecordVo> queryList(EimsRepairRecordBo bo) { + LambdaQueryWrapper<EimsRepairRecord> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<EimsRepairRecord> buildQueryWrapper(EimsRepairRecordBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<EimsRepairRecord> lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getReqId() != null, EimsRepairRecord::getReqId, bo.getReqId()); + lqw.eq(bo.getResId() != null, EimsRepairRecord::getResId, bo.getResId()); + lqw.eq(bo.getHandleTime() != null, EimsRepairRecord::getHandleTime, bo.getHandleTime()); + lqw.eq(bo.getOperaUser() != null, EimsRepairRecord::getOperaUser, bo.getOperaUser()); + lqw.eq(StringUtils.isNotBlank(bo.getOpera()), EimsRepairRecord::getOpera, bo.getOpera()); + return lqw; + } + + /** + * 鏂板缁翠慨璁板綍 + * + * @param bo 缁翠慨璁板綍 + * @return 鏄惁鏂板鎴愬姛 + */ + @Override + public Boolean insertByBo(EimsRepairRecordBo bo) { + EimsRepairRecord add = MapstructUtils.convert(bo, EimsRepairRecord.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼缁翠慨璁板綍 + * + * @param bo 缁翠慨璁板綍 + * @return 鏄惁淇敼鎴愬姛 + */ + @Override + public Boolean updateByBo(EimsRepairRecordBo bo) { + EimsRepairRecord update = MapstructUtils.convert(bo, EimsRepairRecord.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(EimsRepairRecord entity){ + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ淮淇褰曚俊鎭� + * + * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎 + * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠� + * @return 鏄惁鍒犻櫎鎴愬姛 + */ + @Override + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if(isValid){ + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairReqServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairReqServiceImpl.java index edff66a..437c0e7 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairReqServiceImpl.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairReqServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.service.RepairReqService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; @@ -15,8 +16,10 @@ import lombok.RequiredArgsConstructor; import org.dromara.eims.domain.EimsEqu; import org.dromara.eims.domain.EimsFixtureBorrow; +import org.dromara.eims.domain.EimsRepairRecord; import org.dromara.eims.domain.vo.EimsFixtureVo; import org.dromara.eims.domain.vo.EimsInventoryDetailVo; +import org.dromara.eims.mapper.EimsRepairRecordMapper; import org.dromara.eims.utils.DataFilterUtil; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.vo.SysDeptVo; @@ -27,11 +30,9 @@ import org.dromara.eims.domain.EimsRepairReq; import org.dromara.eims.mapper.EimsRepairReqMapper; import org.dromara.eims.service.IEimsRepairReqService; +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涓氬姟灞傚鐞� @@ -44,6 +45,7 @@ public class EimsRepairReqServiceImpl implements IEimsRepairReqService, RepairReqService { private final EimsRepairReqMapper baseMapper; + private final EimsRepairRecordMapper recordMapper; private final SysDeptMapper sysDeptMapper; /** @@ -73,7 +75,7 @@ @Override public TableDataInfo<EimsRepairReqVo> queryPageListCustom(EimsRepairReqBo bo, PageQuery pageQuery) { - //DataFilterUtil.getInstance().filterRepairReq(bo); + DataFilterUtil.getInstance().filterRepairReq(bo); Page<EimsRepairReqVo> page = baseMapper.selectRepairReqList(pageQuery.build(), buildWrapper(bo)); return TableDataInfo.build(page); } @@ -174,6 +176,7 @@ * @param bo 鏁呴殰鎶ヤ慨 * @return 鏄惁鏂板鎴愬姛 */ + @Transactional(rollbackFor = Exception.class) @Override public Boolean insertByBo(EimsRepairReqBo bo) { EimsRepairReq add = MapstructUtils.convert(bo, EimsRepairReq.class); @@ -181,6 +184,16 @@ boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); + //鏂板鎶ヤ慨鍗曟椂鐢熸垚缁翠慨璁板綍 + EimsRepairRecord record = new EimsRepairRecord(); + record.setReqId(add.getId()); + record.setHandleTime(new Date()); + //鏂板鐘舵�� + record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.XINZENG); + record.setOperaUser(add.getCreateBy()); + record.setOperaResult("鏂板锛岀敓鎴愭姤淇崟"); + //鏂板鏃剁敓鎴愯褰� + recordMapper.insert(record); } return flag; } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java index 8fa2a81..d809c00 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.SneakyThrows; import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.service.RepairResService; import org.dromara.common.core.utils.MapstructUtils; @@ -14,10 +15,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; -import org.dromara.eims.domain.EimsEqu; -import org.dromara.eims.domain.EimsFixture; -import org.dromara.eims.domain.EimsRepairReq; +import org.dromara.eims.domain.*; import org.dromara.eims.domain.vo.EimsRepairReqVo; +import org.dromara.eims.mapper.EimsRepairRecordMapper; import org.dromara.eims.mapper.EimsRepairReqMapper; import org.dromara.eims.utils.DataFilterUtil; import org.dromara.system.domain.SysDept; @@ -26,15 +26,11 @@ import org.springframework.stereotype.Service; import org.dromara.eims.domain.bo.EimsRepairResBo; import org.dromara.eims.domain.vo.EimsRepairResVo; -import org.dromara.eims.domain.EimsRepairRes; import org.dromara.eims.mapper.EimsRepairResMapper; import org.dromara.eims.service.IEimsRepairResService; 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涓氬姟灞傚鐞� @@ -49,6 +45,7 @@ private final EimsRepairResMapper baseMapper; private final EimsRepairReqMapper reqMapper; private final SysDeptMapper deptMapper; + private final EimsRepairRecordMapper recordMapper; /** * 鏌ヨ缁翠慨宸ュ崟 @@ -121,8 +118,55 @@ reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU); EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); reqMapper.updateById(req); + + //灏嗘柊澧炴姤淇崟鏃剁淮淇褰曠殑缁翠慨宸ュ崟id鏇存柊 + LambdaQueryWrapper<EimsRepairRecord> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EimsRepairRecord::getReqId, add.getReqId()); + EimsRepairRecord one = recordMapper.selectOne(queryWrapper); + if(one!=null){ + one.setResId(add.getId()); + recordMapper.updateById(one); + } + + + //鐢熸垚缁翠慨璁板綍 + EimsRepairRecord record = new EimsRepairRecord(); + record.setReqId(add.getReqId()); + record.setResId(add.getId()); + record.setHandleTime(new Date()); + //鎺ュ崟鐘舵�� + record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.JIEDAN); + record.setOperaUser(add.getCreateBy()); + record.setOperaResult("鎺ュ崟锛岀敓鎴愮淮淇伐鍗�"); + //鏂板鏃剁敓鎴愯褰� + recordMapper.insert(record); + + } return flag; + } + + @SneakyThrows + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean insertBatchByBo(EimsRepairResBo bo){ + String batchReqIds = bo.getBatchReqIds(); + boolean result = StringUtils.isNotEmpty(batchReqIds); + for (String reqId : batchReqIds.split(",")) { + EimsRepairReqVo reqVo = reqMapper.selectVoById(reqId); + EimsRepairResBo insert = new EimsRepairResBo(); + insert.setReqId(reqVo.getId()); + insert.setReqUser(reqVo.getReqUser()); + insert.setReqDept(reqVo.getReqDept()); + insert.setResCode(reqVo.getCode().replace("BXD","WXD")); + insert.setResUser(bo.getResUser()); + insert.setResDept(bo.getResDept()); + insert.setStatus(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU); + insert.setStartTime(new Date()); + Boolean b = insertByBo(insert); + if(!b)throw new Exception(""); + } + return result; } /** @@ -145,6 +189,18 @@ reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WANCHENG); EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); reqMapper.updateById(req); + + //鐢熸垚缁翠慨璁板綍 + EimsRepairRecord record = new EimsRepairRecord(); + record.setResId(bo.getId()); + record.setReqId(bo.getReqId()); + record.setHandleTime(new Date()); + //瀹屾垚鐘舵�� + record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.WANCHENG); + record.setOperaUser(bo.getUpdateBy()); + record.setOperaResult("瀹屾垚缁翠慨宸ュ崟"); + recordMapper.insert(record); + } validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; @@ -174,6 +230,7 @@ @Override public TableDataInfo<EimsRepairResVo> queryPageListCustom(EimsRepairResBo bo, PageQuery pageQuery) { + DataFilterUtil.getInstance().filterRepairRes(bo); Page<EimsRepairResVo> page = baseMapper.selectRepairResList(pageQuery.build(), buildWrapper(bo)); return TableDataInfo.build(page); } @@ -184,9 +241,14 @@ qw.like(StringUtils.isNotBlank(bo.getResCode()), "res.res_code", bo.getResCode()); qw.like(StringUtils.isNotBlank(bo.getReqCode()), "req.code", bo.getReqCode()); qw.eq(bo.getResUser() != null, "res.res_user", bo.getResUser()); + qw.eq(bo.getReqUser() != null, "res.req_user", bo.getReqUser()); - List<Long> allDescendantIds = getAllDescendantIds(bo.getResDept()); - qw.in(bo.getResDept() != null, "res.res_dept", allDescendantIds); + List<Long> resDeptIds = getAllDescendantIds(bo.getResDept()); + qw.in(bo.getResDept() != null, "res.res_dept", resDeptIds); + + List<Long> reqDeptIds = getAllDescendantIds(bo.getReqDept()); + qw.in(bo.getReqDept() != null, "res.req_dept", reqDeptIds); + qw.eq(StringUtils.isNotBlank(bo.getStatus()), "res.status", bo.getStatus()); qw.orderByDesc("res.create_time"); diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/utils/DataFilterUtil.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/utils/DataFilterUtil.java index 8ecc5d3..03f16af 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/utils/DataFilterUtil.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/utils/DataFilterUtil.java @@ -42,7 +42,10 @@ //TODO 缁翠慨宸ュ彧鑳芥煡璇㈡湭鎺ュ崟鐘舵�佺殑鎶ヤ慨鍗曪紙鍏蜂綋鐘舵�佸弬鑰冨瓧鍏竢epair_req_status锛� bo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.JIEDAN); } - params.put("createBy", userList); + if(userList.size()>0){ + params.put("createBy", userList); + } + } //缁翠慨宸ュ崟 @@ -50,19 +53,18 @@ LoginUser loginUser = LoginHelper.getLoginUser(); Set<String> rolePermission = loginUser.getRolePermission(); Map<String, Object> params = bo.getParams(); - List<Long> userList = new ArrayList<>(); if (rolePermission == null) { //娌℃湁鏉冮檺涓嶅厑璁告煡璇㈡暟鎹� - userList.add(-1L); + bo.setReqUser(-1L); + bo.setResUser(-1L); }else if (rolePermission.contains(Role.operator.name())) { //鎿嶄綔宸ュ彧鑳芥煡璇㈣嚜宸辩殑鏁版嵁 - userList.add(loginUser.getUserId()); + bo.setReqUser(loginUser.getUserId()); }else if (rolePermission.contains(Role.repair.name())) { //TODO 缁翠慨宸ュ彧鑳芥煡璇㈡湭鎺ュ崟鐘舵�佺殑鎶ヤ慨鍗曪紙鍏蜂綋鐘舵�佸弬鑰冨瓧鍏竢epair_req_status锛� - bo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.JIEDAN); + bo.setResUser(loginUser.getUserId()); } - params.put("createBy", userList); } } diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairRecordMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairRecordMapper.xml new file mode 100644 index 0000000..149772e --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairRecordMapper.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.EimsRepairRecordMapper"> + +</mapper> diff --git a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index 36104d6..63f611b 100644 --- a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -64,6 +64,16 @@ return userService.selectPageUserList(user, pageQuery); } + + /** + * 鑾峰彇鐢ㄦ埛鍒楄〃 + */ + @SaCheckPermission("system:user:list") + @GetMapping("/deptRoleUser") + public R<List<SysUserVo>> deptRoleUser(SysUserBo user) { + return R.ok(userService.selectDeptRoleUserList(user)); + } + /** * 瀵煎嚭鐢ㄦ埛鍒楄〃 */ diff --git a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java index 7ad2759..3f0ab03 100644 --- a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java +++ b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java @@ -103,6 +103,9 @@ */ private Long roleId; + + private String roleKey; + /** * 鎺掗櫎涓嶆煡璇㈢殑鐢ㄦ埛(宸ヤ綔娴佺敤) */ diff --git a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index 0325a25..2663db0 100644 --- a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -219,4 +219,11 @@ * @return 缁撴灉 */ List<SysUserVo> selectUserListByDept(Long deptId); + + /** + * 閫氳繃閮ㄩ棬鍜岃鑹叉煡璇㈢敤鎴� + * @param user + * @return + */ + List<SysUserVo> selectDeptRoleUserList(SysUserBo user); } diff --git a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 2540606..e2b2e6e 100644 --- a/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -42,6 +42,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * 鐢ㄦ埛 涓氬姟灞傚鐞� @@ -556,6 +558,33 @@ return baseMapper.selectVoList(lqw); } + @Override + public List<SysUserVo> selectDeptRoleUserList(SysUserBo user) { + List<SysUserVo> result = new ArrayList<>(); + if (user.getDeptId() == null) return result; + LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(SysUser::getDeptId, user.getDeptId()); + List<SysUserVo> deptUserList = baseMapper.selectVoList(queryWrapper); + if (user.getRoleKey() != null) { + LambdaQueryWrapper<SysRole> roleWrapper = Wrappers.lambdaQuery(); + roleWrapper.eq(SysRole::getRoleKey, user.getRoleKey()); + SysRole sysRole = roleMapper.selectOne(roleWrapper); + if (sysRole != null) { + LambdaQueryWrapper<SysUserRole> userRoleWrapper = Wrappers.lambdaQuery(); + userRoleWrapper.eq(SysUserRole::getRoleId, sysRole.getRoleId()); + List<SysUserRole> sysUserRoles = userRoleMapper.selectList(userRoleWrapper); + Set<Long> roleUserIds = sysUserRoles.stream() + .map(SysUserRole::getUserId) + .collect(Collectors.toSet()); + deptUserList = deptUserList.stream() + .filter(u -> roleUserIds.contains(u.getUserId())) + .toList(); + result.addAll(deptUserList); + } + } + return result; + } + /** * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛璐︽埛 * -- Gitblit v1.9.3