From 66e943c91e133eec5a0822ea22fd92cbc04bc9f3 Mon Sep 17 00:00:00 2001
From: zhuguifei <312353457@qq.com>
Date: 星期三, 12 三月 2025 16:04:14 +0800
Subject: [PATCH] 保养工单汇总

---
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java   |  107 +++
 eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts                                              |   62 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java                  |   74 ++
 eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue                           |  109 +++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java              |    2 
 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml                      |   26 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java                  |   52 -
 eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue                                           |  223 +++++++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java      |   30 
 eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts                                           |    1 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java             |  109 +++
 eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx                                                |    6 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java |  220 +++++++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java                     |    5 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java                |    6 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java           |    9 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java            |   15 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java                |    7 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java               |   70 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java             |   77 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java    |   42 -
 eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts                                            |   85 ++
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java    |  106 +++
 eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java   |   11 
 eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts                                                 |   12 
 eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx                                            |  194 ++++++
 eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml                    |    7 
 eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts                                               |   29 
 eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue                                   |    6 
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java         |   69 ++
 30 files changed, 1,675 insertions(+), 96 deletions(-)

diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts
new file mode 100644
index 0000000..0866850
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts
@@ -0,0 +1,62 @@
+import type { MaintOrderStVO } from './model';
+
+import type { ID, IDS } from '#/api/common';
+
+import { commonExport } from '#/api/helper';
+import { requestClient } from '#/api/request';
+
+enum Api {
+  maintOrderrStExport = '/eims/maintOrderSt/export',
+  maintOrderrStList = '/eims/maintOrderSt/list',
+  root = '/eims/maintOrderSt'
+}
+
+/**
+ * 鏌ヨ淇濆吇宸ュ崟鍒楄〃
+ * @param query
+ * @returns {*}
+ */
+
+export function listMaintOrderSt(params?: any) {
+  return requestClient.get<MaintOrderStVO[]>(Api.maintOrderrStList, { params });
+}
+
+
+/**
+ * 鏌ヨ淇濆吇宸ュ崟璇︾粏
+ * @param maintOrderrStId
+ */
+export function getMaintOrderSt(maintOrderrStId: ID) {
+  return requestClient.get<MaintOrderStVO>(`${Api.root}/${maintOrderrStId}`);
+}
+
+/**
+ * 鏂板淇濆吇宸ュ崟
+ * @param data
+ */
+export function addMaintOrderSt(data: any) {
+  return requestClient.postWithMsg<void>(Api.root, data);
+}
+
+/**
+ * 淇敼淇濆吇宸ュ崟
+ * @param data
+ */
+export function updateMaintOrderSt(data: any) {
+  return requestClient.putWithMsg<void>(Api.root, data);
+}
+
+/**
+ * 鍒犻櫎淇濆吇宸ュ崟
+ * @param maintOrderrStId
+ */
+export function delMaintOrderSt(maintOrderrStId: IDS) {
+  return requestClient.deleteWithMsg<void>(`${Api.root}/${maintOrderrStId}`);
+}
+/**
+ * 瀵煎嚭
+ * @param
+ */
+export function maintOrderrStExport(data: any) {
+  return commonExport(Api.maintOrderrStExport, data);
+}
diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts
new file mode 100644
index 0000000..c5a7ea3
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts
@@ -0,0 +1,85 @@
+export interface MaintOrderStVO {
+  /**
+   *
+   */
+  id: number | string;
+
+  /**
+   *
+   */
+  title: string;
+
+  /**
+   *
+   */
+  equId: number | string;
+  status: string;
+
+  /**
+   *
+   */
+  planTime: string;
+
+  /**
+   * 淇濆吇浜�
+   */
+  maintUser: number;
+
+  /**
+   * 楠岃瘉浜�
+   */
+  verifyUser: number;
+  verifyTime: string;
+
+  /**
+   * 鐗硅浜嬮」
+   */
+  specialNote: string;
+
+  /**
+   * 澶囨敞
+   */
+  remark: string;
+}
+
+export interface MaintOrderStForm extends BaseEntity {
+  /**
+   *
+   */
+  id?: number | string;
+
+  /**
+   *
+   */
+  title?: string;
+
+  /**
+   *
+   */
+  equId?: number | string;
+
+  /**
+   *
+   */
+  planTime?: string;
+
+  /**
+   * 淇濆吇浜�
+   */
+  maintUser?: number;
+
+  /**
+   * 楠岃瘉浜�
+   */
+  verifyUser?: number;
+
+  /**
+   * 鐗硅浜嬮」
+   */
+  specialNote?: string;
+
+  /**
+   * 澶囨敞
+   */
+  remark?: string;
+}
diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts
index e30c0ac..c2dcfb5 100644
--- a/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts
+++ b/eims-ui/apps/web-antd/src/api/eims/maint-order/index.ts
@@ -1,4 +1,4 @@
-import type { MaintOrderVO } from './model';
+import type { MaintOrderGroupVO, MaintOrderVO } from './model';
 
 import type { ID, IDS } from '#/api/common';
 
@@ -7,6 +7,8 @@
 
 enum Api {
   maintOrderExport = '/eims/maintOrder/export',
+  maintOrderGroupList = '/eims/maintOrder/groupList',
+  maintOrderGroupDetailList = '/eims/maintOrder/detailList',
   maintOrderList = '/eims/maintOrder/list',
   root = '/eims/maintOrder'
 }
@@ -21,6 +23,14 @@
   return requestClient.get<MaintOrderVO[]>(Api.maintOrderList, { params });
 }
 
