From d5dff36d38fc7a211b34916796bbc37f17e7a2d0 Mon Sep 17 00:00:00 2001
From: 朱桂飞 <zhuguifei@zhuguifeideMacBook-Air.local>
Date: 星期三, 15 一月 2025 16:33:15 +0800
Subject: [PATCH] 完成设备管理部分功能

---
 eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/EquNameTranslationImpl.java                  |   30 
 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquStatuMapper.xml                                                               |    2 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquStatuBo.java                                                        |   72 +
 eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx                                                                                        |  269 +++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquService.java                                                         |   16 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquServiceImpl.java                                                 |  206 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTrialServiceImpl.java                                            |  143 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquStatu.java                                                             |   73 +
 eims-ui/apps/web-antd/src/views/eims/equ/index.vue                                                                                             |   65 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTrialController.java                                               |  105 +
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquStatuServiceImpl.java                                            |  135 +
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTypeController.java                                                |   41 
 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquService.java                                              |   11 
 eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java                            |    7 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTrialMapper.java                                                       |   15 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquType.java                                                              |    6 
 eims-ui/apps/web-antd/src/views/eims/equ-trial/data.tsx                                                                                        |  291 ++++
 eims-ui/apps/web-antd/src/api/eims/equ-trial/model.d.ts                                                                                        |  225 +++
 eims-ui/apps/web-antd/src/views/eims/equ-statu/statu-preview-drawer.vue                                                                        |   32 
 eims-ui/apps/web-antd/src/views/eims/equ-statu/index.vue                                                                                       |  244 +++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquStatuVo.java                                                        |   99 +
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTypeService.java                                                     |   16 
 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTypeMapper.xml                                                                |    2 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java                                                    |   46 
 eims-ui/apps/web-antd/src/api/eims/equ-statu/index.ts                                                                                          |   61 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquTrial.java                                                             |  114 +
 eims-ui/apps/web-antd/src/views/eims/equ-trial/equ-trial-drawer.vue                                                                            |  200 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTrialService.java                                                    |   68 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTrialVo.java                                                        |  144 ++
 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquTypeService.java                                          |    4 
 eims-ui/apps/web-antd/src/views/eims/equ/data.tsx                                                                                              |   12 
 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTrialMapper.xml                                                               |    2 
 eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |    1 
 eims-ui/apps/web-antd/src/views/eims/equ/equ-drawer.vue                                                                                        |    7 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquBo.java                                                             |   10 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquVo.java                                                             |    9 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEqu.java                                                                  |    6 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquStatuController.java                                               |  105 +
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTypeBo.java                                                         |    9 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTypeServiceImpl.java                                             |   66 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTypeMapper.java                                                        |   15 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTypeVo.java                                                         |    9 
 eims-ui/apps/web-antd/src/views/eims/equ-trial/index.vue                                                                                       |  247 +++
 eims-ui/apps/web-antd/src/api/eims/equ-statu/model.d.ts                                                                                        |  131 +
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquStatuMapper.java                                                       |   15 
 /dev/null                                                                                                                                      |  188 --
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquMapper.java                                                            |   15 
 eims-ui/apps/web-antd/src/views/eims/equ-trial/trial-preview-drawer.vue                                                                        |   32 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTrialBo.java                                                        |  112 +
 eims-ui/apps/web-antd/src/views/eims/equ-detail/index.vue                                                                                      |   29 
 eims-ui/apps/web-antd/src/api/eims/equ-trial/index.ts                                                                                          |   65 
 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquMapper.xml                                                                    |    2 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquStatuService.java                                                    |   68 
 eims-ui/apps/web-antd/src/views/eims/equ-statu/equ-statu-drawer.vue                                                                            |  206 ++
 54 files changed, 3,739 insertions(+), 364 deletions(-)

diff --git a/eims-ui/apps/web-antd/src/api/eims/equ-statu/index.ts b/eims-ui/apps/web-antd/src/api/eims/equ-statu/index.ts
new file mode 100644
index 0000000..12c29b1
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/api/eims/equ-statu/index.ts
@@ -0,0 +1,61 @@
+import type { EquStatuVO } from './model';
+
+import type { ID, IDS } from '#/api/common';
+
+import { commonExport } from '#/api/helper';
+import { requestClient } from '#/api/request';
+
+enum Api {
+  equStatuExport = '/eims/equStatu/export',
+  equStatuList = '/eims/equStatu/list',
+  root = '/eims/equStatu'
+}
+
+/**
+ * 鏌ヨ璁惧鐘舵�佽褰曞垪琛�
+ * @param query
+ * @returns {*}
+ */
+
+export function listEquStatu(params?: any) {
+  return requestClient.get<EquStatuVO[]>(Api.equStatuList, { params });
+}
+
+/**
+ * 鏌ヨ璁惧鐘舵�佽褰曡缁�
+ * @param statuId
+ */
+export function getEquStatu(statuId: ID) {
+  return requestClient.get<EquStatuVO>(`${Api.root}/${statuId}`);
+}
+
+/**
+ * 鏂板璁惧鐘舵�佽褰�
+ * @param data
+ */
+export function addEquStatu(data: any) {
+  return requestClient.postWithMsg<void>(Api.root, data);
+}
+
+/**
+ * 淇敼璁惧鐘舵�佽褰�
+ * @param data
+ */
+export function updateEquStatu(data: any) {
+  return requestClient.putWithMsg<void>(Api.root, data);
+}
+
+/**
+ * 鍒犻櫎璁惧鐘舵�佽褰�
+ * @param statuId
+ */
+export function delEquStatu(statuId: IDS) {
+  return requestClient.deleteWithMsg<void>(`${Api.root}/${statuId}`);
+}
+/**
+ * 瀵煎嚭
+ * @param
+ */
+export function equStatuExport(data: any) {
+  return commonExport(Api.equStatuExport, data);
+}
diff --git a/eims-ui/apps/web-antd/src/api/eims/equ-statu/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/equ-statu/model.d.ts
new file mode 100644
index 0000000..c75eb35
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/api/eims/equ-statu/model.d.ts
@@ -0,0 +1,131 @@
+export interface EquStatuVO {
+  /**
+   * 璁惧鐘舵�佽褰昳d
+   */
+  equStatuId: string | number;
+
+  /**
+   * 璁惧id
+   */
+  equId: string | number;
+
+  /**
+   * 鍙樻洿鍓嶇姸鎬�
+   */
+  beforeChange: string;
+
+  /**
+   * 鍙樻洿鍚庣姸鎬�
+   */
+  afterChange: string;
+
+  /**
+   * 鍙樻洿鏃ユ湡
+   */
+  changeDate: string;
+
+  /**
+   * 鍙樻洿浜�
+   */
+  changeUser: number;
+
+  /**
+   * 鍙樻洿浜洪儴闂�
+   */
+  userDept: number;
+
+  /**
+   * 鍙樻洿鎻忚堪
+   */
+  changeDesc: string;
+
+  /**
+   * 鎻忚堪
+   */
+  remark: string;
+
+}
+
+export interface EquStatuForm extends BaseEntity {
+  /**
+   * 璁惧鐘舵�佽褰昳d
+   */
+  equStatuId?: string | number;
+
+  /**
+   * 璁惧id
+   */
+  equId?: string | number;
+
+  /**
+   * 鍙樻洿鍓嶇姸鎬�
+   */
+  beforeChange?: string;
+
+  /**
+   * 鍙樻洿鍚庣姸鎬�
+   */
+  afterChange?: string;
+
+  /**
+   * 鍙樻洿鏃ユ湡
+   */
+  changeDate?: string;
+
+  /**
+   * 鍙樻洿浜�
+   */
+  changeUser?: number;
+
+  /**
+   * 鍙樻洿浜洪儴闂�
+   */
+  userDept?: number;
+
+  /**
+   * 鍙樻洿鎻忚堪
+   */
+  changeDesc?: string;
+
+  /**
+   * 鎻忚堪
+   */
+  remark?: string;
+
+}
+
+export interface EquStatuQuery extends PageQuery {
+
+  /**
+   * 璁惧id
+   */
+  equId?: string | number;
+
+  /**
+   * 鍙樻洿鍓嶇姸鎬�
+   */
+  beforeChange?: string;
+
+  /**
+   * 鍙樻洿鍚庣姸鎬�
+   */
+  afterChange?: string;
+
+  /**
+   * 鍙樻洿鏃ユ湡
+   */
+  changeDate?: string;
+
+  /**
+   * 鍙樻洿浜�
+   */
+  changeUser?: number;
+
+    /**
+     * 鏃ユ湡鑼冨洿鍙傛暟
+     */
+    params?: any;
+}
+
+
+
diff --git a/eims-ui/apps/web-antd/src/api/eims/equ-trial/index.ts b/eims-ui/apps/web-antd/src/api/eims/equ-trial/index.ts
new file mode 100644
index 0000000..c59e6b7
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/api/eims/equ-trial/index.ts
@@ -0,0 +1,65 @@
+import type { EquTrialVO } from './model';
+
+import type { ID, IDS } from '#/api/common';
+
+import { commonExport } from '#/api/helper';
+import { requestClient } from '#/api/request';
+
+
+enum Api {
+  equTrialExport = '/eims/equTrial/export',
+  equTrialList = '/eims/equTrial/list',
+  root = '/eims/equTrial'
+}
+
+
+
+/**
+ * 鏌ヨ璁惧璇曚骇璁板綍鍒楄〃
+ * @param query
+ * @returns {*}
+ */
+
+export function listEquTrial(params?: any) {
+  return requestClient.get<EquTrialVO[]>(Api.equTrialList, { params });
+}
+
+
+/**
+ * 鏌ヨ璁惧璇曚骇璁板綍璇︾粏
+ * @param trialId
+ */
+export function getEquTrial(trialId: ID) {
+  return requestClient.get<EquTrialVO>(`${Api.root}/${trialId}`);
+}
+
+/**
+ * 鏂板璁惧璇曚骇璁板綍
+ * @param data
+ */
+export function addEquTrial(data: any) {
+  return requestClient.postWithMsg<void>(Api.root, data);
+}
+
+/**
+ * 淇敼璁惧璇曚骇璁板綍
+ * @param data
+ */
+export function updateEquTrial(data: any) {
+  return requestClient.putWithMsg<void>(Api.root, data);
+}
+
+/**
+ * 鍒犻櫎璁惧璇曚骇璁板綍
+ * @param trialId
+ */
+export function delEquTrial(trialId: IDS) {
+  return requestClient.deleteWithMsg<void>(`${Api.root}/${trialId}`);
+}
+/**
+ * 瀵煎嚭
+ * @param
+ */
+export function equTrialExport(data: any) {
+  return commonExport(Api.equTrialExport, data);
+}
diff --git a/eims-ui/apps/web-antd/src/api/eims/equ-trial/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/equ-trial/model.d.ts
new file mode 100644
index 0000000..f81731c
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/api/eims/equ-trial/model.d.ts
@@ -0,0 +1,225 @@
+export interface EquTrialVO {
+  /**
+   * 璇曠敤璁板綍id
+   */
+  trialId: number | string;
+
+  /**
+   * 璁惧id
+   */
+  equId: number | string;
+
+  /**
+   * 璇曚骇鏁伴噺
+   */
+  trialNum: number;
+
+  /**
+   * 璇曚骇鏃ユ湡
+   */
+  trialDate: string;
+
+  /**
+   * 鑹搧鏁伴噺
+   */
+  proGoodNum: number;
+
+  /**
+   * 鑹搧鐜�
+   */
+  proGoodRate: number;
+
+  /**
+   * 鎿嶄綔浜�(id)
+   */
+  operatorId: number | string;
+
+  /**
+   * 寮�濮嬫椂闂�
+   */
+  startTime: string;
+
+  /**
+   * 缁撴潫鏃堕棿
+   */
+  endTime: string;
+
+  /**
+   * 杩愯鏃堕暱
+   */
+  runTime: string;
+
+  /**
+   * 鍋滄満鏃堕暱
+   */
+  stopTime: string;
+
+  /**
+   * 璁″垝杩愯鏃堕暱
+   */
+  planRunTime: string;
+
+  /**
+   * 璋冭瘯灞ュ巻
+   */
+  debugHistory: string;
+
+  /**
+   * 璁惧缁煎悎鏁堢巼
+   */
+  oee: number;
+
+  /**
+   * 澶囨敞
+   */
+  remark: string;
+}
+
+export interface EquTrialForm extends BaseEntity {
+  /**
+   * 璇曠敤璁板綍id
+   */
+  trialId?: number | string;
+
+  /**
+   * 璁惧id
+   */
+  equId?: number | string;
+
+  /**
+   * 璇曚骇鏁伴噺
+   */
+  trialNum?: number;
+
+  /**
+   * 璇曚骇鏃ユ湡
+   */
+  trialDate?: string;
+
+  /**
+   * 鑹搧鏁伴噺
+   */
+  proGoodNum?: number;
+
+  /**
+   * 鑹搧鐜�
+   */
+  proGoodRate?: number;
+
+  /**
+   * 鎿嶄綔浜�(id)
+   */
+  operatorId?: number | string;
+
+  /**
+   * 寮�濮嬫椂闂�
+   */
+  startTime?: string;
+
+  /**
+   * 缁撴潫鏃堕棿
+   */
+  endTime?: string;
+
+  /**
+   * 杩愯鏃堕暱
+   */
+  runTime?: string;
+
+  /**
+   * 鍋滄満鏃堕暱
+   */
+  stopTime?: string;
+
+  /**
+   * 璁″垝杩愯鏃堕暱
+   */
+  planRunTime?: string;
+
+  /**
+   * 璋冭瘯灞ュ巻
+   */
+  debugHistory?: string;
+
+  /**
+   * 璁惧缁煎悎鏁堢巼
+   */
+  oee?: number;
+
+  /**
+   * 澶囨敞
+   */
+  remark?: string;
+}
+
+export interface EquTrialQuery extends PageQuery {
+  /**
+   * 璁惧id
+   */
+  equId?: number | string;
+
+  /**
+   * 璇曚骇鏁伴噺
+   */
+  trialNum?: number;
+
+  /**
+   * 璇曚骇鏃ユ湡
+   */
+  trialDate?: string;
+
+  /**
+   * 鑹搧鏁伴噺
+   */
+  proGoodNum?: number;
+
+  /**
+   * 鑹搧鐜�
+   */
+  proGoodRate?: number;
+
+  /**
+   * 鎿嶄綔浜�(id)
+   */
+  operatorId?: number | string;
+
+  /**
+   * 寮�濮嬫椂闂�
+   */
+  startTime?: string;
+
+  /**
+   * 缁撴潫鏃堕棿
+   */
+  endTime?: string;
+
+  /**
+   * 杩愯鏃堕暱
+   */
+  runTime?: string;
+
+  /**
+   * 鍋滄満鏃堕暱
+   */
+  stopTime?: string;
+
+  /**
+   * 璁″垝杩愯鏃堕暱
+   */
+  planRunTime?: string;
+
+  /**
+   * 璋冭瘯灞ュ巻
+   */
+  debugHistory?: string;
+
+  /**
+   * 璁惧缁煎悎鏁堢巼
+   */
+  oee?: number;
+
+  /**
+   * 鏃ユ湡鑼冨洿鍙傛暟
+   */
+  params?: any;
+}
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-detail/index.vue b/eims-ui/apps/web-antd/src/views/eims/equ-detail/index.vue
index 5f4bda5..92cc264 100644
--- a/eims-ui/apps/web-antd/src/views/eims/equ-detail/index.vue
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-detail/index.vue
@@ -11,6 +11,8 @@
 
 import { getEqu } from '#/api/eims/equ';
 import equDrawer from '#/views/eims/equ/equ-drawer.vue';
+import EquTrial from '#/views/eims/equ-trial/index.vue';
+import EquStatu from '#/views/eims/equ-statu/index.vue';
 
 const route = useRoute();
 const equId = route.params.equId as string;
@@ -57,24 +59,21 @@
 
           <div class="w-3/4 min-w-[640px] flex align-center justify-around">
             <Divider class="h-full" type="vertical" />
-            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100"
-                 style="background: #f2f6fe">
+            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100" style="background: #f2f6fe">
               <Image :preview="false" :width="40" src="/src/assets/logo.png" />
               <div class="flex flex-col ml-6 mr-2">
                 <span class="text-xl font-bold">100%</span>
                 <span class="mt-5 text-gray-500">璁惧鍋ュ悍搴�</span>
               </div>
             </div>
-            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100"
-                 style="background: #fcf8ee">
+            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100" style="background: #fcf8ee">
               <Image :preview="false" :width="40" src="/src/assets/logo.png" />
               <div class="flex flex-col ml-6 mr-2">
                 <span class="text-xl font-bold">86.6h</span>
                 <span class="mt-5 text-gray-500">骞冲潎鏁呴殰鏃堕棿</span>
               </div>
             </div>
-            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100"
-                 style="background: #ecf5de">
+            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100" style="background: #ecf5de">
               <Image :preview="false" :width="40" src="/src/assets/logo.png" />
               <div class="flex flex-col ml-6 mr-2">
                 <span class="text-xl font-bold">0鍏�</span>
@@ -115,10 +114,8 @@
             <Descriptions class="mt-3" size="small" title="璁惧鍥剧墖">
               <DescriptionsItem>
                 <ImagePreviewGroup>
-                  <Image :width="200"
-                         src="https://shlanpu.cn/uploads/images/202404/ebb24dc0610cf8e83a19fb0f568bf530.png" />
-                  <Image :width="200"
-                         src="https://shlanpu.cn/uploads/images/202404/c2212b8fc38bdd20e9d1cf79da40698d.jpg" />
+                  <Image :width="200" src="https://shlanpu.cn/uploads/images/202404/ebb24dc0610cf8e83a19fb0f568bf530.png" />
+                  <Image :width="200" src="https://shlanpu.cn/uploads/images/202404/c2212b8fc38bdd20e9d1cf79da40698d.jpg" />
                 </ImagePreviewGroup>
               </DescriptionsItem>
             </Descriptions>
