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