+export function listMaintOrderGroup(params?: any) {
+  return requestClient.get<MaintOrderGroupVO[]>(Api.maintOrderGroupList, { params });
+}
+
+export function listMaintOrderGroupDetail(params?: any) {
+  return requestClient.get<MaintOrderVO[]>(Api.maintOrderGroupDetailList, { params });
+}
+
 /**
  * 鏌ヨ淇濆吇宸ュ崟璇︾粏
  * @param maintOrderId
diff --git a/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts b/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts
index 996513f..8605bb8 100644
--- a/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts
+++ b/eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts
@@ -87,3 +87,32 @@
   remark: string;
 
 }
+export interface MaintOrderGroupVO {
+  /**
+   *
+   */
+  id: number | string;
+
+  /**
+   *
+   */
+  equId: number | string;
+
+  /**
+   * 璁″垝琛ㄥ啑浣�-淇濆吇浜�
+   */
+  maintUserNames: string;
+
+
+  /**
+   * 楠岃瘉浜�
+   */
+  verifyUserNames: string;
+
+  /**
+   * 淇濆吇璁″垝鏃堕棿
+   */
+  planTime: string;
+
+
+}
diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx
new file mode 100644
index 0000000..0629b80
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx
@@ -0,0 +1,194 @@
+import type { VxeGridProps } from '#/adapter/vxe-table';
+
+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';
+import { renderDict } from '#/utils/render';
+
+export const querySchema: FormSchemaGetter = () => [
+  {
+    component: 'Input',
+    fieldName: 'equName',
+    label: '璁惧鍚嶇О'
+  },
+  {
+    component: 'RangePicker',
+    fieldName: 'planTime',
+    label: '淇濆吇鏃ユ湡'
+  },
+  {
+    component: 'Select',
+    componentProps: {
+      options: getDictOptions(DictEnum.MAINT_ORDER_ST_STATUS)
+    },
+    fieldName: 'status',
+    label: '鐘舵��'
+  }
+];
+
+export const columns: VxeGridProps['columns'] = [
+  { type: 'checkbox', width: 60, fixed: 'left' },
+  {
+    title: '璁惧鍚嶇О',
+    field: 'equName',
+    minWidth: 200,
+    fixed: 'left'
+  },
+  {
+    title: '璁″垝淇濆吇鏃ユ湡',
+    field: 'planTime',
+    minWidth: 200
+  },
+  {
+    title: '鐘舵��',
+    field: 'status',
+    minWidth: 80,
+    slots: {
+      default: ({ row }) => {
+        return renderDict(row.status, DictEnum.MAINT_ORDER_ST_STATUS);
+      }
+    }
+  },
+  {
+    title: '璧勪骇缂栧彿',
+    field: 'assetNo',
+    minWidth: 160
+  },
+  {
+    title: '宸ュ崟鎬绘暟',
+    field: 'orderCount',
+    minWidth: 100
+  },
+  {
+    title: '寰呬繚鍏�',
+    field: 'dbyCount',
+    minWidth: 80,
+    slots: {
+      default: ({ row }) => {
+        return <Tag color="orange">{row.dbyCount}</Tag>;
+      }
+    }
+  },
+  {
+    title: '淇濆吇涓�',
+    field: 'byCount',
+    minWidth: 80,
+    slots: {
+      default: ({ row }) => {
+        return <Tag color="blue">{row.byCount}</Tag>;
+      }
+    }
+  },
+  {
+    title: '寰呴獙璇�',
+    field: 'dyzCount',
+    minWidth: 80,
+    slots: {
+      default: ({ row }) => {
+        return <Tag color="purple">{row.dyzCount}</Tag>;
+      }
+    }
+  },
+  {
+    title: '瀹屾垚',
+    field: 'wcCount',
+    minWidth: 80,
+    slots: {
+      default: ({ row }) => {
+        return <Tag color="success">{row.wcCount}</Tag>;
+      }
+    }
+  },
+  {
+    title: '鐗硅浜嬮」',
+    field: 'specialNote',
+    minWidth: 160
+  },
+  {
+    title: '淇濆吇鎴愬憳',
+    field: 'maintUserNames',
+    minWidth: 160
+  },
+  {
+    title: '绋芥煡鏃堕棿',
+    field: 'verifyTime',
+    minWidth: 200
+  },
+  {
+    field: 'action',
+    fixed: 'right',
+    slots: { default: 'action' },
+    title: '鎿嶄綔',
+    width: 200
+  }
+];
+
+export const drawerSchema: FormSchemaGetter = () => [
+  {
+    component: 'Input',
+    dependencies: {
+      show: () => false,
+      triggerFields: ['']
+    },
+    fieldName: 'id'
+  },
+  {
+    component: 'Input',
+    dependencies: {
+      show: () => false,
+      triggerFields: ['']
+    },
+    fieldName: 'equId'
+  },
+  {
+    component: 'DatePicker',
+    dependencies: {
+      show: () => false,
+      triggerFields: ['']
+    },
+    componentProps: {
+      format: 'YYYY-MM-DD',
+      showTime: false,
+      valueFormat: 'YYYY-MM-DD',
+      getPopupContainer
+    },
+    fieldName: 'planTime',
+    label: '璁″垝淇濆吇鏃ユ湡'
+  },
+  {
+    component: 'Input',
+    componentProps: {
+      readonly: true
+    },
+    fieldName: 'title',
+    label: '鏍囬'
+  },
+  {
+    component: 'Textarea',
+    fieldName: 'specialNote',
+    label: '鐗硅浜嬮」'
+  },
+  {
+    component: 'Input',
+    fieldName: 'verifyUser',
+    label: '绋芥煡浜�',
+    dependencies: {
+      show: () => false,
+      triggerFields: ['']
+    }
+  },
+  {
+    component: 'Input',
+    fieldName: 'verifyUserName',
+    label: '绋芥煡浜�'
+  },
+  {
+    component: 'Textarea',
+    fieldName: 'remark',
+    label: '澶囨敞'
+  }
+];
diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue
new file mode 100644
index 0000000..716379d
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue
@@ -0,0 +1,223 @@
+<script setup lang="ts">
+import { onMounted, ref } from 'vue';
+
+import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
+import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils';
+
+import { Popconfirm, Space } from 'ant-design-vue';
+
+import { useVbenVxeGrid, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
+import { listMaintOrderGroupDetail } from '#/api/eims/maint-order';
+import { delMaintOrderSt, listMaintOrderSt } from '#/api/eims/maint-order-st';
+import { getDeptTree, userList } from '#/api/system/user';
+import BasisSubTable from '#/views/eims/components/basis-sub-table.vue';
+import { columns as orderCol } from '#/views/eims/maint-order/data';
+
+import { columns, querySchema } from './data';
+import maintOrderStDrawer from './maint-order-st-drawer.vue';
+import type { Recordable } from '@vben/types';
+import { MAINT_ORDER_STATUS } from '#/constants/dict';
+import { $t } from '@vben/locales';
+
+defineExpose({
+  tableSelect
+});
+
+const formOptions: VbenFormProps = {
+  commonConfig: {
+    labelWidth: 80,
+    componentProps: {
+      allowClear: true
+    }
+  },
+  collapsed: true,
+  schema: querySchema(),
+  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',
+  // 鏃ユ湡閫夋嫨鏍煎紡鍖�
+  fieldMappingTime: [['planTime', ['params[beginPlanTime]', 'params[endPlanTime]'], ['YYYY-MM-DD 00:00:00', 'YYYY-MM-DD 23:59:59']]]
+};
+
+const gridOptions: VxeGridProps = {
+  checkboxConfig: {
+    // 楂樹寒
+    highlight: true,
+    // 缈婚〉鏃朵繚鐣欓�変腑鐘舵��
+    reserve: true
+    // 鐐瑰嚮琛岄�変腑
+    // trigger: 'row'
+  },
+  columns,
+  height: 'auto',
+  keepSource: true,
+  pagerConfig: {},
+  proxyConfig: {
+    ajax: {
+      query: async ({ page }, formValues = {}) => {
+        return await listMaintOrderSt({
+          pageNum: page.currentPage,
+          pageSize: page.pageSize,
+          ...formValues
+        });
+      }
+    }
+  },
+  rowConfig: {
+    isHover: true,
+    keyField: 'id'
+  },
+  sortConfig: {
+    // 杩滅▼鎺掑簭
+    remote: true,
+    // 鏀寔澶氬瓧娈垫帓搴� 榛樿鍏抽棴
+    multiple: true
+  },
+  id: 'maint-order-group-index'
+};
+const orderId = ref<string>();
+const [BasicTable, tableApi] = useVbenVxeGrid({
+  formOptions,
+  gridOptions,
+  gridEvents: {
+    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
+    cellClick: (e: any) => {
+      const { row } = e;
+      orderId.value = `${row.equId}_${row.planTime}`;
+    }
+  }
+});
+
+/**
+ * 鍒濆鍖栭儴闂ㄩ�夋嫨
+ */
+async function setupDeptSelect() {
+  // updateSchema
+  const deptTree = await getDeptTree();
+  // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊� 鍗崇埗鑺傜偣 / 瀛愯妭鐐�
+  addFullName(deptTree, 'label', ' / ');
+  tableApi.formApi.updateSchema([
+    {
+      componentProps: (formModel) => ({
+        class: 'w-full',
+        fieldNames: {
+          key: 'id',
+          value: 'id',
+          children: 'children'
+        },
+        getPopupContainer,
+        async onSelect(deptId: number | string) {
+          /** 鏍规嵁閮ㄩ棬ID鍔犺浇鐢ㄦ埛 */
+          await setupUserOptions(deptId);
+          /** 鍙樺寲鍚庨渶瑕侀噸鏂伴�夋嫨鐢ㄦ埛 */
+          formModel.maintUser = undefined;
+        },
+        placeholder: '璇烽�夋嫨',
+        showSearch: true,
+        treeData: deptTree,
+        treeDefaultExpandAll: true,
+        treeLine: { showLeafIcon: false },
+        // 绛涢�夌殑瀛楁
+        treeNodeFilterProp: 'label',
+        // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊�
+        treeNodeLabelProp: 'fullName'
+      }),
+      fieldName: 'maintDept'
+    }
+  ]);
+}
+
+/**
+ * 鐢ㄦ埛鐨勫姞杞�
+ */
+async function setupUserOptions(deptId: any) {
+  const params = { deptId };
+  const userPageResult = await userList({
+    pageNum: 1,
+    pageSize: 500,
+    ...params
+  });
+  const options = userPageResult.rows.map((item) => ({
+    label: item.nickName || item.userName,
+    value: item.userId
+  }));
+  // 绛涢��
+  const filterOption = (input: string, option: any) => {
+    return option.label.toLowerCase().includes(input.toLowerCase());
+  };
+
+  const placeholder = options.length > 0 ? '璇烽�夋嫨' : '璇ラ儴闂ㄤ笅鏆傛棤鐢ㄦ埛';
+  tableApi.formApi.updateSchema([
+    {
+      componentProps: { options, placeholder, filterOption },
+      fieldName: 'maintUser'
+    }
+  ]);
+}
+const [MaintOrderStDrawer, maintOrderStDrawerApi] = useVbenDrawer({
+  connectedComponent: maintOrderStDrawer
+});
+
+function handleAdd() {
+  maintOrderStDrawerApi.setData({});
+  maintOrderStDrawerApi.open();
+}
+
+async function handleEdit(record: Recordable<any>) {
+  maintOrderStDrawerApi.setData({ id: record.id });
+  maintOrderStDrawerApi.open();
+}
+async function handleDelete(row: Recordable<any>) {
+  await delMaintOrderSt(row.id);
+  await tableApi.query();
+}
+
+
+onMounted(async () => {
+  await setupDeptSelect();
+});
+
+// 閫変腑鏁版嵁
+function tableSelect() {
+  return tableApi.grid.getCheckboxRecords();
+}
+</script>
+
+<template>
+  <Page :auto-content-height="true">
+    <div class="flex h-full gap-[8px] flex-col">
+      <BasicTable class="h-3/5" table-title="淇濆吇宸ュ崟鍒楄〃">
+        <template #toolbar-tools>
+          <Space />
+        </template>
+
+        <template #equName="{ row }">
+          <Space>
+            <span>{{ row.equName }}</span>
+          </Space>
+        </template>
+        <template #action="{ row }">
+          <Space>
+            <ghost-button v-access:code="['eims:maintOrderSt:edit']" @click.stop="handleEdit(row)">
+              {{ $t('pages.common.edit') }}
+            </ghost-button>
+            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="纭鍒犻櫎锛�"
+                        @confirm="handleDelete(row)">
+              <ghost-button danger v-access:code="['eims:maintOrderSt:remove']" @click.stop="">
+                {{ $t('pages.common.delete') }}
+              </ghost-button>
+            </Popconfirm>
+          </Space>
+        </template>
+
+      </BasicTable>
+      <BasisSubTable
+        :columns="orderCol"
+        :list-api="listMaintOrderGroupDetail"
+        :req-value="orderId"
+        class="h-2/5"
+        req-key="maintCode"
+        title="淇濆吇瀹炴柦椤圭洰"
+      />
+    </div>
+    <MaintOrderStDrawer @reload="tableApi.query()" />
+  </Page>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue
new file mode 100644
index 0000000..414ec0f
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue
@@ -0,0 +1,109 @@
+<script setup lang="ts">
+import { computed, ref } from 'vue';
+
+import { useVbenDrawer, useVbenModal } from '@vben/common-ui';
+import { cloneDeep } from '@vben/utils';
+
+import { InputSearch } from 'ant-design-vue';
+
+import { useVbenForm } from '#/adapter/form';
+import { getMaintOrderSt, updateMaintOrderSt } from '#/api/eims/maint-order-st';
+import userModal from '#/views/eims/components/user-modal.vue';
+
+import { drawerSchema } from './data';
+
+const emit = defineEmits<{ reload: [] }>();
+
+const isUpdate = ref(false);
+const title = computed(() => {
+  return isUpdate.value ? '淇濆吇宸ュ崟姹囨�荤ń鏌�' : '淇濆吇宸ュ崟姹囨��';
+});
+
+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;
+    // 鏇存柊 && 璧嬪��
+    if (isUpdate.value && id) {
+      const record = await getMaintOrderSt(id);
+      await formApi.setValues(record);
+    }
+
+    drawerApi.drawerLoading(false);
+  }
+});
+
+async function handleConfirm() {
+  try {
+    drawerApi.drawerLoading(true);
+    const { valid } = await formApi.validate();
+    if (!valid) {
+      return;
+    }
+    const data = cloneDeep(await formApi.getValues());
+    // await (isUpdate.value ? updateMaintOrderSt(data) : addMaintOrderSt(data));
+    await (isUpdate.value ? updateMaintOrderSt(data) : updateMaintOrderSt(data));
+    emit('reload');
+    await handleCancel();
+  } catch (error) {
+    console.error(error);
+  } finally {
+    drawerApi.drawerLoading(false);
+  }
+}
+
+async function handleCancel() {
+  drawerApi.close();
+  await formApi.resetForm();
+}
+
+// user modal
+const [UserModal, userModalApi] = useVbenModal({
+  connectedComponent: userModal,
+  draggable: true,
+  title: '閫夋嫨绋芥煡浜�'
+});
+
+function handleUserModal() {
+  userModalApi.setData({});
+  userModalApi.open();
+}
+
+/**
+ * 鏇存柊閫夋嫨鐨勭敤鎴�
+ * @param user
+ */
+async function updateUser(user: any) {
+  await formApi.setValues({ 'verifyUserName': user.nickName, 'verifyUser': user.userId });
+}
+</script>
+
+<template>
+  <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
+    <BasicForm>
+      <template #verifyUserName="slotProps">
+        <InputSearch :enter-button="true" placeholder="璇烽�夋嫨" @search="handleUserModal()" v-bind="slotProps" />
+      </template>
+    </BasicForm>
+    <UserModal class="w-[1200px]" @select-user="updateUser" />
+  </BasicDrawer>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx b/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx
index aa5d7cf..dcf9cfa 100644
--- a/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx
+++ b/eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx
@@ -256,7 +256,7 @@
       getPopupContainer
     },
     fieldName: 'maintFirstTime',
