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