@@ -127,10 +124,14 @@
           <TabPane key="3" tab="淇濆吇">Content of Tab Pane 3</TabPane>
           <TabPane key="4" tab="鐐规">Content of Tab Pane 3</TabPane>
           <TabPane key="5" tab="澶囦欢">Content of Tab Pane 3</TabPane>
-          <TabPane key="5" tab="闄勪欢">Content of Tab Pane 3</TabPane>
-          <TabPane key="6" tab="璁惧灞ュ巻">Content of Tab Pane 3</TabPane>
-          <TabPane key="7" tab="璇曚骇璁板綍">Content of Tab Pane 3</TabPane>
-          <TabPane key="8" tab="鐘舵�佽褰�">Content of Tab Pane 3</TabPane>
+          <TabPane key="6" tab="闄勪欢">Content of Tab Pane 3</TabPane>
+          <TabPane key="7" tab="璁惧灞ュ巻">Content of Tab Pane 3</TabPane>
+          <TabPane key="8" tab="璇曚骇璁板綍">
+            <EquTrial :equ-detail-flag="true" :equ-id="equId" />
+          </TabPane>
+          <TabPane key="9" tab="鐘舵�佽褰�">
+            <EquStatu :equ-detail-flag="true" :equ-id="equId" />
+          </TabPane>
         </Tabs>
       </Card>
     </div>
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx b/eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx
new file mode 100644
index 0000000..abaf3a6
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx
@@ -0,0 +1,269 @@
+import type { VxeGridProps } from '#/adapter/vxe-table';
+import type { DescItem } from '#/components/description';
+
+import { DictEnum } from '@vben/constants';
+import { getPopupContainer } from '@vben/utils';
+
+import { Tag } from 'ant-design-vue';
+
+import { type FormSchemaGetter } from '#/adapter/form';
+import { getDictOptions } from '#/utils/dict';
+
+export const querySchema: FormSchemaGetter = () => [
+  {
+    component: 'Select',
+    componentProps: {
+      showSearch: true,
+      allowClear: true,
+      getPopupContainer
+    },
+    fieldName: 'equId',
+    label: '璁惧鍚嶇О'
+  },
+  {
+    component: 'RangePicker',
+    fieldName: 'changeDate',
+    label: '鍙樻洿鏃ユ湡'
+  }
+];
+
+export const columns: VxeGridProps['columns'] = [
+  { type: 'checkbox', width: 60, fixed: 'left' },
+  {
+    title: '璁惧鍚嶇О',
+    field: 'equName',
+    minWidth: 100,
+    fixed: 'left',
+    slots: { default: 'equName' }
+  },
+  {
+    title: '鍙樻洿鏃ユ湡',
+    field: 'changeDate',
+    sortable: true,
+    minWidth: 180
+  },
+  {
+    title: '鍙樻洿鍓�',
+    field: 'beforeChange',
+    sortable: true,
+    slots: {
+      default: ({ row }) => {
+        const statu = row.beforeChange;
+        switch (statu) {
+          case '0': {
+            return <Tag color="cyan">璇曠敤</Tag>;
+          }
+          case '1': {
+            return <Tag color="green">鍏ュ浐</Tag>;
+          }
+          case '2': {
+            return <Tag color="orange">杩佺Щ</Tag>;
+          }
+          case '3': {
+            return <Tag color="red">鎶ュ簾</Tag>;
+          }
+          case null: {
+            return '';
+          }
+          // No default
+        }
+        return '';
+      }
+    },
+    minWidth: 80,
+    fixed: 'left'
+  },
+  {
+    title: '鍙樻洿鍚�',
+    field: 'afterChange',
+    sortable: true,
+    slots: {
+      default: ({ row }) => {
+        const statu = row.afterChange;
+        switch (statu) {
+          case '0': {
+            return <Tag color="cyan">璇曠敤</Tag>;
+          }
+          case '1': {
+            return <Tag color="green">鍏ュ浐</Tag>;
+          }
+          case '2': {
+            return <Tag color="orange">杩佺Щ</Tag>;
+          }
+          case '3': {
+            return <Tag color="red">鎶ュ簾</Tag>;
+          }
+          case null: {
+            return '';
+          }
+          // No default
+        }
+        return '';
+      }
+    },
+    minWidth: 80,
+    fixed: 'left'
+  },
+
+  {
+    title: '鍙樻洿鎻忚堪',
+    field: 'changeDesc',
+    minWidth: 120
+  },
+  {
+    title: '鍙樻洿浜�',
+    field: 'changeUserName',
+    minWidth: 120
+  },
+  {
+    field: 'action',
+    fixed: 'right',
+    slots: { default: 'action' },
+    title: '鎿嶄綔',
+    width: 200
+  }
+];
+
+export const drawerSchema: FormSchemaGetter = () => [
+  {
+    component: 'Input',
+    dependencies: {
+      show: () => false,
+      triggerFields: ['']
+    },
+    fieldName: 'equStatuId'
+  },
+  {
+    component: 'Select',
+    componentProps: {
+      showSearch: true,
+      allowClear: true,
+      getPopupContainer
+    },
+    fieldName: 'equId',
+    label: '璁惧鍚嶇О'
+  },
+  {
+    component: 'DatePicker',
+    componentProps: {
+      format: 'YYYY-MM-DD',
+      showTime: false,
+      valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      getPopupContainer
+    },
+    fieldName: 'changeDate',
+    label: '鍙樻洿鏃ユ湡'
+  },
+  {
+    component: 'TreeSelect',
+    // 鍦╠rawer閲屾洿鏂� 杩欓噷涓嶉渶瑕侀粯璁ょ殑componentProps
+    defaultValue: undefined,
+    fieldName: 'userDept',
+    label: '鍙樻洿浜洪儴闂�',
+    help: `鍙樻洿浜哄憳鎵�灞為儴闂╜
+    // rules: 'selectRequired',
+  },
+  {
+    component: 'Select',
+    componentProps: {
+      allowClear: true,
+      showSearch: true,
+      getPopupContainer
+    },
+    fieldName: 'changeUser',
+    label: '鍙樻洿浜�',
+    help: `璁惧鐘舵�佸彉鏇存搷浣滀汉鍛榒
+  },
+  {
+    component: 'RadioGroup',
+    componentProps: {
+      buttonStyle: 'solid',
+      options: getDictOptions(DictEnum.SYS_EQU_STATUS),
+      optionType: 'button'
+    },
+    fieldName: 'beforeChange',
+    label: '鍙樻洿鍓�',
+    help: '璁惧鍙樻洿鍓嶇姸鎬�'
+  },
+  {
+    component: 'RadioGroup',
+    componentProps: {
+      buttonStyle: 'solid',
+      options: getDictOptions(DictEnum.SYS_EQU_STATUS),
+      optionType: 'button'
+    },
+    fieldName: 'afterChange',
+    label: '鍙樻洿鍚�',
+    help: '璁惧鍙樻洿鍚庣姸鎬�'
+  },
+  {
+    component: 'Textarea',
+    fieldName: 'changeDesc',
+    label: '鍙樻洿鎻忚堪'
+  }
+];
+
+export const descSchema: DescItem[] = [
+  {
+    field: 'equName',
+    label: '璁惧鍚嶇О'
+  },
+  {
+    field: 'beforeChange',
+    label: '鍙樻洿鍓�',
+    render(value) {
+      switch (value) {
+        case '0': {
+          return <Tag color="cyan">璇曠敤</Tag>;
+        }
+        case '1': {
+          return <Tag color="green">鍏ュ浐</Tag>;
+        }
+        case '2': {
+          return <Tag color="orange">杩佺Щ</Tag>;
+        }
+        case '3': {
+          return <Tag color="red">鎶ュ簾</Tag>;
+        }
+        case null: {
+          return '';
+        }
+      }
+    }
+  },
+  {
+    field: 'afterChange',
+    label: '鍙樻洿鍚�',
+    render(value) {
+      switch (value) {
+        case '0': {
+          return <Tag color="cyan">璇曠敤</Tag>;
+        }
+        case '1': {
+          return <Tag color="green">鍏ュ浐</Tag>;
+        }
+        case '2': {
+          return <Tag color="orange">杩佺Щ</Tag>;
+        }
+        case '3': {
+          return <Tag color="red">鎶ュ簾</Tag>;
+        }
+        case null: {
+          return '';
+        }
+      }
+    }
+  },
+  {
+    field: 'changeDate',
+    label: '鍙樻洿鏃ユ湡'
+  },
+  {
+    field: 'changeDesc',
+    label: '鍙樻洿鎻忚堪'
+  },
+  {
+    field: 'changeUserName',
+    label: '鍙樻洿浜�'
+  }
+];
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-statu/equ-statu-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/equ-statu/equ-statu-drawer.vue
new file mode 100644
index 0000000..e0d5c75
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-statu/equ-statu-drawer.vue
@@ -0,0 +1,206 @@
+<script setup lang="ts">
+import { computed, ref } from 'vue';
+
+import { useVbenDrawer } from '@vben/common-ui';
+import { $t } from '@vben/locales';
+import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils';
+
+import { useVbenForm } from '#/adapter/form';
+import { listEqu } from '#/api/eims/equ';
+import { addEquStatu, getEquStatu, updateEquStatu } from '#/api/eims/equ-statu';
+import { getDeptTree, userList } from '#/api/system/user';
+
+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 };
+
+    isUpdate.value = !!id;
+    // 鍒濆鍖�
+    await setupEquSelect();
+    await setupDeptSelect();
+
+    // 璁惧璇︽儏椤垫墦寮�鎸囧畾璁惧id
+    const { equId } = drawerApi.getData() as { equId?: number | string };
+    if (equId) {
+      await formApi.setValues({ equId});
+    }
+    // 鏇存柊 && 璧嬪��
+    if (isUpdate.value && id) {
+      const record = await getEquStatu(id);
+      await formApi.setValues(record);
+    }
+    // 璁惧id鏈夊�兼椂涓嶅厑璁哥紪杈戯紙1.缂栬緫 2.璁惧璇︽儏椤垫墦寮�锛�
+    const flag = equId !== undefined || isUpdate.value;
+    formApi.updateSchema([
+      {
+        componentProps: {
+          disabled: flag
+        },
+        fieldName: 'equId'
+      }
+    ]);
+
+    drawerApi.drawerLoading(false);
+  }
+});
+
+async function setupEquSelect() {
+  const equPageResult = await listEqu({
+    pageNum: 1,
+    pageSize: 1000,
+  });
+  // 浣跨敤map鏉ヨ窡韪凡缁忛亣鍒扮殑equId锛屼娇鐢╢ilter鏉ヨ繃婊ゆ帀閲嶅鐨勫厓绱犮��
+  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
+
+  const options = uniqueItems.map((item) => ({
+    label: item.equName || item.equName,
+    value: item.equId
+  }));
+  // 绛涢��
+  const filterOption = (input: string, option: any) => {
+    return option.label.toLowerCase().includes(input.toLowerCase());
+  };
+
+  const placeholder = options.length > 0 ? '璇烽�夋嫨' : '鏆傛棤璁惧璁板綍';
+  formApi.updateSchema([
+    {
+      componentProps: {
+        options,
+        placeholder,
+        filterOption,
+        async onSelect(equId: number | string) {
+          const equ = equPageResult.rows.find((item) => item.equId === equId);
+          if (equ && equ.status !== undefined) {
+            await formApi.setValues({ beforeChange: equ.status });
+          }
+        }
+      },
+      fieldName: 'equId'
+    }
+  ]);
+}
+
+/**
+ * 鐢ㄦ埛鐨勫姞杞�
+ */
+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: 'changeUser'
+    }
+  ]);
+}
+
+/**
+ * 鍒濆鍖栭儴闂ㄩ�夋嫨
+ */
+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.respPerson = undefined;
+        },
+        placeholder: '璇烽�夋嫨',
+        showSearch: true,
+        treeData: deptTree,
+        treeDefaultExpandAll: true,
+        treeLine: { showLeafIcon: false },
+        // 绛涢�夌殑瀛楁
+        treeNodeFilterProp: 'label',
+        // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊�
+        treeNodeLabelProp: 'fullName'
+      }),
+      fieldName: 'userDept'
+    }
+  ]);
+}
+
+async function handleConfirm() {
+  try {
+    drawerApi.drawerLoading(true);
+    const { valid } = await formApi.validate();
+    if (!valid) {
+      return;
+    }
+    const data = cloneDeep(await formApi.getValues());
+    await (isUpdate.value ? updateEquStatu(data) : addEquStatu(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" :title="title" class="w-[600px]">
+    <BasicForm />
+  </BasicDrawer>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-statu/index.vue b/eims-ui/apps/web-antd/src/views/eims/equ-statu/index.vue
new file mode 100644
index 0000000..6cd3155
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-statu/index.vue
@@ -0,0 +1,244 @@
+<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 { getVxePopupContainer } from '@vben/utils';
+
+import { Modal, Popconfirm, Space } from 'ant-design-vue';
+
+import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
+import { listEqu } from '#/api/eims/equ';
+import { delEquStatu, equStatuExport, listEquStatu } from '#/api/eims/equ-statu';
+import { commonDownloadExcel } from '#/utils/file/download';
+
+import { columns, querySchema } from './data';
+import equStatuDrawer from './equ-statu-drawer.vue';
+import statuPreviewDrawer from './statu-preview-drawer.vue';
+
+// 浠庤澶囨槑缁嗘墦寮�椤甸潰 1.涓嶉渶瑕佽澶囩瓫閫� 2.鍙煡璇㈠綋鍓嶈澶囨暟鎹�
+interface Props {
+  equDetailFlag?: boolean;
+  equId?: string;
+}
+
+const props = withDefaults(defineProps<Props>(), { equDetailFlag: false, equId: undefined });
+
+const formOptions: VbenFormProps = {
+  commonConfig: {
+    labelWidth: 80,
+    componentProps: {
+      allowClear: true
+    }
+  },
+  schema: querySchema(),
+  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',
+  // 鏃ユ湡閫夋嫨鏍煎紡鍖�
+  fieldMappingTime: [['changeDate', ['params[beginTime]', 'params[endTime]'], ['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 = {}) => {
+        // 濡傛灉浼犲叆浜唀quId鍒欏彧鏌ヨ褰撳墠id鏁版嵁
+        if (props.equDetailFlag && props.equId) {
+          const queryEqu = { equId: props.equId };
+          Object.assign(formValues, queryEqu);
+        }
+
+        return await listEquStatu({
+          pageNum: page.currentPage,
+          pageSize: page.pageSize,
+          ...formValues
+        });
+      }
+    }
+  },
+  rowConfig: {
+    isHover: true,
+    keyField: 'equStatuId'
+  },
+  sortConfig: {
+    // 杩滅▼鎺掑簭
+    remote: true,
+    // 鏀寔澶氬瓧娈垫帓搴� 榛樿鍏抽棴
+    multiple: true,
+  },
+  id: 'eims-equ-statu-index'
+};
+
+const [BasicTable, tableApi] = useVbenVxeGrid({
+  formOptions,
+  gridOptions,
+  gridEvents: {
+    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
+  },
+});
+
+const [EquStatuDrawer, equStatuDrawerApi] = useVbenDrawer({
+  connectedComponent: equStatuDrawer
+});
+
+const [StatuPreviewDrawer, statuPreviewDrawerApi] = useVbenDrawer({
+  connectedComponent: statuPreviewDrawer
+});
+
+/**
+ * 棰勮
+ * @param record
+ */
+function handlePreview(record: Recordable<any>) {
+  statuPreviewDrawerApi.setData({ record });
+  statuPreviewDrawerApi.open();
+}
+
+onMounted(async () => {
+  await setupEquSelect();
+});
+
+async function setupEquSelect() {
+  const equPageResult = await listEqu({
+    pageNum: 1,
+    pageSize: 1000
+  });
+  if (!equPageResult || equPageResult.rows.length < 0) {
+    return false;
+  }
+  // 浣跨敤map鏉ヨ窡韪凡缁忛亣鍒扮殑equId锛屼娇鐢╢ilter鏉ヨ繃婊ゆ帀閲嶅鐨勫厓绱犮��
+  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
+
+  const options = uniqueItems.map((item) => ({
+    label: item.equName || item.equName,
+    value: item.equId
+  }));
+  // 绛涢��
+  const filterOption = (input: string, option: any) => {
+    return option.label.toLowerCase().includes(input.toLowerCase());
+  };
+
+  const placeholder = options.length > 0 ? '璇烽�夋嫨' : '鏆傛棤璁惧璁板綍';
+  // 鏇存柊selectOptions
+  tableApi.formApi.updateSchema([
+    {
+      componentProps: {
+        options,
+        placeholder,
+        filterOption
+      },
+      dependencies: {
+        show: () => !props.equDetailFlag,
+        triggerFields: ['']
+      },
+      fieldName: 'equId'
+    }
+  ]);
+}
+
+function handleAdd() {
+  // 璁惧璇︽儏椤垫墦寮�鏃� 鍙兘鏂板鎸囧畾璁惧id鏁版嵁
+  if (props.equDetailFlag && props.equId) {
+    equStatuDrawerApi.setData({ equId: props.equId });
+  } else {
+    equStatuDrawerApi.setData({});
+  }
+
+  equStatuDrawerApi.open();
+}
+
+async function handleEdit(record: Recordable<any>) {
+  equStatuDrawerApi.setData({ id: record.equStatuId });
+  equStatuDrawerApi.open();
+}
+
+async function handleDelete(row: Recordable<any>) {
+  await delEquStatu(row.equStatuId);
+  await tableApi.query();
+}
+
+function handleMultiDelete() {
+  const rows = tableApi.grid.getCheckboxRecords();
+  const ids = rows.map((row: any) => row.equStatuId);
+  Modal.confirm({
+    title: '鎻愮ず',
+    okType: 'danger',
+    content: `纭鍒犻櫎閫変腑鐨�${ids.length}鏉¤褰曞悧锛焋,
+    onOk: async () => {
+      await delEquStatu(ids);
+      await tableApi.query();
+    }
+  });
+}
+
+function handleDownloadExcel() {
+  commonDownloadExcel(equStatuExport, '璁惧鐘舵�佸彉鏇磋褰�', tableApi.formApi.form.values, {
+    fieldMappingTime: formOptions.fieldMappingTime
+  });
+}
+</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:equStatu:export']" @click="handleDownloadExcel">
+              {{ $t('pages.common.export') }}
+            </a-button>
+            <a-button
+              :disabled="!vxeCheckboxChecked(tableApi)"
+              danger
+              type="primary"
+              v-access:code="['eims:equStatu:remove']"
+              @click="handleMultiDelete"
+            >
+              {{ $t('pages.common.delete') }}
+            </a-button>
+            <a-button type="primary" v-access:code="['eims:equStatu:add']" @click="handleAdd">
+              {{ $t('pages.common.add') }}
+            </a-button>
+          </Space>
+        </template>
+
+        <template #equName="{ row }">
+          <Space>
+            <span>{{ row.equName }}</span>
+          </Space>
+        </template>
+
+        <template #action="{ row }">
+          <Space>
+            <ghost-button v-access:code="['eims:equStatu:edit']" @click.stop="handleEdit(row)">
+              {{ $t('pages.common.edit') }}
+            </ghost-button>
+            <ghost-button class="btn-success" v-access:code="['eims:equStatu:list']" @click.stop="handlePreview(row)">
+              {{ $t('pages.common.preview') }}
+            </ghost-button>
+            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="纭鍒犻櫎锛�" @confirm="handleDelete(row)">
+              <ghost-button danger v-access:code="['eims:equStatu:remove']" @click.stop="">
+                {{ $t('pages.common.delete') }}
+              </ghost-button>
+            </Popconfirm>
+          </Space>
+        </template>
+      </BasicTable>
+    </div>
+    <EquStatuDrawer @reload="tableApi.query()" />
+    <StatuPreviewDrawer />
+  </Page>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-statu/statu-preview-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/equ-statu/statu-preview-drawer.vue
new file mode 100644
index 0000000..39bb1f4
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-statu/statu-preview-drawer.vue
@@ -0,0 +1,32 @@
+<script setup lang="ts">
+import type { Recordable } from '@vben/types';
+
+import { useVbenDrawer } from '@vben/common-ui';
+
+import { Description, useDescription } from '#/components/description';
+
+import { descSchema } from './data';
+
+const [BasicDrawer, drawerApi] = useVbenDrawer({
+  onOpenChange: handleOpenChange,
+});
+
+const [registerDescription, { setDescProps }] = useDescription({
+  column: 1,
+  schema: descSchema,
+});
+
+function handleOpenChange(open: boolean) {
+  if (!open) {
+    return null;
+  }
+  const { record } = drawerApi.getData() as { record: Recordable<any> };
+  setDescProps({ data: record }, true);
+}
+</script>
+
+<template>
+  <BasicDrawer :footer="false" class="w-[600px]" title="璇曚骇璁板綍鏄庣粏">
+    <Description @register="registerDescription" />
+  </BasicDrawer>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-trial/data.tsx b/eims-ui/apps/web-antd/src/views/eims/equ-trial/data.tsx
new file mode 100644
index 0000000..087fc37
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-trial/data.tsx
@@ -0,0 +1,291 @@
+import type { VxeGridProps } from '#/adapter/vxe-table';
+import type { DescItem } from '#/components/description';
+
+import { getPopupContainer } from '@vben/utils';
+
+import { type FormSchemaGetter } from '#/adapter/form';
+
+export const querySchema: FormSchemaGetter = () => [
+  {
+    component: 'Select',
+    componentProps: {
+      showSearch: true,
+      allowClear: true,
+      getPopupContainer
+    },
+    fieldName: 'equId',
+    label: '璁惧鍚嶇О'
+  },
+  {
+    component: 'RangePicker',
+    fieldName: 'trialDate',
+    label: '璇曚骇鏃ユ湡'
+  }
+];
+
+export const columns: VxeGridProps['columns'] = [
+  { type: 'checkbox', width: 60, fixed: 'left' },
+  {
+    title: '璁惧鍚嶇О',
+    field: 'equName',
+    minWidth: 100,
+    fixed: 'left',
+    slots: { default: 'equName' }
+  },
+
+  /* {
+    title: '绫诲瀷',
+    slots: {
+      // eslint-disable-next-line no-empty-pattern
+      default: ({}) => {
+        return <Tag color="cyan">璇曠敤</Tag>;
+      }
+    },
+    minWidth: 80,
+    fixed: 'left'
+  },*/
+  {
+    title: '璇曚骇鏃ユ湡',
+    field: 'trialDate',
+    sortable: true,
+    minWidth: 120
+  },
+  {
+    title: '璇曚骇鏁伴噺',
+    field: 'trialNum',
+    minWidth: 100
+  },
+  {
+    title: '鑹搧鏁伴噺',
+    field: 'proGoodNum',
+    minWidth: 100
+  },
+  {
+    title: '鑹搧鐜�',
+    field: 'proGoodRate',
+    minWidth: 100
+  },
+  {
+    title: '璁″垝杩愯鏃堕暱',
+    field: 'planRunTime',
+    minWidth: 120
+  },
+  {
+    title: '杩愯鏃堕暱',
+    field: 'runTime',
+    minWidth: 100
+  },
+  {
+    title: '鍋滄満鏃堕暱',
+    field: 'stopTime',
+    minWidth: 100
+  },
+  {
+    title: '璋冭瘯灞ュ巻',
+    field: 'debugHistory',
+    minWidth: 100
+  },
+  {
+    title: '缁煎悎鏁堢巼',
+    field: 'oee',
+    minWidth: 100
+  },
+
+  {
+    title: '鎿嶄綔浜�',
+    field: 'operatorName',
+    minWidth: 100
+  },
+  {
+    field: 'action',
+    fixed: 'right',
+    slots: { default: 'action' },
+    title: '鎿嶄綔',
+    width: 200
+  }
+];
+
+export const drawerSchema: FormSchemaGetter = () => [
+  {
+    component: 'Input',
+    dependencies: {
+      show: () => false,
+      triggerFields: ['']
+    },
+    fieldName: 'trialId'
+  },
+  {
+    component: 'Select',
+    componentProps: {
+      showSearch: true,
+      allowClear: true,
+      getPopupContainer
+    },
+    fieldName: 'equId',
+    label: '璁惧鍚嶇О'
+  },
+  {
+    component: 'DatePicker',
+    componentProps: {
+      format: 'YYYY-MM-DD',
+      showTime: false,
+      valueFormat: 'YYYY-MM-DD',
+      getPopupContainer
+    },
+    fieldName: 'trialDate',
+    label: '璇曚骇鏃ユ湡'
+  },
+  {
+    component: 'Input',
+    fieldName: 'trialNum',
+    label: '璇曚骇鏁伴噺'
+  },
+  {
+    component: 'Input',
+    fieldName: 'proGoodNum',
+    label: '鑹搧鏁伴噺',
+    help: '璇曚骇涓骇鍝佸悎鏍兼暟'
+  },
+  {
+    component: 'Input',
+    fieldName: 'proGoodRate',
+    label: '鑹搧鐜�',
+    help: '璇曚骇涓骇鍝佸悎鏍肩巼'
+  },
+  {
+    component: 'TimePicker',
+    componentProps: {
+      format: 'HH:mm:ss',
+      showTime: false,
+      valueFormat: 'HH:mm:ss',
+      getPopupContainer
+    },
+    fieldName: 'startTime',
+    label: '寮�濮嬫椂闂�'
+  },
+  {
+    component: 'TimePicker',
+    componentProps: {
+      format: 'HH:mm:ss',
+      showTime: false,
+      valueFormat: 'HH:mm:ss',
+      getPopupContainer
+    },
+    fieldName: 'endTime',
+    label: '缁撴潫鏃堕棿'
+  },
+  {
+    component: 'TimePicker',
+    componentProps: {
+      format: 'HH:mm:ss',
+      showTime: false,
+      valueFormat: 'HH:mm:ss',
+      getPopupContainer
+    },
+    fieldName: 'planRunTime',
+    label: '璁″垝杩愯鏃堕暱'
+  },
+  {
+    component: 'TimePicker',
+    componentProps: {
+      format: 'HH:mm:ss',
+      showTime: false,
+      valueFormat: 'HH:mm:ss',
+      getPopupContainer
+    },
+    fieldName: 'runTime',
+    label: '杩愯鏃堕暱'
+  },
+  {
+    component: 'TimePicker',
+    componentProps: {
+      format: 'HH:mm:ss',
+      showTime: false,
+      valueFormat: 'HH:mm:ss',
+      getPopupContainer
+    },
+    fieldName: 'stopTime',
+    label: '鍋滄満鏃堕暱'
+  },
+  {
+    component: 'Textarea',
+    formItemClass: 'items-baseline',
+    fieldName: 'debugHistory',
+    label: '璋冭瘯灞ュ巻'
+  },
+  {
+    component: 'TreeSelect',
+    // 鍦╠rawer閲屾洿鏂� 杩欓噷涓嶉渶瑕侀粯璁ょ殑componentProps
+    defaultValue: undefined,
+    fieldName: 'operatorDept',
+    label: '鎿嶄綔浜洪儴闂�',
+    help: `璇曚骇鎿嶄綔浜哄憳鎵�灞為儴闂╜
+    // rules: 'selectRequired',
+  },
+  {
+    component: 'Select',
+    componentProps: {
+      allowClear: true,
+      showSearch: true,
+      getPopupContainer
+    },
+    fieldName: 'operatorId',
+    label: '鎿嶄綔浜�',
+    help: `璇曚骇鎿嶄綔浜哄憳`
+  }
+];
+
+export const descSchema: DescItem[] = [
+  {
+    field: 'equName',
+    label: '璁惧鍚嶇О'
+  },
+  {
+    field: 'oee',
+    label: '缁煎悎鏁堢巼'
+  },
+  {
+    field: 'operatorName',
+    label: '鎿嶄綔浜�'
+  },
+  {
+    field: 'trialDate',
+    label: '璇曚骇鏃ユ湡'
+  },
+  {
+    field: 'trialNum',
+    label: '璇曚骇鏁伴噺'
+  },
+  {
+    field: 'proGoodNum',
+    label: '鑹搧鏁伴噺'
+  },
+  {
+    field: 'proGoodRate',
+    label: '鑹搧鐜�'
+  },
+  {
+    field: 'startTime',
+    label: '寮�濮嬫椂闂�'
+  },
+  {
+    field: 'endTime',
+    label: '缁撴潫鏃堕棿'
+  },
+  {
+    field: 'planRunTime',
+    label: '璁″垝杩愯鏃堕暱'
+  },
+  {
+    field: 'runTime',
+    label: '杩愯鏃堕暱'
+  },
+  {
+    field: 'stopTime',
+    label: '鍋滄満鏃堕棿'
+  },
+  {
+    field: 'debugHistory',
+    label: '璁惧灞ュ巻'
+  }
+];
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-trial/equ-trial-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/equ-trial/equ-trial-drawer.vue
new file mode 100644
index 0000000..99c5f21
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-trial/equ-trial-drawer.vue
@@ -0,0 +1,200 @@
+<script setup lang="ts">
+import { computed, ref } from 'vue';
+
+import { useVbenDrawer } from '@vben/common-ui';
+import { $t } from '@vben/locales';
+import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils';
+
+import { useVbenForm } from '#/adapter/form';
+import { listEqu } from '#/api/eims/equ';
+import { addEquTrial, getEquTrial, updateEquTrial } from '#/api/eims/equ-trial';
+import { getDeptTree, userList } from '#/api/system/user';
+
+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 };
+    // 璁惧璇︽儏椤垫墦寮�鎸囧畾璁惧id
+    const { equId } = drawerApi.getData() as { equId?: number | string };
+    if (equId) {
+      await formApi.setValues({ equId });
+    }
+    isUpdate.value = !!id;
+    // 鍒濆鍖�
+    await setupEquSelect();
+    await setupDeptSelect();
+    // 鏇存柊 && 璧嬪��
+    if (isUpdate.value && id) {
+      const record = await getEquTrial(id);
+      await formApi.setValues(record);
+    }
+    // 璁惧id鏈夊�兼椂涓嶅厑璁哥紪杈戯紙1.缂栬緫 2.璁惧璇︽儏椤垫墦寮�锛�
+    const flag = equId !== undefined || isUpdate.value;
+    formApi.updateSchema([
+      {
+        componentProps: {
+          disabled: flag
+        },
+        fieldName: 'equId'
+      }
+    ]);
+
+    drawerApi.drawerLoading(false);
+  }
+});
+
+async function setupEquSelect() {
+  // status-0 鍙煡璇㈣瘯鐢ㄨ澶�
+  const params = { status: '0' };
+  const equPageResult = await listEqu({
+    pageNum: 1,
+    pageSize: 1000,
+    ...params
+  });
+  // 浣跨敤map鏉ヨ窡韪凡缁忛亣鍒扮殑equId锛屼娇鐢╢ilter鏉ヨ繃婊ゆ帀閲嶅鐨勫厓绱犮��
+  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
+
+  const options = uniqueItems.map((item) => ({
+    label: item.equName || item.equName,
+    value: item.equId
+  }));
+  // 绛涢��
+  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: 'equId'
+    }
+  ]);
+}
+
+/**
+ * 鐢ㄦ埛鐨勫姞杞�
+ */
+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: 'operatorId'
+    }
+  ]);
+}
+
+/**
+ * 鍒濆鍖栭儴闂ㄩ�夋嫨
+ */
+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.respPerson = undefined;
+        },
+        placeholder: '璇烽�夋嫨',
+        showSearch: true,
+        treeData: deptTree,
+        treeDefaultExpandAll: true,
+        treeLine: { showLeafIcon: false },
+        // 绛涢�夌殑瀛楁
+        treeNodeFilterProp: 'label',
+        // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊�
+        treeNodeLabelProp: 'fullName'
+      }),
+      fieldName: 'operatorDept'
+    }
+  ]);
+}
+async function handleConfirm() {
+  try {
+    drawerApi.drawerLoading(true);
+    const { valid } = await formApi.validate();
+    if (!valid) {
+      return;
+    }
+    const data = cloneDeep(await formApi.getValues());
+    await (isUpdate.value ? updateEquTrial(data) : addEquTrial(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" :title="title" class="w-[600px]">
+    <BasicForm />
+  </BasicDrawer>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-trial/index.vue b/eims-ui/apps/web-antd/src/views/eims/equ-trial/index.vue
new file mode 100644
index 0000000..3534a0c
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-trial/index.vue
@@ -0,0 +1,247 @@
+<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 { getVxePopupContainer } from '@vben/utils';
+
+import { Modal, Popconfirm, Space } from 'ant-design-vue';
+
+import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
+import { listEqu } from '#/api/eims/equ';
+import { delEquTrial, equTrialExport, listEquTrial } from '#/api/eims/equ-trial';
+import { commonDownloadExcel } from '#/utils/file/download';
+
+import { columns, querySchema } from './data';
+import equTrialDrawer from './equ-trial-drawer.vue';
+import trialPreviewDrawer from './trial-preview-drawer.vue';
+
+// 浠庤澶囨槑缁嗘墦寮�椤甸潰 1.涓嶉渶瑕佽澶囩瓫閫� 2.鍙煡璇㈠綋鍓嶈澶囨暟鎹�
+interface Props {
+  equDetailFlag?: boolean;
+  equId?: string;
+}
+
+const props = withDefaults(defineProps<Props>(), { equDetailFlag: false, equId: undefined });
+
+const formOptions: VbenFormProps = {
+  commonConfig: {
+    labelWidth: 80,
+    componentProps: {
+      allowClear: true
+    }
+  },
+  schema: querySchema(),
+  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',
+  // 鏃ユ湡閫夋嫨鏍煎紡鍖�
+  fieldMappingTime: [['trialDate', ['params[beginTime]', 'params[endTime]'], ['YYYY-MM-DD', 'YYYY-MM-DD']]]
+};
+
+const gridOptions: VxeGridProps = {
+  checkboxConfig: {
+    // 楂樹寒
+    highlight: true,
+    // 缈婚〉鏃朵繚鐣欓�変腑鐘舵��
+    reserve: true
+    // 鐐瑰嚮琛岄�変腑
+    // trigger: 'row'
+  },
+  columns,
+  height: 'auto',
+  keepSource: true,
+  pagerConfig: {},
+  proxyConfig: {
+    ajax: {
+      query: async ({ page }, formValues = {}) => {
+        // 濡傛灉浼犲叆浜唀quId鍒欏彧鏌ヨ褰撳墠id鏁版嵁
+        if (props.equDetailFlag && props.equId) {
+          const queryEqu = { equId: props.equId };
+          Object.assign(formValues, queryEqu);
+        }
+
+        return await listEquTrial({
+          pageNum: page.currentPage,
+          pageSize: page.pageSize,
+          ...formValues
+        });
+      }
+    }
+  },
+  rowConfig: {
+    isHover: true,
+    keyField: 'trialId'
+  },
+  sortConfig: {
+    // 杩滅▼鎺掑簭
+    remote: true,
+    // 鏀寔澶氬瓧娈垫帓搴� 榛樿鍏抽棴
+    multiple: true,
+  },
+  id: 'eims-equ-trial-index'
+};
+
+const [BasicTable, tableApi] = useVbenVxeGrid({
+  formOptions,
+  gridOptions,
+  gridEvents: {
+    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
+  },
+});
+
+const [EquTrialDrawer, equTrialDrawerApi] = useVbenDrawer({
+  connectedComponent: equTrialDrawer
+});
+
+const [TrialPreviewDrawer, trialPreviewDrawerApi] = useVbenDrawer({
+  connectedComponent: trialPreviewDrawer
+});
+
+/**
+ * 棰勮
+ * @param record
+ */
+function handlePreview(record: Recordable<any>) {
+  trialPreviewDrawerApi.setData({ record });
+  trialPreviewDrawerApi.open();
+}
+
+onMounted(async () => {
+  await setupEquSelect();
+});
+
+async function setupEquSelect() {
+  // status-0 鍙煡璇㈣瘯鐢ㄨ澶�
+  const params = { status: '0' };
+  const equPageResult = await listEqu({
+    pageNum: 1,
+    pageSize: 1000,
+    ...params
+  });
+  if (!equPageResult || equPageResult.rows.length < 0) {
+    return false;
+  }
+  // 浣跨敤map鏉ヨ窡韪凡缁忛亣鍒扮殑equId锛屼娇鐢╢ilter鏉ヨ繃婊ゆ帀閲嶅鐨勫厓绱犮��
+  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
+
+  const options = uniqueItems.map((item) => ({
+    label: item.equName || item.equName,
+    value: item.equId
+  }));
+  // 绛涢��
+  const filterOption = (input: string, option: any) => {
+    return option.label.toLowerCase().includes(input.toLowerCase());
+  };
+
+  const placeholder = options.length > 0 ? '璇烽�夋嫨' : '鏆傛棤璁惧璁板綍';
+  // 鏇存柊selectOptions
+  tableApi.formApi.updateSchema([
+    {
+      componentProps: {
+        options,
+        placeholder,
+        filterOption
+      },
+      dependencies: {
+        show: () => !props.equDetailFlag,
+        triggerFields: ['']
+      },
+      fieldName: 'equId'
+    }
+  ]);
+}
+
+function handleAdd() {
+  // 璁惧璇︽儏椤垫墦寮�鏃� 鍙兘鏂板鎸囧畾璁惧id鏁版嵁
+  if (props.equDetailFlag && props.equId) {
+    equTrialDrawerApi.setData({ equId: props.equId });
+  } else {
+    equTrialDrawerApi.setData({});
+  }
+
+  equTrialDrawerApi.open();
+}
+
+async function handleEdit(record: Recordable<any>) {
+  equTrialDrawerApi.setData({ id: record.trialId });
+  equTrialDrawerApi.open();
+}
+
+async function handleDelete(row: Recordable<any>) {
+  await delEquTrial(row.trialId);
+  await tableApi.query();
+}
+
+function handleMultiDelete() {
+  const rows = tableApi.grid.getCheckboxRecords();
+  const ids = rows.map((row: any) => row.trialId);
+  Modal.confirm({
+    title: '鎻愮ず',
+    okType: 'danger',
+    content: `纭鍒犻櫎閫変腑鐨�${ids.length}鏉¤褰曞悧锛焋,
+    onOk: async () => {
+      await delEquTrial(ids);
+      await tableApi.query();
+    }
+  });
+}
+
+function handleDownloadExcel() {
+  commonDownloadExcel(equTrialExport, '璇曚骇璁板綍', tableApi.formApi.form.values, {
+    fieldMappingTime: formOptions.fieldMappingTime
+  });
+}
+</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:equTrial:export']" @click="handleDownloadExcel">
+              {{ $t('pages.common.export') }}
+            </a-button>
+            <a-button
+              :disabled="!vxeCheckboxChecked(tableApi)"
+              danger
+              type="primary"
+              v-access:code="['eims:equTrial:remove']"
+              @click="handleMultiDelete"
+            >
+              {{ $t('pages.common.delete') }}
+            </a-button>
+            <a-button type="primary" v-access:code="['eims:equTrial:add']" @click="handleAdd">
+              {{ $t('pages.common.add') }}
+            </a-button>
+          </Space>
+        </template>
+
+        <template #equName="{ row }">
+          <Space>
+            <span>{{ row.equName }}</span>
+          </Space>
+        </template>
+
+        <template #action="{ row }">
+          <Space>
+            <ghost-button v-access:code="['eims:equTrial:edit']" @click.stop="handleEdit(row)">
+              {{ $t('pages.common.edit') }}
+            </ghost-button>
+            <ghost-button class="btn-success" v-access:code="['eims:equTrial:list']" @click.stop="handlePreview(row)">
+              {{ $t('pages.common.preview') }}
+            </ghost-button>
+            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="纭鍒犻櫎锛�" @confirm="handleDelete(row)">
+              <ghost-button danger v-access:code="['eims:equTrial:remove']" @click.stop="">
+                {{ $t('pages.common.delete') }}
+              </ghost-button>
+            </Popconfirm>
+          </Space>
+        </template>
+      </BasicTable>
+    </div>
+    <EquTrialDrawer @reload="tableApi.query()" />
+    <TrialPreviewDrawer />
+  </Page>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-trial/trial-preview-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/equ-trial/trial-preview-drawer.vue
new file mode 100644
index 0000000..39bb1f4
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-trial/trial-preview-drawer.vue
@@ -0,0 +1,32 @@
+<script setup lang="ts">
+import type { Recordable } from '@vben/types';
+
+import { useVbenDrawer } from '@vben/common-ui';
+
+import { Description, useDescription } from '#/components/description';
+
+import { descSchema } from './data';
+
+const [BasicDrawer, drawerApi] = useVbenDrawer({
+  onOpenChange: handleOpenChange,
+});
+
+const [registerDescription, { setDescProps }] = useDescription({
+  column: 1,
+  schema: descSchema,
+});
+
+function handleOpenChange(open: boolean) {
+  if (!open) {
+    return null;
+  }
+  const { record } = drawerApi.getData() as { record: Recordable<any> };
+  setDescProps({ data: record }, true);
+}
+</script>
+
+<template>
+  <BasicDrawer :footer="false" class="w-[600px]" title="璇曚骇璁板綍鏄庣粏">
+    <Description @register="registerDescription" />
+  </BasicDrawer>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx b/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx
index 1dcafcf..47e65ee 100644
--- a/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx
+++ b/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx
@@ -29,7 +29,7 @@
   },
   {
     component: 'RangePicker',
-    fieldName: 'createTime',
+    fieldName: 'deployDate',
     label: '浣跨敤鏃ユ湡'
   }
 ];
@@ -47,6 +47,7 @@
   {
     title: '鐘舵��',
     field: 'status',
+    sortable: true,
     slots: {
       default: ({ row }) => {
         const statu = row.status;
@@ -77,12 +78,14 @@
   {
     title: '璧勪骇缂栧彿',
     field: 'assetNo',
+    sortable: true,
     minWidth: 100,
     fixed: 'left'
   },
   {
     title: '璁惧缂栧彿',
     field: 'equCode',
+    sortable: true,
     minWidth: 100
   },
   {
@@ -133,6 +136,7 @@
   {
     title: '閲囪喘鏃ユ湡',
     field: 'purchaseDate',
+    sortable: true,
     minWidth: 120
   },
   {
@@ -158,11 +162,13 @@
   {
     title: '瀵煎叆鐘舵��',
     field: 'importStatus',
+    slots: { default: 'importStatus' },
     minWidth: 100
   },
   {
     title: '鐩樼偣鏍囧織',
     field: 'inventoryFlag',
+    slots: { default: 'inventoryFlag' },
     minWidth: 100
   },
   {
@@ -185,7 +191,7 @@
     fixed: 'right',
     slots: { default: 'action' },
     title: '鎿嶄綔',
-    width: 180
+    width: 200
   }
 ];
 
@@ -282,8 +288,8 @@
   {
     component: 'Select',
     componentProps: {
-      // 閫変腑浜嗗氨鍙兘淇敼 涓嶈兘閲嶇疆涓烘棤璐熻矗浜�
       allowClear: true,
+      showSearch: true,
       getPopupContainer
     },
     fieldName: 'respPerson',
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ/equ-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/equ/equ-drawer.vue
index 560c9bc..eafef4a 100644
--- a/eims-ui/apps/web-antd/src/views/eims/equ/equ-drawer.vue
+++ b/eims-ui/apps/web-antd/src/views/eims/equ/equ-drawer.vue
@@ -127,10 +127,15 @@
     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 },
+      componentProps: { options, placeholder ,filterOption },
       fieldName: 'respPerson'
     }
   ]);
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ/index.vue b/eims-ui/apps/web-antd/src/views/eims/equ/index.vue
index 5a5a5ea..71f4108 100644
--- a/eims-ui/apps/web-antd/src/views/eims/equ/index.vue
+++ b/eims-ui/apps/web-antd/src/views/eims/equ/index.vue
@@ -7,9 +7,9 @@
 import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
 import { getVxePopupContainer } from '@vben/utils';
 
-import { Dropdown, Menu, MenuItem, Modal, Popconfirm, Space } from 'ant-design-vue';
+import { Modal, Popconfirm, Space } from 'ant-design-vue';
 
-import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps } from '#/adapter/vxe-table';
+import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
 import { delEqu, equExport, listEqu } from '#/api/eims/equ';
 import { commonDownloadExcel } from '#/utils/file/download';
 
@@ -76,19 +76,26 @@
     isHover: true,
     keyField: 'equId'
   },
+  sortConfig: {
+    // 杩滅▼鎺掑簭
+    remote: true,
+    // 鏀寔澶氬瓧娈垫帓搴� 榛樿鍏抽棴
+    multiple: true,
+  },
   id: 'eims-equ-index'
 };
 
 const [BasicTable, tableApi] = useVbenVxeGrid({
   formOptions,
-  gridOptions
+  gridOptions,
+  gridEvents: {
+    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
+  },
 });
 
 const [EquDrawer, equDrawerApi] = useVbenDrawer({
   connectedComponent: equDrawer
 });
-
-
 
 function handleAdd() {
   equDrawerApi.setData({});
@@ -125,7 +132,15 @@
   });
 }
 
+function getImportStatus(row: any) {
+  const importStatus = row.importStatus === null || row.importStatus;
+  return importStatus ? '鏈鍏�' : '宸插鍏�';
+}
 
+function getInventoryFlag(row: any) {
+  const inventoryFlag = row.inventoryFlag === null || row.inventoryFlag;
+  return inventoryFlag ? '鏈洏鐐�' : '宸茬洏鐐�';
+}
 
 const router = useRouter();
 function handleDetail(record: Recordable<any>) {
@@ -136,25 +151,14 @@
 <template>
   <Page :auto-content-height="true">
     <div class="flex h-full gap-[8px]">
-      <EquTypeTree
-        v-model:select-dept-id="selectDeptId"
-        class="w-[260px]"
-        @reload="() => tableApi.reload()"
-        @select="() => tableApi.reload()"
-      />
+      <EquTypeTree v-model:select-dept-id="selectDeptId" class="w-[260px]" @reload="() => tableApi.reload()" @select="() => tableApi.reload()" />
       <BasicTable class="flex-1 overflow-hidden" table-title="璁惧鍒楄〃">
         <template #toolbar-tools>
           <Space>
             <a-button v-access:code="['eims:equ:export']" @click="handleDownloadExcel">
               {{ $t('pages.common.export') }}
             </a-button>
-            <a-button
-              :disabled="!vxeCheckboxChecked(tableApi)"
-              danger
-              type="primary"
-              v-access:code="['eims:equ:remove']"
-              @click="handleMultiDelete"
-            >
+            <a-button :disabled="!vxeCheckboxChecked(tableApi)" danger type="primary" v-access:code="['eims:equ:remove']" @click="handleMultiDelete">
               {{ $t('pages.common.delete') }}
             </a-button>
             <a-button type="primary" v-access:code="['eims:equ:add']" @click="handleAdd">
@@ -171,25 +175,26 @@
 
         <template #action="{ row }">
           <Space>
-            <ghost-button v-access:code="['system:role:edit']" @click.stop="handleEdit(row)">
+            <ghost-button v-access:code="['eims:equ:edit']" @click.stop="handleEdit(row)">
               {{ $t('pages.common.edit') }}
             </ghost-button>
+            <ghost-button v-if="row.menuType !== 'F'" class="btn-success" v-access:code="['eims:equ:list']" @click="handleDetail(row)">
+              {{ $t('pages.common.info') }}
+            </ghost-button>
             <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="纭鍒犻櫎锛�" @confirm="handleDelete(row)">
-              <ghost-button danger v-access:code="['system:role:remove']" @click.stop="">
+              <ghost-button danger v-access:code="['eims:equ:remove']" @click.stop="">
                 {{ $t('pages.common.delete') }}
               </ghost-button>
             </Popconfirm>
           </Space>
-          <Dropdown :get-popup-container="getVxePopupContainer" placement="bottomRight">
-            <template #overlay>
-              <Menu>
-                <MenuItem key="1" @click="handleDetail(row)"> 璇︽儏 </MenuItem>
-              </Menu>
-            </template>
-            <a-button size="small" type="link">
-              {{ $t('pages.common.more') }}
-            </a-button>
-          </Dropdown>
+        </template>
+
+        <template #importStatus="{ row }">
+          <span>{{ getImportStatus(row) }}</span>
+        </template>
+
+        <template #inventoryFlag="{ row }">
+          <span>{{ getInventoryFlag(row) }}</span>
         </template>
       </BasicTable>
     </div>
diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquService.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquService.java
new file mode 100644
index 0000000..87e10a7
--- /dev/null
+++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquService.java
@@ -0,0 +1,11 @@
+package org.dromara.common.core.service;
+
+public interface EquService {
+    /**
+     * 閫氳繃璁惧ID鏌ヨ璁惧绫诲瀷鍚嶇О
+     *
+     * @param equIds 璁惧ID涓查�楀彿鍒嗛殧
+     * @return 璁惧鍚嶇О涓查�楀彿鍒嗛殧
+     */
+    String selectEquNameByIds(String equIds);
+}
diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquTypeService.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquTypeService.java
index 8de0cc3..3dbbdf2 100644
--- a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquTypeService.java
+++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquTypeService.java
@@ -4,8 +4,8 @@
     /**
      * 閫氳繃璁惧绫诲瀷ID鏌ヨ璁惧绫诲瀷鍚嶇О
      *
-     * @param equTypeIds 閮ㄩ棬ID涓查�楀彿鍒嗛殧
-     * @return 閮ㄩ棬鍚嶇О涓查�楀彿鍒嗛殧
+     * @param equTypeIds 璁惧绫诲瀷ID涓查�楀彿鍒嗛殧
+     * @return 璁惧绫诲瀷鍚嶇О涓查�楀彿鍒嗛殧
      */
     String selectEquTypeNameByIds(String equTypeIds);
 }
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 64b6804..7a762a9 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
@@ -33,7 +33,12 @@
     String OSS_ID_TO_URL = "oss_id_to_url";
 
     /**
-     * 璁惧鍚嶇Оid杞悕绉�
+     * 璁惧绫诲瀷鍚嶇Оid杞悕绉�
      */
     String EQU_YPE_ID_TO_NAME = "equ_type_id_to_name";
+    /**
+     * 璁惧鍚嶇Оid杞悕绉�
+     */
+    String EQU_ID_TO_NAME = "equ_id_to_name";
+
 }
diff --git a/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/EquNameTranslationImpl.java b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/EquNameTranslationImpl.java
new file mode 100644
index 0000000..72d0437
--- /dev/null
+++ b/eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/EquNameTranslationImpl.java
@@ -0,0 +1,30 @@
+package org.dromara.common.translation.core.impl;
+
+import lombok.AllArgsConstructor;
+import org.dromara.common.core.service.EquService;
+import org.dromara.common.core.service.EquTypeService;
+import org.dromara.common.translation.annotation.TranslationType;
+import org.dromara.common.translation.constant.TransConstant;
+import org.dromara.common.translation.core.TranslationInterface;
+
+/**
+ * 璁惧缈昏瘧瀹炵幇
+ *
+ * @author zhuguifei
+ */
+@AllArgsConstructor
+@TranslationType(type = TransConstant.EQU_ID_TO_NAME)
+public class EquNameTranslationImpl implements TranslationInterface<String> {
+
+    private final EquService equService;
+
+    @Override
+    public String translation(Object key, String other) {
+        if (key instanceof String ids) {
+            return equService.selectEquNameByIds(ids);
+        } else if (key instanceof Long id) {
+            return equService.selectEquNameByIds(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 d3037b9..2db45d8 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
@@ -5,3 +5,4 @@
 org.dromara.common.translation.core.impl.UserNameTranslationImpl
 org.dromara.common.translation.core.impl.NicknameTranslationImpl
 org.dromara.common.translation.core.impl.EquTypeNameTranslationImpl
+org.dromara.common.translation.core.impl.EquNameTranslationImpl
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java
similarity index 62%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquController.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java
index 2faa7e8..2b9f0b0 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java
@@ -2,9 +2,9 @@
 
 import java.util.List;
 
-import org.dromara.eims.domain.bo.SysEquBo;
-import org.dromara.eims.domain.vo.SysEquVo;
-import org.dromara.eims.service.ISysEquService;
+import org.dromara.eims.domain.bo.EimsEquBo;
+import org.dromara.eims.domain.vo.EimsEquVo;
+import org.dromara.eims.service.IEimsEquService;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
@@ -34,28 +34,28 @@
 @RequiredArgsConstructor
 @RestController
 @RequestMapping("/eims/equ")
-public class SysEquController extends BaseController {
+public class EimsEquController extends BaseController {
 
-    private final ISysEquService sysEquipmentService;
+    private final IEimsEquService eimsEquipmentService;
 
     /**
      * 鏌ヨ銆愯澶囧彴璐︺�戝垪琛�
      */
-    @SaCheckPermission("system:equipment:list")
+    @SaCheckPermission("eims:equ:list")
     @GetMapping("/list")
-    public TableDataInfo<SysEquVo> list(SysEquBo bo, PageQuery pageQuery) {
-        return sysEquipmentService.queryPageList(bo, pageQuery);
+    public TableDataInfo<EimsEquVo> list(EimsEquBo bo, PageQuery pageQuery) {
+        return eimsEquipmentService.queryPageList(bo, pageQuery);
     }
 
     /**
      * 瀵煎嚭銆愯澶囧彴璐︺�戝垪琛�
      */
-    @SaCheckPermission("system:equipment:export")
+    @SaCheckPermission("eims:equ:export")
     @Log(title = "銆愯澶囧彴璐︺��", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(SysEquBo bo, HttpServletResponse response) {
-        List<SysEquVo> list = sysEquipmentService.queryList(bo);
-        ExcelUtil.exportExcel(list, "銆愯澶囧彴璐︺��", SysEquVo.class, response);
+    public void export(EimsEquBo bo, HttpServletResponse response) {
+        List<EimsEquVo> list = eimsEquipmentService.queryList(bo);
+        ExcelUtil.exportExcel(list, "銆愯澶囧彴璐︺��", EimsEquVo.class, response);
     }
 
     /**
@@ -63,33 +63,33 @@
      *
      * @param equId 涓婚敭
      */
-    @SaCheckPermission("system:equipment:query")
+    @SaCheckPermission("eims:equ:query")
     @GetMapping("/{equId}")
-    public R<SysEquVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+    public R<EimsEquVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
                                      @PathVariable Long equId) {
-        return R.ok(sysEquipmentService.queryById(equId));
+        return R.ok(eimsEquipmentService.queryById(equId));
     }
 
     /**
      * 鏂板銆愯澶囧彴璐︺��
      */
-    @SaCheckPermission("system:equipment:add")
+    @SaCheckPermission("eims:equ:add")
     @Log(title = "銆愯澶囧彴璐︺��", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
-    public R<Void> add(@Validated(AddGroup.class) @RequestBody SysEquBo bo) {
-        return toAjax(sysEquipmentService.insertByBo(bo));
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquBo bo) {
+        return toAjax(eimsEquipmentService.insertByBo(bo));
     }
 
     /**
      * 淇敼銆愯澶囧彴璐︺��
      */
-    @SaCheckPermission("system:equipment:edit")
+    @SaCheckPermission("eims:equ:edit")
     @Log(title = "銆愯澶囧彴璐︺��", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
-    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysEquBo bo) {
-        return toAjax(sysEquipmentService.updateByBo(bo));
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquBo bo) {
+        return toAjax(eimsEquipmentService.updateByBo(bo));
     }
 
     /**
@@ -97,11 +97,11 @@
      *
      * @param equIds 涓婚敭涓�
      */
-    @SaCheckPermission("system:equipment:remove")
+    @SaCheckPermission("eims:equ:remove")
     @Log(title = "銆愯澶囧彴璐︺��", businessType = BusinessType.DELETE)
     @DeleteMapping("/{equIds}")
     public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
                           @PathVariable Long[] equIds) {
-        return toAjax(sysEquipmentService.deleteWithValidByIds(List.of(equIds), true));
+        return toAjax(eimsEquipmentService.deleteWithValidByIds(List.of(equIds), true));
     }
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquStatuController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquStatuController.java
new file mode 100644
index 0000000..c2d2441
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquStatuController.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.EimsEquStatuVo;
+import org.dromara.eims.domain.bo.EimsEquStatuBo;
+import org.dromara.eims.service.IEimsEquStatuService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 璁惧鐘舵�佽褰�
+ *
+ * @author zhuguifei
+ * @date 2025-01-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/eims/equStatu")
+public class EimsEquStatuController extends BaseController {
+
+    private final IEimsEquStatuService eimsEquStatuService;
+
+    /**
+     * 鏌ヨ璁惧鐘舵�佽褰曞垪琛�
+     */
+    @SaCheckPermission("eims:equStatu:list")
+    @GetMapping("/list")
+    public TableDataInfo<EimsEquStatuVo> list(EimsEquStatuBo bo, PageQuery pageQuery) {
+        return eimsEquStatuService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 瀵煎嚭璁惧鐘舵�佽褰曞垪琛�
+     */
+    @SaCheckPermission("eims:equStatu:export")
+    @Log(title = "璁惧鐘舵�佽褰�", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EimsEquStatuBo bo, HttpServletResponse response) {
+        List<EimsEquStatuVo> list = eimsEquStatuService.queryList(bo);
+        ExcelUtil.exportExcel(list, "璁惧鐘舵�佽褰�", EimsEquStatuVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵�佽褰曡缁嗕俊鎭�
+     *
+     * @param equStatuId 涓婚敭
+     */
+    @SaCheckPermission("eims:equStatu:query")
+    @GetMapping("/{equStatuId}")
+    public R<EimsEquStatuVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                     @PathVariable Long equStatuId) {
+        return R.ok(eimsEquStatuService.queryById(equStatuId));
+    }
+
+    /**
+     * 鏂板璁惧鐘舵�佽褰�
+     */
+    @SaCheckPermission("eims:equStatu:add")
+    @Log(title = "璁惧鐘舵�佽褰�", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquStatuBo bo) {
+        return toAjax(eimsEquStatuService.insertByBo(bo));
+    }
+
+    /**
+     * 淇敼璁惧鐘舵�佽褰�
+     */
+    @SaCheckPermission("eims:equStatu:edit")
+    @Log(title = "璁惧鐘舵�佽褰�", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquStatuBo bo) {
+        return toAjax(eimsEquStatuService.updateByBo(bo));
+    }
+
+    /**
+     * 鍒犻櫎璁惧鐘舵�佽褰�
+     *
+     * @param equStatuIds 涓婚敭涓�
+     */
+    @SaCheckPermission("eims:equStatu:remove")
+    @Log(title = "璁惧鐘舵�佽褰�", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{equStatuIds}")
+    public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                          @PathVariable Long[] equStatuIds) {
+        return toAjax(eimsEquStatuService.deleteWithValidByIds(List.of(equStatuIds), true));
+    }
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTrialController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTrialController.java
new file mode 100644
index 0000000..27335e3
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTrialController.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.dromara.eims.domain.vo.EimsEquTrialVo;
+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.bo.EimsEquTrialBo;
+import org.dromara.eims.service.IEimsEquTrialService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 璁惧璇曚骇璁板綍
+ *
+ * @author zhuguifei
+ * @date 2025-01-09
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/eims/equTrial")
+public class EimsEquTrialController extends BaseController {
+
+    private final IEimsEquTrialService eimsEquTrialService;
+
+    /**
+     * 鏌ヨ璁惧璇曚骇璁板綍鍒楄〃
+     */
+    @SaCheckPermission("eims:equTrial:list")
+    @GetMapping("/list")
+    public TableDataInfo<EimsEquTrialVo> list(EimsEquTrialBo bo, PageQuery pageQuery) {
+        return eimsEquTrialService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 瀵煎嚭璁惧璇曚骇璁板綍鍒楄〃
+     */
+    @SaCheckPermission("eims:equTrial:export")
+    @Log(title = "璁惧璇曚骇璁板綍", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EimsEquTrialBo bo, HttpServletResponse response) {
+        List<EimsEquTrialVo> list = eimsEquTrialService.queryList(bo);
+        ExcelUtil.exportExcel(list, "璁惧璇曚骇璁板綍", EimsEquTrialVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇璁惧璇曚骇璁板綍璇︾粏淇℃伅
+     *
+     * @param trialId 涓婚敭
+     */
+    @SaCheckPermission("eims:equTrial:query")
+    @GetMapping("/{trialId}")
+    public R<EimsEquTrialVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                     @PathVariable Long trialId) {
+        return R.ok(eimsEquTrialService.queryById(trialId));
+    }
+
+    /**
+     * 鏂板璁惧璇曚骇璁板綍
+     */
+    @SaCheckPermission("eims:equTrial:add")
+    @Log(title = "璁惧璇曚骇璁板綍", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquTrialBo bo) {
+        return toAjax(eimsEquTrialService.insertByBo(bo));
+    }
+
+    /**
+     * 淇敼璁惧璇曚骇璁板綍
+     */
+    @SaCheckPermission("eims:equTrial:edit")
+    @Log(title = "璁惧璇曚骇璁板綍", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquTrialBo bo) {
+        return toAjax(eimsEquTrialService.updateByBo(bo));
+    }
+
+    /**
+     * 鍒犻櫎璁惧璇曚骇璁板綍
+     *
+     * @param trialIds 涓婚敭涓�
+     */
+    @SaCheckPermission("eims:equTrial:remove")
+    @Log(title = "璁惧璇曚骇璁板綍", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{trialIds}")
+    public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                          @PathVariable Long[] trialIds) {
+        return toAjax(eimsEquTrialService.deleteWithValidByIds(List.of(trialIds), true));
+    }
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquTypeController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTypeController.java
similarity index 68%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquTypeController.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTypeController.java
index c0c712f..c3dfe48 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquTypeController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTypeController.java
@@ -7,20 +7,19 @@
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.eims.domain.vo.EimsEquTypeVo;
 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.SysEquTypeVo;
-import org.dromara.eims.domain.bo.SysEquTypeBo;
-import org.dromara.eims.service.ISysEquTypeService;
+import org.dromara.eims.domain.bo.EimsEquTypeBo;
+import org.dromara.eims.service.IEimsEquTypeService;
 
 /**
  * 璁惧绫诲瀷
@@ -32,17 +31,17 @@
 @RequiredArgsConstructor
 @RestController
 @RequestMapping("/eims/equType")
-public class SysEquTypeController extends BaseController {
+public class EimsEquTypeController extends BaseController {
 
-    private final ISysEquTypeService sysEquTypeService;
+    private final IEimsEquTypeService eimsEquTypeService;
 
     /**
      * 鏌ヨ璁惧绫诲瀷鍒楄〃
      */
     @SaCheckPermission("eims:equType:list")
     @GetMapping("/list")
-    public R<List<SysEquTypeVo>> list(SysEquTypeBo bo) {
-        List<SysEquTypeVo> list = sysEquTypeService.queryList(bo);
+    public R<List<EimsEquTypeVo>> list(EimsEquTypeBo bo) {
+        List<EimsEquTypeVo> list = eimsEquTypeService.queryList(bo);
         return R.ok(list);
     }
 
@@ -51,8 +50,8 @@
      */
     @SaCheckPermission("eims:equType:list")
     @GetMapping("/tree")
-    public R<List<Tree<Long>>> equTypeTree(SysEquTypeBo bo) {
-        return R.ok(sysEquTypeService.selectEquTypeTreeList(bo));
+    public R<List<Tree<Long>>> equTypeTree(EimsEquTypeBo bo) {
+        return R.ok(eimsEquTypeService.selectEquTypeTreeList(bo));
     }
 
     /**
@@ -61,9 +60,9 @@
     @SaCheckPermission("eims:equType:export")
     @Log(title = "璁惧绫诲瀷", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(SysEquTypeBo bo, HttpServletResponse response) {
-        List<SysEquTypeVo> list = sysEquTypeService.queryList(bo);
-        ExcelUtil.exportExcel(list, "璁惧绫诲瀷", SysEquTypeVo.class, response);
+    public void export(EimsEquTypeBo bo, HttpServletResponse response) {
+        List<EimsEquTypeVo> list = eimsEquTypeService.queryList(bo);
+        ExcelUtil.exportExcel(list, "璁惧绫诲瀷", EimsEquTypeVo.class, response);
     }
 
     /**
@@ -73,9 +72,9 @@
      */
     @SaCheckPermission("eims:equType:query")
     @GetMapping("/{equTypeId}")
-    public R<SysEquTypeVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+    public R<EimsEquTypeVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
                                    @PathVariable Long equTypeId) {
-        return R.ok(sysEquTypeService.queryById(equTypeId));
+        return R.ok(eimsEquTypeService.queryById(equTypeId));
     }
 
     /**
@@ -85,8 +84,8 @@
     @Log(title = "璁惧绫诲瀷", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
-    public R<Void> add(@Validated(AddGroup.class) @RequestBody SysEquTypeBo bo) {
-        return toAjax(sysEquTypeService.insertByBo(bo));
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquTypeBo bo) {
+        return toAjax(eimsEquTypeService.insertByBo(bo));
     }
 
     /**
@@ -96,8 +95,8 @@
     @Log(title = "璁惧绫诲瀷", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
-    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysEquTypeBo bo) {
-        return toAjax(sysEquTypeService.updateByBo(bo));
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquTypeBo bo) {
+        return toAjax(eimsEquTypeService.updateByBo(bo));
     }
 
     /**
@@ -114,11 +113,11 @@
             return R.warn("璇烽�夋嫨闇�瑕佸垹闄ょ殑鏁版嵁");
         }
         for (int i = 0; i < equTypeIds.length; i++) {
-            if (sysEquTypeService.hasChildByEquTypeId(equTypeIds[i])) {
+            if (eimsEquTypeService.hasChildByEquTypeId(equTypeIds[i])) {
                 return R.warn("瀛樺湪瀛愯彍鍗�,涓嶅厑璁稿垹闄�");
             }
         }
 
-        return toAjax(sysEquTypeService.deleteWithValidByIds(List.of(equTypeIds), true));
+        return toAjax(eimsEquTypeService.deleteWithValidByIds(List.of(equTypeIds), true));
     }
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEqu.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEqu.java
similarity index 95%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEqu.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEqu.java
index a78de6c..a73057e 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEqu.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEqu.java
@@ -10,15 +10,15 @@
 import java.io.Serial;
 
 /**
- * 銆愯澶囧彴璐︺�戝璞� sys_equ
+ * 銆愯澶囧彴璐︺�戝璞� eims_equ
  *
  * @author zhuguifei
  * @date 2025-01-04
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@TableName("sys_equ")
-public class SysEqu extends BaseEntity {
+@TableName("eims_equ")
+public class EimsEqu extends BaseEntity {
 
     @Serial
     private static final long serialVersionUID = 1L;
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquStatu.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquStatu.java
new file mode 100644
index 0000000..9bbd13b
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquStatu.java
@@ -0,0 +1,73 @@
+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_equ_statu
+ *
+ * @author zhuguifei
+ * @date 2025-01-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("eims_equ_statu")
+public class EimsEquStatu extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 璁惧鐘舵�佽褰昳d
+     */
+    @TableId(value = "equ_statu_id")
+    private Long equStatuId;
+
+    /**
+     * 璁惧id
+     */
+    private Long equId;
+
+    /**
+     * 鍙樻洿鍓嶇姸鎬�
+     */
+    private String beforeChange;
+
+    /**
+     * 鍙樻洿鍚庣姸鎬�
+     */
+    private String afterChange;
+
+    /**
+     * 鍙樻洿鏃ユ湡
+     */
+    private Date changeDate;
+
+    /**
+     * 鍙樻洿浜�
+     */
+    private Long changeUser;
+
+    /**
+     * 鍙樻洿浜洪儴闂�
+     */
+    private Long userDept;
+
+    /**
+     * 鍙樻洿鎻忚堪
+     */
+    private String changeDesc;
+
+    /**
+     * 鎻忚堪
+     */
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquTrial.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquTrial.java
new file mode 100644
index 0000000..f566340
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquTrial.java
@@ -0,0 +1,114 @@
+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_equ_trial
+ *
+ * @author zhuguifei
+ * @date 2025-01-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("eims_equ_trial")
+public class EimsEquTrial extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 璇曠敤璁板綍id
+     */
+    @TableId(value = "trial_id")
+    private Long trialId;
+
+    /**
+     * 璁惧id
+     */
+    private Long equId;
+
+    /**
+     * 璇曚骇鏁伴噺
+     */
+    private Long trialNum;
+
+    /**
+     * 璇曚骇鏃ユ湡
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date trialDate;
+
+    /**
+     * 鑹搧鏁伴噺
+     */
+    private Long proGoodNum;
+
+    /**
+     * 鑹搧鐜�
+     */
+    private Long proGoodRate;
+
+    /**
+     * 鎿嶄綔浜洪儴闂�
+     */
+    private Long operatorDept;
+
+    /**
+     * 鎿嶄綔浜�(id)
+     */
+    private Long operatorId;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date startTime;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date endTime;
+
+    /**
+     * 杩愯鏃堕暱
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date runTime;
+
+    /**
+     * 鍋滄満鏃堕暱
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date stopTime;
+
+    /**
+     * 璁″垝杩愯鏃堕暱
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date planRunTime;
+
+    /**
+     * 璋冭瘯灞ュ巻
+     */
+    private String debugHistory;
+
+    /**
+     * 璁惧缁煎悎鏁堢巼
+     */
+    private Long oee;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEquType.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquType.java
similarity index 90%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEquType.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquType.java
index d64b247..01ec24a 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEquType.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquType.java
@@ -8,15 +8,15 @@
 import java.io.Serial;
 
 /**
- * 璁惧绫诲瀷瀵硅薄 sys_equ_type
+ * 璁惧绫诲瀷瀵硅薄 eims_equ_type
  *
  * @author zhuguifei
  * @date 2025-01-06
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@TableName("sys_equ_type")
-public class SysEquType extends BaseEntity {
+@TableName("eims_equ_type")
+public class EimsEquType extends BaseEntity {
 
     @Serial
     private static final long serialVersionUID = 1L;
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquBo.java
similarity index 88%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquBo.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquBo.java
index 6659fd3..e77b87a 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquBo.java
@@ -1,10 +1,8 @@
 package org.dromara.eims.domain.bo;
 
 
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import org.dromara.eims.domain.SysEqu;
+import org.dromara.eims.domain.EimsEqu;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -14,15 +12,15 @@
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 
 /**
- * 銆愯澶囧彴璐︺�戜笟鍔″璞� sys_equipment
+ * 銆愯澶囧彴璐︺�戜笟鍔″璞� eims_equ
  *
  * @author zhuguifei
  * @date 2025-01-04
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@AutoMapper(target = SysEqu.class, reverseConvertGenerate = false)
-public class SysEquBo extends BaseEntity {
+@AutoMapper(target = EimsEqu.class, reverseConvertGenerate = false)
+public class EimsEquBo extends BaseEntity {
 
     /**
      *
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquStatuBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquStatuBo.java
new file mode 100644
index 0000000..2851e41
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquStatuBo.java
@@ -0,0 +1,72 @@
+package org.dromara.eims.domain.bo;
+
+import org.dromara.eims.domain.EimsEquStatu;
+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_equ_statu
+ *
+ * @author zhuguifei
+ * @date 2025-01-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EimsEquStatu.class, reverseConvertGenerate = false)
+public class EimsEquStatuBo extends BaseEntity {
+
+    /**
+     * 璁惧鐘舵�佽褰昳d
+     */
+    private Long equStatuId;
+
+    /**
+     * 璁惧id
+     */
+    private Long equId;
+
+    /**
+     * 鍙樻洿鍓嶇姸鎬�
+     */
+    private String beforeChange;
+
+    /**
+     * 鍙樻洿鍚庣姸鎬�
+     */
+    private String afterChange;
+
+    /**
+     * 鍙樻洿鏃ユ湡
+     */
+    private Date changeDate;
+
+    /**
+     * 鍙樻洿浜�
+     */
+    private Long changeUser;
+
+    /**
+     * 鍙樻洿浜洪儴闂�
+     */
+    private Long userDept;
+
+    /**
+     * 鍙樻洿鎻忚堪
+     */
+    @NotBlank(message = "鍙樻洿鎻忚堪涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String changeDesc;
+
+    /**
+     * 鎻忚堪
+     */
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTrialBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTrialBo.java
new file mode 100644
index 0000000..6fd5753
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTrialBo.java
@@ -0,0 +1,112 @@
+package org.dromara.eims.domain.bo;
+
+import org.dromara.eims.domain.EimsEquTrial;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+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;
+
+/**
+ * 璁惧璇曚骇璁板綍涓氬姟瀵硅薄 sys_equ_trial
+ *
+ * @author zhuguifei
+ * @date 2025-01-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EimsEquTrial.class, reverseConvertGenerate = false)
+public class EimsEquTrialBo extends BaseEntity {
+
+    /**
+     * 璇曠敤璁板綍id
+     */
+    @NotNull(message = "璇曠敤璁板綍id涓嶈兘涓虹┖", groups = { EditGroup.class })
+    private Long trialId;
+
+    /**
+     * 璁惧id
+     */
+    private Long equId;
+
+    /**
+     * 璇曚骇鏁伴噺
+     */
+    private Long trialNum;
+
+    /**
+     * 璇曚骇鏃ユ湡
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date trialDate;
+
+    /**
+     * 鑹搧鏁伴噺
+     */
+    private Long proGoodNum;
+
+    /**
+     * 鑹搧鐜�
+     */
+    private Long proGoodRate;
+
+    /**
+     * 鎿嶄綔浜洪儴闂�
+     */
+    private Long operatorDept;
+
+    /**
+     * 鎿嶄綔浜�(id)
+     */
+    private Long operatorId;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date startTime;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date endTime;
+
+    /**
+     * 杩愯鏃堕暱
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date runTime;
+
+    /**
+     * 鍋滄満鏃堕暱
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date stopTime;
+
+    /**
+     * 璁″垝杩愯鏃堕暱
+     */
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date planRunTime;
+
+    /**
+     * 璋冭瘯灞ュ巻
+     */
+    private String debugHistory;
+
+    /**
+     * 璁惧缁煎悎鏁堢巼
+     */
+    private Long oee;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquTypeBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTypeBo.java
similarity index 76%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquTypeBo.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTypeBo.java
index b01b830..89bfc9f 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquTypeBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTypeBo.java
@@ -1,13 +1,10 @@
 package org.dromara.eims.domain.bo;
 
-import org.dromara.eims.domain.SysEquType;
+import org.dromara.eims.domain.EimsEquType;
 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.*;
 
 /**
  * 璁惧绫诲瀷涓氬姟瀵硅薄 sys_equ_type
@@ -17,8 +14,8 @@
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@AutoMapper(target = SysEquType.class, reverseConvertGenerate = false)
-public class SysEquTypeBo extends BaseEntity {
+@AutoMapper(target = EimsEquType.class, reverseConvertGenerate = false)
+public class EimsEquTypeBo extends BaseEntity {
 
     /**
      * 绫诲瀷id
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquStatuVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquStatuVo.java
new file mode 100644
index 0000000..3f5d8c7
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquStatuVo.java
@@ -0,0 +1,99 @@
+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.EimsEquStatu;
+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_equ_statu
+ *
+ * @author zhuguifei
+ * @date 2025-01-14
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EimsEquStatu.class)
+public class EimsEquStatuVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 璁惧鐘舵�佽褰昳d
+     */
+    @ExcelProperty(value = "璁惧鐘舵�佽褰昳d")
+    private Long equStatuId;
+
+    /**
+     * 璁惧id
+     */
+    @ExcelProperty(value = "璁惧id")
+    private Long equId;
+
+    /**
+     * 璁惧鍚嶇О
+     */
+    @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId")
+    private String equName;
+
+    /**
+     * 鍙樻洿鍓嶇姸鎬�
+     */
+    @ExcelProperty(value = "鍙樻洿鍓嶇姸鎬�")
+    private String beforeChange;
+
+    /**
+     * 鍙樻洿鍚庣姸鎬�
+     */
+    @ExcelProperty(value = "鍙樻洿鍚庣姸鎬�")
+    private String afterChange;
+
+    /**
+     * 鍙樻洿鏃ユ湡
+     */
+    @ExcelProperty(value = "鍙樻洿鏃ユ湡")
+    private Date changeDate;
+
+    /**
+     * 鍙樻洿浜�
+     */
+    private Long changeUser;
+
+    @ExcelProperty(value = "鍙樻洿浜�")
+    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "changeUser")
+    private  String changeUserName;
+
+    /**
+     * 鍙樻洿浜洪儴闂�
+     */
+    @ExcelProperty(value = "鍙樻洿浜洪儴闂�")
+    private Long userDept;
+
+    /**
+     * 鍙樻洿鎻忚堪
+     */
+    @ExcelProperty(value = "鍙樻洿鎻忚堪")
+    private String changeDesc;
+
+    /**
+     * 鎻忚堪
+     */
+    @ExcelProperty(value = "鎻忚堪")
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTrialVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTrialVo.java
new file mode 100644
index 0000000..86c17e7
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTrialVo.java
@@ -0,0 +1,144 @@
+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.EimsEquTrial;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 璁惧璇曚骇璁板綍瑙嗗浘瀵硅薄 eims_equ_trial
+ *
+ * @author zhuguifei
+ * @date 2025-01-09
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EimsEquTrial.class)
+public class EimsEquTrialVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 璇曠敤璁板綍id
+     */
+    @ExcelProperty(value = "璇曠敤璁板綍id")
+    private Long trialId;
+
+    /**
+     * 璁惧id
+     */
+    @ExcelProperty(value = "璁惧id")
+    private Long equId;
+    /**
+     * 璁惧鍚嶇О
+     */
+    @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId")
+    private String equName;
+
+    /**
+     * 璇曚骇鏁伴噺
+     */
+    @ExcelProperty(value = "璇曚骇鏁伴噺")
+    private Long trialNum;
+
+    /**
+     * 璇曚骇鏃ユ湡
+     */
+    @ExcelProperty(value = "璇曚骇鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date trialDate;
+
+    /**
+     * 鑹搧鏁伴噺
+     */
+    @ExcelProperty(value = "鑹搧鏁伴噺")
+    private Long proGoodNum;
+
+    /**
+     * 鑹搧鐜�
+     */
+    @ExcelProperty(value = "鑹搧鐜�")
+    private Long proGoodRate;
+
+    /**
+     * 鎿嶄綔浜洪儴闂�
+     */
+    private Long operatorDept;
+
+    /**
+     * 鎿嶄綔浜�(id)
+     */
+    @ExcelProperty(value = "鎿嶄綔浜�(id)")
+    private Long operatorId;
+    /**
+     * 鎿嶄綔浜�
+     */
+    @ExcelProperty(value = "鎿嶄綔浜�")
+    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "operatorId")
+    private String operatorName;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @ExcelProperty(value = "寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date startTime;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @ExcelProperty(value = "缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date endTime;
+
+    /**
+     * 杩愯鏃堕暱
+     */
+    @ExcelProperty(value = "杩愯鏃堕暱")
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date runTime;
+
+    /**
+     * 鍋滄満鏃堕暱
+     */
+    @ExcelProperty(value = "鍋滄満鏃堕暱")
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date stopTime;
+
+    /**
+     * 璁″垝杩愯鏃堕暱
+     */
+    @ExcelProperty(value = "璁″垝杩愯鏃堕暱")
+    @JsonFormat(pattern = "HH:mm:ss")
+    private Date planRunTime;
+
+    /**
+     * 璋冭瘯灞ュ巻
+     */
+    @ExcelProperty(value = "璋冭瘯灞ュ巻")
+    private String debugHistory;
+
+    /**
+     * 璁惧缁煎悎鏁堢巼
+     */
+    @ExcelProperty(value = "璁惧缁煎悎鏁堢巼")
+    private Long oee;
+
+    /**
+     * 澶囨敞
+     */
+    @ExcelProperty(value = "澶囨敞")
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquTypeVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTypeVo.java
similarity index 90%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquTypeVo.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTypeVo.java
index 840eede..7a3e36e 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquTypeVo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTypeVo.java
@@ -1,6 +1,6 @@
 package org.dromara.eims.domain.vo;
 
-import org.dromara.eims.domain.SysEquType;
+import org.dromara.eims.domain.EimsEquType;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import org.dromara.common.excel.annotation.ExcelDictFormat;
@@ -10,7 +10,6 @@
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.util.Date;
 import java.util.List;
 
 
@@ -22,8 +21,8 @@
  */
 @Data
 @ExcelIgnoreUnannotated
-@AutoMapper(target = SysEquType.class)
-public class SysEquTypeVo implements Serializable {
+@AutoMapper(target = EimsEquType.class)
+public class EimsEquTypeVo implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;
@@ -84,7 +83,7 @@
     @ExcelProperty(value = "澶囨敞")
     private String remark;
 
-    private List<SysEquTypeVo> children;
+    private List<EimsEquTypeVo> children;
 
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquVo.java
similarity index 94%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquVo.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquVo.java
index 5426e7d..5ba8cbb 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquVo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquVo.java
@@ -3,11 +3,10 @@
 import java.util.Date;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.TableId;
 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.SysEqu;
+import org.dromara.eims.domain.EimsEqu;
 import org.dromara.common.excel.annotation.ExcelDictFormat;
 import org.dromara.common.excel.convert.ExcelDictConvert;
 import io.github.linpeilie.annotations.AutoMapper;
@@ -18,15 +17,15 @@
 
 
 /**
- * 銆愯澶囧彴璐︺�戣鍥惧璞� sys_equipment
+ * 銆愯澶囧彴璐︺�戣鍥惧璞� eims_equ
  *
  * @author zhuguifei
  * @date 2025-01-04
  */
 @Data
 @ExcelIgnoreUnannotated
-@AutoMapper(target = SysEqu.class)
-public class SysEquVo implements Serializable {
+@AutoMapper(target = EimsEqu.class)
+public class EimsEquVo implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquMapper.java
new file mode 100644
index 0000000..9cde455
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.eims.mapper;
+
+import org.dromara.eims.domain.EimsEqu;
+import org.dromara.eims.domain.vo.EimsEquVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 銆愯澶囧彴璐︺�慚apper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2025-01-04
+ */
+public interface EimsEquMapper extends BaseMapperPlus<EimsEqu, EimsEquVo> {
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquStatuMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquStatuMapper.java
new file mode 100644
index 0000000..6f8ef36
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquStatuMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.eims.mapper;
+
+import org.dromara.eims.domain.EimsEquStatu;
+import org.dromara.eims.domain.vo.EimsEquStatuVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 璁惧鐘舵�佽褰昅apper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2025-01-14
+ */
+public interface EimsEquStatuMapper extends BaseMapperPlus<EimsEquStatu, EimsEquStatuVo> {
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTrialMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTrialMapper.java
new file mode 100644
index 0000000..9688873
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTrialMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.eims.mapper;
+
+import org.dromara.eims.domain.EimsEquTrial;
+import org.dromara.eims.domain.vo.EimsEquTrialVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 璁惧璇曚骇璁板綍Mapper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2025-01-09
+ */
+public interface EimsEquTrialMapper extends BaseMapperPlus<EimsEquTrial, EimsEquTrialVo> {
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTypeMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTypeMapper.java
new file mode 100644
index 0000000..6ef34dd
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTypeMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.eims.mapper;
+
+import org.dromara.eims.domain.EimsEquType;
+import org.dromara.eims.domain.vo.EimsEquTypeVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 璁惧绫诲瀷Mapper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2025-01-06
+ */
+public interface EimsEquTypeMapper extends BaseMapperPlus<EimsEquType, EimsEquTypeVo> {
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquMapper.java
deleted file mode 100644
index 1371909..0000000
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquMapper.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.dromara.eims.mapper;
-
-import org.dromara.eims.domain.SysEqu;
-import org.dromara.eims.domain.vo.SysEquVo;
-import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
-
-/**
- * 銆愯澶囧彴璐︺�慚apper鎺ュ彛
- *
- * @author zhuguifei
- * @date 2025-01-04
- */
-public interface SysEquMapper extends BaseMapperPlus<SysEqu, SysEquVo> {
-
-}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquTypeMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquTypeMapper.java
deleted file mode 100644
index cbf20e8..0000000
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquTypeMapper.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.dromara.eims.mapper;
-
-import org.dromara.eims.domain.SysEquType;
-import org.dromara.eims.domain.vo.SysEquTypeVo;
-import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
-
-/**
- * 璁惧绫诲瀷Mapper鎺ュ彛
- *
- * @author zhuguifei
- * @date 2025-01-06
- */
-public interface SysEquTypeMapper extends BaseMapperPlus<SysEquType, SysEquTypeVo> {
-
-}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/ISysEquService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquService.java
similarity index 78%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/ISysEquService.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquService.java
index d2ab9bb..6d5da2a 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/ISysEquService.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquService.java
@@ -1,8 +1,8 @@
 package org.dromara.eims.service;
 
 
-import org.dromara.eims.domain.bo.SysEquBo;
-import org.dromara.eims.domain.vo.SysEquVo;
+import org.dromara.eims.domain.bo.EimsEquBo;
+import org.dromara.eims.domain.vo.EimsEquVo;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
@@ -15,7 +15,7 @@
  * @author zhuguifei
  * @date 2025-01-04
  */
-public interface ISysEquService {
+public interface IEimsEquService {
 
     /**
      * 鏌ヨ銆愯澶囧彴璐︺��
@@ -23,7 +23,7 @@
      * @param equId 涓婚敭
      * @return 銆愯澶囧彴璐︺��
      */
-    SysEquVo queryById(Long equId);
+    EimsEquVo queryById(Long equId);
 
     /**
      * 鍒嗛〉鏌ヨ銆愯澶囧彴璐︺�戝垪琛�
@@ -32,7 +32,7 @@
      * @param pageQuery 鍒嗛〉鍙傛暟
      * @return 銆愯澶囧彴璐︺�戝垎椤靛垪琛�
      */
-    TableDataInfo<SysEquVo> queryPageList(SysEquBo bo, PageQuery pageQuery);
+    TableDataInfo<EimsEquVo> queryPageList(EimsEquBo bo, PageQuery pageQuery);
 
     /**
      * 鏌ヨ绗﹀悎鏉′欢鐨勩�愯澶囧彴璐︺�戝垪琛�
@@ -40,7 +40,7 @@
      * @param bo 鏌ヨ鏉′欢
      * @return 銆愯澶囧彴璐︺�戝垪琛�
      */
-    List<SysEquVo> queryList(SysEquBo bo);
+    List<EimsEquVo> queryList(EimsEquBo bo);
 
     /**
      * 鏂板銆愯澶囧彴璐︺��
@@ -48,7 +48,7 @@
      * @param bo 銆愯澶囧彴璐︺��
      * @return 鏄惁鏂板鎴愬姛
      */
-    Boolean insertByBo(SysEquBo bo);
+    Boolean insertByBo(EimsEquBo bo);
 
     /**
      * 淇敼銆愯澶囧彴璐︺��
@@ -56,7 +56,7 @@
      * @param bo 銆愯澶囧彴璐︺��
      * @return 鏄惁淇敼鎴愬姛
      */
-    Boolean updateByBo(SysEquBo bo);
+    Boolean updateByBo(EimsEquBo bo);
 
     /**
      * 鏍¢獙骞舵壒閲忓垹闄ゃ�愯澶囧彴璐︺�戜俊鎭�
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquStatuService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquStatuService.java
new file mode 100644
index 0000000..86160fa
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquStatuService.java
@@ -0,0 +1,68 @@
+package org.dromara.eims.service;
+
+import org.dromara.eims.domain.vo.EimsEquStatuVo;
+import org.dromara.eims.domain.bo.EimsEquStatuBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 璁惧鐘舵�佽褰昐ervice鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2025-01-14
+ */
+public interface IEimsEquStatuService {
+
+    /**
+     * 鏌ヨ璁惧鐘舵�佽褰�
+     *
+     * @param equStatuId 涓婚敭
+     * @return 璁惧鐘舵�佽褰�
+     */
+    EimsEquStatuVo queryById(Long equStatuId);
+
+    /**
+     * 鍒嗛〉鏌ヨ璁惧鐘舵�佽褰曞垪琛�
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 璁惧鐘舵�佽褰曞垎椤靛垪琛�
+     */
+    TableDataInfo<EimsEquStatuVo> queryPageList(EimsEquStatuBo bo, PageQuery pageQuery);
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勮澶囩姸鎬佽褰曞垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 璁惧鐘舵�佽褰曞垪琛�
+     */
+    List<EimsEquStatuVo> queryList(EimsEquStatuBo bo);
+
+    /**
+     * 鏂板璁惧鐘舵�佽褰�
+     *
+     * @param bo 璁惧鐘舵�佽褰�
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    Boolean insertByBo(EimsEquStatuBo bo);
+
+    /**
+     * 淇敼璁惧鐘舵�佽褰�
+     *
+     * @param bo 璁惧鐘舵�佽褰�
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    Boolean updateByBo(EimsEquStatuBo 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/IEimsEquTrialService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTrialService.java
new file mode 100644
index 0000000..3a2592e
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTrialService.java
@@ -0,0 +1,68 @@
+package org.dromara.eims.service;
+
+import org.dromara.eims.domain.vo.EimsEquTrialVo;
+import org.dromara.eims.domain.bo.EimsEquTrialBo;
+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-01-09
+ */
+public interface IEimsEquTrialService {
+
+    /**
+     * 鏌ヨ璁惧璇曚骇璁板綍
+     *
+     * @param trialId 涓婚敭
+     * @return 璁惧璇曚骇璁板綍
+     */
+    EimsEquTrialVo queryById(Long trialId);
+
+    /**
+     * 鍒嗛〉鏌ヨ璁惧璇曚骇璁板綍鍒楄〃
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 璁惧璇曚骇璁板綍鍒嗛〉鍒楄〃
+     */
+    TableDataInfo<EimsEquTrialVo> queryPageList(EimsEquTrialBo bo, PageQuery pageQuery);
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勮澶囪瘯浜ц褰曞垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 璁惧璇曚骇璁板綍鍒楄〃
+     */
+    List<EimsEquTrialVo> queryList(EimsEquTrialBo bo);
+
+    /**
+     * 鏂板璁惧璇曚骇璁板綍
+     *
+     * @param bo 璁惧璇曚骇璁板綍
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    Boolean insertByBo(EimsEquTrialBo bo);
+
+    /**
+     * 淇敼璁惧璇曚骇璁板綍
+     *
+     * @param bo 璁惧璇曚骇璁板綍
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    Boolean updateByBo(EimsEquTrialBo 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/ISysEquTypeService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTypeService.java
similarity index 76%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/ISysEquTypeService.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTypeService.java
index c91d35d..846d837 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/ISysEquTypeService.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTypeService.java
@@ -1,8 +1,8 @@
 package org.dromara.eims.service;
 
 import cn.hutool.core.lang.tree.Tree;
-import org.dromara.eims.domain.vo.SysEquTypeVo;
-import org.dromara.eims.domain.bo.SysEquTypeBo;
+import org.dromara.eims.domain.bo.EimsEquTypeBo;
+import org.dromara.eims.domain.vo.EimsEquTypeVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -13,7 +13,7 @@
  * @author zhuguifei
  * @date 2025-01-06
  */
-public interface ISysEquTypeService {
+public interface IEimsEquTypeService {
 
     /**
      * 鏌ヨ璁惧绫诲瀷
@@ -21,7 +21,7 @@
      * @param equTypeId 涓婚敭
      * @return 璁惧绫诲瀷
      */
-    SysEquTypeVo queryById(Long equTypeId);
+    EimsEquTypeVo queryById(Long equTypeId);
 
 
     /**
@@ -30,7 +30,7 @@
      * @param bo 鏌ヨ鏉′欢
      * @return 璁惧绫诲瀷鍒楄〃
      */
-    List<SysEquTypeVo> queryList(SysEquTypeBo bo);
+    List<EimsEquTypeVo> queryList(EimsEquTypeBo bo);
 
     /**
      * 鏂板璁惧绫诲瀷
@@ -38,7 +38,7 @@
      * @param bo 璁惧绫诲瀷
      * @return 鏄惁鏂板鎴愬姛
      */
-    Boolean insertByBo(SysEquTypeBo bo);
+    Boolean insertByBo(EimsEquTypeBo bo);
 
     /**
      * 淇敼璁惧绫诲瀷
@@ -46,7 +46,7 @@
      * @param bo 璁惧绫诲瀷
      * @return 鏄惁淇敼鎴愬姛
      */
-    Boolean updateByBo(SysEquTypeBo bo);
+    Boolean updateByBo(EimsEquTypeBo bo);
 
     /**
      * 鏍¢獙骞舵壒閲忓垹闄よ澶囩被鍨嬩俊鎭�
@@ -70,6 +70,6 @@
      * @param bo
      * @return 鏍戝垪琛�
      */
-    List<Tree<Long>> selectEquTypeTreeList(SysEquTypeBo bo);
+    List<Tree<Long>> selectEquTypeTreeList(EimsEquTypeBo bo);
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquServiceImpl.java
new file mode 100644
index 0000000..5ddfc59
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquServiceImpl.java
@@ -0,0 +1,206 @@
+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.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.core.service.EquService;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.eims.domain.EimsEqu;
+import org.dromara.eims.domain.EimsEquType;
+import org.dromara.eims.domain.bo.EimsEquBo;
+import org.dromara.eims.domain.vo.EimsEquTypeVo;
+import org.dromara.eims.domain.vo.EimsEquVo;
+import org.dromara.eims.mapper.EimsEquMapper;
+import org.dromara.eims.mapper.EimsEquTypeMapper;
+import org.dromara.eims.service.IEimsEquService;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 銆愯澶囧彴璐︺�慡ervice涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2025-01-04
+ */
+@RequiredArgsConstructor
+@Service
+public class EimsEquServiceImpl implements IEimsEquService, EquService {
+
+    private final EimsEquMapper baseMapper;
+    private final EimsEquTypeMapper equTypeMapper;
+
+    /**
+     * 鏌ヨ銆愯澶囧彴璐︺��
+     *
+     * @param equId 涓婚敭
+     * @return 銆愯澶囧彴璐︺��
+     */
+    @Override
+    public EimsEquVo queryById(Long equId){
+        return baseMapper.selectVoById(equId);
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ銆愯澶囧彴璐︺�戝垪琛�
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 銆愯澶囧彴璐︺�戝垎椤靛垪琛�
+     */
+    @Override
+    public TableDataInfo<EimsEquVo> queryPageList(EimsEquBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EimsEqu> lqw = buildQueryWrapper(bo);
+        Page<EimsEquVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勩�愯澶囧彴璐︺�戝垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 銆愯澶囧彴璐︺�戝垪琛�
+     */
+    @Override
+    public List<EimsEquVo> queryList(EimsEquBo bo) {
+        LambdaQueryWrapper<EimsEqu> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EimsEqu> buildQueryWrapper(EimsEquBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EimsEqu> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getAssetNo()), EimsEqu::getAssetNo, bo.getAssetNo());
+        Long equTypeId = bo.getEquTypeId();
+        /**
+         * equTypeId = 0 鏃舵煡璇㈡墍鏈夎澶囷紙榛樿鏍圭洰褰昳d涓�0锛岃瑙丼ysEquTypeServiceImpl涓璼electEquTypeTreeList锛�
+         * equTypeId   涓哄叾浠栧�兼椂鍙煡褰撳墠璁惧绫诲瀷id鍜屽悗浠h澶囩被鍨媔d
+         */
+        if (equTypeId != null && equTypeId > 0) {
+            List<Long> allDescendantIds = getAllDescendantIds(equTypeId);
+            lqw.in(EimsEqu::getEquTypeId,allDescendantIds);
+        }
+
+        lqw.like(StringUtils.isNotBlank(bo.getEquName()), EimsEqu::getEquName, bo.getEquName());
+        lqw.eq(StringUtils.isNotBlank(bo.getModelNo()), EimsEqu::getModelNo, bo.getModelNo());
+        lqw.eq(StringUtils.isNotBlank(bo.getMadeIn()), EimsEqu::getMadeIn, bo.getMadeIn());
+        lqw.eq(bo.getRatedPower() != null, EimsEqu::getRatedPower, bo.getRatedPower());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlateInfo()), EimsEqu::getPlateInfo, bo.getPlateInfo());
+        lqw.eq(bo.getPurchaseDate() != null, EimsEqu::getPurchaseDate, bo.getPurchaseDate());
+        lqw.eq(bo.getStatus() != null, EimsEqu::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getLocation()), EimsEqu::getLocation, bo.getLocation());
+        lqw.eq(bo.getDeptUsed() != null, EimsEqu::getDeptUsed, bo.getDeptUsed());
+        lqw.eq(bo.getRespPerson() != null, EimsEqu::getRespPerson, bo.getRespPerson());
+        lqw.eq(StringUtils.isNotBlank(bo.getContactPhone()), EimsEqu::getContactPhone, bo.getContactPhone());
+        lqw.eq(bo.getDeployDate() != null, EimsEqu::getDeployDate, bo.getDeployDate());
+        lqw.eq(bo.getTrialDate() != null, EimsEqu::getTrialDate, bo.getTrialDate());
+        lqw.eq(bo.getPlanAcceptDate() != null, EimsEqu::getPlanAcceptDate, bo.getPlanAcceptDate());
+        lqw.eq(bo.getActualAcceptDate() != null, EimsEqu::getActualAcceptDate, bo.getActualAcceptDate());
+        lqw.eq(bo.getImportStatus() != null, EimsEqu::getImportStatus, bo.getImportStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getEquCode()), EimsEqu::getEquCode, bo.getEquCode());
+        lqw.eq(bo.getInventoryFlag() != null, EimsEqu::getInventoryFlag, bo.getInventoryFlag());
+        lqw.eq(bo.getInventoryDate() != null, EimsEqu::getInventoryDate, bo.getInventoryDate());
+        lqw.eq(bo.getServiceLife() != null, EimsEqu::getServiceLife, bo.getServiceLife());
+        lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
+            EimsEqu::getDeployDate, params.get("beginTime"), params.get("endTime"));
+        return lqw;
+    }
+
+    /**
+     * 鏍规嵁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<EimsEquType> equTypeWrapper = new QueryWrapper<>();
+        equTypeWrapper.lambda().eq(EimsEquType::getParentId, currentId);
+
+        List<EimsEquTypeVo> children = equTypeMapper.selectVoList(equTypeWrapper);
+        if (children != null && !children.isEmpty()) {
+            for (EimsEquTypeVo child : children) {
+                Long childId = child.getEquTypeId();
+                collector.add(childId);
+                collectDescendants(childId, collector);
+            }
+        }
+    }
+    /**
+     * 鏂板銆愯澶囧彴璐︺��
+     *
+     * @param bo 銆愯澶囧彴璐︺��
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    @Override
+    public Boolean insertByBo(EimsEquBo bo) {
+        EimsEqu add = MapstructUtils.convert(bo, EimsEqu.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setEquId(add.getEquId());
+        }
+        return flag;
+    }
+
+    /**
+     * 淇敼銆愯澶囧彴璐︺��
+     *
+     * @param bo 銆愯澶囧彴璐︺��
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    @Override
+    public Boolean updateByBo(EimsEquBo bo) {
+        EimsEqu update = MapstructUtils.convert(bo, EimsEqu.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     */
+    private void validEntityBeforeSave(EimsEqu 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 String selectEquNameByIds(String equIds) {
+        List<String> list = new ArrayList<>();
+        for (Long id : StringUtils.splitTo(equIds, Convert::toLong)) {
+            EimsEquVo vo = SpringUtils.getAopProxy(this).queryById(id);
+            if (ObjectUtil.isNotNull(vo)) {
+                list.add(vo.getEquName());
+            }
+        }
+        return String.join(StringUtils.SEPARATOR, list);
+    }
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquStatuServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquStatuServiceImpl.java
new file mode 100644
index 0000000..160f7dd
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquStatuServiceImpl.java
@@ -0,0 +1,135 @@
+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.dromara.eims.domain.EimsEqu;
+import org.springframework.stereotype.Service;
+import org.dromara.eims.domain.bo.EimsEquStatuBo;
+import org.dromara.eims.domain.vo.EimsEquStatuVo;
+import org.dromara.eims.domain.EimsEquStatu;
+import org.dromara.eims.mapper.EimsEquStatuMapper;
+import org.dromara.eims.service.IEimsEquStatuService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 璁惧鐘舵�佽褰昐ervice涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2025-01-14
+ */
+@RequiredArgsConstructor
+@Service
+public class EimsEquStatuServiceImpl implements IEimsEquStatuService {
+
+    private final EimsEquStatuMapper baseMapper;
+
+    /**
+     * 鏌ヨ璁惧鐘舵�佽褰�
+     *
+     * @param equStatuId 涓婚敭
+     * @return 璁惧鐘舵�佽褰�
+     */
+    @Override
+    public EimsEquStatuVo queryById(Long equStatuId){
+        return baseMapper.selectVoById(equStatuId);
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ璁惧鐘舵�佽褰曞垪琛�
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 璁惧鐘舵�佽褰曞垎椤靛垪琛�
+     */
+    @Override
+    public TableDataInfo<EimsEquStatuVo> queryPageList(EimsEquStatuBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EimsEquStatu> lqw = buildQueryWrapper(bo);
+        Page<EimsEquStatuVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勮澶囩姸鎬佽褰曞垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 璁惧鐘舵�佽褰曞垪琛�
+     */
+    @Override
+    public List<EimsEquStatuVo> queryList(EimsEquStatuBo bo) {
+        LambdaQueryWrapper<EimsEquStatu> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EimsEquStatu> buildQueryWrapper(EimsEquStatuBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EimsEquStatu> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getEquId() != null, EimsEquStatu::getEquId, bo.getEquId());
+        lqw.eq(StringUtils.isNotBlank(bo.getBeforeChange()), EimsEquStatu::getBeforeChange, bo.getBeforeChange());
+        lqw.eq(StringUtils.isNotBlank(bo.getAfterChange()), EimsEquStatu::getAfterChange, bo.getAfterChange());
+        lqw.eq(bo.getChangeUser() != null, EimsEquStatu::getChangeUser, bo.getChangeUser());
+        lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
+            EimsEquStatu::getChangeDate, params.get("beginTime"), params.get("endTime"));
+        return lqw;
+    }
+
+    /**
+     * 鏂板璁惧鐘舵�佽褰�
+     *
+     * @param bo 璁惧鐘舵�佽褰�
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    @Override
+    public Boolean insertByBo(EimsEquStatuBo bo) {
+        EimsEquStatu add = MapstructUtils.convert(bo, EimsEquStatu.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setEquStatuId(add.getEquStatuId());
+        }
+        return flag;
+    }
+
+    /**
+     * 淇敼璁惧鐘舵�佽褰�
+     *
+     * @param bo 璁惧鐘舵�佽褰�
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    @Override
+    public Boolean updateByBo(EimsEquStatuBo bo) {
+        EimsEquStatu update = MapstructUtils.convert(bo, EimsEquStatu.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     */
+    private void validEntityBeforeSave(EimsEquStatu 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/EimsEquTrialServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTrialServiceImpl.java
new file mode 100644
index 0000000..0ff5394
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTrialServiceImpl.java
@@ -0,0 +1,143 @@
+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.dromara.eims.domain.EimsEquTrial;
+import org.dromara.eims.domain.bo.EimsEquTrialBo;
+import org.springframework.stereotype.Service;
+import org.dromara.eims.domain.vo.EimsEquTrialVo;
+import org.dromara.eims.mapper.EimsEquTrialMapper;
+import org.dromara.eims.service.IEimsEquTrialService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 璁惧璇曚骇璁板綍Service涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2025-01-09
+ */
+@RequiredArgsConstructor
+@Service
+public class EimsEquTrialServiceImpl implements IEimsEquTrialService {
+
+    private final EimsEquTrialMapper baseMapper;
+
+    /**
+     * 鏌ヨ璁惧璇曚骇璁板綍
+     *
+     * @param trialId 涓婚敭
+     * @return 璁惧璇曚骇璁板綍
+     */
+    @Override
+    public EimsEquTrialVo queryById(Long trialId){
+        return baseMapper.selectVoById(trialId);
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ璁惧璇曚骇璁板綍鍒楄〃
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 璁惧璇曚骇璁板綍鍒嗛〉鍒楄〃
+     */
+    @Override
+    public TableDataInfo<EimsEquTrialVo> queryPageList(EimsEquTrialBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EimsEquTrial> lqw = buildQueryWrapper(bo);
+        Page<EimsEquTrialVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勮澶囪瘯浜ц褰曞垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 璁惧璇曚骇璁板綍鍒楄〃
+     */
+    @Override
+    public List<EimsEquTrialVo> queryList(EimsEquTrialBo bo) {
+        LambdaQueryWrapper<EimsEquTrial> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EimsEquTrial> buildQueryWrapper(EimsEquTrialBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EimsEquTrial> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getEquId() != null, EimsEquTrial::getEquId, bo.getEquId());
+        lqw.eq(bo.getTrialNum() != null, EimsEquTrial::getTrialNum, bo.getTrialNum());
+        lqw.eq(bo.getTrialDate() != null, EimsEquTrial::getTrialDate, bo.getTrialDate());
+        lqw.eq(bo.getProGoodNum() != null, EimsEquTrial::getProGoodNum, bo.getProGoodNum());
+        lqw.eq(bo.getProGoodRate() != null, EimsEquTrial::getProGoodRate, bo.getProGoodRate());
+        lqw.eq(bo.getOperatorId() != null, EimsEquTrial::getOperatorId, bo.getOperatorId());
+        lqw.eq(bo.getStartTime() != null, EimsEquTrial::getStartTime, bo.getStartTime());
+        lqw.eq(bo.getEndTime() != null, EimsEquTrial::getEndTime, bo.getEndTime());
+        lqw.eq(bo.getRunTime() != null, EimsEquTrial::getRunTime, bo.getRunTime());
+        lqw.eq(bo.getStopTime() != null, EimsEquTrial::getStopTime, bo.getStopTime());
+        lqw.eq(bo.getPlanRunTime() != null, EimsEquTrial::getPlanRunTime, bo.getPlanRunTime());
+        lqw.eq(StringUtils.isNotBlank(bo.getDebugHistory()), EimsEquTrial::getDebugHistory, bo.getDebugHistory());
+        lqw.eq(bo.getOee() != null, EimsEquTrial::getOee, bo.getOee());
+        lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
+            EimsEquTrial::getTrialDate, params.get("beginTime"), params.get("endTime"));
+        return lqw;
+    }
+
+    /**
+     * 鏂板璁惧璇曚骇璁板綍
+     *
+     * @param bo 璁惧璇曚骇璁板綍
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    @Override
+    public Boolean insertByBo(EimsEquTrialBo bo) {
+        EimsEquTrial add = MapstructUtils.convert(bo, EimsEquTrial.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setTrialId(add.getTrialId());
+        }
+        return flag;
+    }
+
+    /**
+     * 淇敼璁惧璇曚骇璁板綍
+     *
+     * @param bo 璁惧璇曚骇璁板綍
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    @Override
+    public Boolean updateByBo(EimsEquTrialBo bo) {
+        EimsEquTrial update = MapstructUtils.convert(bo, EimsEquTrial.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     */
+    private void validEntityBeforeSave(EimsEquTrial 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/SysEquTypeServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTypeServiceImpl.java
similarity index 66%
rename from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquTypeServiceImpl.java
rename to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTypeServiceImpl.java
index 1bb36ab..13920e5 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquTypeServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTypeServiceImpl.java
@@ -13,12 +13,12 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.utils.TreeBuildUtils;
+import org.dromara.eims.domain.EimsEquType;
+import org.dromara.eims.domain.bo.EimsEquTypeBo;
+import org.dromara.eims.domain.vo.EimsEquTypeVo;
 import org.springframework.stereotype.Service;
-import org.dromara.eims.domain.bo.SysEquTypeBo;
-import org.dromara.eims.domain.vo.SysEquTypeVo;
-import org.dromara.eims.domain.SysEquType;
-import org.dromara.eims.mapper.SysEquTypeMapper;
-import org.dromara.eims.service.ISysEquTypeService;
+import org.dromara.eims.mapper.EimsEquTypeMapper;
+import org.dromara.eims.service.IEimsEquTypeService;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -33,9 +33,9 @@
  */
 @RequiredArgsConstructor
 @Service
-public class SysEquTypeServiceImpl implements ISysEquTypeService, EquTypeService {
+public class EimsEquTypeServiceImpl implements IEimsEquTypeService, EquTypeService {
 
-    private final SysEquTypeMapper baseMapper;
+    private final EimsEquTypeMapper baseMapper;
 
     /**
      * 鏌ヨ璁惧绫诲瀷
@@ -44,7 +44,7 @@
      * @return 璁惧绫诲瀷
      */
     @Override
-    public SysEquTypeVo queryById(Long equTypeId){
+    public EimsEquTypeVo queryById(Long equTypeId){
         return baseMapper.selectVoById(equTypeId);
     }
 
@@ -56,21 +56,21 @@
      * @return 璁惧绫诲瀷鍒楄〃
      */
     @Override
-    public List<SysEquTypeVo> queryList(SysEquTypeBo bo) {
-        LambdaQueryWrapper<SysEquType> lqw = buildQueryWrapper(bo);
+    public List<EimsEquTypeVo> queryList(EimsEquTypeBo bo) {
+        LambdaQueryWrapper<EimsEquType> lqw = buildQueryWrapper(bo);
         return baseMapper.selectVoList(lqw);
     }
 
-    private LambdaQueryWrapper<SysEquType> buildQueryWrapper(SysEquTypeBo bo) {
+    private LambdaQueryWrapper<EimsEquType> buildQueryWrapper(EimsEquTypeBo bo) {
         Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<SysEquType> lqw = Wrappers.lambdaQuery();
-        lqw.like(StringUtils.isNotBlank(bo.getTypeName()), SysEquType::getTypeName, bo.getTypeName());
-        lqw.eq(StringUtils.isNotBlank(bo.getTypeCode()), SysEquType::getTypeCode, bo.getTypeCode());
-        lqw.eq(bo.getParentId() != null, SysEquType::getParentId, bo.getParentId());
-        lqw.eq(bo.getOrderNum() != null, SysEquType::getOrderNum, bo.getOrderNum());
-        lqw.eq(StringUtils.isNotBlank(bo.getMenuType()), SysEquType::getMenuType, bo.getMenuType());
-        lqw.eq(StringUtils.isNotBlank(bo.getIcon()), SysEquType::getIcon, bo.getIcon());
-        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysEquType::getStatus, bo.getStatus());
+        LambdaQueryWrapper<EimsEquType> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getTypeName()), EimsEquType::getTypeName, bo.getTypeName());
+        lqw.eq(StringUtils.isNotBlank(bo.getTypeCode()), EimsEquType::getTypeCode, bo.getTypeCode());
+        lqw.eq(bo.getParentId() != null, EimsEquType::getParentId, bo.getParentId());
+        lqw.eq(bo.getOrderNum() != null, EimsEquType::getOrderNum, bo.getOrderNum());
+        lqw.eq(StringUtils.isNotBlank(bo.getMenuType()), EimsEquType::getMenuType, bo.getMenuType());
+        lqw.eq(StringUtils.isNotBlank(bo.getIcon()), EimsEquType::getIcon, bo.getIcon());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsEquType::getStatus, bo.getStatus());
         return lqw;
     }
 
@@ -81,8 +81,8 @@
      * @return 鏄惁鏂板鎴愬姛
      */
     @Override
-    public Boolean insertByBo(SysEquTypeBo bo) {
-        SysEquType add = MapstructUtils.convert(bo, SysEquType.class);
+    public Boolean insertByBo(EimsEquTypeBo bo) {
+        EimsEquType add = MapstructUtils.convert(bo, EimsEquType.class);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
@@ -98,8 +98,8 @@
      * @return 鏄惁淇敼鎴愬姛
      */
     @Override
-    public Boolean updateByBo(SysEquTypeBo bo) {
-        SysEquType update = MapstructUtils.convert(bo, SysEquType.class);
+    public Boolean updateByBo(EimsEquTypeBo bo) {
+        EimsEquType update = MapstructUtils.convert(bo, EimsEquType.class);
         validEntityBeforeSave(update);
         return baseMapper.updateById(update) > 0;
     }
@@ -107,7 +107,7 @@
     /**
      * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
      */
-    private void validEntityBeforeSave(SysEquType entity){
+    private void validEntityBeforeSave(EimsEquType entity){
         //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
     }
 
@@ -133,7 +133,7 @@
      */
     @Override
     public boolean hasChildByEquTypeId(Long equTypeId) {
-        return baseMapper.exists(new LambdaQueryWrapper<SysEquType>().eq(SysEquType::getParentId, equTypeId));
+        return baseMapper.exists(new LambdaQueryWrapper<EimsEquType>().eq(EimsEquType::getParentId, equTypeId));
     }
     /**
      * 鑾峰彇璁惧绫诲瀷鏍戝垪琛�
@@ -142,20 +142,20 @@
      * @return 鏍戝垪琛�
      */
     @Override
-    public List<Tree<Long>> selectEquTypeTreeList(SysEquTypeBo bo) {
+    public List<Tree<Long>> selectEquTypeTreeList(EimsEquTypeBo bo) {
         // 鍙煡璇㈡湭绂佺敤閮ㄩ棬
         bo.setStatus(UserConstants.DEPT_NORMAL);
-        LambdaQueryWrapper<SysEquType> lqw = buildQueryWrapper(bo);
-        List<SysEquTypeVo> equTypeVoList = baseMapper.selectVoList(lqw);
+        LambdaQueryWrapper<EimsEquType> lqw = buildQueryWrapper(bo);
+        List<EimsEquTypeVo> equTypeVoList = baseMapper.selectVoList(lqw);
 
         for (int i = 0; i < equTypeVoList.size(); i++) {
-            SysEquTypeVo sysEquTypeVo = equTypeVoList.get(i);
-            if(sysEquTypeVo.getParentId() == null){
+            EimsEquTypeVo eimsEquTypeVo = equTypeVoList.get(i);
+            if(eimsEquTypeVo.getParentId() == null){
                 equTypeVoList.get(i).setParentId(0L);
             }
         }
         //鍔犳牴鐩綍
-        SysEquTypeVo root = new SysEquTypeVo();
+        EimsEquTypeVo root = new EimsEquTypeVo();
         root.setEquTypeId(0L);
         root.setMenuType("M");
         root.setTypeName("鎵�鏈夎澶�");
@@ -175,7 +175,7 @@
      * @param equTypeVoList 璁惧绫诲瀷鍒楄〃
      * @return 涓嬫媺鏍戠粨鏋勫垪琛�
      */
-    public List<Tree<Long>> buildEquTypeTreeSelect(List<SysEquTypeVo> equTypeVoList) {
+    public List<Tree<Long>> buildEquTypeTreeSelect(List<EimsEquTypeVo> equTypeVoList) {
         if (CollUtil.isEmpty(equTypeVoList)) {
             return CollUtil.newArrayList();
         }
@@ -195,7 +195,7 @@
     public String selectEquTypeNameByIds(String equTypeIds) {
         List<String> list = new ArrayList<>();
         for (Long id : StringUtils.splitTo(equTypeIds, Convert::toLong)) {
-            SysEquTypeVo vo = SpringUtils.getAopProxy(this).queryById(id);
+            EimsEquTypeVo vo = SpringUtils.getAopProxy(this).queryById(id);
             if (ObjectUtil.isNotNull(vo)) {
                 list.add(vo.getTypeName());
             }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquServiceImpl.java
deleted file mode 100644
index bd9b64e..0000000
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquServiceImpl.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package org.dromara.eims.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.dromara.eims.domain.SysEqu;
-import org.dromara.eims.domain.SysEquType;
-import org.dromara.eims.domain.bo.SysEquBo;
-import org.dromara.eims.domain.vo.SysEquTypeVo;
-import org.dromara.eims.domain.vo.SysEquVo;
-import org.dromara.eims.mapper.SysEquMapper;
-import org.dromara.eims.mapper.SysEquTypeMapper;
-import org.dromara.eims.service.ISysEquService;
-import lombok.RequiredArgsConstructor;
-import org.dromara.common.core.utils.MapstructUtils;
-import org.dromara.common.core.utils.StringUtils;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
-
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-
-/**
- * 銆愯澶囧彴璐︺�慡ervice涓氬姟灞傚鐞�
- *
- * @author zhuguifei
- * @date 2025-01-04
- */
-@RequiredArgsConstructor
-@Service
-public class SysEquServiceImpl implements ISysEquService {
-
-    private final SysEquMapper baseMapper;
-    private final SysEquTypeMapper equTypeMapper;
-
-    /**
-     * 鏌ヨ銆愯澶囧彴璐︺��
-     *
-     * @param equId 涓婚敭
-     * @return 銆愯澶囧彴璐︺��
-     */
-    @Override
-    public SysEquVo queryById(Long equId){
-        return baseMapper.selectVoById(equId);
-    }
-
-    /**
-     * 鍒嗛〉鏌ヨ銆愯澶囧彴璐︺�戝垪琛�
-     *
-     * @param bo        鏌ヨ鏉′欢
-     * @param pageQuery 鍒嗛〉鍙傛暟
-     * @return 銆愯澶囧彴璐︺�戝垎椤靛垪琛�
-     */
-    @Override
-    public TableDataInfo<SysEquVo> queryPageList(SysEquBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<SysEqu> lqw = buildQueryWrapper(bo);
-        Page<SysEquVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
-    }
-
-    /**
-     * 鏌ヨ绗﹀悎鏉′欢鐨勩�愯澶囧彴璐︺�戝垪琛�
-     *
-     * @param bo 鏌ヨ鏉′欢
-     * @return 銆愯澶囧彴璐︺�戝垪琛�
-     */
-    @Override
-    public List<SysEquVo> queryList(SysEquBo bo) {
-        LambdaQueryWrapper<SysEqu> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<SysEqu> buildQueryWrapper(SysEquBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<SysEqu> lqw = Wrappers.lambdaQuery();
-        lqw.eq(StringUtils.isNotBlank(bo.getAssetNo()), SysEqu::getAssetNo, bo.getAssetNo());
-        Long equTypeId = bo.getEquTypeId();
-        /**
-         * equTypeId = 0 鏃舵煡璇㈡墍鏈夎澶囷紙榛樿鏍圭洰褰昳d涓�0锛岃瑙丼ysEquTypeServiceImpl涓璼electEquTypeTreeList锛�
-         * equTypeId   涓哄叾浠栧�兼椂鍙煡褰撳墠璁惧绫诲瀷id鍜屽悗浠h澶囩被鍨媔d
-         */
-        if (equTypeId != null && equTypeId > 0) {
-            List<Long> allDescendantIds = getAllDescendantIds(equTypeId);
-            lqw.in(SysEqu::getEquTypeId,allDescendantIds);
-        }
-
-        lqw.like(StringUtils.isNotBlank(bo.getEquName()), SysEqu::getEquName, bo.getEquName());
-        lqw.eq(StringUtils.isNotBlank(bo.getModelNo()), SysEqu::getModelNo, bo.getModelNo());
-        lqw.eq(StringUtils.isNotBlank(bo.getMadeIn()), SysEqu::getMadeIn, bo.getMadeIn());
-        lqw.eq(bo.getRatedPower() != null, SysEqu::getRatedPower, bo.getRatedPower());
-        lqw.eq(StringUtils.isNotBlank(bo.getPlateInfo()), SysEqu::getPlateInfo, bo.getPlateInfo());
-        lqw.eq(bo.getPurchaseDate() != null, SysEqu::getPurchaseDate, bo.getPurchaseDate());
-        lqw.eq(bo.getStatus() != null, SysEqu::getStatus, bo.getStatus());
-        lqw.eq(StringUtils.isNotBlank(bo.getLocation()), SysEqu::getLocation, bo.getLocation());
-        lqw.eq(bo.getDeptUsed() != null, SysEqu::getDeptUsed, bo.getDeptUsed());
-        lqw.eq(bo.getRespPerson() != null, SysEqu::getRespPerson, bo.getRespPerson());
-        lqw.eq(StringUtils.isNotBlank(bo.getContactPhone()), SysEqu::getContactPhone, bo.getContactPhone());
-        lqw.eq(bo.getDeployDate() != null, SysEqu::getDeployDate, bo.getDeployDate());
-        lqw.eq(bo.getTrialDate() != null, SysEqu::getTrialDate, bo.getTrialDate());
-        lqw.eq(bo.getPlanAcceptDate() != null, SysEqu::getPlanAcceptDate, bo.getPlanAcceptDate());
-        lqw.eq(bo.getActualAcceptDate() != null, SysEqu::getActualAcceptDate, bo.getActualAcceptDate());
-        lqw.eq(bo.getImportStatus() != null, SysEqu::getImportStatus, bo.getImportStatus());
-        lqw.eq(StringUtils.isNotBlank(bo.getEquCode()), SysEqu::getEquCode, bo.getEquCode());
-        lqw.eq(bo.getInventoryFlag() != null, SysEqu::getInventoryFlag, bo.getInventoryFlag());
-        lqw.eq(bo.getInventoryDate() != null, SysEqu::getInventoryDate, bo.getInventoryDate());
-        lqw.eq(bo.getServiceLife() != null, SysEqu::getServiceLife, bo.getServiceLife());
-        return lqw;
-    }
-
-    /**
-     * 鏍规嵁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<SysEquType> equTypeWrapper = new QueryWrapper<>();
-        equTypeWrapper.lambda().eq(SysEquType::getParentId, currentId);
-
-        List<SysEquTypeVo> children = equTypeMapper.selectVoList(equTypeWrapper);
-        if (children != null && !children.isEmpty()) {
-            for (SysEquTypeVo child : children) {
-                Long childId = child.getEquTypeId();
-                collector.add(childId);
-                collectDescendants(childId, collector);
-            }
-        }
-    }
-    /**
-     * 鏂板銆愯澶囧彴璐︺��
-     *
-     * @param bo 銆愯澶囧彴璐︺��
-     * @return 鏄惁鏂板鎴愬姛
-     */
-    @Override
-    public Boolean insertByBo(SysEquBo bo) {
-        SysEqu add = MapstructUtils.convert(bo, SysEqu.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setEquId(add.getEquId());
-        }
-        return flag;
-    }
-
-    /**
-     * 淇敼銆愯澶囧彴璐︺��
-     *
-     * @param bo 銆愯澶囧彴璐︺��
-     * @return 鏄惁淇敼鎴愬姛
-     */
-    @Override
-    public Boolean updateByBo(SysEquBo bo) {
-        SysEqu update = MapstructUtils.convert(bo, SysEqu.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
-     */
-    private void validEntityBeforeSave(SysEqu 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/resources/mapper/eims/SysEquMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquMapper.xml
similarity index 73%
rename from eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquMapper.xml
rename to eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquMapper.xml
index 11602a9..fc4aab7 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquMapper.xml
+++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquMapper.xml
@@ -2,6 +2,6 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.dromara.eims.mapper.SysEquMapper">
+<mapper namespace="org.dromara.eims.mapper.EimsEquMapper">
 
 </mapper>
diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquStatuMapper.xml
similarity index 71%
copy from eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml
copy to eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquStatuMapper.xml
index d8edc89..8aa61f8 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml
+++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquStatuMapper.xml
@@ -2,6 +2,6 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.dromara.eims.mapper.SysEquTypeMapper">
+<mapper namespace="org.dromara.eims.mapper.EimsEquStatuMapper">
 
 </mapper>
diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTrialMapper.xml
similarity index 71%
rename from eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml
rename to eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTrialMapper.xml
index d8edc89..2485435 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml
+++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTrialMapper.xml
@@ -2,6 +2,6 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.dromara.eims.mapper.SysEquTypeMapper">
+<mapper namespace="org.dromara.eims.mapper.EimsEquTrialMapper">
 
 </mapper>
diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTypeMapper.xml
similarity index 71%
copy from eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml
copy to eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTypeMapper.xml
index d8edc89..9bfbb18 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml
+++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTypeMapper.xml
@@ -2,6 +2,6 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.dromara.eims.mapper.SysEquTypeMapper">
+<mapper namespace="org.dromara.eims.mapper.EimsEquTypeMapper">
 
 </mapper>

--
Gitblit v1.9.3