-    label: '棣栨鎵ц鏃堕棿'
+    label: '棣栨淇濆吇鏃堕棿'
   },
   {
     component: 'DatePicker',
@@ -267,7 +267,7 @@
       getPopupContainer
     },
     fieldName: 'maintLastTime',
-    label: '涓婃鎵ц鏃堕棿'
+    label: '涓婃淇濆吇鏃堕棿'
   },
   {
     component: 'DatePicker',
@@ -278,7 +278,7 @@
       getPopupContainer
     },
     fieldName: 'maintNextTime',
-    label: '涓嬫鎵ц鏃堕棿',
+    label: '涓嬫淇濆吇鏃堕棿',
   },
   {
     component: 'Textarea',
diff --git a/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue
index 9f094eb..c4d5f4d 100644
--- a/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue
+++ b/eims-ui/apps/web-antd/src/views/eims/maint-plan/maint-plan-drawer.vue
@@ -54,14 +54,14 @@
           show: () => isUpdate.value,
           triggerFields: ['']
         },
-        fieldName: 'maintLastTime'
+        fieldName: 'maintFirstTime'
       },
       {
         dependencies: {
           show: () => isUpdate.value,
           triggerFields: ['']
         },
-        fieldName: 'maintNextTime'
+        fieldName: 'maintLastTime'
       }
     ]);
     // 鏇存柊 && 璧嬪��
@@ -126,7 +126,7 @@
  * @param equ
  */
 async function updateEqu(equ: any) {
-  await formApi.setValues(equ);
+  await formApi.setValues({ 'equId': equ.equId, 'equName': equ.equName });
 }
 
 /**
diff --git a/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts b/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts
index 1e5e3a5..cc14eac 100644
--- a/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts
+++ b/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts
@@ -10,6 +10,7 @@
   FIXTURE_BORROW_STATUS = 'fixture_borrow_status', // 宸ュ叿锛堟不鍏凤級鍊熺敤鐘舵��
   MAINT_CYCLE_UNIT = 'maint_cycle_unit', // 淇濆吇鍛ㄦ湡鍗曚綅
   MAINT_ORDER_STATUS = 'maint_order_status', // 淇濆吇宸ュ崟鐘舵��
+  MAINT_ORDER_ST_STATUS = 'maint_order_st_status', // 淇濆吇宸ュ崟姹囨�荤ń鏌ョ姸鎬�
   MAINT_TIME_RULE = 'maint_time_rule', // 淇濆吇瑙勫垯
   REPAIR_FAULT_TYPE = 'repair_fault_type', // 鎶ヤ慨鐘舵��
   REPAIR_RECORD_HANDLE = 'repair_record_handle', // 缁翠慨璁板綍鎿嶄綔
diff --git a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java
index bb8dca6..f4e85ac 100644
--- a/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java
+++ b/eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java
@@ -127,7 +127,7 @@
     String MAINT_ORDER_STATUS = "maint_order_status";
 
     interface MAINT_ORDER_STATUS_DETAIL {
-        String BAOYANG = "1";// 淇濆吇缁�
+        String BAOYANG = "1";// 淇濆吇
         String DAIBAOYANG = "0"; // 寰呬繚鍏�
         String DAIYANZHENG = "2"; // 寰呴獙璇�
         String WANCHENG = "3"; // 瀹屾垚
@@ -141,4 +141,13 @@
         String WEIWANCHENG = "0";// 鏈畬鎴�
         String YIWANCHENG = "1"; // 宸插畬鎴�
     }
+
+    /**
+     * 淇濆吇宸ュ崟姹囨�荤ń鏌ョ姸鎬�
+     */
+    String MAINT_ORDER_ST_STATUS = "maint_order_st_status";
+    interface MAINT_ORDER_ST_STATUS_DETAIL {
+        String N = "0";// 鏈畬鎴�
+        String Y = "1"; // 宸插畬鎴�
+    }
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java
index 5610c22..4eeba76 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java
@@ -2,10 +2,14 @@
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.eims.domain.vo.MaintOrdeGroupVo;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -46,6 +50,30 @@
         return eimsMaintOrderService.queryPageListCustom(bo, pageQuery);
     }
 
