From ec4d16c8a630960a4671a60f4d1957fd3de9def3 Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期四, 27 二月 2025 16:53:59 +0800
Subject: [PATCH] 完成维修工单查看维修记录子表

---
 eims-ui/apps/web-antd/src/constants/dict/index.ts                                                         |    9 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairRecordServiceImpl.java   |  133 ++++++
 eims-ui/apps/web-antd/src/api/eims/repair-res/index.ts                                                    |   10 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairRecordBo.java               |   73 +++
 eims-ui/apps/web-antd/src/views/eims/repair-record/data.tsx                                               |   27 +
 eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java                 |    3 
 eims-ui/apps/web-antd/src/views/eims/repair-res/repair-res-drawer.vue                                     |    2 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairRecordController.java      |  105 ++++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsRepairResController.java         |   10 
 eims-ui/apps/web-antd/src/api/eims/repair-record/index.ts                                                 |   60 ++
 eims-ui/apps/web-antd/src/views/eims/repair-record/index.vue                                              |   87 +++
 eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java |   10 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java      |   82 +++
 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsRepairRecordMapper.xml                      |    7 
 eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java             |    7 
 eims-ui/apps/web-antd/src/views/eims/fixture/index.vue                                                    |    1 
 eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue                                                 |   17 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/utils/DataFilterUtil.java                       |   14 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRes.java                       |    4 
 eims/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java     |   29 +
 eims-ui/apps/web-antd/src/views/eims/repair-req/send-work-drawer.vue                                      |  142 ++++++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsRepairRecord.java                    |   68 +++
 eims-ui/apps/web-antd/src/api/system/user/index.ts                                                        |   35 
 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java     |   20 
 eims-ui/apps/web-antd/src/views/eims/repair-req/data.tsx                                                  |   38 +
 eims-ui/apps/web-antd/src/views/eims/repair-req/index.vue                                                 |   34 +
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairRecordService.java           |   68 +++
 eims-ui/apps/web-antd/src/views/eims/repair-req/repair-req-drawer.vue                                     |    9 
 eims-ui/apps/web-antd/src/api/eims/repair-record/model.d.ts                                               |   41 +
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsRepairRecordMapper.java              |   15 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsRepairResService.java              |    8 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java                  |   16 
 eims-ui/apps/web-antd/src/views/eims/repair-res/data.tsx                                                  |   20 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairResVo.java                  |    4 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsRepairRecordVo.java               |   82 +++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairReqServiceImpl.java      |   23 
 36 files changed, 1,254 insertions(+), 59 deletions(-)

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

--
Gitblit v1.9.3