From d85cb9da90d1dd24f6ecfa187aa8c4198394c29a Mon Sep 17 00:00:00 2001 From: zhuguifei <zhuguifei@zhuguifeideiMac.local> Date: 星期三, 26 二月 2025 15:41:05 +0800 Subject: [PATCH] 开发维修工单 --- eims-ui/apps/web-antd/src/api/eims/repair-res/model.d.ts | 172 ++++ eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts | 61 + eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue | 210 +++++ eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairResCodeTranslationImpl.java | 30 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.java | 106 ++ eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 2 eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts | 1 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java | 236 ++++++ eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue | 236 ++++++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairReqMapper.java | 7 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/utils/DataFilterUtil.java | 42 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java | 100 ++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/listener/EimsEquImportListener.java | 5 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairResMapper.java | 20 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairReqService.java | 11 eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java | 10 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairResService.java | 11 eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairReqCodeTranslationImpl.java | 30 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java | 15 eims-ui/apps/web-antd/src/views/eims/components/repair-req-modal.vue | 49 + eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java | 52 + eims-ui/apps/web-antd/src/views/eims/repair-req/data.tsx | 5 eims-ui/apps/web-antd/src/views/eims/repair-req/index.vue | 31 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairResMapper.xml | 21 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java | 80 ++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java | 110 +++ eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx | 296 ++++++++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java | 142 +++ eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairReqVo.java | 6 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairReqServiceImpl.java | 23 30 files changed, 2,089 insertions(+), 31 deletions(-) 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 new file mode 100644 index 0000000..40b166f --- /dev/null +++ b/eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts @@ -0,0 +1,61 @@ +import type { RepairResVO } from './model'; + +import type { ID, IDS } from '#/api/common'; + +import { commonExport } from '#/api/helper'; +import { requestClient } from '#/api/request'; + +enum Api { + repairResExport = '/eims/repairRes/export', + repairResList = '/eims/repairRes/list', + root = '/eims/repairRes' +} + +/** + * 鏌ヨ缁翠慨宸ュ崟鍒楄〃 + * @param query + * @returns {*} + */ + +export function listRepairRes(params?: any) { + return requestClient.get<RepairResVO[]>(Api.repairResList, { params }); +} + +/** + * 鏌ヨ缁翠慨宸ュ崟璇︾粏 + * @param repairResId + */ +export function getRepairRes(repairResId: ID) { + return requestClient.get<RepairResVO>(`${Api.root}/${repairResId}`); +} + +/** + * 鏂板缁翠慨宸ュ崟 + * @param data + */ +export function addRepairRes(data: any) { + return requestClient.postWithMsg<void>(Api.root, data); +} + +/** + * 淇敼缁翠慨宸ュ崟 + * @param data + */ +export function updateRepairRes(data: any) { + return requestClient.putWithMsg<void>(Api.root, data); +} + +/** + * 鍒犻櫎缁翠慨宸ュ崟 + * @param repairResId + */ +export function delRepairRes(repairResId: IDS) { + return requestClient.deleteWithMsg<void>(`${Api.root}/${repairResId}`); +} +/** + * 瀵煎嚭 + * @param + */ +export function repairResExport(data: any) { + return commonExport(Api.repairResExport, data); +} diff --git a/eims-ui/apps/web-antd/src/api/eims/repair-res/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/repair-res/model.d.ts new file mode 100644 index 0000000..e4626aa --- /dev/null +++ b/eims-ui/apps/web-antd/src/api/eims/repair-res/model.d.ts @@ -0,0 +1,172 @@ +export interface RepairResVO { + /** + * + */ + id: number | string; + + /** + * 鎶ヤ慨鍗昳d + */ + reqId: number | string; + + /** + * 缁翠慨鍗曞彿 + */ + resCode: string; + + /** + * 缁翠慨浜� + */ + resUser: number; + + /** + * 缁翠慨浜洪儴闂� + */ + resDept: number; + + /** + * 鍘熷洜鍒嗘瀽 + + */ + resReason: string; + + /** + * 澶勭悊鎺柦 + */ + resHandle: string; + + /** + * 棰勯槻鎺柦 + */ + resPrevent: string; + + /** + * 缁翠慨鐘舵��(瀛楀吀) + */ + status: string; + + /** + * 寮�濮嬫椂闂� + */ + startTime: string; + + /** + * 缁撴潫鏃堕棿 + */ + endTime: string; + + /** + * 浣跨敤宸ュ叿 + */ + useFixture: string; + + /** + * 浣跨敤澶囦欢 + */ + useParts: string; + + /** + * 澶囨敞 + */ + remark: string; +} + +export interface RepairResForm extends BaseEntity { + /** + * + */ + id?: number | string; + + /** + * 鎶ヤ慨鍗昳d + */ + reqId?: number | string; + + /** + * 缁翠慨浜� + */ + resUser?: number; + + /** + * 缁翠慨浜洪儴闂� + */ + resDept?: number; + + /** + * 鍘熷洜鍒嗘瀽 + + */ + resReason?: string; + + /** + * 澶勭悊鎺柦 + */ + resHandle?: string; + + /** + * 棰勯槻鎺柦 + */ + resPrevent?: string; + + /** + * 缁翠慨鐘舵��(瀛楀吀) + */ + status?: string; + + /** + * 寮�濮嬫椂闂� + */ + startTime?: string; + + /** + * 缁撴潫鏃堕棿 + */ + endTime?: string; + + /** + * 浣跨敤宸ュ叿 + */ + useFixture?: string; + + /** + * 浣跨敤澶囦欢 + */ + useParts?: string; + + /** + * 澶囨敞 + */ + remark?: string; +} + +export interface RepairResQuery extends PageQuery { + /** + * 缁翠慨浜� + */ + resUser?: number; + + /** + * 缁翠慨浜洪儴闂� + */ + resDept?: number; + + /** + * 缁翠慨鐘舵��(瀛楀吀) + */ + status?: string; + + /** + * 寮�濮嬫椂闂� + */ + startTime?: string; + + /** + * 缁撴潫鏃堕棿 + */ + endTime?: string; + + /** + * 鏃ユ湡鑼冨洿鍙傛暟 + */ + params?: any; +} diff --git a/eims-ui/apps/web-antd/src/views/eims/components/repair-req-modal.vue b/eims-ui/apps/web-antd/src/views/eims/components/repair-req-modal.vue new file mode 100644 index 0000000..4c91cc6 --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/components/repair-req-modal.vue @@ -0,0 +1,49 @@ +<script setup lang="ts"> +import { ref } from 'vue'; + +import { useVbenModal } from '@vben/common-ui'; + +import { message } from 'ant-design-vue'; + +import InnerView from '#/views/eims/repair-req/index.vue'; + +const emit = defineEmits<{ updateSelect: [any] }>(); + +const [BasicModal, modalApi] = useVbenModal({ + fullscreenButton: false, + draggable: true, + onCancel: handleCancel, + onConfirm: handleConfirm +}); +const innerView = ref(); + +async function handleConfirm() { + try { + modalApi.modalLoading(true); + const tableSelect = innerView.value.tableSelect(); + if (tableSelect.length > 1) { + message.error('鏈�澶氬彧鑳介�夋嫨涓�鏉℃暟鎹紒'); + modalApi.modalLoading(false); + return false; + } + emit('updateSelect', tableSelect[0]); + await handleCancel(); + } catch (error) { + console.error(error); + } finally { + modalApi.modalLoading(false); + } +} + +async function handleCancel() { + modalApi.close(); +} +</script> + +<template> + <BasicModal :fullscreen-button="true" class="w-[800px]"> + <InnerView ref="innerView" :filter-flag="true" status="0" /> + </BasicModal> +</template> + +<style scoped></style> 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 fd16d8a..972afef 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 @@ -96,6 +96,11 @@ } }, { + title: '缁翠慨鍗曞彿', + field: 'resCode', + minWidth: 200 + }, + { title: '鎶ヤ慨绫诲瀷', field: 'reqType', sortable: true, 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 92d996d..fae59d3 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 @@ -5,6 +5,7 @@ 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'; @@ -16,11 +17,23 @@ import { columns, querySchema } from './data'; import repairReqDrawer from './repair-req-drawer.vue'; -import { useUserStore } from '@vben/stores'; + + +interface Props { + filterFlag?: boolean; + status?: string; +} +const props = withDefaults(defineProps<Props>(), { filterFlag: false, status: undefined }); + const userStore = useUserStore(); const userId = userStore.userInfo?.userId; const deptId = userStore.userInfo?.deptId; + +defineExpose({ + tableSelect +}); + const formOptions: VbenFormProps = { commonConfig: { @@ -45,13 +58,21 @@ // 鐐瑰嚮琛岄�変腑 // trigger: 'row' }, - columns, + columns: columns?.filter((item) => (props.filterFlag ? item.field !== 'action' : item.field !== '-1')), height: 'auto', keepSource: true, pagerConfig: {}, + toolbarConfig: { + enabled: !props.filterFlag + }, proxyConfig: { ajax: { query: async ({ page }, formValues = {}) => { + // 濡傛灉浼犲叆浜唀quId鍒欏彧鏌ヨ褰撳墠id鏁版嵁 + if (props.filterFlag && props.status) { + const params = { status: props.status }; + Object.assign(formValues, params); + } return await listRepairReq({ pageNum: page.currentPage, pageSize: page.pageSize, @@ -191,12 +212,16 @@ } ]); } +// 閫変腑鏁版嵁 +function tableSelect() { + return tableApi.grid.getCheckboxRecords(); +} </script> <template> <Page :auto-content-height="true"> <div class="flex h-full gap-[8px]"> - <BasicTable class="flex-1 overflow-hidden" table-title="璁惧鐩樼偣鍒楄〃"> + <BasicTable class="flex-1 overflow-hidden" table-title="鏁呴殰鎶ヤ慨鍒楄〃"> <template #toolbar-tools> <Space> <a-button v-access:code="['eims:repairReq:export']" @click="handleDownloadExcel"> 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 new file mode 100644 index 0000000..7056d1a --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx @@ -0,0 +1,296 @@ +import type { VxeGridProps } from '#/adapter/vxe-table'; + +import { DictEnum } from '@vben/constants'; +import { getPopupContainer } from '@vben/utils'; + +import dayjs from 'dayjs'; + +import { type FormSchemaGetter } from '#/adapter/form'; +import { REPAIR_REQ_TYPE } from '#/constants/dict'; +import { getDictOptions } from '#/utils/dict'; +import { renderDict } from '#/utils/render'; + +const curDateTime = dayjs().format('YYYY-MM-DD HH:mm:ss'); + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'resCode', + label: '缁翠慨鍗曞彿' + }, + { + component: 'Input', + fieldName: 'reqCode', + label: '鎶ヤ慨鍗曞彿' + }, + { + component: 'Select', + componentProps: { + options: getDictOptions(DictEnum.REPAIR_RES_STATUS) + }, + fieldName: 'status', + label: '鐘舵��' + }, + { + component: 'TreeSelect', + // 鍦╠rawer閲屾洿鏂� 杩欓噷涓嶉渶瑕侀粯璁ょ殑componentProps + defaultValue: undefined, + fieldName: 'resDept', + label: '缁翠慨閮ㄩ棬' + // rules: 'selectRequired', + }, + { + component: 'Select', + componentProps: { + showSearch: true, + allowClear: true, + getPopupContainer + }, + fieldName: 'resUser', + label: '缁翠慨浜�' + } +]; + +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60, fixed: 'left' }, + { + title: '缁翠慨鍗曞彿', + field: 'resCode', + minWidth: 160, + fixed: 'left' + }, + { + title: '缁翠慨鐘舵��', + field: 'status', + minWidth: 100, + fixed: 'left', + slots: { + default: ({ row }) => { + if (row.status === null || row.status === '') { + return ''; + } + return renderDict(row.status, DictEnum.REPAIR_RES_STATUS); + } + } + }, + { + title: '鎶ヤ慨鍗曞彿', + field: 'reqCode', + minWidth: 160, + }, + { + title: '缁翠慨閮ㄩ棬', + field: 'resDeptName', + minWidth: 100 + }, + { + title: '缁翠慨浜�', + field: 'resUserName', + minWidth: 100 + }, + { + title: '鎶ヤ慨绫诲瀷', + field: 'reqType', + sortable: true, + minWidth: 100, + slots: { + default: ({ row }) => { + if (row.reqType === null || row.reqType === '') { + return ''; + } + return renderDict(row.reqType, DictEnum.REPAIR_REQ_TYPE); + } + } + }, + { + title: '鎶ヤ慨鏃堕棿', + field: 'reqTime', + sortable: true, + minWidth: 200 + }, + { + title: '璁惧(宸ュ叿)鍚嶇О', + sortable: true, + minWidth: 150, + slots: { + default: ({ row }) => { + if (!row.reqType) { + return ''; + } + + // 鏍规嵁涓嶅悓鐨勮姹傜被鍨嬭繑鍥炵浉搴旂殑鍚嶇О + switch (row.reqType) { + case REPAIR_REQ_TYPE.EQU: { + return row.equName; + } + case REPAIR_REQ_TYPE.FIXTURE: { + return row.fixtureName; + } + default: { + // 濡傛灉璇锋眰绫诲瀷鏃笉鏄� EQU 涔熶笉鏄� FIXTURE锛屽垯杩斿洖绌哄瓧绗︿覆 + return ''; + } + } + } + } + }, + { + title: '鏁呴殰绫诲埆', + field: 'faultType', + minWidth: 100, + slots: { + default: ({ row }) => { + if (row.faultType === null || row.faultType === '') { + return ''; + } + return renderDict(row.faultType, DictEnum.REPAIR_FAULT_TYPE); + } + } + }, + { + title: '鎶ヤ慨閮ㄩ棬', + field: 'reqDeptName', + minWidth: 100 + }, + { + title: '鎶ヤ慨浜�', + field: 'reqUserName', + minWidth: 100 + }, + { + title: '鏁呴殰鎻忚堪', + field: 'reqDesc', + minWidth: 120 + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '鎿嶄綔', + width: 130 + } +]; + +export const drawerSchema: FormSchemaGetter = () => [ + { + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''] + }, + fieldName: 'id' + }, + { + component: 'Input', + fieldName: 'reqId', + dependencies: { + show: () => false, + triggerFields: [''] + }, + label: '鎶ヤ慨id' + }, + { + component: 'Input', + fieldName: 'reqCode', + label: '鎶ヤ慨鍗曞彿' + }, + { + component: 'Input', + fieldName: 'resCode', + label: '缁翠慨鍗曞彿' + }, + { + component: 'Textarea', + formItemClass: 'items-baseline', + fieldName: 'resReason', + label: '鍘熷洜鍒嗘瀽' + }, + { + component: 'Textarea', + formItemClass: 'items-baseline', + fieldName: 'resHandle', + label: '澶勭悊鎺柦' + }, + { + component: 'Textarea', + formItemClass: 'items-baseline', + fieldName: 'resPrevent', + label: '棰勯槻鎺柦' + }, + { + component: 'Input', + fieldName: 'fixtureName', + label: '宸ュ叿鍚嶇О', + dependencies: { + show: () => false, + triggerFields: [''] + } + }, + { + component: 'Input', + fieldName: 'fixtureId', + label: '宸ュ叿id', + dependencies: { + show: () => false, + triggerFields: [''] + } + }, + { + component: 'Select', + componentProps: { + getPopupContainer, + options: getDictOptions(DictEnum.REPAIR_RES_STATUS) + }, + fieldName: 'status', + defaultValue: '0', + label: '缁翠慨鐘舵��' + }, + { + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm:ss', + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss', + getPopupContainer + }, + defaultValue: curDateTime, + fieldName: 'startTime', + label: '寮�濮嬫椂闂�' + }, + { + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm:ss', + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss', + getPopupContainer + }, + fieldName: 'endTime', + label: '缁撴潫鏃堕棿' + }, + { + component: 'TreeSelect', + // 鍦╠rawer閲屾洿鏂� 杩欓噷涓嶉渶瑕侀粯璁ょ殑componentProps + defaultValue: undefined, + fieldName: 'resDept', + label: '缁翠慨閮ㄩ棬', + help: `鎶ヤ慨浜哄憳鎵�灞為儴闂╜ + // rules: 'selectRequired', + }, + { + component: 'Select', + componentProps: { + showSearch: true, + allowClear: true, + getPopupContainer + }, + fieldName: 'resUser', + label: '缁翠慨浜�' + }, + { + component: 'Textarea', + formItemClass: 'items-baseline', + fieldName: 'remark', + 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 new file mode 100644 index 0000000..d4f5852 --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue @@ -0,0 +1,236 @@ +<script setup lang="ts"> +import type { Recordable } from '@vben/types'; + +import { onMounted } from 'vue'; + +import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui'; +import { $t } from '@vben/locales'; +import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils'; + +import { Modal, Popconfirm, Space } from 'ant-design-vue'; + +import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table'; +import { delRepairRes, listRepairRes, repairResExport } from '#/api/eims/repair-res'; +import { getDeptTree, userList } from '#/api/system/user'; +import { commonDownloadExcel } from '#/utils/file/download'; + +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; +const deptId = userStore.userInfo?.deptId; + +const formOptions: VbenFormProps = { + commonConfig: { + labelWidth: 80, + componentProps: { + allowClear: true + } + }, + schema: querySchema(), + collapsed: true, + wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4', + // 鏃ユ湡閫夋嫨鏍煎紡鍖� + fieldMappingTime: [['startTime', ['params[beginStartTime]', 'params[endStartTime]'], ['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 listRepairRes({ + pageNum: page.currentPage, + pageSize: page.pageSize, + ...formValues + // ...useRoleBaseFilters() + }); + } + } + }, + rowConfig: { + isHover: true, + keyField: 'id' + }, + sortConfig: { + // 杩滅▼鎺掑簭 + remote: true, + // 鏀寔澶氬瓧娈垫帓搴� 榛樿鍏抽棴 + multiple: true + }, + id: 'eims-repair-res-index' +}; + +const [BasicTable, tableApi] = useVbenVxeGrid({ + formOptions, + gridOptions, + gridEvents: { + sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams) + } +}); + +const [RepairResDrawer, repairResDrawerApi] = useVbenDrawer({ + connectedComponent: repairResDrawer +}); + +function handleAdd() { + repairResDrawerApi.setData({ resUser: userId, resDept: deptId }); + repairResDrawerApi.open(); +} + +async function handleEdit(record: Recordable<any>) { + repairResDrawerApi.setData({ id: record.id }); + repairResDrawerApi.open(); +} + +async function handleDelete(row: Recordable<any>) { + await delRepairRes(row.id); + await tableApi.query(); +} + +function handleMultiDelete() { + const rows = tableApi.grid.getCheckboxRecords(); + const ids = rows.map((row: any) => row.id); + Modal.confirm({ + title: '鎻愮ず', + okType: 'danger', + content: `纭鍒犻櫎閫変腑鐨�${ids.length}鏉¤褰曞悧锛焋, + onOk: async () => { + await delRepairRes(ids); + await tableApi.query(); + } + }); +} + +function handleDownloadExcel() { + commonDownloadExcel(repairResExport, '缁翠慨宸ュ崟璁板綍', tableApi.formApi.form.values, { + fieldMappingTime: formOptions.fieldMappingTime + }); +} + +onMounted(async () => { + await setupDeptSelect(); +}); + +/** + * 鐢ㄦ埛鐨勫姞杞� + */ +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: 'resUser' + } + ]); +} + +/** + * 鍒濆鍖栭儴闂ㄩ�夋嫨 + */ +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.reqUser = undefined; + }, + placeholder: '璇烽�夋嫨', + showSearch: true, + treeData: deptTree, + treeDefaultExpandAll: true, + treeLine: { showLeafIcon: false }, + // 绛涢�夌殑瀛楁 + treeNodeFilterProp: 'label', + // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊� + treeNodeLabelProp: 'fullName' + }), + fieldName: 'resDept' + } + ]); +} +</script> + +<template> + <Page :auto-content-height="true"> + <div class="flex h-full gap-[8px]"> + <BasicTable class="flex-1 overflow-hidden" table-title="缁翠慨宸ュ崟鍒楄〃"> + <template #toolbar-tools> + <Space> + <a-button v-access:code="['eims:repairRes:export']" @click="handleDownloadExcel"> + {{ $t('pages.common.export') }} + </a-button> + <a-button + :disabled="!vxeCheckboxChecked(tableApi)" + danger + type="primary" + v-access:code="['eims:repairRes:remove']" + @click="handleMultiDelete" + > + {{ $t('pages.common.delete') }} + </a-button> + <a-button type="primary" v-access:code="['eims:repairRes:add']" @click="handleAdd"> + {{ $t('pages.common.add') }} + </a-button> + </Space> + </template> + + <template #action="{ row }"> + <Space> + <ghost-button v-access:code="['eims:repairRes: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:repairRes:remove']" @click.stop=""> + {{ $t('pages.common.delete') }} + </ghost-button> + </Popconfirm> + </Space> + </template> + </BasicTable> + </div> + <RepairResDrawer @reload="tableApi.query()" /> + </Page> +</template> 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 new file mode 100644 index 0000000..c2eb892 --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue @@ -0,0 +1,210 @@ +<script setup lang="ts"> +import { computed, ref } from 'vue'; + +import { useVbenDrawer, useVbenModal } from '@vben/common-ui'; +import { $t } from '@vben/locales'; +import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils'; + +import { InputSearch, Modal } from 'ant-design-vue'; + +import { useVbenForm } from '#/adapter/form'; +import { addRepairRes, getRepairRes, updateRepairRes } from '#/api/eims/repair-res'; +import { getDeptTree, userList } from '#/api/system/user'; +import reqModal from '#/views/eims/components/repair-req-modal.vue'; + +import { drawerSchema } from './data'; + +const emit = defineEmits<{ reload: [] }>(); + +const isUpdate = ref(false); +const title = computed(() => { + return isUpdate.value ? $t('pages.common.edit') : $t('pages.common.add'); +}); + +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 }; + const { resUser } = drawerApi.getData() as { resUser?: number | string }; + const { resDept } = drawerApi.getData() as { resDept?: number | string }; + isUpdate.value = !!id; + // 鍒濆鍖� + await setupDeptSelect(); + // 鏂板鏃堕粯璁ゅ~鍏呯櫥褰曚汉涓烘姤淇汉 + if (!isUpdate.value && resUser !== null && resDept !== null) { + await formApi.setValues({ 'resUser': resUser, 'resDept': resDept }); + await setupUserOptions(resDept); + } + formApi.updateSchema([ + { + componentProps: { + disabled: isUpdate.value + }, + fieldName: 'resCode' + } + ]); + // 鏇存柊 && 璧嬪�� + if (isUpdate.value && id) { + const record = await getRepairRes(id); + await formApi.setValues(record); + if (isUpdate.value && record.resDept) { + await setupUserOptions(record.resDept); + } + } + + drawerApi.drawerLoading(false); + } +}); + +const [ReqModal, reqModalApi] = useVbenModal({ + connectedComponent: reqModal, + draggable: true, + title: '閫夋嫨鎶ヤ慨鍗�' +}); + +function handleReqModal() { + reqModalApi.setData({}); + reqModalApi.open(); +} +/** + * 鐢ㄦ埛鐨勫姞杞� + */ +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 ? '璇烽�夋嫨' : '璇ラ儴闂ㄤ笅鏆傛棤鐢ㄦ埛'; + 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) : addRepairRes(data)); + emit('reload'); + await handleCancel(); + } catch (error) { + console.error(error); + } finally { + drawerApi.drawerLoading(false); + } +} + +async function handleCancel() { + drawerApi.close(); + await formApi.resetForm(); +} + +/** + * 鎵撳紑鏌ヨ鎶ヤ慨鍗� + */ +function onSearchReq() { + handleReqModal(); +} +/** + * 鏇存柊閫夋嫨鐨勬姤淇崟 + * @param req + */ +async function updateSelect(req: any) { + // 閫夋嫨鎶ヤ慨鍗曞悗鐢熸垚缁翠慨鍗曞彿 + if (!req.code || !req.id) { + Modal.error({ + content: '鑾峰彇淇濅慨鍗曞け璐ワ紝璇烽噸鏂扮櫥褰曞悗閲嶈瘯锛�', + title: '鎻愮ず' + }); + } + const resCode = `WXD${req.code.slice(3)}`; + await formApi.setValues({ 'reqId': req.id, 'reqCode': req.code, 'resCode': resCode }); +} +</script> + +<template> + <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]"> + <BasicForm> + <template #reqCode="slotProps"> + <InputSearch :enter-button="true" placeholder="璇烽�夋嫨" @search="onSearchReq" v-bind="slotProps" :disabled="isUpdate" /> + </template> + </BasicForm> + <ReqModal class="w-[1200px]" @update-select="updateSelect" /> + </BasicDrawer> +</template> 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 1c0cb60..a5f4fd5 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 @@ -8,6 +8,7 @@ FIXTURE_BORROW_STATUS = 'fixture_borrow_status', // 宸ュ叿锛堟不鍏凤級鍊熺敤鐘舵�� REPAIR_FAULT_TYPE = 'repair_fault_type', // 鎶ヤ慨鐘舵�� REPAIR_REQ_STATUS = 'repair_req_status', // 鎶ヤ慨鐘舵�� + REPAIR_RES_STATUS = 'repair_res_status', // 缁翠慨鐘舵�� REPAIR_REQ_TYPE = 'repair_req_type', // 鎶ヤ慨绫诲瀷 REPAIR_URGENCY_LEVEL = 'repair_urgency_level', // 鎶ヤ慨绱ф�ョ▼搴� SYS_COMMON_STATUS = 'sys_common_status', diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java index e40c5f1..0b2d7c2 100644 --- a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java +++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java @@ -33,19 +33,4 @@ */ String EIMS_GENERATE_CODE = "eims_generate_code:"; - /** - * ***********************瀛楀吀*********************** - */ - - - /** - * 璁惧鍗曚綅unit - */ - String EIMS_EQU_UNIT = "eims_equ_unit"; - - /** - * 璁惧瀵煎叆鐘舵�� - */ - String EIMS_IMPORT_STATUS = "equ_import_status"; - } 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 new file mode 100644 index 0000000..23c83b8 --- /dev/null +++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java @@ -0,0 +1,52 @@ +package org.dromara.common.core.constant; + +/** + * 瀛楀吀 + */ +public interface DictConstants { + + + /** + * 璁惧鍗曚綅unit + */ + String EIMS_EQU_UNIT = "eims_equ_unit"; + + /** + * 璁惧瀵煎叆鐘舵�� + */ + String EIMS_IMPORT_STATUS = "equ_import_status"; + /** + * 鎶ヤ慨鐘舵�� + */ + String REPAIR_REQ_STATUS = "repair_req_status"; + interface REPAIR_REQ_STATUS_DETAIL { + /** + * 鎺ュ崟 + */ + String JIEDAN = "0"; + /** + * 缁翠慨 + */ + String WEIXIU = "1"; + /** + * 瀹屾垚 + */ + String WANCHENG = "2"; + } + + /** + * 缁翠慨宸ュ崟鐘舵�� + */ + String REPAIR_RES_STATUS = "repair_res_status"; + interface REPAIR_RES_STATUS_DETAIL { + /** + * 缁翠慨 + */ + String WEIXIU = "0"; + /** + * 瀹屾垚 + */ + String WANCHENG = "1"; + } + +} diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairReqService.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairReqService.java new file mode 100644 index 0000000..e80ce43 --- /dev/null +++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairReqService.java @@ -0,0 +1,11 @@ +package org.dromara.common.core.service; + +public interface RepairReqService { + /** + * 閫氳繃鎶ヤ慨鍗旾D鏌ヨ淇濅慨鍗昪ode + * + * @param reqIds 鎶ヤ慨鍗旾D涓查�楀彿鍒嗛殧 + * @return 鎶ヤ慨鍗曞悕绉颁覆閫楀彿鍒嗛殧 + */ + String selectRepairReqCodeByIds(String reqIds); +} diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairResService.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairResService.java new file mode 100644 index 0000000..f9a399d --- /dev/null +++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RepairResService.java @@ -0,0 +1,11 @@ +package org.dromara.common.core.service; + +public interface RepairResService { + /** + * 閫氳繃缁翠慨宸ュ崟ID鏌ヨ缁翠慨宸ュ崟code + * + * @param resIds 缁翠慨宸ュ崟ID涓查�楀彿鍒嗛殧 + * @return 缁翠慨宸ュ崟鍚嶇О涓查�楀彿鍒嗛殧 + */ + String selectRepairResCodeByIds(String resIds); +} diff --git a/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java index 661dd84..2f7f37c 100644 --- a/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java +++ b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java @@ -50,4 +50,14 @@ */ String FIXTURE_ID_TO_NAME = "fixture_id_to_name"; + /** + * 鎶ヤ慨鍗昳d杞琧ode + */ + String REPAIR_REQ_ID_TO_CODE = "repair_req_id_to_code"; + + /** + * 缁翠慨宸ュ崟id杞琧ode + */ + String REPAIR_RES_ID_TO_CODE = "repair_res_id_to_code"; + } diff --git a/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairReqCodeTranslationImpl.java b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairReqCodeTranslationImpl.java new file mode 100644 index 0000000..83870cc --- /dev/null +++ b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairReqCodeTranslationImpl.java @@ -0,0 +1,30 @@ +package org.dromara.common.translation.core.impl; + +import lombok.AllArgsConstructor; +import org.dromara.common.core.service.FixtureService; +import org.dromara.common.core.service.RepairReqService; +import org.dromara.common.translation.annotation.TranslationType; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.common.translation.core.TranslationInterface; + +/** + * 鎶ヤ慨鍗昳d杞琧ode + * + * @author zhuguifei + */ +@AllArgsConstructor +@TranslationType(type = TransConstant.REPAIR_REQ_ID_TO_CODE) +public class RepairReqCodeTranslationImpl implements TranslationInterface<String> { + + private final RepairReqService repairReqService; + + @Override + public String translation(Object key, String other) { + if (key instanceof String ids) { + return repairReqService.selectRepairReqCodeByIds(ids); + } else if (key instanceof Long id) { + return repairReqService.selectRepairReqCodeByIds(id.toString()); + } + return null; + } +} diff --git a/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairResCodeTranslationImpl.java b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairResCodeTranslationImpl.java new file mode 100644 index 0000000..050982d --- /dev/null +++ b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/RepairResCodeTranslationImpl.java @@ -0,0 +1,30 @@ +package org.dromara.common.translation.core.impl; + +import lombok.AllArgsConstructor; +import org.dromara.common.core.service.RepairReqService; +import org.dromara.common.core.service.RepairResService; +import org.dromara.common.translation.annotation.TranslationType; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.common.translation.core.TranslationInterface; + +/** + * 缁翠慨宸ュ崟id杞琧ode + * + * @author zhuguifei + */ +@AllArgsConstructor +@TranslationType(type = TransConstant.REPAIR_RES_ID_TO_CODE) +public class RepairResCodeTranslationImpl implements TranslationInterface<String> { + + private final RepairResService repairResService; + + @Override + public String translation(Object key, String other) { + if (key instanceof String ids) { + return repairResService.selectRepairResCodeByIds(ids); + } else if (key instanceof Long id) { + return repairResService.selectRepairResCodeByIds(id.toString()); + } + return null; + } +} diff --git a/eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 1dcf5ed..427b607 100644 --- a/eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -8,3 +8,5 @@ org.dromara.common.translation.core.impl.EquNameTranslationImpl org.dromara.common.translation.core.impl.FixtureTypeNameTranslationImpl org.dromara.common.translation.core.impl.FixtureNameTranslationImpl +org.dromara.common.translation.core.impl.RepairReqCodeTranslationImpl +org.dromara.common.translation.core.impl.RepairResCodeTranslationImpl 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 new file mode 100644 index 0000000..b770326 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.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.EimsRepairResVo; +import org.dromara.eims.domain.bo.EimsRepairResBo; +import org.dromara.eims.service.IEimsRepairResService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 缁翠慨宸ュ崟 + * + * @author zhuguifei + * @date 2025-02-25 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/eims/repairRes") +public class EimsRepairResController extends BaseController { + + private final IEimsRepairResService eimsRepairResService; + + /** + * 鏌ヨ缁翠慨宸ュ崟鍒楄〃 + */ + @SaCheckPermission("eims:repairRes:list") + @GetMapping("/list") + public TableDataInfo<EimsRepairResVo> list(EimsRepairResBo bo, PageQuery pageQuery) { + //return eimsRepairResService.queryPageList(bo, pageQuery); + return eimsRepairResService.queryPageListCustom(bo, pageQuery); + } + + /** + * 瀵煎嚭缁翠慨宸ュ崟鍒楄〃 + */ + @SaCheckPermission("eims:repairRes:export") + @Log(title = "缁翠慨宸ュ崟", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EimsRepairResBo bo, HttpServletResponse response) { + List<EimsRepairResVo> list = eimsRepairResService.queryList(bo); + ExcelUtil.exportExcel(list, "缁翠慨宸ュ崟", EimsRepairResVo.class, response); + } + + /** + * 鑾峰彇缁翠慨宸ュ崟璇︾粏淇℃伅 + * + * @param id 涓婚敭 + */ + @SaCheckPermission("eims:repairRes:query") + @GetMapping("/{id}") + public R<EimsRepairResVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long id) { + return R.ok(eimsRepairResService.queryById(id)); + } + + /** + * 鏂板缁翠慨宸ュ崟 + */ + @SaCheckPermission("eims:repairRes:add") + @Log(title = "缁翠慨宸ュ崟", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsRepairResBo bo) { + return toAjax(eimsRepairResService.insertByBo(bo)); + } + + /** + * 淇敼缁翠慨宸ュ崟 + */ + @SaCheckPermission("eims:repairRes:edit") + @Log(title = "缁翠慨宸ュ崟", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsRepairResBo bo) { + return toAjax(eimsRepairResService.updateByBo(bo)); + } + + /** + * 鍒犻櫎缁翠慨宸ュ崟 + * + * @param ids 涓婚敭涓� + */ + @SaCheckPermission("eims:repairRes:remove") + @Log(title = "缁翠慨宸ュ崟", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long[] ids) { + return toAjax(eimsRepairResService.deleteWithValidByIds(List.of(ids), true)); + } +} 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 new file mode 100644 index 0000000..ee1b8a3 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java @@ -0,0 +1,100 @@ +package org.dromara.eims.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +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_res + * + * @author zhuguifei + * @date 2025-02-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("eims_repair_res") +public class EimsRepairRes extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 鎶ヤ慨鍗昳d + */ + private Long reqId; + + /** + * 缁翠慨鍗曞彿 + */ + private String resCode; + + /** + * 缁翠慨浜� + */ + private Long resUser; + + /** + * 缁翠慨浜洪儴闂� + */ + private Long resDept; + + /** + * 鍘熷洜鍒嗘瀽 + + */ + private String resReason; + + /** + * 澶勭悊鎺柦 + */ + private String resHandle; + + /** + * 棰勯槻鎺柦 + */ + private String resPrevent; + + /** + * 缁翠慨鐘舵��(瀛楀吀) + */ + private String status; + + /** + * 寮�濮嬫椂闂� + */ + private Date startTime; + + /** + * 缁撴潫鏃堕棿 + */ + private Date endTime; + + /** + * 浣跨敤宸ュ叿 + */ + private String useFixture; + + /** + * 浣跨敤澶囦欢 + */ + private String useParts; + + /** + * 澶囨敞 + */ + 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 new file mode 100644 index 0000000..54407d4 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java @@ -0,0 +1,110 @@ +package org.dromara.eims.domain.bo; + +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.eims.domain.EimsRepairRes; +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_res + * + * @author zhuguifei + * @date 2025-02-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = EimsRepairRes.class, reverseConvertGenerate = false) +public class EimsRepairResBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 鎶ヤ慨鍗昳d + */ + @NotNull(message = "鎶ヤ慨鍗曚笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private Long reqId; + + /** + * 缁翠慨鍗曞彿 + */ + @NotNull(message = "鎶ヤ慨鍗曠紪鍙蜂笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String resCode; + + /** + * 缁翠慨浜� + */ + @NotNull(message = "缁翠慨浜轰笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private Long resUser; + + /** + * 缁翠慨浜洪儴闂� + */ + @NotNull(message = "缁翠慨浜洪儴闂ㄤ笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private Long resDept; + + /** + * 鍘熷洜鍒嗘瀽 + + */ + private String resReason; + + /** + * 澶勭悊鎺柦 + */ + private String resHandle; + + /** + * 棰勯槻鎺柦 + */ + private String resPrevent; + + /** + * 缁翠慨鐘舵��(瀛楀吀) + */ + @NotBlank(message = "缁翠慨鐘舵��(瀛楀吀)涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 寮�濮嬫椂闂� + */ + @NotNull(message = "寮�濮嬫椂闂翠笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private Date startTime; + + /** + * 缁撴潫鏃堕棿 + */ + private Date endTime; + + /** + * 浣跨敤宸ュ叿 + */ + private String useFixture; + + /** + * 浣跨敤澶囦欢 + */ + private String useParts; + + /** + * 澶囨敞 + */ + private String remark; + + + // 鍏宠仈琛ㄥ瓧娈� + private String reqCode;//鎶ヤ慨鍗曠紪鐮� + private String reqUser;//鎶ヤ慨浜� + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairReqVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairReqVo.java index b490f21..4b07153 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairReqVo.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairReqVo.java @@ -130,6 +130,12 @@ private Long repairId; /** + * 缁翠慨宸ュ崟code + */ + @Translation(type = TransConstant.REPAIR_RES_ID_TO_CODE, mapper = "repairId") + private String resCode; + + /** * 缁翠慨浜洪儴闂� */ @ExcelProperty(value = "缁翠慨浜洪儴闂�") 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 new file mode 100644 index 0000000..1060606 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java @@ -0,0 +1,142 @@ +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.EimsRepairRes; +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_res + * + * @author zhuguifei + * @date 2025-02-25 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = EimsRepairRes.class) +public class EimsRepairResVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 鎶ヤ慨鍗昳d + */ + @ExcelProperty(value = "鎶ヤ慨鍗昳d") + private Long reqId; + + /** + * 缁翠慨鍗曞彿 + */ + @ExcelProperty(value = "缁翠慨鍗曞彿") + private String resCode; + + /** + * 缁翠慨浜� + */ + private Long resUser; + + @ExcelProperty(value = "缁翠慨浜�") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "resUser") + private String resUserName; + + /** + * 缁翠慨浜洪儴闂� + */ + + private Long resDept; + @ExcelProperty(value = "缁翠慨浜洪儴闂�") + @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "resDept") + private String resDeptName; + + /** + * 鍘熷洜鍒嗘瀽 + + */ + @ExcelProperty(value = "鍘熷洜鍒嗘瀽") + private String resReason; + + /** + * 澶勭悊鎺柦 + */ + @ExcelProperty(value = "澶勭悊鎺柦") + private String resHandle; + + /** + * 棰勯槻鎺柦 + */ + @ExcelProperty(value = "棰勯槻鎺柦") + private String resPrevent; + + /** + * 缁翠慨鐘舵��(瀛楀吀) + */ + @ExcelProperty(value = "缁翠慨鐘舵��(瀛楀吀)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "repair_res_status") + private String status; + + /** + * 寮�濮嬫椂闂� + */ + @ExcelProperty(value = "寮�濮嬫椂闂�") + private Date startTime; + + /** + * 缁撴潫鏃堕棿 + */ + @ExcelProperty(value = "缁撴潫鏃堕棿") + private Date endTime; + + /** + * 浣跨敤宸ュ叿 + */ + @ExcelProperty(value = "浣跨敤宸ュ叿") + private String useFixture; + + /** + * 浣跨敤澶囦欢 + */ + @ExcelProperty(value = "浣跨敤澶囦欢") + private String useParts; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + + // 鍏宠仈琛ㄥ瓧娈� + private String reqType;//鎶ヤ慨绫诲瀷 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date reqTime;//鎶ヤ慨鏃堕棿 + private String equName;//璁惧鍚嶇О + private String fixtureName;//宸ュ叿鍚嶇О + private String faultType;//鏁呴殰绫诲埆 + private String reqDeptName;//鎶ヤ慨閮ㄩ棬 + private String reqUserName;//鎶ヤ慨浜� + private String reqDesc;//鏁呴殰鎻忚堪 + @Translation(type = TransConstant.REPAIR_REQ_ID_TO_CODE, mapper = "reqId") + private String reqCode;//鎶ヤ慨缂栫爜 + + +} diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/listener/EimsEquImportListener.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/listener/EimsEquImportListener.java index dbd984e..2fd2310 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/listener/EimsEquImportListener.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/listener/EimsEquImportListener.java @@ -7,6 +7,7 @@ import com.alibaba.excel.exception.ExcelDataConvertException; import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.constant.Constants; +import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.DictService; import org.dromara.common.core.utils.DateUtils; @@ -60,7 +61,7 @@ this.dictService = SpringUtils.getBean(DictService.class); this.isUpdateSupport = isUpdateSupport; this.operUserId = LoginHelper.getUserId(); - this.unitDictMap = dictService.getAllDictByDictType(CacheConstants.EIMS_EQU_UNIT); + this.unitDictMap = dictService.getAllDictByDictType(DictConstants.EIMS_EQU_UNIT); } @Override @@ -94,7 +95,7 @@ //ValidatorUtils.validate(equ); //娣诲姞瀛楁榛樿灞炴�� - equ.setImportStatus(dictService.getDictValue(CacheConstants.EIMS_IMPORT_STATUS,"鏂板鍏�")); + equ.setImportStatus(dictService.getDictValue(DictConstants.EIMS_IMPORT_STATUS,"鏂板鍏�")); equ.setCreateBy(operUserId); equService.insertByBo(equ); successNum++; diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairReqMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairReqMapper.java index f3c6ec4..e52cc03 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairReqMapper.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairReqMapper.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.annotation.DataColumn; +import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.eims.domain.EimsRepairReq; import org.dromara.eims.domain.vo.EimsRepairReqVo; @@ -14,7 +16,12 @@ * @author zhuguifei * @date 2025-02-11 */ +@DataPermission({ + @DataColumn(key = "deptName", value = "a.create_dept"), + @DataColumn(key = "userName", value = "a.create_by") +}) public interface EimsRepairReqMapper extends BaseMapperPlus<EimsRepairReq, EimsRepairReqVo> { + Page<EimsRepairReqVo> selectRepairReqList(@Param("page") Page<EimsRepairReqVo> page, @Param(Constants.WRAPPER) Wrapper<EimsRepairReq> queryWrapper); } diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairResMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairResMapper.java new file mode 100644 index 0000000..96f6469 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairResMapper.java @@ -0,0 +1,20 @@ +package org.dromara.eims.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.eims.domain.EimsRepairRes; +import org.dromara.eims.domain.vo.EimsRepairResVo; + +/** + * 缁翠慨宸ュ崟Mapper鎺ュ彛 + * + * @author zhuguifei + * @date 2025-02-25 + */ +public interface EimsRepairResMapper extends BaseMapperPlus<EimsRepairRes, EimsRepairResVo> { + Page<EimsRepairResVo> selectRepairResList(@Param("page") Page<EimsRepairResVo> page, @Param(Constants.WRAPPER) Wrapper<EimsRepairRes> queryWrapper); + +} 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 new file mode 100644 index 0000000..00c9d02 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java @@ -0,0 +1,80 @@ +package org.dromara.eims.service; + +import org.dromara.eims.domain.bo.EimsRepairReqBo; +import org.dromara.eims.domain.vo.EimsRepairReqVo; +import org.dromara.eims.domain.vo.EimsRepairResVo; +import org.dromara.eims.domain.bo.EimsRepairResBo; +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-25 + */ +public interface IEimsRepairResService { + + /** + * 鏌ヨ缁翠慨宸ュ崟 + * + * @param id 涓婚敭 + * @return 缁翠慨宸ュ崟 + */ + EimsRepairResVo queryById(Long id); + + /** + * 鍒嗛〉鏌ヨ缁翠慨宸ュ崟鍒楄〃 + * + * @param bo 鏌ヨ鏉′欢 + * @param pageQuery 鍒嗛〉鍙傛暟 + * @return 缁翠慨宸ュ崟鍒嗛〉鍒楄〃 + */ + TableDataInfo<EimsRepairResVo> queryPageList(EimsRepairResBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ绗﹀悎鏉′欢鐨勭淮淇伐鍗曞垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @return 缁翠慨宸ュ崟鍒楄〃 + */ + List<EimsRepairResVo> queryList(EimsRepairResBo bo); + + /** + * 鏂板缁翠慨宸ュ崟 + * + * @param bo 缁翠慨宸ュ崟 + * @return 鏄惁鏂板鎴愬姛 + */ + Boolean insertByBo(EimsRepairResBo bo); + + /** + * 淇敼缁翠慨宸ュ崟 + * + * @param bo 缁翠慨宸ュ崟 + * @return 鏄惁淇敼鎴愬姛 + */ + Boolean updateByBo(EimsRepairResBo bo); + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ淮淇伐鍗曚俊鎭� + * + * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎 + * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠� + * @return 鏄惁鍒犻櫎鎴愬姛 + */ + Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); + + + /** + * 鍒嗛〉鏌ヨ缁翠慨宸ュ崟鍒楄〃-澶氳〃鏌ヨ + * + * @param bo 鏌ヨ鏉′欢 + * @param pageQuery 鍒嗛〉鍙傛暟 + * @return 缁翠慨宸ュ崟鍒嗛〉鍒楄〃 + */ + TableDataInfo<EimsRepairResVo> queryPageListCustom(EimsRepairResBo bo, PageQuery pageQuery); +} 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 55d1561..edff66a 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 @@ -1,7 +1,11 @@ package org.dromara.eims.service.impl; +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.service.RepairReqService; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -11,6 +15,7 @@ import lombok.RequiredArgsConstructor; import org.dromara.eims.domain.EimsEqu; import org.dromara.eims.domain.EimsFixtureBorrow; +import org.dromara.eims.domain.vo.EimsFixtureVo; import org.dromara.eims.domain.vo.EimsInventoryDetailVo; import org.dromara.eims.utils.DataFilterUtil; import org.dromara.system.domain.SysDept; @@ -36,7 +41,7 @@ */ @RequiredArgsConstructor @Service -public class EimsRepairReqServiceImpl implements IEimsRepairReqService { +public class EimsRepairReqServiceImpl implements IEimsRepairReqService, RepairReqService { private final EimsRepairReqMapper baseMapper; private final SysDeptMapper sysDeptMapper; @@ -68,7 +73,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); } @@ -86,7 +91,7 @@ qw.eq(bo.getRepairDept() != null, "a.repair_dept", bo.getRepairDept()); qw.eq(bo.getRepairUser() != null, "a.repair_user", bo.getRepairUser()); qw.eq(StringUtils.isNotBlank(bo.getFaultType()), "a,fault_type", bo.getFaultType()); - qw.eq(params.containsKey("createBy"), "a.create_by", params.get("createBy")); + qw.in(params.containsKey("createBy"), "a.create_by", (List<Long>) params.get("createBy")); qw.eq(params.containsKey("status"), "a.status", params.get("status")); qw.between(params.get("beginReqTime") != null && params.get("endReqTime") != null, "a.req_time", params.get("beginReqTime"), params.get("endReqTime")); @@ -216,4 +221,16 @@ } + @Override + public String selectRepairReqCodeByIds(String reqIds) { + List<String> list = new ArrayList<>(); + for (Long id : StringUtils.splitTo(reqIds, Convert::toLong)) { + EimsRepairReqVo vo = SpringUtils.getAopProxy(this).queryById(id); + if (ObjectUtil.isNotNull(vo)) { + list.add(vo.getCode()); + } + } + return String.join(StringUtils.SEPARATOR, list); + } + } 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 new file mode 100644 index 0000000..8fa2a81 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java @@ -0,0 +1,236 @@ +package org.dromara.eims.service.impl; + +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.RepairResService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.SpringUtils; +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.eims.domain.EimsEqu; +import org.dromara.eims.domain.EimsFixture; +import org.dromara.eims.domain.EimsRepairReq; +import org.dromara.eims.domain.vo.EimsRepairReqVo; +import org.dromara.eims.mapper.EimsRepairReqMapper; +import org.dromara.eims.utils.DataFilterUtil; +import org.dromara.system.domain.SysDept; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.mapper.SysDeptMapper; +import org.springframework.stereotype.Service; +import org.dromara.eims.domain.bo.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; + +/** + * 缁翠慨宸ュ崟Service涓氬姟灞傚鐞� + * + * @author zhuguifei + * @date 2025-02-25 + */ +@RequiredArgsConstructor +@Service +public class EimsRepairResServiceImpl implements IEimsRepairResService, RepairResService { + + private final EimsRepairResMapper baseMapper; + private final EimsRepairReqMapper reqMapper; + private final SysDeptMapper deptMapper; + + /** + * 鏌ヨ缁翠慨宸ュ崟 + * + * @param id 涓婚敭 + * @return 缁翠慨宸ュ崟 + */ + @Override + public EimsRepairResVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 鍒嗛〉鏌ヨ缁翠慨宸ュ崟鍒楄〃 + * + * @param bo 鏌ヨ鏉′欢 + * @param pageQuery 鍒嗛〉鍙傛暟 + * @return 缁翠慨宸ュ崟鍒嗛〉鍒楄〃 + */ + @Override + public TableDataInfo<EimsRepairResVo> queryPageList(EimsRepairResBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<EimsRepairRes> lqw = buildQueryWrapper(bo); + Page<EimsRepairResVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 鏌ヨ绗﹀悎鏉′欢鐨勭淮淇伐鍗曞垪琛� + * + * @param bo 鏌ヨ鏉′欢 + * @return 缁翠慨宸ュ崟鍒楄〃 + */ + @Override + public List<EimsRepairResVo> queryList(EimsRepairResBo bo) { + LambdaQueryWrapper<EimsRepairRes> lqw = buildQueryWrapper(bo); + List<EimsRepairResVo> eimsRepairResVos = baseMapper.selectVoList(lqw); + return eimsRepairResVos; + } + + private LambdaQueryWrapper<EimsRepairRes> buildQueryWrapper(EimsRepairResBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<EimsRepairRes> lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getResUser() != null, EimsRepairRes::getResUser, bo.getResUser()); + lqw.eq(bo.getResDept() != null, EimsRepairRes::getResDept, bo.getResDept()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsRepairRes::getStatus, bo.getStatus()); + lqw.between(params.get("beginStartTime") != null && params.get("endStartTime") != null, + EimsRepairRes::getStartTime, params.get("beginStartTime"), params.get("endStartTime")); + lqw.between(params.get("beginEndTime") != null && params.get("endEndTime") != null, + EimsRepairRes::getEndTime, params.get("beginEndTime"), params.get("endEndTime")); + return lqw; + } + + /** + * 鏂板缁翠慨宸ュ崟 + * + * @param bo 缁翠慨宸ュ崟 + * @return 鏄惁鏂板鎴愬姛 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean insertByBo(EimsRepairResBo bo) { + EimsRepairRes add = MapstructUtils.convert(bo, EimsRepairRes.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + // 鏂板缁翠慨宸ュ崟鐨勬椂鍊欐洿鏂版姤淇崟鏁版嵁 + EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); + reqVo.setRepairId(add.getId()); + reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU); + EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); + reqMapper.updateById(req); + } + return flag; + } + + /** + * 淇敼缁翠慨宸ュ崟 + * + * @param bo 缁翠慨宸ュ崟 + * @return 鏄惁淇敼鎴愬姛 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean updateByBo(EimsRepairResBo bo) { + EimsRepairRes update = MapstructUtils.convert(bo, EimsRepairRes.class); + + EimsRepairResVo resVo = baseMapper.selectVoById(bo.getId()); + String status = resVo.getStatus(); + //棣栨鏇存柊闇�瑕佸悓姝ユ洿鏂版姤淇崟鐘舵�� + if (bo.getStatus().equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WANCHENG) && + status.equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU)) { + EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); + reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WANCHENG); + EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); + reqMapper.updateById(req); + } + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(EimsRepairRes entity) { + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ淮淇伐鍗曚俊鎭� + * + * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎 + * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠� + * @return 鏄惁鍒犻櫎鎴愬姛 + */ + @Override + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if (isValid) { + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public TableDataInfo<EimsRepairResVo> queryPageListCustom(EimsRepairResBo bo, PageQuery pageQuery) { + Page<EimsRepairResVo> page = baseMapper.selectRepairResList(pageQuery.build(), buildWrapper(bo)); + return TableDataInfo.build(page); + } + + private QueryWrapper<EimsRepairRes> buildWrapper(EimsRepairResBo bo) { + Map<String, Object> params = bo.getParams(); + QueryWrapper<EimsRepairRes> qw = Wrappers.query(); + 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()); + + List<Long> allDescendantIds = getAllDescendantIds(bo.getResDept()); + qw.in(bo.getResDept() != null, "res.res_dept", allDescendantIds); + + qw.eq(StringUtils.isNotBlank(bo.getStatus()), "res.status", bo.getStatus()); + qw.orderByDesc("res.create_time"); + return qw; + } + + + /** + * 鏍规嵁id锛岃幏鍙栨墍鏈夊悗浠d + * + * @param rootId + * @return + */ + public List<Long> getAllDescendantIds(Long rootId) { + List<Long> result = new ArrayList<>(); + result.add(rootId); + collectDescendants(rootId, result); + return result; + } + + private void collectDescendants(Long currentId, List<Long> collector) { + QueryWrapper<SysDept> sysDeptWrapper = new QueryWrapper<>(); + sysDeptWrapper.lambda().eq(SysDept::getParentId, currentId); + + List<SysDeptVo> children = deptMapper.selectVoList(sysDeptWrapper); + if (children != null && !children.isEmpty()) { + for (SysDeptVo child : children) { + Long childId = child.getDeptId(); + collector.add(childId); + collectDescendants(childId, collector); + } + } + } + + + @Override + public String selectRepairResCodeByIds(String resIds) { + List<String> list = new ArrayList<>(); + for (Long id : StringUtils.splitTo(resIds, Convert::toLong)) { + EimsRepairResVo vo = SpringUtils.getAopProxy(this).queryById(id); + if (ObjectUtil.isNotNull(vo)) { + list.add(vo.getResCode()); + } + } + return String.join(StringUtils.SEPARATOR, list); + } +} 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 bee36a7..8ecc5d3 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 @@ -1,10 +1,12 @@ package org.dromara.eims.utils; +import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.eims.domain.bo.EimsRepairReqBo; +import org.dromara.eims.domain.bo.EimsRepairResBo; -import java.util.Set; +import java.util.*; /** * 鑷畾涔夋暟鎹殧绂� @@ -26,17 +28,41 @@ //鎶ヤ慨鍗� public void filterRepairReq(EimsRepairReqBo bo){ LoginUser loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) return; Set<String> rolePermission = loginUser.getRolePermission(); - if (rolePermission == null) return; - if (rolePermission.contains(Role.operator.name())) { - //缁翠慨宸ュ彧鑳芥煡璇㈣嚜宸辩殑鏁版嵁 - bo.setCreateBy(loginUser.getUserId()); + Map<String, Object> params = bo.getParams(); + List<Long> userList = new ArrayList<>(); + if (rolePermission == null) { + //娌℃湁鏉冮檺涓嶅厑璁告煡璇㈡暟鎹� + userList.add(-1L); + + }else if (rolePermission.contains(Role.operator.name())) { + //鎿嶄綔宸ュ彧鑳芥煡璇㈣嚜宸辩殑鏁版嵁 + userList.add(loginUser.getUserId()); }else if (rolePermission.contains(Role.repair.name())) { //TODO 缁翠慨宸ュ彧鑳芥煡璇㈡湭鎺ュ崟鐘舵�佺殑鎶ヤ慨鍗曪紙鍏蜂綋鐘舵�佸弬鑰冨瓧鍏竢epair_req_status锛� - bo.setStatus("0"); + bo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.JIEDAN); } - System.err.println(loginUser); + params.put("createBy", userList); + } + + //缁翠慨宸ュ崟 + public void filterRepairRes(EimsRepairResBo bo){ + 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); + + }else if (rolePermission.contains(Role.operator.name())) { + //鎿嶄綔宸ュ彧鑳芥煡璇㈣嚜宸辩殑鏁版嵁 + userList.add(loginUser.getUserId()); + }else if (rolePermission.contains(Role.repair.name())) { + //TODO 缁翠慨宸ュ彧鑳芥煡璇㈡湭鎺ュ崟鐘舵�佺殑鎶ヤ慨鍗曪紙鍏蜂綋鐘舵�佸弬鑰冨瓧鍏竢epair_req_status锛� + bo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.JIEDAN); + } + params.put("createBy", userList); } } diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairResMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairResMapper.xml new file mode 100644 index 0000000..80e8d78 --- /dev/null +++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairResMapper.xml @@ -0,0 +1,21 @@ +<?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.EimsRepairResMapper"> + <resultMap type="org.dromara.eims.domain.vo.EimsRepairResVo" id="EimsRepairResResult"> + </resultMap> + <select id="selectRepairResList" resultMap="EimsRepairResResult"> + SELECT res.*,req.req_type reqType,req.req_time reqTime,equ.equ_name equName,req.fault_type faultType, + fix.fixture_name fixtureName,dep.dept_name reqDeptName,usr.nick_name reqUserName,req.req_desc reqDesc, + req.code reqCode + FROM eims_repair_res res + LEFT JOIN eims_repair_req req on res.req_id = req.id + LEFT JOIN eims_equ equ ON req.equ_id = equ.equ_id + LEFT JOIN eims_fixture fix ON req.fixture_id = fix.id + LEFT JOIN sys_dept dep ON req.req_dept = dep.dept_id + LEFT JOIN sys_user usr ON req.req_user = usr.user_id + ${ew.getCustomSqlSegment} + </select> + +</mapper> -- Gitblit v1.9.3