+
+    @SaCheckPermission("eims:maintOrder:list")
+    @GetMapping("/groupList")
+    public TableDataInfo<MaintOrdeGroupVo> group(EimsMaintOrderBo bo, PageQuery pageQuery) {
+//        return eimsMaintOrderService.queryPageList(bo, pageQuery);
+        return eimsMaintOrderService.queryPageGroupList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("eims:maintOrder:list")
+    @GetMapping("/detailList")
+    public TableDataInfo<EimsMaintOrderVo> groupDetail(EimsMaintOrderBo bo, PageQuery pageQuery) {
+        // 杩欓噷浣跨敤mintCode浼犻�掍簡 equid + plantime
+        String maintCode = bo.getMaintCode();
+        if (StringUtils.isEmpty(maintCode) || !maintCode.contains("_")) {
+            return TableDataInfo.build(new Page<>(0,0));
+        }
+        String[] split = maintCode.split("_");
+        bo.setEquId(Long.valueOf(split[0]));
+        bo.setPlanTime(DateUtils.parseDate(split[1]));
+        bo.setMaintCode(null);
+//        return eimsMaintOrderService.queryPageList(bo, pageQuery);
+        return eimsMaintOrderService.queryPageListCustom(bo, pageQuery);
+    }
+
     /**
      * 瀵煎嚭淇濆吇宸ュ崟鍒楄〃
      */
@@ -65,7 +93,7 @@
     @SaCheckPermission("eims:maintOrder:query")
     @GetMapping("/{id}")
     public R<EimsMaintOrderVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
-                                     @PathVariable Long id) {
+                                       @PathVariable Long id) {
         return R.ok(eimsMaintOrderService.queryById(id));
     }
 
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java
new file mode 100644
index 0000000..02e2735
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java
@@ -0,0 +1,106 @@
+package org.dromara.eims.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.eims.domain.vo.EimsMaintOrderStVo;
+import org.dromara.eims.domain.bo.EimsMaintOrderStBo;
+import org.dromara.eims.service.IEimsMaintOrderStService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 淇濆吇宸ュ崟姹囨��
+ *
+ * @author zhuguifei
+ * @date 2025-03-12
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/eims/maintOrderSt")
+public class EimsMaintOrderStController extends BaseController {
+
+    private final IEimsMaintOrderStService eimsMaintOrderStService;
+
+    /**
+     * 鏌ヨ淇濆吇宸ュ崟姹囨�诲垪琛�
+     */
+    @SaCheckPermission("eims:maintOrderSt:list")
+    @GetMapping("/list")
+    public TableDataInfo<EimsMaintOrderStVo> list(EimsMaintOrderStBo bo, PageQuery pageQuery) {
+        return eimsMaintOrderStService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 瀵煎嚭淇濆吇宸ュ崟姹囨�诲垪琛�
+     */
+    @SaCheckPermission("eims:maintOrderSt:export")
+    @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EimsMaintOrderStBo bo, HttpServletResponse response) {
+        List<EimsMaintOrderStVo> list = eimsMaintOrderStService.queryList(bo);
+        ExcelUtil.exportExcel(list, "淇濆吇宸ュ崟姹囨��", EimsMaintOrderStVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇淇濆吇宸ュ崟姹囨�昏缁嗕俊鎭�
+     *
+     * @param id 涓婚敭
+     */
+    @SaCheckPermission("eims:maintOrderSt:query")
+    @GetMapping("/{id}")
+    public R<EimsMaintOrderStVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                     @PathVariable Long id) {
+        return R.ok(eimsMaintOrderStService.queryById(id));
+    }
+
+    /**
+     * 鏂板淇濆吇宸ュ崟姹囨��
+     */
+    @SaCheckPermission("eims:maintOrderSt:add")
+    @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsMaintOrderStBo bo) {
+        return toAjax(eimsMaintOrderStService.insertByBo(bo));
+    }
+
+    /**
+     * 淇敼淇濆吇宸ュ崟姹囨��
+     */
+    @SaCheckPermission("eims:maintOrderSt:edit")
+    @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsMaintOrderStBo bo) {
+        return toAjax(eimsMaintOrderStService.updateByBo(bo));
+    }
+
+    /**
+     * 鍒犻櫎淇濆吇宸ュ崟姹囨��
+     *
+     * @param ids 涓婚敭涓�
+     */
+    @SaCheckPermission("eims:maintOrderSt:remove")
+    @Log(title = "淇濆吇宸ュ崟姹囨��", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                          @PathVariable Long[] ids) {
+
+        return eimsMaintOrderStService.deleteWithValidByIds(List.of(ids), true);
+    }
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java
new file mode 100644
index 0000000..051fadd
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java
@@ -0,0 +1,74 @@
+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_maint_order_st
+ *
+ * @author zhuguifei
+ * @date 2025-03-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("eims_maint_order_st")
+public class EimsMaintOrderSt extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     *
+     */
+    private String title;
+
+    /**
+     *
+     */
+    private String equId;
+
+    /**
+     *
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date verifyTime;
+
+    private String status;
+
+    /**
+     * 淇濆吇浜�
+     */
+    private Long maintUser;
+
+    /**
+     * 楠岃瘉浜�
+     */
+    private Long verifyUser;
+
+    /**
+     * 鐗硅浜嬮」
+     */
+    private String specialNote;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java
index d89d93e..d8c55b6 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintPlan.java
@@ -1,8 +1,5 @@
 package org.dromara.eims.domain;
 
-import jakarta.validation.constraints.NotNull;
-import org.dromara.common.core.validate.AddGroup;
-import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
@@ -115,7 +112,7 @@
      * 涓婃鐢熸垚宸ュ崟鏃堕棿
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date lastGenerateDate;
+    private Date lastOrderDate;
 
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java
new file mode 100644
index 0000000..132d076
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java
@@ -0,0 +1,77 @@
+package org.dromara.eims.domain.bo;
+
+import org.dromara.eims.domain.EimsMaintOrderSt;
+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_maint_order_st
+ *
+ * @author zhuguifei
+ * @date 2025-03-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EimsMaintOrderSt.class, reverseConvertGenerate = false)
+public class EimsMaintOrderStBo extends BaseEntity {
+
+    /**
+     *
+     */
+    @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     *
+     */
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String title;
+
+    /**
+     *
+     */
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String equId;
+
+    /**
+     *
+     */
+    @NotNull(message = "涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date verifyTime;
+
+    /**
+     * 淇濆吇浜�
+     */
+    private Long maintUser;
+
+
+    private String status;
+
+    /**
+     * 楠岃瘉浜�
+     */
+    private Long verifyUser;
+
+    /**
+     * 鐗硅浜嬮」
+     */
+    private String specialNote;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java
index f59e6cf..cf189bb 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintPlanBo.java
@@ -97,19 +97,21 @@
     /**
      * 棣栨鎵ц鏃堕棿
      */
-    @NotNull(message = "淇濆吇璁″垝棣栨鎵ц鏃堕棿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date maintFirstTime;
 
     /**
      * 涓婃鎵ц鏃堕棿
      */
+
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date maintLastTime;
 
     /**
      * 涓嬫鎵ц鏃堕棿
      */
+    @NotNull(message = "涓嬫淇濆吇鏃堕棿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date maintNextTime;
 
@@ -122,7 +124,7 @@
      * 涓婃鐢熸垚宸ュ崟鏃堕棿
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date lastGenerateDate;
+    private Date lastOrderDate;
 
     // 鍏宠仈琛ㄥ瓧娈�
     private String equName;
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java
new file mode 100644
index 0000000..69e1a4c
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java
@@ -0,0 +1,109 @@
+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.EimsMaintOrderSt;
+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_maint_order_st
+ *
+ * @author zhuguifei
+ * @date 2025-03-12
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EimsMaintOrderSt.class)
+public class EimsMaintOrderStVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @ExcelProperty(value = "")
+    private Long id;
+
+    /**
+     *
+     */
+    @ExcelProperty(value = "")
+    private String title;
+
+    /**
+     *
+     */
+    @ExcelProperty(value = "")
+    private Long equId;
+    /**
+     * 璁惧鍚嶇О
+     */
+    @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId")
+    private String equName;
+    private String assetNo;
+    /**
+     *
+     */
+    @ExcelProperty(value = "")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planTime;
+    /**
+     *绋芥煡鏃ユ湡
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date verifyTime;
+
+
+    private String status;
+
+    /**
+     * 淇濆吇浜�
+     */
+    @ExcelProperty(value = "淇濆吇浜�")
+    private Long maintUser;
+
+    /**
+     * 楠岃瘉浜�
+     */
+    @ExcelProperty(value = "楠岃瘉浜�")
+    private Long verifyUser;
+    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "verifyUser")
+    private String verifyUserName;
+
+    /**
+     * 鐗硅浜嬮」
+     */
+    @ExcelProperty(value = "鐗硅浜嬮」")
+    private String specialNote;
+
+    /**
+     * 澶囨敞
+     */
+    @ExcelProperty(value = "澶囨敞")
+    private String remark;
+
+
+    private Integer orderCount;
+    private Integer dbyCount;
+    private Integer byCount;
+    private Integer dyzCount;
+    private Integer wcCount;
+    private String maintUserNames;
+    private String verifyUserNames;
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java
index c268369..3df1153 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java
@@ -2,9 +2,6 @@
 
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import jakarta.validation.constraints.NotNull;
-import org.dromara.common.core.validate.AddGroup;
-import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.translation.annotation.Translation;
 import org.dromara.common.translation.constant.TransConstant;
 import org.dromara.eims.domain.EimsMaintPlan;
@@ -17,8 +14,6 @@
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.util.Date;
-
 
 
 /**
@@ -160,7 +155,7 @@
      * 涓婃鐢熸垚宸ュ崟鏃堕棿
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date lastGenerateDate;
+    private Date lastOrderDate;
 
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java
new file mode 100644
index 0000000..ad87dab
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/MaintOrdeGroupVo.java
@@ -0,0 +1,70 @@
+package org.dromara.eims.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+import org.dromara.eims.domain.EimsMaintOrder;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 淇濆吇宸ュ崟鍒嗙粍鏌ヨ
+ *
+ * @author zhuguifei
+ * @date 2025-03-011
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class MaintOrdeGroupVo extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @ExcelProperty(value = "")
+    private Long id;
+
+    /**
+     *
+     */
+    @ExcelProperty(value = "")
+    private Long equId;
+
+    private String equName;
+
+    /**
+     * 璁惧璧勪骇缂栧彿
+     */
+    private String assetNo;
+
+   private Integer orderCount;
+   private Integer dbyCount;
+   private Integer byCount;
+   private Integer dyzCount;
+   private Integer wcCount;
+    private String maintUserNames;
+    private String verifyUserNames;
+
+
+    /**
+     * 淇濆吇璁″垝鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planTime;
+
+
+
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java
index 4b388cb..cb01ba0 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java
@@ -3,10 +3,7 @@
 import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
 import com.aizuda.snailjob.client.job.core.dto.JobArgs;
 import com.aizuda.snailjob.client.model.ExecuteResult;
-import com.aizuda.snailjob.common.core.util.JsonUtil;
-import com.aizuda.snailjob.common.log.SnailJobLog;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -14,15 +11,11 @@
 import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.eims.domain.*;
-import org.dromara.eims.domain.bo.EimsMaintPlanBo;
 import org.dromara.eims.domain.vo.EimsMaintPlanVo;
 import org.dromara.eims.mapper.EimsMaintOrderMapper;
 import org.dromara.eims.mapper.EimsMaintPlanMapper;
-import org.dromara.eims.service.IEimsMaintOrderService;
-import org.dromara.eims.service.IEimsMaintPlanService;
 import org.dromara.eims.service.IGenerateCodeService;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -34,7 +27,6 @@
 @JobExecutor(name = "maintPlanToOrderJob")
 public class MaintPlanToOrderJob {
     private final EimsMaintOrderMapper orderMapper;
-
 
 
     private final EimsMaintPlanMapper planMapper;
@@ -51,8 +43,6 @@
         LambdaQueryWrapper<EimsMaintPlan> planBoQueryWrapper = Wrappers.lambdaQuery();
         // 鏌ヨ鍚敤鐨勪繚鍏昏鍒�
         planBoQueryWrapper.eq(EimsMaintPlan::getStatus, DictConstants.SYS_NORMAL_DISABLE_DETAIL.NORMAL);
-        // 杩囨护娌℃湁棣栨杩愯鏃堕棿
-        planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintFirstTime);
         // 杩囨护娌℃湁涓嬫杩愯鏃堕棿
         planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintNextTime);
         // 杩囨护娌℃湁淇濆吇鍛ㄦ湡鐨勬暟鎹�
@@ -64,8 +54,8 @@
         for (int i = 0; i < planVoList.size(); i++) {
             EimsMaintPlanVo planVo = planVoList.get(i);
             // 淇濆吇璁″垝add鐨勬椂鍊欎細鑷姩鐢熸垚涓嬫杩愯鏃堕棿
-            Date createOrderTime = planVo.getMaintNextTime();
-            int day = DateUtils.differentDays(today,createOrderTime );
+            Date oldNext = planVo.getMaintNextTime();
+            int day = DateUtils.differentDays(today, oldNext);
             // 濡傛灉璁″垝鐢熸垚宸ュ崟鏃ユ湡澶т簬浠婂ぉ鍒欎笉鐢熸垚宸ュ崟
             if (day >= 1) {
                 continue;
@@ -76,48 +66,50 @@
             String maintRule = planVo.getMaintRule();
             Date firstTime = planVo.getMaintFirstTime();
             Date lastTime = planVo.getMaintLastTime();
-            Date nextTime = null;
+            Date newNext = null;
             String maintCycleUnit = planVo.getMaintCycleUnit();
             switch (maintCycleUnit) {
                 case DictConstants.MAINT_CYCLE_UNIT_DETAIL.DAY:
+                    newNext = DateUtils.addDays(oldNext, maintCycle.intValue());
                     break;
                 case DictConstants.MAINT_CYCLE_UNIT_DETAIL.WEEK:
-                    maintCycle *= 7;
+
+                    newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue());
+
                     break;
                 case DictConstants.MAINT_CYCLE_UNIT_DETAIL.MONTH:
-                    maintCycle *= 30;
+
+                    newNext = DateUtils.addMonths(oldNext, maintCycle.intValue());
+
                     break;
                 case DictConstants.MAINT_CYCLE_UNIT_DETAIL.SEASON:
-                    maintCycle *= 90;
+                    newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3);
+
                     break;
                 case DictConstants.MAINT_CYCLE_UNIT_DETAIL.YEAR:
-                    maintCycle *= 365;
+
+                    newNext = DateUtils.addYears(oldNext, maintCycle.intValue());
+
                     break;
             }
-            // 棣栨
-            if (lastTime == null ) {
-                nextTime = DateUtils.addDays(createOrderTime, maintCycle.intValue());
-            } else {
-                nextTime = DateUtils.addDays(lastTime, maintCycle.intValue());
-            }
+
             EimsMaintOrder order = new EimsMaintOrder();
             BeanUtils.copyProperties(planVo, order);
             order.setId(null);
             order.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIBAOYANG);
-            order.setPlanTime(createOrderTime);
+            order.setPlanTime(oldNext);
             order.setPlanId(planVo.getId());
             order.setMaintCode(codeService.generateCode("BYZD"));
             EimsMaintPlan plan = MapstructUtils.convert(planVo, EimsMaintPlan.class);
             assert plan != null;
-            plan.setLastGenerateDate(new Date());
-            plan.setMaintLastTime(createOrderTime);
-            plan.setMaintNextTime(nextTime);
-            boolean flag  = orderMapper.insert(order) > 0;
+            plan.setLastOrderDate(new Date());
+            plan.setMaintLastTime(oldNext);
+            plan.setMaintNextTime(newNext);
+            if(plan.getMaintFirstTime()==null)plan.setMaintFirstTime(oldNext);
+            boolean flag = orderMapper.insert(order) > 0;
             //TODO 鐢熸垚澶辫触锛屾坊鍔犲紓甯歌褰�
             if (!flag) continue;
             planMapper.updateById(plan);
-
-
 
 
         }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java
index caa3aab..2473d57 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderMapper.java
@@ -9,6 +9,7 @@
 import org.dromara.eims.domain.vo.EimsMaintOrderVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.eims.domain.vo.EimsMaintPlanVo;
+import org.dromara.eims.domain.vo.MaintOrdeGroupVo;
 
 /**
  * 淇濆吇宸ュ崟Mapper鎺ュ彛
@@ -18,5 +19,6 @@
  */
 public interface EimsMaintOrderMapper extends BaseMapperPlus<EimsMaintOrder, EimsMaintOrderVo> {
     Page<EimsMaintOrderVo> selectMaintOrderList(@Param("page") Page<EimsMaintOrderVo> page, @Param(Constants.WRAPPER) Wrapper<EimsMaintOrder> queryWrapper);
+    Page<MaintOrdeGroupVo> selectMaintOrderGroupList(@Param("page") Page<EimsMaintOrderVo> page, @Param(Constants.WRAPPER) Wrapper<EimsMaintOrder> queryWrapper);
 
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java
new file mode 100644
index 0000000..0ea0b0f
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.eims.mapper;
+
+import org.dromara.eims.domain.EimsMaintOrderSt;
+import org.dromara.eims.domain.vo.EimsMaintOrderStVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 淇濆吇宸ュ崟姹囨�籑apper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2025-03-12
+ */
+public interface EimsMaintOrderStMapper extends BaseMapperPlus<EimsMaintOrderSt, EimsMaintOrderStVo> {
+
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java
index 8894366..0496614 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderService.java
@@ -4,6 +4,7 @@
 import org.dromara.eims.domain.bo.EimsMaintOrderBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.eims.domain.vo.MaintOrdeGroupVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -74,4 +75,12 @@
      * @return 淇濆吇宸ュ崟鍒嗛〉鍒楄〃
      */
     TableDataInfo<EimsMaintOrderVo> queryPageListCustom(EimsMaintOrderBo bo, PageQuery pageQuery);
+
+    /**
+     * 鏁版嵁鏍规嵁 璁惧+鏃ユ湡  鍒嗙粍
+     * @param bo
+     * @param pageQuery
+     * @return
+     */
+    TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery);
 }
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java
new file mode 100644
index 0000000..f0bd81f
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java
@@ -0,0 +1,69 @@
+package org.dromara.eims.service;
+
+import org.dromara.common.core.domain.R;
+import org.dromara.eims.domain.vo.EimsMaintOrderStVo;
+import org.dromara.eims.domain.bo.EimsMaintOrderStBo;
+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-03-12
+ */
+public interface IEimsMaintOrderStService {
+
+    /**
+     * 鏌ヨ淇濆吇宸ュ崟姹囨��
+     *
+     * @param id 涓婚敭
+     * @return 淇濆吇宸ュ崟姹囨��
+     */
+    EimsMaintOrderStVo queryById(Long id);
+
+    /**
+     * 鍒嗛〉鏌ヨ淇濆吇宸ュ崟姹囨�诲垪琛�
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 淇濆吇宸ュ崟姹囨�诲垎椤靛垪琛�
+     */
+    TableDataInfo<EimsMaintOrderStVo> queryPageList(EimsMaintOrderStBo bo, PageQuery pageQuery);
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曟眹鎬诲垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 淇濆吇宸ュ崟姹囨�诲垪琛�
+     */
+    List<EimsMaintOrderStVo> queryList(EimsMaintOrderStBo bo);
+
+    /**
+     * 鏂板淇濆吇宸ュ崟姹囨��
+     *
+     * @param bo 淇濆吇宸ュ崟姹囨��
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    Boolean insertByBo(EimsMaintOrderStBo bo);
+
+    /**
+     * 淇敼淇濆吇宸ュ崟姹囨��
+     *
+     * @param bo 淇濆吇宸ュ崟姹囨��
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    Boolean updateByBo(EimsMaintOrderStBo bo);
+
+    /**
+     * 鏍¢獙骞舵壒閲忓垹闄や繚鍏诲伐鍗曟眹鎬讳俊鎭�
+     *
+     * @param ids     寰呭垹闄ょ殑涓婚敭闆嗗悎
+     * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+     * @return 鏄惁鍒犻櫎鎴愬姛
+     */
+    R<Void> deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
index 472878a..529c96b 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
@@ -5,7 +5,9 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.SneakyThrows;
 import org.dromara.common.core.constant.DictConstants;
+import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.service.MaintOrderService;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -16,6 +18,11 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.eims.domain.EimsMaintPlan;
+import org.dromara.eims.domain.bo.EimsMaintPlanBo;
+import org.dromara.eims.domain.vo.MaintOrdeGroupVo;
+import org.dromara.eims.mapper.EimsMaintPlanMapper;
 import org.dromara.system.domain.SysDept;
 import org.dromara.system.domain.vo.SysDeptVo;
 import org.dromara.system.mapper.SysDeptMapper;
@@ -27,10 +34,7 @@
 import org.dromara.eims.service.IEimsMaintOrderService;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import java.util.*;
 
 /**
  * 淇濆吇宸ュ崟Service涓氬姟灞傚鐞�
@@ -43,6 +47,7 @@
 public class EimsMaintOrderServiceImpl implements IEimsMaintOrderService, MaintOrderService {
 
     private final EimsMaintOrderMapper baseMapper;
+    private final EimsMaintPlanMapper planMapper;
     private final SysDeptMapper sysDeptMapper;
 
     /**
@@ -76,6 +81,12 @@
         return TableDataInfo.build(page);
     }
 
+    @Override
+    public TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery) {
+        Page<MaintOrdeGroupVo> page = baseMapper.selectMaintOrderGroupList(pageQuery.build(), buildGroupWrapper(bo));
+        return TableDataInfo.build(page);
+    }
+
     /**
      * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曞垪琛�
      *
@@ -92,13 +103,33 @@
         QueryWrapper<EimsMaintOrder> qw =  Wrappers.query();
         qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode());
         qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName());
+        qw.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId());
         qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType());
         qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit());
         qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule());
         qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser());
         qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept()));
         qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus());
+        qw.eq(bo.getPlanTime()!=null,
+            "mo.plan_time", bo.getPlanTime());
         qw.orderByDesc("mo.create_time");
+        return qw;
+    }
+    private QueryWrapper<EimsMaintOrder> buildGroupWrapper(EimsMaintOrderBo bo) {
+        Map<String, Object> params = bo.getParams();
+        QueryWrapper<EimsMaintOrder> qw =  Wrappers.query();
+        qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode());
+        qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName());
+        qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType());
+        qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit());
+        qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule());
+        qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser());
+        qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept()));
+        qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus());
+        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
+            "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
+        qw.groupBy(Arrays.asList("mo.equ_id","mo.plan_time"));
+        qw.orderByDesc("mo.plan_time");
         return qw;
     }
 
@@ -152,9 +183,20 @@
      * @param bo 淇濆吇宸ュ崟
      * @return 鏄惁鏂板鎴愬姛
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean insertByBo(EimsMaintOrderBo bo) {
         EimsMaintOrder add = MapstructUtils.convert(bo, EimsMaintOrder.class);
+        //閫氳繃淇濆吇璁″垝鐢熸垚鐨勬暟鎹渶瑕佹洿鏂颁繚鍏昏鍒�
+        Long planId = bo.getPlanId();
+        if(planId!=null){
+            EimsMaintPlan eimsMaintPlan = planMapper.selectById(planId);
+            setMaintNextTime(eimsMaintPlan);
+            planMapper.updateById(eimsMaintPlan);
+        }
+
+
+
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
@@ -162,6 +204,50 @@
 
         }
         return flag;
+    }
+
+    /**
+     * 璁$畻淇濆吇璁″垝涓嬫鎵ц鏃堕棿
+     */
+    @SneakyThrows
+    private void setMaintNextTime(EimsMaintPlan bo) {
+        Date oldNext = bo.getMaintNextTime();
+        //TODO 涓嬫淇濆吇鏃堕棿璁$畻瑙勫垯 0-鎸夊浐瀹氬懆鏈�  1-鎸変笂娆′繚鍏绘椂闂�
+        Date newNext = null;
+
+        //涓嬫娆℃墽琛屾椂闂翠负绌烘姏鍑哄紓甯�
+        if (oldNext == null) {
+            throw new Exception("涓嬫淇濆吇鏃堕棿涓嶈兘涓虹┖!");
+        }
+        //鍛ㄦ湡
+        Long maintCycle = bo.getMaintCycle();
+        //鍗曚綅 1-澶� 2-鍛� 3-鏈� 4-瀛� 5-骞�
+        String maintCycleUnit = bo.getMaintCycleUnit();
+        switch (maintCycleUnit) {
+            case "1":
+                newNext = DateUtils.addDays(oldNext, maintCycle.intValue());
+                break;
+            case "2":
+                newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue());
+                break;
+            case "3":
+                newNext = DateUtils.addMonths(oldNext, maintCycle.intValue());
+                break;
+            case "4":
+                newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3);
+                break;
+            case "5":
+                newNext = DateUtils.addYears(oldNext, maintCycle.intValue());
+                break;
+
+        }
+        bo.setMaintNextTime(newNext);
+        if(bo.getMaintFirstTime()==null){
+            bo.setMaintFirstTime(oldNext);
+        }
+        bo.setMaintLastTime(oldNext);
+
+
     }
 
     /**
@@ -175,8 +261,19 @@
     @Override
     public Boolean updateByBo(EimsMaintOrderBo bo) {
         EimsMaintOrder update = MapstructUtils.convert(bo, EimsMaintOrder.class);
+        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.BAOYANG) && bo.getStartTime() == null){
+            update.setStartTime(new Date());
+        }
 
-        EimsMaintOrder old = baseMapper.selectById(bo.getId());
+        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG) && bo.getEndTime() == null){
+            update.setEndTime(new Date());
+        }
+
+        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.WANCHENG) && bo.getVerifyUser() == null){
+            LoginUser loginUser = LoginHelper.getLoginUser();
+            update.setVerifyUser(loginUser.getUserId());
+        }
+
 
         validEntityBeforeSave(update);
         return baseMapper.updateById(update) > 0;
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java
new file mode 100644
index 0000000..ea64041
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java
@@ -0,0 +1,220 @@
+package org.dromara.eims.service.impl;
+
+import lombok.SneakyThrows;
+import org.dromara.common.core.constant.DictConstants;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.LoginUser;
+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.common.satoken.utils.LoginHelper;
+import org.dromara.eims.domain.EimsEqu;
+import org.dromara.eims.domain.EimsMaintOrder;
+import org.dromara.eims.domain.vo.EimsMaintOrderVo;
+import org.dromara.eims.mapper.EimsEquMapper;
+import org.dromara.eims.mapper.EimsMaintOrderMapper;
+import org.springframework.stereotype.Service;
+import org.dromara.eims.domain.bo.EimsMaintOrderStBo;
+import org.dromara.eims.domain.vo.EimsMaintOrderStVo;
+import org.dromara.eims.domain.EimsMaintOrderSt;
+import org.dromara.eims.mapper.EimsMaintOrderStMapper;
+import org.dromara.eims.service.IEimsMaintOrderStService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.TemporalAdjusters;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+
+/**
+ * 淇濆吇宸ュ崟姹囨�籗ervice涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2025-03-12
+ */
+@RequiredArgsConstructor
+@Service
+public class EimsMaintOrderStServiceImpl implements IEimsMaintOrderStService {
+
+    private final EimsMaintOrderStMapper baseMapper;
+    private final EimsEquMapper equMapper;
+    private final EimsMaintOrderMapper orderMapper;
+
+    /**
+     * 鏌ヨ淇濆吇宸ュ崟姹囨��
+     *
+     * @param id 涓婚敭
+     * @return 淇濆吇宸ュ崟姹囨��
+     */
+    @Override
+    public EimsMaintOrderStVo queryById(Long id) {
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ淇濆吇宸ュ崟姹囨�诲垪琛�
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 淇濆吇宸ュ崟姹囨�诲垎椤靛垪琛�
+     */
+    @Override
+    public TableDataInfo<EimsMaintOrderStVo> queryPageList(EimsMaintOrderStBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EimsMaintOrderSt> lqw = buildQueryWrapper(bo);
+        Page<EimsMaintOrderStVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        // 濉厖鏁版嵁
+        fillStData(result);
+        return TableDataInfo.build(result);
+    }
+
+    private void fillStData(Page<EimsMaintOrderStVo> result) {
+        List<EimsMaintOrderStVo> records = result.getRecords();
+        for (int i = 0; i < records.size(); i++) {
+            EimsMaintOrderStVo stVo = records.get(i);
+            //1.濉厖璁惧
+            EimsEqu eimsEqu = equMapper.selectById(stVo.getEquId());
+            stVo.setAssetNo(eimsEqu.getAssetNo());
+            //2.缁熻鏁版嵁
+            LambdaQueryWrapper<EimsMaintOrder> orderLqw = Wrappers.lambdaQuery();
+            orderLqw.eq(EimsMaintOrder::getEquId, stVo.getEquId());
+            LocalDate planTime = stVo.getPlanTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            ;
+            LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth());
+            LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth());
+            orderLqw.between(EimsMaintOrder::getPlanTime, startOfMonth, endOfMonth);
+            // 鎵ц鏌ヨ
+            List<EimsMaintOrderVo> orderList = orderMapper.selectVoList(orderLqw);
+            // TODO 鏍规嵁瀛楀吀maint_order_status
+            Map<String, Long> cMap = orderList.stream()
+                .filter(order -> List.of("0", "1", "2", "3").contains(order.getStatus()))
+                .collect(Collectors.groupingBy(EimsMaintOrderVo::getStatus, Collectors.counting()));
+            stVo.setOrderCount(orderList.size());
+            stVo.setDbyCount(cMap.getOrDefault("0", 0L).intValue());
+            stVo.setByCount(cMap.getOrDefault("1", 0L).intValue());
+            stVo.setDyzCount(cMap.getOrDefault("2", 0L).intValue());
+            stVo.setWcCount(cMap.getOrDefault("3", 0L).intValue());
+
+        }
+
+    }
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曟眹鎬诲垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 淇濆吇宸ュ崟姹囨�诲垪琛�
+     */
+    @Override
+    public List<EimsMaintOrderStVo> queryList(EimsMaintOrderStBo bo) {
+        LambdaQueryWrapper<EimsMaintOrderSt> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EimsMaintOrderSt> buildQueryWrapper(EimsMaintOrderStBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EimsMaintOrderSt> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StringUtils.isNotBlank(bo.getTitle()), EimsMaintOrderSt::getTitle, bo.getTitle());
+        lqw.eq(StringUtils.isNotBlank(bo.getEquId()), EimsMaintOrderSt::getEquId, bo.getEquId());
+        lqw.eq(bo.getPlanTime() != null, EimsMaintOrderSt::getPlanTime, bo.getPlanTime());
+        lqw.eq(bo.getMaintUser() != null, EimsMaintOrderSt::getMaintUser, bo.getMaintUser());
+        lqw.eq(bo.getVerifyUser() != null, EimsMaintOrderSt::getVerifyUser, bo.getVerifyUser());
+        return lqw;
+    }
+
+    /**
+     * 鏂板淇濆吇宸ュ崟姹囨��
+     *
+     * @param bo 淇濆吇宸ュ崟姹囨��
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    @Override
+    public Boolean insertByBo(EimsMaintOrderStBo bo) {
+        EimsMaintOrderSt add = MapstructUtils.convert(bo, EimsMaintOrderSt.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 淇敼淇濆吇宸ュ崟姹囨��
+     *
+     * @param bo 淇濆吇宸ュ崟姹囨��
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    @Override
+    public Boolean updateByBo(EimsMaintOrderStBo bo) {
+        EimsMaintOrderSt update = MapstructUtils.convert(bo, EimsMaintOrderSt.class);
+
+        if(bo.getVerifyUser()!=null){
+            EimsMaintOrderSt eimsMaintOrderSt = baseMapper.selectById(bo.getId());
+            String status = eimsMaintOrderSt.getStatus();
+            if(status==null  || status.equals(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.N)){
+                if(update.getVerifyTime()==null) update.setStatus(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.Y);
+                if(update.getVerifyTime()==null) update.setVerifyTime(new Date());
+            }
+        }
+
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     */
+    private void validEntityBeforeSave(EimsMaintOrderSt entity) {
+        //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+    }
+
+    /**
+     * 鏍¢獙骞舵壒閲忓垹闄や繚鍏诲伐鍗曟眹鎬讳俊鎭�
+     *
+     * @param ids     寰呭垹闄ょ殑涓婚敭闆嗗悎
+     * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+     * @return 鏄惁鍒犻櫎鎴愬姛
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @SneakyThrows
+    @Override
+    public R<Void> deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+        }
+        AtomicBoolean flag = new AtomicBoolean(false);
+        ids.stream().anyMatch(id -> {
+            EimsMaintOrderStVo stVo = baseMapper.selectVoById(id);
+            LocalDate planTime = stVo.getPlanTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth());
+            LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth());
+
+            LambdaQueryWrapper<EimsMaintOrder> orderLqw = Wrappers.lambdaQuery(EimsMaintOrder.class)
+                .eq(EimsMaintOrder::getEquId, stVo.getEquId())
+                .between(EimsMaintOrder::getPlanTime, startOfMonth, endOfMonth);
+
+            List<EimsMaintOrderVo> orderList = orderMapper.selectVoList(orderLqw);
+            if (!orderList.isEmpty()) {
+                flag.set(true);
+                return true; // 鏈夊尮閰嶇粨鏋滐紝鍋滄閬嶅巻
+            }
+            return false;
+        });
+
+        if (flag.get()) {
+            return R.fail("瀛樺湪瀛愰」锛屼笉鑳藉垹闄わ紒");
+        }
+        boolean result = baseMapper.deleteByIds(ids) > 0;
+        return result ? R.ok("鎿嶄綔鎴愬姛锛�") : R.fail("鎿嶄綔澶辫触锛�");
+    }
+}
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java
index 8cbc9af..937832b 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java
@@ -106,6 +106,7 @@
         qw.eq(bo.getMaintUser() != null, "mp.maint_user", bo.getMaintUser());
         qw.in(bo.getMaintDept() != null, "mp.maint_dept", getAllDescendantIds(bo.getMaintDept()));
         qw.eq(bo.getStatus() != null, "mp.status", bo.getStatus());
+        qw.orderByDesc("mp.create_time");
         return qw;
     }
 
@@ -144,7 +145,7 @@
      */
     @Override
     public Boolean insertByBo(EimsMaintPlanBo bo) {
-        setMaintNextTime(bo);
+        //setMaintNextTime(bo);
         EimsMaintPlan add = MapstructUtils.convert(bo, EimsMaintPlan.class);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
@@ -154,46 +155,7 @@
         return flag;
     }
 
-    /**
-     * 璁$畻淇濆吇璁″垝涓嬫鎵ц鏃堕棿
-     */
-    @SneakyThrows
-    private void setMaintNextTime(EimsMaintPlanBo bo) {
-        Date maintFirstTime = bo.getMaintFirstTime();
-        Date maintLastTime = bo.getMaintLastTime();
-        //涓嬫淇濆吇鏃堕棿璁$畻瑙勫垯 0-鎸夊浐瀹氬懆鏈�  1-鎸変笂娆′繚鍏绘椂闂�
-        Date nextDate = (maintLastTime != null && bo.getMaintRule().equals(DictConstants.MAINT_TIME_RULE_DETAIL.LAST)) ? maintLastTime :maintFirstTime;
 
-        //棣栨鎵ц鏃堕棿涓虹┖鎶涘嚭寮傚父
-        if (maintFirstTime == null) {
-            throw new Exception("棣栨鎵ц鏃堕棿涓嶈兘涓虹┖!");
-        }
-        //鍛ㄦ湡
-        Long maintCycle = bo.getMaintCycle();
-        //鍗曚綅 1-澶� 2-鍛� 3-鏈� 4-瀛� 5-骞�
-        String maintCycleUnit = bo.getMaintCycleUnit();
-        switch (maintCycleUnit) {
-            case "1":
-                nextDate = DateUtils.addDays(nextDate, maintCycle.intValue());
-                break;
-            case "2":
-                nextDate = DateUtils.addWeeks(nextDate, maintCycle.intValue());
-                break;
-            case "3":
-                nextDate = DateUtils.addMonths(nextDate, maintCycle.intValue());
-                break;
-            case "4":
-                nextDate = DateUtils.addMonths(nextDate, maintCycle.intValue() * 3);
-                break;
-            case "5":
-                nextDate = DateUtils.addYears(nextDate, maintCycle.intValue());
-                break;
-
-        }
-        bo.setMaintNextTime(nextDate);
-
-
-    }
 
     /**
      * 淇敼淇濆吇璁″垝
diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml
index 5497c48..40acd9e 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml
+++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderMapper.xml
@@ -5,6 +5,9 @@
 <mapper namespace="org.dromara.eims.mapper.EimsMaintOrderMapper">
     <resultMap type="org.dromara.eims.domain.vo.EimsMaintOrderVo" id="EimsMaintOrderResult">
     </resultMap>
+
+    <resultMap type="org.dromara.eims.domain.vo.MaintOrdeGroupVo" id="MaintOrdeGroupVoResult">
+    </resultMap>
     <select id="selectMaintOrderList" resultMap="EimsMaintOrderResult">
         SELECT mo.*,equ.equ_name equName,equ.equ_code equCode,equ.asset_no assetNo,equ.model_no modelNo,mo.create_time createTime,
                pl.maint_name maintName,
@@ -19,4 +22,27 @@
                  LEFT JOIN sys_dict_data dd on dd.dict_type = 'maint_cycle_unit' and dd.dict_value = mo.maint_cycle_unit
             ${ew.getCustomSqlSegment}
     </select>
+    <select id="selectMaintOrderGroupList" resultMap="MaintOrdeGroupVoResult">
+        SELECT
+            mo.equ_id,
+            mo.plan_time,
+            MAX(equ.equ_name) AS equName,
+            MAX(equ.equ_code) AS equCode,
+            MAX(equ.asset_no) AS assetNo,
+            MAX(equ.model_no) AS modelNo,
+            GROUP_CONCAT(us.nick_name SEPARATOR ', ') AS maintUserNames,
+            GROUP_CONCAT(ue.nick_name SEPARATOR ', ') AS verifyUserNames,
+            COUNT(mo.id) AS orderCount, -- 缁存姢璁㈠崟鐨勬�绘暟
+            SUM(CASE WHEN mo.status = 0 THEN 1 ELSE 0 END) AS dbyCount,
+            SUM(CASE WHEN mo.status = 1 THEN 1 ELSE 0 END) AS byCount,
+            SUM(CASE WHEN mo.status = 2 THEN 1 ELSE 0 END) AS dyzCount,
+            SUM(CASE WHEN mo.status = 3 THEN 1 ELSE 0 END) AS wcCount
+        FROM eims_maint_order mo
+                 LEFT JOIN eims_equ equ ON mo.equ_id = equ.equ_id
+                 LEFT JOIN sys_user us ON mo.maint_user = us.user_id
+                 LEFT JOIN sys_user ue ON mo.verify_user = ue.user_id
+                 LEFT JOIN sys_dept dp ON mo.maint_dept = dp.dept_id
+                 LEFT JOIN eims_maint_plan pl ON pl.id = mo.plan_id
+            ${ew.getCustomSqlSegment}
+    </select>
 </mapper>
diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml
new file mode 100644
index 0000000..892a6b6
--- /dev/null
+++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.eims.mapper.EimsMaintOrderStMapper">
+
+</mapper>

--
Gitblit v1.9.3