车间能级提升-智能设备管理系统
zhuguifei
2025-03-14 3e0f519c396ac8a72e7bbd426e4f38fa6cc403dc
点检模块
已添加38个文件
已复制5个文件
已重命名9个文件
已删除4个文件
已修改16个文件
4986 ■■■■■ 文件已修改
eims-ui/apps/web-antd/src/api/eims/insp-plan/index.ts 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/insp-plan/model.d.ts 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/insp-record/index.ts 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/insp-record/model.d.ts 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/insp-st/index.ts 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/insp-st/model.d.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/maint-st/index.ts 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/maint-st/model.d.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/constants/dict/index.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-plan/data.tsx 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-plan/index.vue 302 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-plan/insp-plan-drawer.vue 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-record/data.tsx 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-record/index.vue 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-record/insp-record-drawer.vue 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-st/data.tsx 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-st/index.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/insp-st/insp-st-drawer.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-order/data.tsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-order/index.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-order/maint-order-drawer.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-plan/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-st/data.tsx 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-st/index.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-st/maint-st-drawer.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectPlanController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectRecordController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectStController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintStController.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsInspectPlan.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsInspectRecord.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsInspectSt.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintSt.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInspectPlanBo.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInspectRecordBo.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInspectStBo.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintStBo.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectPlanVo.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectRecordVo.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectStVo.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintStVo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsInspectPlanMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsInspectRecordMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsInspectStMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintStMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectPlanService.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectRecordService.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectStService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintStService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectPlanServiceImpl.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectRecordServiceImpl.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintStServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInspectPlanMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInspectRecordMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInspectStMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintStMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/insp-plan/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
import type { InspectPlanVO } from './model';
import type { ID, IDS } from '#/api/common';
import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';
enum Api {
  inspectPlanExport = '/eims/inspectPlan/export',
  inspectPlanList = '/eims/inspectPlan/list',
  root = '/eims/inspectPlan'
}
/**
 * æŸ¥è¯¢ç‚¹æ£€è®¡åˆ’列表
 * @param query
 * @returns {*}
 */
export function listInspPlan(params?: any) {
  return requestClient.get<InspectPlanVO[]>(Api.inspectPlanList, { params });
}
/**
 * æŸ¥è¯¢ç‚¹æ£€è®¡åˆ’详细
 * @param inspectPlanId
 */
export function getInspPlan(inspectPlanId: ID) {
  return requestClient.get<InspectPlanVO>(`${Api.root}/${inspectPlanId}`);
}
/**
 * æ–°å¢žç‚¹æ£€è®¡åˆ’
 * @param data
 */
export function addInspPlan(data: any) {
  return requestClient.postWithMsg<void>(Api.root, data);
}
/**
 * ä¿®æ”¹ç‚¹æ£€è®¡åˆ’
 * @param data
 */
export function updateInspPlan(data: any) {
  return requestClient.putWithMsg<void>(Api.root, data);
}
/**
 * åˆ é™¤ç‚¹æ£€è®¡åˆ’
 * @param inspectPlanId
 */
export function delInspPlan(inspectPlanId: IDS) {
  return requestClient.deleteWithMsg<void>(`${Api.root}/${inspectPlanId}`);
}
/**
 * å¯¼å‡º
 * @param
 */
export function inspPlanExport(data: any) {
  return commonExport(Api.inspectPlanExport, data);
}
eims-ui/apps/web-antd/src/api/eims/insp-plan/model.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
export interface InspectPlanVO {
  /**
   *
   */
  id: number | string;
  /**
   * è®¾å¤‡id
   */
  equId: number | string;
  /**
   * è®¾å¤‡åç§°
   */
  equName: string;
  /**
   * èµ„产编号
   */
  assteNo: string;
  /**
   * ç‚¹æ£€ç±»åž‹ï¼ˆå­—典)
   */
  inspType: string;
  /**
   * ç‚¹æ£€é¡¹åç§°
   */
  inspName: string;
  /**
   * ç‚¹æ£€é¡¹ç¼–号
   */
  inspNo: number;
  /**
   * ç‚¹æ£€è¯´æ˜Ž
   */
  inspDesc: string;
  /**
   * ç‚¹æ£€å‘¨æœŸ
   */
  inspCycle: number;
  /**
   * ç‚¹æ£€å‘¨æœŸå•位(字典)
   */
  inspCycleUnit: string;
  /**
   * ç‚¹æ£€è§„则(字典)保养时间计算:1-按周期  2-按上次保养时间
   */
  inspRule: string;
  /**
   * ç‚¹æ£€äºº
   */
  inspUser: number;
  /**
   * ç‚¹æ£€éƒ¨é—¨
   */
  inspDept: number;
  /**
   * çŠ¶æ€ï¼ˆå­—å…¸ï¼‰ 0-启用  1-禁用
   */
  status: string;
  /**
   * é¦–次执行时间
   */
  inspFirstTime: string;
  /**
   * ä¸Šæ¬¡æ‰§è¡Œæ—¶é—´
   */
  inspLastTime: string;
  /**
   * ä¸‹æ¬¡æ‰§è¡Œæ—¶é—´
   */
  inspNextTime: string;
  /**
   * å¤‡æ³¨
   */
  remark: string;
}
eims-ui/apps/web-antd/src/api/eims/insp-record/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
import type { InspectRecordVO } from './model';
import type { ID, IDS } from '#/api/common';
import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';
enum Api {
  inspRecordExport = '/eims/inspRecord/export',
  inspRecordList = '/eims/inspRecord/list',
  root = '/eims/inspRecord'
}
/**
 * æŸ¥è¯¢ç‚¹æ£€è®°å½•列表
 * @param query
 * @returns {*}
 */
export function listInspRecord(params?: any) {
  return requestClient.get<InspectRecordVO[]>(Api.inspRecordList, { params });
}
/**
 * æŸ¥è¯¢ç‚¹æ£€è®°å½•详细
 * @param inspRecordId
 */
export function getInspRecord(inspRecordId: ID) {
  return requestClient.get<InspectRecordVO>(`${Api.root}/${inspRecordId}`);
}
/**
 * æ–°å¢žç‚¹æ£€è®°å½•
 * @param data
 */
export function addInspRecord(data: any) {
  return requestClient.postWithMsg<void>(Api.root, data);
}
/**
 * ä¿®æ”¹ç‚¹æ£€è®°å½•
 * @param data
 */
export function updateInspRecord(data: any) {
  return requestClient.putWithMsg<void>(Api.root, data);
}
/**
 * åˆ é™¤ç‚¹æ£€è®°å½•
 * @param inspRecordId
 */
export function delInspRecord(inspRecordId: IDS) {
  return requestClient.deleteWithMsg<void>(`${Api.root}/${inspRecordId}`);
}
/**
 * å¯¼å‡º
 * @param
 */
export function inspRecordExport(data: any) {
  return commonExport(Api.inspRecordExport, data);
}
eims-ui/apps/web-antd/src/api/eims/insp-record/model.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
export interface InspectRecordVO {
  /**
   * id
   */
  id: string | number;
  /**
   * è®¾å¤‡di
   */
  equId: string | number;
  /**
   * è®¾å¤‡åç§°
   */
  equName: string;
  /**
   * èµ„产编号
   */
  assteNo: string;
  /**
   * ç‚¹æ£€åç§°
   */
  inspName: string;
  /**
   * ç‚¹æ£€æè¿°
   */
  inspDesc: string;
  /**
   * çŠ¶æ€
   */
  status: string;
  /**
   * ç‚¹æ£€ç¼–码
   */
  inspCode: string;
  /**
   * å€¼è®°å½•方式(字典)
   */
  recordMode: string;
  /**
   * å‚考值
   */
  referenceValue: string;
  /**
   * ä¸Šé™
   */
  upperLimit: string;
  /**
   * ä¸‹é™
   */
  lowLimit: string;
  /**
   * æ£€æŸ¥å€¼
   */
  checkValue: string;
  /**
   * ç‚¹æ£€ç»“果(字典)
   */
  inspResult: string;
  /**
   * ç‚¹æ£€æ—¶é—´
   */
  inspTime: string;
  /**
   * è®¡åˆ’点检日期
   */
  planTime: string;
  /**
   * éªŒè¯äºº
   */
  verifyUser: number;
  /**
   * è®¡åˆ’id
   */
  planId: string | number;
  /**
   * å¤‡æ³¨
   */
  remark: string;
}
eims-ui/apps/web-antd/src/api/eims/insp-st/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
import type { InspectStVO } from './model';
import type { ID, IDS } from '#/api/common';
import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';
enum Api {
  inspectStExport = '/eims/inspectSt/export',
  inspectStList = '/eims/inspectSt/list',
  root = '/eims/inspectSt'
}
/**
 * æŸ¥è¯¢ç‚¹æ£€æ±‡æ€»åˆ—表
 * @param query
 * @returns {*}
 */
export function listInspectSt(params?: any) {
  return requestClient.get<InspectStVO[]>(Api.inspectStList, { params });
}
/**
 * æŸ¥è¯¢ç‚¹æ£€æ±‡æ€»è¯¦ç»†
 * @param inspectStId
 */
export function getInspectSt(inspectStId: ID) {
  return requestClient.get<InspectStVO>(`${Api.root}/${inspectStId}`);
}
/**
 * æ–°å¢žç‚¹æ£€æ±‡æ€»
 * @param data
 */
export function addInspectSt(data: any) {
  return requestClient.postWithMsg<void>(Api.root, data);
}
/**
 * ä¿®æ”¹ç‚¹æ£€æ±‡æ€»
 * @param data
 */
export function updateInspectSt(data: any) {
  return requestClient.putWithMsg<void>(Api.root, data);
}
/**
 * åˆ é™¤ç‚¹æ£€æ±‡æ€»
 * @param inspectStId
 */
export function delInspectSt(inspectStId: IDS) {
  return requestClient.deleteWithMsg<void>(`${Api.root}/${inspectStId}`);
}
/**
 * å¯¼å‡º
 * @param
 */
export function inspectStExport(data: any) {
  return commonExport(Api.inspectStExport, data);
}
eims-ui/apps/web-antd/src/api/eims/insp-st/model.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
export interface InspectStVO {
  /**
   *
   */
  id: number | string;
  /**
   *
   */
  title: string;
  /**
   *
   */
  equId: number | string;
  status: string;
  /**
   *
   */
  planTime: string;
  /**
   * ä¿å…»äºº
   */
  maintUser: number;
  /**
   * éªŒè¯äºº
   */
  verifyUser: number;
  verifyTime: string;
  /**
   * ç‰¹è®°äº‹é¡¹
   */
  specialNote: string;
  /**
   * å¤‡æ³¨
   */
  remark: string;
}
eims-ui/apps/web-antd/src/api/eims/maint-order-st/index.ts
ÎļþÒÑɾ³ý
eims-ui/apps/web-antd/src/api/eims/maint-order-st/model.d.ts
ÎļþÒÑɾ³ý
eims-ui/apps/web-antd/src/api/eims/maint-order/model.d.ts
@@ -15,6 +15,11 @@
  maintType: string;
  /**
   * å·¥ä½œæè¿°
   */
  maintDesc: string;
  /**
   * è®¡åˆ’表冗余-保养周期
   */
  maintCycle: number;
eims-ui/apps/web-antd/src/api/eims/maint-st/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
import type { MaintStVO } from './model';
import type { ID, IDS } from '#/api/common';
import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';
enum Api {
  maintStExport = '/eims/maintSt/export',
  maintStList = '/eims/maintSt/list',
  root = '/eims/maintSt'
}
/**
 * æŸ¥è¯¢ä¿å…»æ±‡æ€»åˆ—表
 * @param query
 * @returns {*}
 */
export function listMaintSt(params?: any) {
  return requestClient.get<MaintStVO[]>(Api.maintStList, { params });
}
/**
 * æŸ¥è¯¢ä¿å…»æ±‡æ€»è¯¦ç»†
 * @param maintStId
 */
export function getMaintSt(maintStId: ID) {
  return requestClient.get<MaintStVO>(`${Api.root}/${maintStId}`);
}
/**
 * æ–°å¢žä¿å…»æ±‡æ€»
 * @param data
 */
export function addMaintSt(data: any) {
  return requestClient.postWithMsg<void>(Api.root, data);
}
/**
 * ä¿®æ”¹ä¿å…»æ±‡æ€»
 * @param data
 */
export function updateMaintSt(data: any) {
  return requestClient.putWithMsg<void>(Api.root, data);
}
/**
 * åˆ é™¤ä¿å…»æ±‡æ€»
 * @param maintStId
 */
export function delMaintSt(maintStId: IDS) {
  return requestClient.deleteWithMsg<void>(`${Api.root}/${maintStId}`);
}
/**
 * å¯¼å‡º
 * @param
 */
export function maintStExport(data: any) {
  return commonExport(Api.maintStExport, data);
}
eims-ui/apps/web-antd/src/api/eims/maint-st/model.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
export interface MaintStVO {
  /**
   *
   */
  id: number | string;
  /**
   *
   */
  title: string;
  /**
   *
   */
  equId: number | string;
  status: string;
  /**
   *
   */
  planTime: string;
  /**
   * ä¿å…»äºº
   */
  maintUser: number;
  /**
   * éªŒè¯äºº
   */
  verifyUser: number;
  verifyTime: string;
  /**
   * ç‰¹è®°äº‹é¡¹
   */
  specialNote: string;
  /**
   * å¤‡æ³¨
   */
  remark: string;
}
eims-ui/apps/web-antd/src/constants/dict/index.ts
@@ -49,3 +49,15 @@
  DAIYANZHENG = '2', // å¾…验证
  WANCHENG = '3' // å®Œæˆ
}
/**
 * ä¿å…»å·¥å•状态
 */
export enum EIMS_INSPECT_STATUS {
  YIDIANJIAN = '1', // å·²ç‚¹æ£€
  WEIDIANJIAN = '0', // æœªç‚¹æ£€
  DAIYANZHENG = '2', // å¾…验证
  WANCHENG = '3' // å®Œæˆ
}
eims-ui/apps/web-antd/src/views/eims/insp-plan/data.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,290 @@
import type { VxeGridProps } from '#/adapter/vxe-table';
import { DictEnum } from '@vben/constants';
import { getPopupContainer } from '@vben/utils';
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: 'Input',
    fieldName: 'assetNo',
    label: '资产编号'
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.EIMS_INSPECT_TYPE)
    },
    fieldName: 'inspType',
    label: '点检类型'
  },
  {
    component: 'TreeSelect',
    // åœ¨drawer里更新 è¿™é‡Œä¸éœ€è¦é»˜è®¤çš„componentProps
    defaultValue: undefined,
    fieldName: 'inspDept',
    label: '点检部门',
  },
  {
    component: 'Select',
    componentProps: {
      allowClear: true,
      showSearch: true,
      getPopupContainer
    },
    fieldName: 'inspUser',
    label: '点检人',
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.SYS_NORMAL_DISABLE)
    },
    fieldName: 'status',
    label: '状态'
  },
];
export const columns: VxeGridProps['columns'] = [
  { type: 'checkbox', width: 60, fixed: 'left' },
  {
    title: '设备名称',
    field: 'equName',
    minWidth: 200,
    fixed: 'left'
  },
  {
    title: '资产编号',
    field: 'assetNo',
    minWidth: 160
  },
  {
    title: '状态',
    field: 'status',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return renderDict(row.status, DictEnum.SYS_NORMAL_DISABLE);
      }
    }
  },
  {
    title: '点检项',
    field: 'inspName',
    minWidth: 200
  },
  {
    title: '点检类型',
    field: 'inspType',
    minWidth: 120,
    slots: {
      default: ({ row }) => {
        return renderDict(row.inspType, DictEnum.EIMS_INSPECT_TYPE);
      }
    }
  },
  {
    title: '点检人',
    field: 'inspUserName',
    minWidth: 100
  },
  {
    title: '循环周期',
    field: 'inspCycleUnitName',
    minWidth: 80
  },
  {
    title: '时间计算规则',
    field: 'inspRule',
    minWidth: 140,
    slots: {
      default: ({ row }) => {
        return renderDict(row.inspRule, DictEnum.MAINT_TIME_RULE);
      }
    }
  },
  {
    title: '首次执行时间',
    field: 'inspFirstTime',
    minWidth: 160
  },
  {
    title: '上次执行时间',
    field: 'inspLastTime',
    minWidth: 160
  },
  {
    title: '下次执行时间',
    field: 'inspNextTime',
    minWidth: 160
  },
  {
    title: '创建时间',
    field: 'createTime',
    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',
    fieldName: 'equId',
    label: '设备id',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    }
  },
  {
    component: 'Input',
    fieldName: 'equName',
    label: '设备名称'
  },
  {
    component: 'Input',
    fieldName: 'inspName',
    label: '点检项'
  },
  {
    component: 'RadioGroup',
    componentProps: {
      buttonStyle: 'solid',
      options: getDictOptions(DictEnum.EIMS_INSPECT_TYPE),
      optionType: 'button'
    },
    fieldName: 'inspType',
    defaultValue: '1',
    label: '点检类型'
  },
  {
    component: 'Input',
    fieldName: 'inspDesc',
    label: '点检说明'
  },
  {
    component: 'InputNumber',
    fieldName: 'inspCycle',
    label: '点检周期',
    formItemClass: 'col-span-1',
    componentProps: {
      min: 1
    }
  },
  {
    component: 'Select',
    componentProps: {
      getPopupContainer,
      options: getDictOptions(DictEnum.MAINT_CYCLE_UNIT)
    },
    fieldName: 'inspCycleUnit',
    formItemClass: 'col-span-1 w-[80px]',
    labelWidth: 0,
    label: ''
  },
  {
    component: 'Select',
    componentProps: {
      getPopupContainer,
      options: getDictOptions(DictEnum.MAINT_TIME_RULE)
    },
    fieldName: 'inspRule',
    label: '点检规则 '
  },
  {
    component: 'Input',
    fieldName: 'inspUser',
    label: '用户id',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    }
  },
  {
    component: 'Input',
    fieldName: 'inspUserName',
    label: '点检人'
  },
  {
    component: 'Input',
    fieldName: 'inspDept',
    label: '部门id',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    }
  },
  {
    component: 'RadioGroup',
    componentProps: {
      buttonStyle: 'solid',
      options: getDictOptions(DictEnum.SYS_NORMAL_DISABLE),
      optionType: 'button'
    },
    fieldName: 'status',
    defaultValue: '0',
    label: '状态'
  },
  {
    component: 'DatePicker',
    componentProps: {
      format: 'YYYY-MM-DD',
      showTime: false,
      valueFormat: 'YYYY-MM-DD',
      getPopupContainer
    },
    fieldName: 'inspFirstTime',
    label: '首次保养时间'
  },
  {
    component: 'DatePicker',
    componentProps: {
      format: 'YYYY-MM-DD',
      showTime: false,
      valueFormat: 'YYYY-MM-DD',
      getPopupContainer
    },
    fieldName: 'inspLastTime',
    label: '上次保养时间'
  },
  {
    component: 'DatePicker',
    componentProps: {
      format: 'YYYY-MM-DD',
      showTime: false,
      valueFormat: 'YYYY-MM-DD',
      getPopupContainer
    },
    fieldName: 'inspNextTime',
    label: '下次保养时间',
  },
  {
    component: 'Textarea',
    fieldName: 'remark',
    label: '备注'
  }
];
eims-ui/apps/web-antd/src/views/eims/insp-plan/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,302 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { onMounted, ref } from 'vue';
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils';
import { Dropdown, Menu, MenuItem, Modal, Popconfirm, Space } from 'ant-design-vue';
import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { delInspPlan, inspPlanExport, listInspPlan } from '#/api/eims/insp-plan';
import { generateCode } from '#/api/eims/utils';
import { getDeptTree, userList } from '#/api/system/user';
import { EIMS_INSPECT_STATUS } from '#/constants/dict';
import { commonDownloadExcel } from '#/utils/file/download';
import inspRecordDrawer from '#/views/eims/insp-record/insp-record-drawer.vue';
import { columns, querySchema } from './data';
import inspPlanDrawer from './insp-plan-drawer.vue';
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 listInspPlan({
          pageNum: page.currentPage,
          pageSize: page.pageSize,
          ...formValues
        });
      }
    }
  },
  rowConfig: {
    isHover: true,
    keyField: 'id'
  },
  sortConfig: {
    // è¿œç¨‹æŽ’序
    remote: true,
    // æ”¯æŒå¤šå­—段排序 é»˜è®¤å…³é—­
    multiple: true
  },
  id: 'insp-plan-index'
};
const equId = ref<string>();
const [BasicTable, tableApi] = useVbenVxeGrid({
  formOptions,
  gridOptions,
  gridEvents: {
    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
    cellClick: (e: any) => {
      const { row } = e;
      equId.value = row.equId;
    }
  }
});
const [InspPlanDrawer, inspPlanDrawerApi] = useVbenDrawer({
  connectedComponent: inspPlanDrawer
});
const [InspRecordDrawer, inspRecordDrawerApi] = useVbenDrawer({
  connectedComponent: inspRecordDrawer
});
function handleAdd() {
  inspPlanDrawerApi.setData({});
  inspPlanDrawerApi.open();
}
async function handleEdit(record: Recordable<any>) {
  inspPlanDrawerApi.setData({ id: record.id });
  inspPlanDrawerApi.open();
}
async function handleDelete(row: Recordable<any>) {
  await delInspPlan(row.id);
  await tableApi.query();
}
function handleMultiDelete() {
  const rows = tableApi.grid.getCheckboxRecords();
  const ids = rows.map((row: any) => row.id);
  Modal.confirm({
    title: '提示',
    okType: 'danger',
    content: `确认删除选中的${ids.length}条记录吗?`,
    onOk: async () => {
      await delInspPlan(ids);
      await tableApi.query();
    }
  });
}
function handleDownloadExcel() {
  commonDownloadExcel(inspPlanExport, '点检计划记录', tableApi.formApi.form.values, {
    fieldMappingTime: formOptions.fieldMappingTime
  });
}
/**
 * ç”Ÿæˆç‚¹æ£€è®°å½•
 * @param record
 */
async function handleAddOrder(record: Recordable<any>) {
  /**
   * ç”Ÿæˆç‚¹æ£€è®°å½•code
   */
  const code = await generateCode('DJSD');
  if (!code) {
    Modal.error({
      content: '生成点检记录失败,请重试!',
      title: '提示'
    });
    return false;
  }
  const planInsp = {
    equId: record.equId,
    planId: record.id,
    equName: record.equName,
    inspUser: record.inspUser,
    inspUserName: record.inspUserName,
    inspDept: record.inspDept,
    inspDeptName: record.inspDeptName,
    inspType: record.inspType,
    planTime: record.inspNextTime,
    status: EIMS_INSPECT_STATUS.WEIDIANJIAN,
    inspCode: code,
    inspName: record.inspName
  };
  inspRecordDrawerApi.setData({ planInsp });
  inspRecordDrawerApi.open();
  // await addMaintOrder(order.value);
}
/**
 * åˆå§‹åŒ–部门选择
 */
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.inspUser = undefined;
        },
        placeholder: '请选择',
        showSearch: true,
        treeData: deptTree,
        treeDefaultExpandAll: true,
        treeLine: { showLeafIcon: false },
        // ç­›é€‰çš„字段
        treeNodeFilterProp: 'label',
        // é€‰ä¸­åŽæ˜¾ç¤ºåœ¨è¾“入框的值
        treeNodeLabelProp: 'fullName'
      }),
      fieldName: 'inspDept'
    }
  ]);
}
/**
 * ç”¨æˆ·çš„加载
 */
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: 'inspUser'
    }
  ]);
}
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 table-title="点检计划列表">
        <template #toolbar-tools>
          <Space>
            <a-button v-access:code="['eims:inspectPlan:export']" @click="handleDownloadExcel">
              {{ $t('pages.common.export') }}
            </a-button>
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:inspectPlan:remove']"
              @click="handleMultiDelete"
            >
              {{ $t('pages.common.delete') }}
            </a-button>
            <a-button type="primary" v-access:code="['eims:inspectPlan: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 class="btn-success" v-access:code="['eims:inspectPlan:edit']" @click.stop="handleAddOrder(row)"> ç”Ÿæˆç‚¹æ£€ </ghost-button>
            <ghost-button v-access:code="['eims:inspectPlan:edit']" @click.stop="handleEdit(row)">
              {{ $t('pages.common.edit') }}
            </ghost-button>
          </Space>
          <Dropdown :get-popup-container="getVxePopupContainer" placement="bottomRight">
            <template #overlay>
              <Menu>
                <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
                  <MenuItem key="1" @click.stop="">
                    {{ $t('pages.common.delete') }}
                  </MenuItem>
                </Popconfirm>
              </Menu>
            </template>
            <a-button size="small" type="link" v-access:code="['eims:inspectPlan:remove']">
              {{ $t('pages.common.more') }}
            </a-button>
          </Dropdown>
        </template>
      </BasicTable>
    </div>
    <InspPlanDrawer @reload="tableApi.query()" />
    <InspRecordDrawer @reload="tableApi.query()" />
  </Page>
</template>
eims-ui/apps/web-antd/src/views/eims/insp-plan/insp-plan-drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,152 @@
<script setup lang="ts">
import { computed, ref } from 'vue';
import { useVbenDrawer, useVbenModal } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils';
import { InputSearch } from 'ant-design-vue';
import { useVbenForm } from '#/adapter/form';
import { addInspPlan, getInspPlan, updateInspPlan } from '#/api/eims/insp-plan';
import equModal from '#/views/eims/components/equ-modal.vue';
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 ? $t('pages.common.edit') : $t('pages.common.add');
});
const [BasicForm, formApi] = useVbenForm({
  commonConfig: {
    formItemClass: 'col-span-2',
    componentProps: {
      class: 'w-full'
    },
    labelWidth: 120
  },
  layout: 'horizontal',
  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;
    formApi.updateSchema([
      {
        dependencies: {
          show: () => isUpdate.value,
          triggerFields: ['']
        },
        fieldName: 'inspFirstTime'
      },
      {
        dependencies: {
          show: () => isUpdate.value,
          triggerFields: ['']
        },
        fieldName: 'inspLastTime'
      }
    ]);
    // æ›´æ–° && èµ‹å€¼
    if (isUpdate.value && id) {
      const record = await getInspPlan(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 ? updateInspPlan(data) : addInspPlan(data));
    emit('reload');
    await handleCancel();
  } catch (error) {
    console.error(error);
  } finally {
    drawerApi.drawerLoading(false);
  }
}
async function handleCancel() {
  drawerApi.close();
  await formApi.resetForm();
}
// equ modal
const [EquModal, equModalApi] = useVbenModal({
  connectedComponent: equModal,
  draggable: true,
  title: '选择设备'
});
function handleEquModal() {
  equModalApi.setData({});
  equModalApi.open();
}
// user modal
const [UserModal, userModalApi] = useVbenModal({
  connectedComponent: userModal,
  draggable: true,
  title: '选择点检人'
});
function handleUserModal() {
  userModalApi.setData({});
  userModalApi.open();
}
/**
 * æ›´æ–°é€‰æ‹©çš„设备
 * @param equ
 */
async function updateEqu(equ: any) {
  await formApi.setValues({ 'equId': equ.equId, 'equName': equ.equName });
}
/**
 * æ›´æ–°é€‰æ‹©çš„用户
 * @param user
 */
async function updateUser(user: any) {
  await formApi.setValues({ 'inspUserName': user.nickName, 'inspUser': user.userId, 'inspDept': user.deptId });
}
</script>
<template>
  <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
    <BasicForm>
      <template #equName="slotProps">
        <InputSearch :enter-button="true" placeholder="请选择" @search="handleEquModal" v-bind="slotProps" />
      </template>
      <template #inspUserName="slotProps">
        <InputSearch :enter-button="true" placeholder="请选择" @search="handleUserModal" v-bind="slotProps" />
      </template>
    </BasicForm>
    <EquModal class="w-[1200px]" @update-equ="updateEqu" />
    <UserModal class="w-[1200px]" @select-user="updateUser" />
  </BasicDrawer>
</template>
eims-ui/apps/web-antd/src/views/eims/insp-record/data.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,298 @@
import type { VxeGridProps } from '#/adapter/vxe-table';
import { DictEnum } from '@vben/constants';
import { getPopupContainer } from '@vben/utils';
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: 'Input',
    fieldName: 'assetNo',
    label: '资产编号'
  },
  {
    component: 'Input',
    fieldName: 'inspName',
    label: '点检项'
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.EIMS_INSPECT_STATUS)
    },
    fieldName: 'status',
    label: '状态'
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.EIMS_INSPECT_RESULT)
    },
    fieldName: 'maintType',
    label: '点检结果'
  },
  {
    component: 'TreeSelect',
    // åœ¨drawer里更新 è¿™é‡Œä¸éœ€è¦é»˜è®¤çš„componentProps
    defaultValue: undefined,
    fieldName: 'inspDept',
    label: '点检部门'
  },
  {
    component: 'Select',
    componentProps: {
      allowClear: true,
      showSearch: true,
      getPopupContainer
    },
    fieldName: 'inspUser',
    label: '点检人'
  }
];
export const columns: VxeGridProps['columns'] = [
  { type: 'checkbox', width: 60, fixed: 'left' },
  {
    title: '点检编号',
    field: 'inspCode',
    minWidth: 200,
    fixed: 'left'
  },
  {
    title: '状态',
    field: 'status',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return renderDict(row.status, DictEnum.EIMS_INSPECT_STATUS);
      }
    }
  },
  {
    title: '设备名称',
    field: 'equName',
    minWidth: 200
  },
  {
    title: '资产编号',
    field: 'assetNo',
    minWidth: 160
  },
  {
    title: '点检项',
    field: 'inspName',
    minWidth: 160
  },
  {
    title: '点检结果',
    field: 'inspResult',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        if (!row.inspResult) return '';
        return renderDict(row.inspResult, DictEnum.EIMS_INSPECT_RESULT);
      }
    }
  },
  {
    title: '点检类型',
    field: 'inspType',
    minWidth: 120,
    slots: {
      default: ({ row }) => {
        return renderDict(row.inspType, DictEnum.EIMS_INSPECT_TYPE);
      }
    }
  },
  {
    title: '点检人',
    field: 'inspUserName',
    minWidth: 100
  },
  {
    title: '计划点检时间',
    field: 'planTime',
    minWidth: 160
  },
  {
    title: '点检时间',
    field: 'inspTime',
    minWidth: 200
  },
  {
    title: '点检描述',
    field: 'inspDesc',
    minWidth: 200
  },
  {
    title: '验证人',
    field: 'verifyUserName',
    minWidth: 160
  },
  {
    title: '创建时间',
    field: 'createTime',
    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: 'planId'
  },
  {
    component: 'Input',
    fieldName: 'equId',
    label: '设备id',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    }
  },
  {
    component: 'Input',
    fieldName: 'inspCode',
    label: '点检编号'
  },
  {
    component: 'Input',
    fieldName: 'inspName',
    label: '点检项'
  },
  {
    component: 'Input',
    fieldName: 'equName',
    label: '设备名称'
  },
  {
    component: 'RadioGroup',
    componentProps: {
      buttonStyle: 'solid',
      options: getDictOptions(DictEnum.EIMS_INSPECT_TYPE),
      optionType: 'button'
    },
    fieldName: 'inspType',
    defaultValue: '1',
    label: '点检类型'
  },
  {
    component: 'Input',
    fieldName: 'inspUser',
    label: '点检人id',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    }
  },
  {
    component: 'Input',
    fieldName: 'inspUserName',
    label: '点检人'
  },
  {
    component: 'Input',
    fieldName: 'inspDept',
    label: '部门id',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    }
  },
  {
    component: 'RadioGroup',
    componentProps: {
      buttonStyle: 'solid',
      options: getDictOptions(DictEnum.EIMS_INSPECT_STATUS),
      optionType: 'button'
    },
    fieldName: 'status',
    defaultValue: '0',
    label: '状态'
  },
  {
    component: 'DatePicker',
    componentProps: {
      format: 'YYYY-MM-DD',
      showTime: false,
      valueFormat: 'YYYY-MM-DD',
      getPopupContainer
    },
    fieldName: 'planTime',
    label: '计划点检日期'
  },
  {
    component: 'DatePicker',
    componentProps: {
      format: 'YYYY-MM-DD HH:mm:ss',
      showTime: true,
      valueFormat: 'YYYY-MM-DD HH:mm:ss',
      getPopupContainer
    },
    fieldName: 'inspTime',
    label: '点检时间'
  },
  {
    component: 'Textarea',
    fieldName: 'inspDesc',
    label: '点检描述'
  },
  {
    component: 'RadioGroup',
    componentProps: {
      buttonStyle: 'solid',
      options: getDictOptions(DictEnum.EIMS_INSPECT_RESULT),
      optionType: 'button'
    },
    fieldName: 'inspResult',
    label: '点检结果'
  },
  {
    component: 'Input',
    fieldName: 'verifyUser',
    label: '验证人id',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    }
  },
  {
    component: 'Input',
    fieldName: 'verifyUserName',
    label: '验证人'
  },
  {
    component: 'Textarea',
    fieldName: 'remark',
    label: '备注'
  }
];
eims-ui/apps/web-antd/src/views/eims/insp-record/index.vue
copy from eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue copy to eims-ui/apps/web-antd/src/views/eims/insp-record/index.vue
Îļþ´Ó eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue ¸´ÖÆ
@@ -1,23 +1,21 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { onMounted, ref } from 'vue';
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils';
import { Popconfirm, Space } from 'ant-design-vue';
import { Modal, 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 { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { delInspRecord, inspRecordExport, listInspRecord } from '#/api/eims/insp-record';
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 { commonDownloadExcel } from '#/utils/file/download';
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';
import inspRecordDrawer from './insp-record-drawer.vue';
defineExpose({
  tableSelect
@@ -32,9 +30,7 @@
  },
  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']]]
  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'
};
const gridOptions: VxeGridProps = {
@@ -53,7 +49,7 @@
  proxyConfig: {
    ajax: {
      query: async ({ page }, formValues = {}) => {
        return await listMaintOrderSt({
        return await listInspRecord({
          pageNum: page.currentPage,
          pageSize: page.pageSize,
          ...formValues
@@ -71,7 +67,7 @@
    // æ”¯æŒå¤šå­—段排序 é»˜è®¤å…³é—­
    multiple: true
  },
  id: 'maint-order-group-index'
  id: 'insp-record-index'
};
const orderId = ref<string>();
const [BasicTable, tableApi] = useVbenVxeGrid({
@@ -81,10 +77,49 @@
    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
    cellClick: (e: any) => {
      const { row } = e;
      orderId.value = `${row.equId}_${row.planTime}`;
      orderId.value = row.id;
    }
  }
});
const [InspRecordDrawer, inspRecordDrawerApi] = useVbenDrawer({
  connectedComponent: inspRecordDrawer
});
function handleAdd() {
  inspRecordDrawerApi.setData({});
  inspRecordDrawerApi.open();
}
async function handleEdit(record: Recordable<any>) {
  inspRecordDrawerApi.setData({ id: record.id });
  inspRecordDrawerApi.open();
}
async function handleDelete(row: Recordable<any>) {
  await delInspRecord(row.id);
  await tableApi.query();
}
function handleMultiDelete() {
  const rows = tableApi.grid.getCheckboxRecords();
  const ids = rows.map((row: any) => row.id);
  Modal.confirm({
    title: '提示',
    okType: 'danger',
    content: `确认删除选中的${ids.length}条记录吗?`,
    onOk: async () => {
      await delInspRecord(ids);
      await tableApi.query();
    }
  });
}
function handleDownloadExcel() {
  commonDownloadExcel(inspRecordExport, '点检记录', tableApi.formApi.form.values, {
    fieldMappingTime: formOptions.fieldMappingTime
  });
}
/**
 * åˆå§‹åŒ–部门选择
@@ -108,7 +143,7 @@
          /** æ ¹æ®éƒ¨é—¨ID加载用户 */
          await setupUserOptions(deptId);
          /** å˜åŒ–后需要重新选择用户 */
          formModel.maintUser = undefined;
          formModel.inspUser = undefined;
        },
        placeholder: '请选择',
        showSearch: true,
@@ -120,7 +155,7 @@
        // é€‰ä¸­åŽæ˜¾ç¤ºåœ¨è¾“入框的值
        treeNodeLabelProp: 'fullName'
      }),
      fieldName: 'maintDept'
      fieldName: 'inspDept'
    }
  ]);
}
@@ -148,28 +183,10 @@
  tableApi.formApi.updateSchema([
    {
      componentProps: { options, placeholder, filterOption },
      fieldName: 'maintUser'
      fieldName: 'inspUser'
    }
  ]);
}
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();
@@ -184,9 +201,25 @@
<template>
  <Page :auto-content-height="true">
    <div class="flex h-full gap-[8px] flex-col">
      <BasicTable class="h-3/5" table-title="保养工单列表">
      <BasicTable table-title="点检记录列表">
        <template #toolbar-tools>
          <Space />
          <Space>
            <a-button v-access:code="['eims:inspectRecord:export']" @click="handleDownloadExcel">
              {{ $t('pages.common.export') }}
            </a-button>
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:inspectRecord:remove']"
              @click="handleMultiDelete"
            >
              {{ $t('pages.common.delete') }}
            </a-button>
            <!--            <a-button type="primary" v-access:code="['eims:inspectRecord:add']" @click="handleAdd">
              {{ $t('pages.common.add') }}
            </a-button>-->
          </Space>
        </template>
        <template #equName="{ row }">
@@ -194,30 +227,22 @@
            <span>{{ row.equName }}</span>
          </Space>
        </template>
        <template #action="{ row }">
          <Space>
            <ghost-button v-access:code="['eims:maintOrderSt:edit']" @click.stop="handleEdit(row)">
            <ghost-button v-access:code="['eims:inspectRecord: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="">
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
              <ghost-button danger v-access:code="['eims:inspectRecord: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="保养实施项目"
      />
      <!--<BasisSubTable :columns="maintStandCol" :list-api="listMaintStand" :req-value="equId" class="h-1/3" req-key="equId" title="保养实施项目" />-->
    </div>
    <MaintOrderStDrawer @reload="tableApi.query()" />
    <InspRecordDrawer @reload="tableApi.query()" />
  </Page>
</template>
eims-ui/apps/web-antd/src/views/eims/insp-record/insp-record-drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,167 @@
<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 { addInspRecord, getInspRecord, updateInspRecord } from '#/api/eims/insp-record';
import CodeInput from '#/views/eims/components/code-input.vue';
import equModal from '#/views/eims/components/equ-modal.vue';
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;
    // ä»Žç‚¹æ£€è®¡åˆ’页面生成点检记录
    const { planInsp } = drawerApi.getData();
    isUpdate.value = !!id;
    // æ–°å¢ž-从点检计划页面生成点检记录
    if (!isUpdate.value && !id) {
      await formApi.setValues(planInsp);
    }
    formApi.updateSchema([
      {
        componentProps: {
          disabled: isUpdate.value
        },
        fieldName: 'inspName'
      }
    ]);
    // æ›´æ–° && èµ‹å€¼
    if (isUpdate.value && id) {
      const record = await getInspRecord(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 ? updateInspRecord(data) : addInspRecord(data));
    emit('reload');
    await handleCancel();
  } catch (error) {
    console.error(error);
  } finally {
    drawerApi.drawerLoading(false);
  }
}
async function handleCancel() {
  drawerApi.close();
  await formApi.resetForm();
}
// equ modal
const [EquModal, equModalApi] = useVbenModal({
  connectedComponent: equModal,
  draggable: true,
  title: '选择设备'
});
function handleEquModal() {
  equModalApi.setData({});
  equModalApi.open();
}
// user modal
const [UserModal, userModalApi] = useVbenModal({
  connectedComponent: userModal,
  draggable: true,
  title: '选择点检人'
});
const userType = ref<number | undefined>(undefined);
function handleUserModal(type: number) {
  userType.value = type;
  userModalApi.setData({});
  userModalApi.open();
}
/**
 * æ›´æ–°é€‰æ‹©çš„设备
 * @param equ
 */
async function updateEqu(equ: any) {
  await formApi.setValues({equId:equ.equId,equName:equ.equName});
}
/**
 * æ›´æ–°é€‰æ‹©çš„用户
 * @param user
 */
async function updateUser(user: any) {
  if (userType.value === 1) {
    await formApi.setValues({ 'inspUserName': user.nickName, 'inspUser': user.userId, 'inspDept': user.deptId });
  } else if (userType.value === 2) {
    await formApi.setValues({ 'verifyUserName': user.nickName, 'verifyUser': user.userId, 'verifyDept': user.deptId });
  }
}
</script>
<template>
  <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
    <BasicForm>
      <template #equName="slotProps">
        <InputSearch :enter-button="true" placeholder="请选择" @search="handleEquModal" v-bind="slotProps"
                     :disabled="isUpdate" />
      </template>
      <template #inspUserName="slotProps">
        <InputSearch :enter-button="true" placeholder="请选择" @search="handleUserModal(1)" v-bind="slotProps" />
      </template>
      <template #verifyUserName="slotProps">
        <InputSearch :enter-button="true" placeholder="请选择" @search="handleUserModal(2)" v-bind="slotProps" />
      </template>
      <template #inspCode="slotProps">
        <CodeInput v-bind="slotProps" :disabled="isUpdate" prefix="DJSD" />
      </template>
    </BasicForm>
    <EquModal class="w-[1200px]" @update-equ="updateEqu" />
    <UserModal class="w-[1200px]" @select-user="updateUser" />
  </BasicDrawer>
</template>
eims-ui/apps/web-antd/src/views/eims/insp-st/data.tsx
copy from eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx copy to eims-ui/apps/web-antd/src/views/eims/insp-st/data.tsx
Îļþ´Ó eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx ¸´ÖÆ
@@ -12,8 +12,13 @@
export const querySchema: FormSchemaGetter = () => [
  {
    component: 'Input',
    fieldName: 'equName',
    label: '设备名称'
    fieldName: 'title',
    label: '标题'
  },
  {
    component: 'Input',
    fieldName: 'assetNo',
    label: '资产编号'
  },
  {
    component: 'RangePicker',
@@ -23,7 +28,7 @@
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.MAINT_ORDER_ST_STATUS)
      options: getDictOptions(DictEnum.EIMS_INSPECT_STATUS)
    },
    fieldName: 'status',
    label: '状态'
@@ -33,15 +38,15 @@
export const columns: VxeGridProps['columns'] = [
  { type: 'checkbox', width: 60, fixed: 'left' },
  {
    title: '设备名称',
    field: 'equName',
    title: '标题',
    field: 'title',
    minWidth: 200,
    fixed: 'left'
  },
  {
    title: '计划保养日期',
    title: '保养年月',
    field: 'planTime',
    minWidth: 200
    minWidth: 120
  },
  {
    title: '状态',
@@ -49,7 +54,7 @@
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return renderDict(row.status, DictEnum.MAINT_ORDER_ST_STATUS);
        return renderDict(row.status, DictEnum.EIMS_INSPECT_STATUS);
      }
    }
  },
@@ -59,47 +64,47 @@
    minWidth: 160
  },
  {
    title: '工单总数',
    field: 'orderCount',
    title: '点检总数',
    field: 'recordCount',
    minWidth: 100
  },
  {
    title: '待保养',
    field: 'dbyCount',
    title: '未点检',
    field: 'unCheckCount',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return <Tag color="orange">{row.dbyCount}</Tag>;
        return <Tag color="orange">{row.unCheckCount}</Tag>;
      }
    }
  },
  {
    title: '保养中',
    field: 'byCount',
    title: '已点检',
    field: 'checkCount',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return <Tag color="blue">{row.byCount}</Tag>;
        return <Tag color="blue">{row.checkCount}</Tag>;
      }
    }
  },
  {
    title: '待验证',
    field: 'dyzCount',
    title: '正常',
    field: 'normalNum',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return <Tag color="purple">{row.dyzCount}</Tag>;
        return <Tag color="success">{row.normalNum}</Tag>;
      }
    }
  },
  {
    title: '完成',
    field: 'wcCount',
    title: '异常',
    field: 'abNormalNum',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return <Tag color="success">{row.wcCount}</Tag>;
        return <Tag color="red">{row.abNormalNum}</Tag>;
      }
    }
  },
@@ -114,8 +119,8 @@
    minWidth: 160
  },
  {
    title: '稽查时间',
    field: 'verifyTime',
    title: '点检时间',
    field: 'inspTime',
    minWidth: 200
  },
  {
@@ -157,7 +162,7 @@
      getPopupContainer
    },
    fieldName: 'planTime',
    label: '计划保养日期'
    label: '计划点检日期'
  },
  {
    component: 'Input',
eims-ui/apps/web-antd/src/views/eims/insp-st/index.vue
copy from eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue copy to eims-ui/apps/web-antd/src/views/eims/insp-st/index.vue
Îļþ´Ó eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue ¸´ÖÆ
@@ -4,19 +4,18 @@
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils';
import { Popconfirm, Space } from 'ant-design-vue';
import { Modal, 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 { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { delMaintOrder, listMaintOrderGroupDetail } from '#/api/eims/maint-order';
import { delInspectSt, listInspectSt } from '#/api/eims/insp-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 as recordCol } from '#/views/eims/insp-record/data';
import { columns, querySchema } from './data';
import maintOrderStDrawer from './maint-order-st-drawer.vue';
import inspStDrawer from './insp-st-drawer.vue';
import type { Recordable } from '@vben/types';
import { MAINT_ORDER_STATUS } from '#/constants/dict';
import { $t } from '@vben/locales';
defineExpose({
@@ -53,7 +52,7 @@
  proxyConfig: {
    ajax: {
      query: async ({ page }, formValues = {}) => {
        return await listMaintOrderSt({
        return await listInspectSt({
          pageNum: page.currentPage,
          pageSize: page.pageSize,
          ...formValues
@@ -71,9 +70,9 @@
    // æ”¯æŒå¤šå­—段排序 é»˜è®¤å…³é—­
    multiple: true
  },
  id: 'maint-order-group-index'
  id: 'insp-st-index'
};
const orderId = ref<string>();
const recordId = ref<string>();
const [BasicTable, tableApi] = useVbenVxeGrid({
  formOptions,
  gridOptions,
@@ -81,7 +80,7 @@
    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
    cellClick: (e: any) => {
      const { row } = e;
      orderId.value = `${row.equId}_${row.planTime}`;
      recordId.value = `${row.equId}_${row.planTime}`;
    }
  }
});
@@ -108,7 +107,7 @@
          /** æ ¹æ®éƒ¨é—¨ID加载用户 */
          await setupUserOptions(deptId);
          /** å˜åŒ–后需要重新选择用户 */
          formModel.maintUser = undefined;
          formModel.inspUser = undefined;
        },
        placeholder: '请选择',
        showSearch: true,
@@ -120,7 +119,7 @@
        // é€‰ä¸­åŽæ˜¾ç¤ºåœ¨è¾“入框的值
        treeNodeLabelProp: 'fullName'
      }),
      fieldName: 'maintDept'
      fieldName: 'inspDept'
    }
  ]);
}
@@ -148,28 +147,37 @@
  tableApi.formApi.updateSchema([
    {
      componentProps: { options, placeholder, filterOption },
      fieldName: 'maintUser'
      fieldName: 'inspUser'
    }
  ]);
}
const [MaintOrderStDrawer, maintOrderStDrawerApi] = useVbenDrawer({
  connectedComponent: maintOrderStDrawer
const [InspStDrawer, inspStDrawerApi] = useVbenDrawer({
  connectedComponent: inspStDrawer
});
function handleAdd() {
  maintOrderStDrawerApi.setData({});
  maintOrderStDrawerApi.open();
}
async function handleEdit(record: Recordable<any>) {
  maintOrderStDrawerApi.setData({ id: record.id });
  maintOrderStDrawerApi.open();
  inspStDrawerApi.setData({ id: record.id });
  inspStDrawerApi.open();
}
async function handleDelete(row: Recordable<any>) {
  await delMaintOrderSt(row.id);
  await delInspectSt(row.id);
  await tableApi.query();
}
function handleMultiDelete() {
  const rows = tableApi.grid.getCheckboxRecords();
  const ids = rows.map((row: any) => row.id);
  Modal.confirm({
    title: '提示',
    okType: 'danger',
    content: `确认删除选中的${ids.length}条记录吗?`,
    onOk: async () => {
      await delInspectSt(ids);
      await tableApi.query();
    }
  });
}
onMounted(async () => {
  await setupDeptSelect();
@@ -184,9 +192,19 @@
<template>
  <Page :auto-content-height="true">
    <div class="flex h-full gap-[8px] flex-col">
      <BasicTable class="h-3/5" table-title="保养工单列表">
      <BasicTable class="h-2/3" table-title="点检记录列表">
        <template #toolbar-tools>
          <Space />
          <Space >
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:inspectSt:remove']"
              @click="handleMultiDelete"
            >
              {{ $t('pages.common.delete') }}
            </a-button>
          </Space>
        </template>
        <template #equName="{ row }">
@@ -196,12 +214,12 @@
        </template>
        <template #action="{ row }">
          <Space>
            <ghost-button v-access:code="['eims:maintOrderSt:edit']" @click.stop="handleEdit(row)">
            <ghost-button v-access:code="['eims:inspectSt: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="">
              <ghost-button danger v-access:code="['eims:inspectSt:remove']" @click.stop="">
                {{ $t('pages.common.delete') }}
              </ghost-button>
            </Popconfirm>
@@ -210,14 +228,14 @@
      </BasicTable>
      <BasisSubTable
        :columns="orderCol"
        :columns="recordCol"
        :list-api="listMaintOrderGroupDetail"
        :req-value="orderId"
        class="h-2/5"
        :req-value="recordId"
        class="h-1/3"
        req-key="maintCode"
        title="保养实施项目"
      />
    </div>
    <MaintOrderStDrawer @reload="tableApi.query()" />
    <InspStDrawer @reload="tableApi.query()" />
  </Page>
</template>
eims-ui/apps/web-antd/src/views/eims/insp-st/insp-st-drawer.vue
copy from eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue copy to eims-ui/apps/web-antd/src/views/eims/insp-st/insp-st-drawer.vue
Îļþ´Ó eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue ¸´ÖÆ
@@ -7,7 +7,7 @@
import { InputSearch } from 'ant-design-vue';
import { useVbenForm } from '#/adapter/form';
import { getMaintOrderSt, updateMaintOrderSt } from '#/api/eims/maint-order-st';
import { getInspectSt, updateInspectSt } from '#/api/eims/insp-st';
import userModal from '#/views/eims/components/user-modal.vue';
import { drawerSchema } from './data';
@@ -16,7 +16,7 @@
const isUpdate = ref(false);
const title = computed(() => {
  return isUpdate.value ? '保养工单汇总稽查' : '保养工单汇总';
  return isUpdate.value ? '点检记录汇总稽查' : '点检记录汇总';
});
const [BasicForm, formApi] = useVbenForm({
@@ -44,7 +44,7 @@
    isUpdate.value = !!id;
    // æ›´æ–° && èµ‹å€¼
    if (isUpdate.value && id) {
      const record = await getMaintOrderSt(id);
      const record = await getInspectSt(id);
      await formApi.setValues(record);
    }
@@ -61,7 +61,7 @@
    }
    const data = cloneDeep(await formApi.getValues());
    // await (isUpdate.value ? updateMaintOrderSt(data) : addMaintOrderSt(data));
    await (isUpdate.value ? updateMaintOrderSt(data) : updateMaintOrderSt(data));
    await (isUpdate.value ? updateInspectSt(data) : updateInspectSt(data));
    emit('reload');
    await handleCancel();
  } catch (error) {
eims-ui/apps/web-antd/src/views/eims/maint-order/data.tsx
@@ -126,6 +126,11 @@
    minWidth: 160
  },
  {
    title: '工作描述',
    field: 'maintDesc',
    minWidth: 200
  },
  {
    title: '验证人',
    field: 'verifyUserName',
    minWidth: 160
@@ -174,6 +179,11 @@
    component: 'Input',
    fieldName: 'maintCode',
    label: '保养单号'
  },
  {
    component: 'Input',
    fieldName: 'maintName',
    label: '保养项'
  },
  {
    component: 'Input',
@@ -289,6 +299,11 @@
    label: '结束时间'
  },
  {
    component: 'Textarea',
    fieldName: 'maintDesc',
    label: '工作描述'
  },
  {
    component: 'Input',
    fieldName: 'verifyUser',
    label: '验证人id',
eims-ui/apps/web-antd/src/views/eims/maint-order/index.vue
@@ -191,8 +191,6 @@
  ]);
}
onMounted(async () => {
  await setupDeptSelect();
});
@@ -257,9 +255,9 @@
            >
              {{ $t('pages.common.delete') }}
            </a-button>
            <a-button type="primary" v-access:code="['eims:maintOrder:add']" @click="handleAdd">
            <!--            <a-button type="primary" v-access:code="['eims:maintOrder:add']" @click="handleAdd">
              {{ $t('pages.common.add') }}
            </a-button>
            </a-button>-->
          </Space>
        </template>
@@ -298,8 +296,7 @@
            <ghost-button v-access:code="['eims:maintOrder:edit']" @click.stop="handleEdit(row)">
              {{ $t('pages.common.edit') }}
            </ghost-button>
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?"
                        @confirm="handleDelete(row)">
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
              <ghost-button danger v-access:code="['eims:maintOrder:remove']" @click.stop="">
                {{ $t('pages.common.delete') }}
              </ghost-button>
@@ -308,7 +305,6 @@
        </template>
      </BasicTable>
      <!--<BasisSubTable :columns="maintStandCol" :list-api="listMaintStand" :req-value="equId" class="h-1/3" req-key="equId" title="保养实施项目" />-->
    </div>
    <MaintOrderDrawer @reload="tableApi.query()" />
  </Page>
eims-ui/apps/web-antd/src/views/eims/maint-order/maint-order-drawer.vue
@@ -54,6 +54,14 @@
    }
    // é‡ç½®
    baoyangCol(false);
    formApi.updateSchema([
      {
        componentProps: {
          disabled: isUpdate.value
        },
        fieldName: 'maintName'
      }
    ]);
    // æ›´æ–° && èµ‹å€¼
    if (isUpdate.value && id) {
@@ -121,6 +129,12 @@
        disabled: show
      },
      fieldName: 'status'
    },
    {
      componentProps: {
        disabled: show
      },
      fieldName: 'maintName'
    }
  ]);
}
eims-ui/apps/web-antd/src/views/eims/maint-plan/data.tsx
@@ -136,6 +136,11 @@
    minWidth: 160
  },
  {
    title: '创建时间',
    field: 'createTime',
    minWidth: 200
  },
  {
    field: 'action',
    fixed: 'right',
    slots: { default: 'action' },
eims-ui/apps/web-antd/src/views/eims/maint-plan/index.vue
@@ -15,7 +15,6 @@
import { getDeptTree, userList } from '#/api/system/user';
import { MAINT_ORDER_STATUS } from '#/constants/dict';
import { commonDownloadExcel } from '#/utils/file/download';
import BasisSubTable from '#/views/eims/components/basis-sub-table.vue';
import maintOrderDrawer from '#/views/eims/maint-order/maint-order-drawer.vue';
import { columns, querySchema } from './data';
@@ -157,7 +156,8 @@
    maintType: record.maintType,
    planTime: record.maintNextTime,
    status: MAINT_ORDER_STATUS.DAIBAOYANG,
    maintCode: code
    maintCode: code,
    maintName: record.maintName
  };
  maintOrderDrawerApi.setData({ planOrder });
eims-ui/apps/web-antd/src/views/eims/maint-st/data.tsx
ÎļþÃû´Ó eims-ui/apps/web-antd/src/views/eims/maint-order-st/data.tsx ÐÞ¸Ä
@@ -12,8 +12,13 @@
export const querySchema: FormSchemaGetter = () => [
  {
    component: 'Input',
    fieldName: 'equName',
    label: '设备名称'
    fieldName: 'title',
    label: '标题'
  },
  {
    component: 'Input',
    fieldName: 'assetno',
    label: '资产编号'
  },
  {
    component: 'RangePicker',
@@ -33,15 +38,15 @@
export const columns: VxeGridProps['columns'] = [
  { type: 'checkbox', width: 60, fixed: 'left' },
  {
    title: '设备名称',
    field: 'equName',
    title: '标题',
    field: 'title',
    minWidth: 200,
    fixed: 'left'
  },
  {
    title: '计划保养日期',
    title: '保养年月',
    field: 'planTime',
    minWidth: 200
    minWidth: 120
  },
  {
    title: '状态',
eims-ui/apps/web-antd/src/views/eims/maint-st/index.vue
ÎļþÃû´Ó eims-ui/apps/web-antd/src/views/eims/maint-order-st/index.vue ÐÞ¸Ä
@@ -1,23 +1,23 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { onMounted, ref } from 'vue';
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils';
import { Popconfirm, Space } from 'ant-design-vue';
import { Modal, Popconfirm, Space } from 'ant-design-vue';
import { useVbenVxeGrid, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { listMaintOrderGroupDetail } from '#/api/eims/maint-order';
import { delMaintOrderSt, listMaintOrderSt } from '#/api/eims/maint-order-st';
import { delMaintSt, listMaintSt } from '#/api/eims/maint-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';
import maintStDrawer from './maint-st-drawer.vue';
defineExpose({
  tableSelect
@@ -53,7 +53,7 @@
  proxyConfig: {
    ajax: {
      query: async ({ page }, formValues = {}) => {
        return await listMaintOrderSt({
        return await listMaintSt({
          pageNum: page.currentPage,
          pageSize: page.pageSize,
          ...formValues
@@ -152,24 +152,32 @@
    }
  ]);
}
const [MaintOrderStDrawer, maintOrderStDrawerApi] = useVbenDrawer({
  connectedComponent: maintOrderStDrawer
const [MaintStDrawer, maintStDrawerApi] = useVbenDrawer({
  connectedComponent: maintStDrawer
});
function handleAdd() {
  maintOrderStDrawerApi.setData({});
  maintOrderStDrawerApi.open();
}
async function handleEdit(record: Recordable<any>) {
  maintOrderStDrawerApi.setData({ id: record.id });
  maintOrderStDrawerApi.open();
  maintStDrawerApi.setData({ id: record.id });
  maintStDrawerApi.open();
}
async function handleDelete(row: Recordable<any>) {
  await delMaintOrderSt(row.id);
  await delMaintSt(row.id);
  await tableApi.query();
}
function handleMultiDelete() {
  const rows = tableApi.grid.getCheckboxRecords();
  const ids = rows.map((row: any) => row.id);
  Modal.confirm({
    title: '提示',
    okType: 'danger',
    content: `确认删除选中的${ids.length}条记录吗?`,
    onOk: async () => {
      await delMaintSt(ids);
      await tableApi.query();
    }
  });
}
onMounted(async () => {
  await setupDeptSelect();
@@ -184,9 +192,19 @@
<template>
  <Page :auto-content-height="true">
    <div class="flex h-full gap-[8px] flex-col">
      <BasicTable class="h-3/5" table-title="保养工单列表">
      <BasicTable class="h-2/3" table-title="保养工单列表">
        <template #toolbar-tools>
          <Space />
          <Space>
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:maintSt:remove']"
              @click="handleMultiDelete"
            >
              {{ $t('pages.common.delete') }}
            </a-button>
          </Space>
        </template>
        <template #equName="{ row }">
@@ -196,28 +214,26 @@
        </template>
        <template #action="{ row }">
          <Space>
            <ghost-button v-access:code="['eims:maintOrderSt:edit']" @click.stop="handleEdit(row)">
            <ghost-button v-access:code="['eims:maintSt: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="">
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
              <ghost-button danger v-access:code="['eims:maintSt: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"
        class="h-1/3"
        req-key="maintCode"
        title="保养实施项目"
      />
    </div>
    <MaintOrderStDrawer @reload="tableApi.query()" />
    <MaintStDrawer @reload="tableApi.query()" />
  </Page>
</template>
eims-ui/apps/web-antd/src/views/eims/maint-st/maint-st-drawer.vue
ÎļþÃû´Ó eims-ui/apps/web-antd/src/views/eims/maint-order-st/maint-order-st-drawer.vue ÐÞ¸Ä
@@ -5,9 +5,9 @@
import { cloneDeep } from '@vben/utils';
import { InputSearch } from 'ant-design-vue';
import { getMaintSt, updateMaintSt } from '#/api/eims/maint-st';
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';
@@ -44,7 +44,7 @@
    isUpdate.value = !!id;
    // æ›´æ–° && èµ‹å€¼
    if (isUpdate.value && id) {
      const record = await getMaintOrderSt(id);
      const record = await getMaintSt(id);
      await formApi.setValues(record);
    }
@@ -61,7 +61,7 @@
    }
    const data = cloneDeep(await formApi.getValues());
    // await (isUpdate.value ? updateMaintOrderSt(data) : addMaintOrderSt(data));
    await (isUpdate.value ? updateMaintOrderSt(data) : updateMaintOrderSt(data));
    await (isUpdate.value ? updateMaintSt(data) : updateMaintSt(data));
    emit('reload');
    await handleCancel();
  } catch (error) {
eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts
@@ -1,16 +1,19 @@
export enum DictEnum {
  EIMS_EQU_UNIT = 'eims_equ_unit', // è®¾å¤‡ç›˜ç‚¹çŠ¶æ€
  EIMS_FIXTURE_STATUS = 'eims_fixture_status', // å·¥å…·ï¼ˆæ²»å…·ï¼‰çŠ¶æ€
  EIMS_INSPECT_TYPE = 'eims_inspect_type', // ç‚¹æ£€ç±»åž‹
  EIMS_INVENTORY_DETAIL_STATU = 'inventory_detail_statu', // è®¾å¤‡ç›˜ç‚¹çŠ¶æ€
  EIMS_INVENTORY_STATU = 'inventory_statu', // è®¾å¤‡ç›˜ç‚¹çŠ¶æ€
  EIMS_MAINT_TYPE = 'eims_maint_type', // ä¿å…»ç±»åž‹
  EIMS_INSPECT_RESULT = 'eims_inspect_result', // ç‚¹æ£€ç»“æžœ
  EIMS_ORDITM_STATUS = 'eims_orditm_status', // ä¿å…»å·¥å•明细完成状态
  EQU_IMPORT_STATU = 'equ_import_status', // è®¾å¤‡å¯¼å…¥çŠ¶æ€
  FIXTURE_BORROW_RECORD_STATUS = 'fixture_borrow_record_status', // å·¥å…·ï¼ˆæ²»å…·ï¼‰å€Ÿç”¨è®°å½•状态
  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_ORDER_STATUS = 'maint_order_status', // ä¿å…»å·¥å•状态
  EIMS_INSPECT_STATUS = 'eims_inspect_status', // ç‚¹æ£€çŠ¶æ€
  MAINT_TIME_RULE = 'maint_time_rule', // ä¿å…»è§„则
  REPAIR_FAULT_TYPE = 'repair_fault_type', // æŠ¥ä¿®çŠ¶æ€
  REPAIR_RECORD_HANDLE = 'repair_record_handle', // ç»´ä¿®è®°å½•操作
eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DictConstants.java
@@ -150,4 +150,6 @@
        String N = "0";// æœªå®Œæˆ
        String Y = "1"; // å·²å®Œæˆ
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectPlanController.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.EimsInspectPlanVo;
import org.dromara.eims.domain.bo.EimsInspectPlanBo;
import org.dromara.eims.service.IEimsInspectPlanService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
 * ç‚¹æ£€è®¡åˆ’
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/inspectPlan")
public class EimsInspectPlanController extends BaseController {
    private final IEimsInspectPlanService eimsInspectPlanService;
    /**
     * æŸ¥è¯¢ç‚¹æ£€è®¡åˆ’列表
     */
    @SaCheckPermission("eims:inspectPlan:list")
    @GetMapping("/list")
    public TableDataInfo<EimsInspectPlanVo> list(EimsInspectPlanBo bo, PageQuery pageQuery) {
       // return eimsInspectPlanService.queryPageList(bo, pageQuery);
        return eimsInspectPlanService.queryPageListCustom(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºç‚¹æ£€è®¡åˆ’列表
     */
    @SaCheckPermission("eims:inspectPlan:export")
    @Log(title = "点检计划", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(EimsInspectPlanBo bo, HttpServletResponse response) {
        List<EimsInspectPlanVo> list = eimsInspectPlanService.queryList(bo);
        ExcelUtil.exportExcel(list, "点检计划", EimsInspectPlanVo.class, response);
    }
    /**
     * èŽ·å–ç‚¹æ£€è®¡åˆ’è¯¦ç»†ä¿¡æ¯
     *
     * @param id ä¸»é”®
     */
    @SaCheckPermission("eims:inspectPlan:query")
    @GetMapping("/{id}")
    public R<EimsInspectPlanVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long id) {
        return R.ok(eimsInspectPlanService.queryById(id));
    }
    /**
     * æ–°å¢žç‚¹æ£€è®¡åˆ’
     */
    @SaCheckPermission("eims:inspectPlan:add")
    @Log(title = "点检计划", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsInspectPlanBo bo) {
        return toAjax(eimsInspectPlanService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹ç‚¹æ£€è®¡åˆ’
     */
    @SaCheckPermission("eims:inspectPlan:edit")
    @Log(title = "点检计划", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsInspectPlanBo bo) {
        return toAjax(eimsInspectPlanService.updateByBo(bo));
    }
    /**
     * åˆ é™¤ç‚¹æ£€è®¡åˆ’
     *
     * @param ids ä¸»é”®ä¸²
     */
    @SaCheckPermission("eims:inspectPlan:remove")
    @Log(title = "点检计划", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] ids) {
        return toAjax(eimsInspectPlanService.deleteWithValidByIds(List.of(ids), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectRecordController.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.EimsInspectRecordVo;
import org.dromara.eims.domain.bo.EimsInspectRecordBo;
import org.dromara.eims.service.IEimsInspectRecordService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
 * ç‚¹æ£€è®°å½•
 *
 * @author zhuguifei
 * @date 2025-03-13
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/inspRecord")
public class EimsInspectRecordController extends BaseController {
    private final IEimsInspectRecordService eimsInspectRecordService;
    /**
     * æŸ¥è¯¢ç‚¹æ£€è®°å½•列表
     */
    @SaCheckPermission("eims:inspectRecord:list")
    @GetMapping("/list")
    public TableDataInfo<EimsInspectRecordVo> list(EimsInspectRecordBo bo, PageQuery pageQuery) {
       // return eimsInspectRecordService.queryPageList(bo, pageQuery);
        return eimsInspectRecordService.queryPageListCustom(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºç‚¹æ£€è®°å½•列表
     */
    @SaCheckPermission("eims:inspectRecord:export")
    @Log(title = "点检记录", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(EimsInspectRecordBo bo, HttpServletResponse response) {
        List<EimsInspectRecordVo> list = eimsInspectRecordService.queryList(bo);
        ExcelUtil.exportExcel(list, "点检记录", EimsInspectRecordVo.class, response);
    }
    /**
     * èŽ·å–ç‚¹æ£€è®°å½•è¯¦ç»†ä¿¡æ¯
     *
     * @param id ä¸»é”®
     */
    @SaCheckPermission("eims:inspectRecord:query")
    @GetMapping("/{id}")
    public R<EimsInspectRecordVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long id) {
        return R.ok(eimsInspectRecordService.queryById(id));
    }
    /**
     * æ–°å¢žç‚¹æ£€è®°å½•
     */
    @SaCheckPermission("eims:inspectRecord:add")
    @Log(title = "点检记录", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsInspectRecordBo bo) {
        return toAjax(eimsInspectRecordService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹ç‚¹æ£€è®°å½•
     */
    @SaCheckPermission("eims:inspectRecord:edit")
    @Log(title = "点检记录", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsInspectRecordBo bo) {
        return toAjax(eimsInspectRecordService.updateByBo(bo));
    }
    /**
     * åˆ é™¤ç‚¹æ£€è®°å½•
     *
     * @param ids ä¸»é”®ä¸²
     */
    @SaCheckPermission("eims:inspectRecord:remove")
    @Log(title = "点检记录", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] ids) {
        return toAjax(eimsInspectRecordService.deleteWithValidByIds(List.of(ids), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectStController.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.EimsInspectStVo;
import org.dromara.eims.domain.bo.EimsInspectStBo;
import org.dromara.eims.service.IEimsInspectStService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
 * ç‚¹æ£€æ±‡æ€»
 *
 * @author zhuguifei
 * @date 2025-03-14
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/inspectSt")
public class EimsInspectStController extends BaseController {
    private final IEimsInspectStService eimsInspectStService;
    /**
     * æŸ¥è¯¢ç‚¹æ£€æ±‡æ€»åˆ—表
     */
    @SaCheckPermission("eims:inspectSt:list")
    @GetMapping("/list")
    public TableDataInfo<EimsInspectStVo> list(EimsInspectStBo bo, PageQuery pageQuery) {
        return eimsInspectStService.queryPageList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºç‚¹æ£€æ±‡æ€»åˆ—表
     */
    @SaCheckPermission("eims:inspectSt:export")
    @Log(title = "点检汇总", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(EimsInspectStBo bo, HttpServletResponse response) {
        List<EimsInspectStVo> list = eimsInspectStService.queryList(bo);
        ExcelUtil.exportExcel(list, "点检汇总", EimsInspectStVo.class, response);
    }
    /**
     * èŽ·å–ç‚¹æ£€æ±‡æ€»è¯¦ç»†ä¿¡æ¯
     *
     * @param id ä¸»é”®
     */
    @SaCheckPermission("eims:inspectSt:query")
    @GetMapping("/{id}")
    public R<EimsInspectStVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long id) {
        return R.ok(eimsInspectStService.queryById(id));
    }
    /**
     * æ–°å¢žç‚¹æ£€æ±‡æ€»
     */
    @SaCheckPermission("eims:inspectSt:add")
    @Log(title = "点检汇总", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsInspectStBo bo) {
        return toAjax(eimsInspectStService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹ç‚¹æ£€æ±‡æ€»
     */
    @SaCheckPermission("eims:inspectSt:edit")
    @Log(title = "点检汇总", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsInspectStBo bo) {
        return toAjax(eimsInspectStService.updateByBo(bo));
    }
    /**
     * åˆ é™¤ç‚¹æ£€æ±‡æ€»
     *
     * @param ids ä¸»é”®ä¸²
     */
    @SaCheckPermission("eims:inspectSt:remove")
    @Log(title = "点检汇总", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] ids) {
        return toAjax(eimsInspectStService.deleteWithValidByIds(List.of(ids), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderController.java
@@ -1,6 +1,10 @@
package org.dromara.eims.controller;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
@@ -54,7 +58,6 @@
    @SaCheckPermission("eims:maintOrder:list")
    @GetMapping("/groupList")
    public TableDataInfo<MaintOrdeGroupVo> group(EimsMaintOrderBo bo, PageQuery pageQuery) {
//        return eimsMaintOrderService.queryPageList(bo, pageQuery);
        return eimsMaintOrderService.queryPageGroupList(bo, pageQuery);
    }
@@ -68,9 +71,14 @@
        }
        String[] split = maintCode.split("_");
        bo.setEquId(Long.valueOf(split[0]));
        bo.setPlanTime(DateUtils.parseDate(split[1]));
        bo.setMaintCode(null);
//        return eimsMaintOrderService.queryPageList(bo, pageQuery);
        LocalDate planTime = DateUtils.parseDate(split[1]).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth());
        LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth());
        Map<String, Object> params = bo.getParams();
        params.put("beginPlanTime",startOfMonth);
        params.put("endPlanTime",endOfMonth);
        return eimsMaintOrderService.queryPageListCustom(bo, pageQuery);
    }
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintStController.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintOrderStController.java ÐÞ¸Ä
@@ -6,6 +6,8 @@
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.eims.domain.bo.EimsMaintStBo;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -17,9 +19,7 @@
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.eims.service.IEimsMaintStService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
@@ -31,29 +31,29 @@
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/maintOrderSt")
public class EimsMaintOrderStController extends BaseController {
@RequestMapping("/eims/maintSt")
public class EimsMaintStController extends BaseController {
    private final IEimsMaintOrderStService eimsMaintOrderStService;
    private final IEimsMaintStService eimsMaintStService;
    /**
     * æŸ¥è¯¢ä¿å…»å·¥å•汇总列表
     */
    @SaCheckPermission("eims:maintOrderSt:list")
    @SaCheckPermission("eims:maintSt:list")
    @GetMapping("/list")
    public TableDataInfo<EimsMaintOrderStVo> list(EimsMaintOrderStBo bo, PageQuery pageQuery) {
        return eimsMaintOrderStService.queryPageList(bo, pageQuery);
    public TableDataInfo<EimsMaintStVo> list(EimsMaintStBo bo, PageQuery pageQuery) {
        return eimsMaintStService.queryPageList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºä¿å…»å·¥å•汇总列表
     */
    @SaCheckPermission("eims:maintOrderSt:export")
    @SaCheckPermission("eims:maintSt: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);
    public void export(EimsMaintStBo bo, HttpServletResponse response) {
        List<EimsMaintStVo> list = eimsMaintStService.queryList(bo);
        ExcelUtil.exportExcel(list, "保养工单汇总", EimsMaintStVo.class, response);
    }
    /**
@@ -61,33 +61,33 @@
     *
     * @param id ä¸»é”®
     */
    @SaCheckPermission("eims:maintOrderSt:query")
    @SaCheckPermission("eims:maintSt:query")
    @GetMapping("/{id}")
    public R<EimsMaintOrderStVo> getInfo(@NotNull(message = "主键不能为空")
    public R<EimsMaintStVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long id) {
        return R.ok(eimsMaintOrderStService.queryById(id));
        return R.ok(eimsMaintStService.queryById(id));
    }
    /**
     * æ–°å¢žä¿å…»å·¥å•汇总
     */
    @SaCheckPermission("eims:maintOrderSt:add")
    @SaCheckPermission("eims:maintSt:add")
    @Log(title = "保养工单汇总", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsMaintOrderStBo bo) {
        return toAjax(eimsMaintOrderStService.insertByBo(bo));
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsMaintStBo bo) {
        return toAjax(eimsMaintStService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹ä¿å…»å·¥å•汇总
     */
    @SaCheckPermission("eims:maintOrderSt:edit")
    @SaCheckPermission("eims:maintSt:edit")
    @Log(title = "保养工单汇总", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsMaintOrderStBo bo) {
        return toAjax(eimsMaintOrderStService.updateByBo(bo));
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsMaintStBo bo) {
        return toAjax(eimsMaintStService.updateByBo(bo));
    }
    /**
@@ -95,12 +95,12 @@
     *
     * @param ids ä¸»é”®ä¸²
     */
    @SaCheckPermission("eims:maintOrderSt:remove")
    @SaCheckPermission("eims:maintSt:remove")
    @Log(title = "保养工单汇总", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] ids) {
        return eimsMaintOrderStService.deleteWithValidByIds(List.of(ids), true);
        return eimsMaintStService.deleteWithValidByIds(List.of(ids), true);
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsInspectPlan.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
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_inspect_plan
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eims_inspect_plan")
public class EimsInspectPlan extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @TableId(value = "id")
    private Long id;
    /**
     * è®¾å¤‡id
     */
    private Long equId;
    /**
     * ç‚¹æ£€ç±»åž‹ï¼ˆå­—典)
     */
    private String inspType;
    /**
     * ç‚¹æ£€é¡¹åç§°
     */
    private String inspName;
    /**
     * ç‚¹æ£€é¡¹ç¼–号
     */
    private Long inspNo;
    /**
     * ç‚¹æ£€è¯´æ˜Ž
     */
    private String inspDesc;
    /**
     * ç‚¹æ£€å‘¨æœŸ
     */
    private Long inspCycle;
    /**
     * ç‚¹æ£€å‘¨æœŸå•位(字典)
     */
    private String inspCycleUnit;
    /**
     * ç‚¹æ£€è§„则(字典)保养时间计算:1-按周期  2-按上次保养时间
     */
    private String inspRule;
    /**
     * ç‚¹æ£€äºº
     */
    private Long inspUser;
    /**
     * ç‚¹æ£€éƒ¨é—¨
     */
    private Long inspDept;
    /**
     * çŠ¶æ€ï¼ˆå­—å…¸ï¼‰ 0-启用  1-禁用
     */
    private String status;
    /**
     * é¦–次执行时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspFirstTime;
    /**
     * ä¸Šæ¬¡æ‰§è¡Œæ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspLastTime;
    /**
     * ä¸‹æ¬¡æ‰§è¡Œæ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspNextTime;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsInspectRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
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_inspect_record
 *
 * @author zhuguifei
 * @date 2025-03-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eims_inspect_record")
public class EimsInspectRecord extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId(value = "id")
    private Long id;
    /**
     * è®¾å¤‡di
     */
    private Long equId;
    /**
     * ç‚¹æ£€åç§°
     */
    private String inspName;
    /**
     * ç‚¹æ£€æè¿°
     */
    private String inspDesc;
    /**
     * çŠ¶æ€
     */
    private String status;
    /**
     * ç‚¹æ£€ç¼–码
     */
    private String inspCode;
    /**
     * ç‚¹æ£€äºº
     */
    private Long inspUser;
    /**
     * ç‚¹æ£€éƒ¨é—¨
     */
    private Long inspDept;
    /**
     * å€¼è®°å½•方式(字典)
     */
    private String recordMode;
    /**
     * å‚考值
     */
    private String referenceValue;
    /**
     * ä¸Šé™
     */
    private String upperLimit;
    /**
     * ä¸‹é™
     */
    private String lowLimit;
    /**
     * æ£€æŸ¥å€¼
     */
    private String checkValue;
    /**
     * ç‚¹æ£€ç»“果(字典)
     */
    private String inspResult;
    /**
     * ç‚¹æ£€ç±»åž‹ï¼ˆå­—典)
     */
    private String inspType;
    /**
     * ç‚¹æ£€æ—¶é—´
     */
    private Date inspTime;
    /**
     * è®¡åˆ’点检日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date planTime;
    /**
     * éªŒè¯äºº
     */
    private Long verifyUser;
    /**
     * è®¡åˆ’id
     */
    private Long planId;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsInspectSt.java
copy from eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java copy to eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsInspectSt.java
Îļþ´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java ¸´ÖÆ
@@ -10,15 +10,15 @@
import java.io.Serial;
/**
 * ä¿å…»å·¥å•汇总对象 eims_maint_order_st
 * ç‚¹æ£€æ±‡æ€»å¯¹è±¡ eims_inspect_st
 *
 * @author zhuguifei
 * @date 2025-03-12
 * @date 2025-03-14
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eims_maint_order_st")
public class EimsMaintOrderSt extends BaseEntity {
@TableName("eims_inspect_st")
public class EimsInspectSt extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
@@ -30,35 +30,38 @@
    private Long id;
    /**
     *
     * æ ‡é¢˜
     */
    private String title;
    /**
     *
     * è®¾å¤‡id
     */
    private String equId;
    private Long 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 inspUser;
    /**
     * éªŒè¯äºº
     * ç¨½æŸ¥äºº
     */
    private Long verifyUser;
    /**
     * ç¨½æŸ¥æ—¥æœŸ
     */
    private Date verifyTime;
    /**
     * ç‰¹è®°äº‹é¡¹
@@ -71,4 +74,5 @@
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrder.java
@@ -75,6 +75,14 @@
    private String maintCode;
    /**
     * ä¿å…»é¡¹
     */
    private String maintName;
    /**
     * å·¥ä½œæè¿°
     */
    private String maintDesc;
    /**
     *
     */
    private String status;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintSt.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsMaintOrderSt.java ÐÞ¸Ä
@@ -10,15 +10,15 @@
import java.io.Serial;
/**
 * ä¿å…»å·¥å•汇总对象 eims_maint_order_st
 * ä¿å…»å·¥å•汇总对象 eims_maint_st
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eims_maint_order_st")
public class EimsMaintOrderSt extends BaseEntity {
@TableName("eims_maint_st")
public class EimsMaintSt extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
@@ -37,7 +37,7 @@
    /**
     *
     */
    private String equId;
    private Long equId;
    /**
     *
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInspectPlanBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
package org.dromara.eims.domain.bo;
import org.dromara.eims.domain.EimsInspectPlan;
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_inspect_plan
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = EimsInspectPlan.class, reverseConvertGenerate = false)
public class EimsInspectPlanBo extends BaseEntity {
    /**
     *
     */
    @NotNull(message = "不能为空", groups = { EditGroup.class })
    private Long id;
    /**
     * è®¾å¤‡id
     */
    @NotNull(message = "设备id ä¸èƒ½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class })
    private Long equId;
    /**
     * ç‚¹æ£€ç±»åž‹ï¼ˆå­—典)
     */
    private String inspType;
    /**
     * ç‚¹æ£€é¡¹åç§°
     */
    @NotBlank(message = "点检项名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String inspName;
    /**
     * ç‚¹æ£€é¡¹ç¼–号
     */
    private Long inspNo;
    /**
     * ç‚¹æ£€è¯´æ˜Ž
     */
    private String inspDesc;
    /**
     * ç‚¹æ£€å‘¨æœŸ
     */
    @NotNull(message = "点检周期不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long inspCycle;
    /**
     * ç‚¹æ£€å‘¨æœŸå•位(字典)
     */
    @NotBlank(message = "点检周期单位(字典)不能为空", groups = { AddGroup.class, EditGroup.class })
    private String inspCycleUnit;
    /**
     * ç‚¹æ£€è§„则(字典)保养时间计算:1-按周期  2-按上次保养时间
     */
    private String inspRule;
    /**
     * ç‚¹æ£€äºº
     */
    @NotNull(message = "点检人不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long inspUser;
    /**
     * ç‚¹æ£€éƒ¨é—¨
     */
    private Long inspDept;
    /**
     * çŠ¶æ€ï¼ˆå­—å…¸ï¼‰ 0-启用  1-禁用
     */
    @NotBlank(message = "状态(字典) 0-启用  1-禁用不能为空", groups = { AddGroup.class, EditGroup.class })
    private String status;
    /**
     * é¦–次执行时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspFirstTime;
    /**
     * ä¸Šæ¬¡æ‰§è¡Œæ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspLastTime;
    /**
     * ä¸‹æ¬¡æ‰§è¡Œæ—¶é—´
     */
    @NotNull(message = "下次执行时间不能为空", groups = { AddGroup.class, EditGroup.class })
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspNextTime;
    /**
     * å¤‡æ³¨
     */
    private String remark;
    // å¤šè¡¨æŸ¥è¯¢å­—段
    private String equName;
    private String assetNo;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInspectRecordBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
package org.dromara.eims.domain.bo;
import org.dromara.eims.domain.EimsInspectRecord;
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_inspect_record
 *
 * @author zhuguifei
 * @date 2025-03-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = EimsInspectRecord.class, reverseConvertGenerate = false)
public class EimsInspectRecordBo extends BaseEntity {
    /**
     * id
     */
    @NotNull(message = "id不能为空", groups = { EditGroup.class })
    private Long id;
    /**
     * è®¾å¤‡di
     */
    @NotNull(message = "设备di不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long equId;
    private String equName;
    private String assetNo;
    /**
     * ç‚¹æ£€åç§°
     */
    @NotBlank(message = "点检名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String inspName;
    /**
     * ç‚¹æ£€æè¿°
     */
    private String inspDesc;
    /**
     * ç‚¹æ£€ç±»åž‹
     */
    private String inspType;
    /**
     * ç‚¹æ£€äºº
     */
    private Long inspUser;
    /**
     * ç‚¹æ£€éƒ¨é—¨
     */
    private Long inspDept;
    /**
     * çŠ¶æ€
     */
    @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
    private String status;
    /**
     * ç‚¹æ£€ç¼–码
     */
    @NotBlank(message = "点检编码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String inspCode;
    /**
     * å€¼è®°å½•方式(字典)
     */
    private String recordMode;
    /**
     * å‚考值
     */
    private String referenceValue;
    /**
     * ä¸Šé™
     */
    private String upperLimit;
    /**
     * ä¸‹é™
     */
    private String lowLimit;
    /**
     * æ£€æŸ¥å€¼
     */
    private String checkValue;
    /**
     * ç‚¹æ£€ç»“果(字典)
     */
    private String inspResult;
    /**
     * ç‚¹æ£€æ—¶é—´
     */
    private Date inspTime;
    /**
     * è®¡åˆ’点检日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date planTime;
    /**
     * éªŒè¯äºº
     */
    private Long verifyUser;
    /**
     * è®¡åˆ’id
     */
    private Long planId;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInspectStBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package org.dromara.eims.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.eims.domain.EimsInspectSt;
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_inspect_st
 *
 * @author zhuguifei
 * @date 2025-03-14
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = EimsInspectSt.class, reverseConvertGenerate = false)
public class EimsInspectStBo extends BaseEntity {
    /**
     *
     */
    @NotNull(message = "不能为空", groups = { EditGroup.class })
    private Long id;
    /**
     * æ ‡é¢˜
     */
    @NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
    private String title;
    /**
     * è®¾å¤‡id
     */
    @NotNull(message = "设备id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long equId;
    private String equName;
    private String assetNo;
    /**
     * è®¡åˆ’æ—¶é—´
     */
    @NotNull(message = "计划时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date planTime;
    /**
     * çŠ¶æ€
     */
    private String status;
    /**
     * ç‚¹æ£€äºº
     */
    private Long inspUser;
    /**
     * ç¨½æŸ¥äºº
     */
    private Long verifyUser;
    /**
     * ç¨½æŸ¥æ—¥æœŸ
     */
    private Date verifyTime;
    /**
     * ç‰¹è®°äº‹é¡¹
     */
    private String specialNote;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderBo.java
@@ -78,6 +78,16 @@
    private String maintCode;
    /**
     * ä¿å…»é¡¹
     */
    private String maintName;
    /**
     * å·¥ä½œæè¿°
     */
    private String maintDesc;
    /**
     *
     */
    @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintStBo.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintOrderStBo.java ÐÞ¸Ä
@@ -1,6 +1,6 @@
package org.dromara.eims.domain.bo;
import org.dromara.eims.domain.EimsMaintOrderSt;
import org.dromara.eims.domain.EimsMaintSt;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
@@ -12,15 +12,15 @@
import com.fasterxml.jackson.annotation.JsonFormat;
/**
 * ä¿å…»å·¥å•汇总业务对象 eims_maint_order_st
 * ä¿å…»å·¥å•汇总业务对象 eims_maint_st
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = EimsMaintOrderSt.class, reverseConvertGenerate = false)
public class EimsMaintOrderStBo extends BaseEntity {
@AutoMapper(target = EimsMaintSt.class, reverseConvertGenerate = false)
public class EimsMaintStBo extends BaseEntity {
    /**
     *
@@ -38,8 +38,9 @@
     *
     */
    @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
    private String equId;
    private Long equId;
    private String equName;
    private String assetNo;
    /**
     *
     */
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectPlanVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,158 @@
package org.dromara.eims.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
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.EimsInspectPlan;
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_inspect_plan
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsInspectPlan.class)
public class EimsInspectPlanVo extends BaseEntity implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @ExcelProperty(value = "")
    private Long id;
    /**
     * è®¾å¤‡id
     */
    @ExcelProperty(value = "设备id")
    private Long equId;
    @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId")
    private String equName;
    private String assetNo;
    /**
     * ç‚¹æ£€ç±»åž‹ï¼ˆå­—典)
     */
    @ExcelProperty(value = "点检类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典")
    private String inspType;
    /**
     * ç‚¹æ£€é¡¹åç§°
     */
    @ExcelProperty(value = "点检项名称")
    private String inspName;
    /**
     * ç‚¹æ£€é¡¹ç¼–号
     */
    @ExcelProperty(value = "点检项编号")
    private Long inspNo;
    /**
     * ç‚¹æ£€è¯´æ˜Ž
     */
    @ExcelProperty(value = "点检说明")
    private String inspDesc;
    /**
     * ç‚¹æ£€å‘¨æœŸ
     */
    @ExcelProperty(value = "点检周期")
    private Long inspCycle;
    /**
     * ç‚¹æ£€å‘¨æœŸå•位(字典)
     */
    @ExcelProperty(value = "点检周期单位", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典")
    private String inspCycleUnit;
    /**
     * ç‚¹æ£€è§„则(字典)保养时间计算:1-按周期  2-按上次保养时间
     */
    @ExcelProperty(value = "点检规则", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典")
    private String inspRule;
    /**
     * ç‚¹æ£€äºº
     */
    @ExcelProperty(value = "点检人")
    private Long inspUser;
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspUser")
    private String inspUserName;
    /**
     * ç‚¹æ£€éƒ¨é—¨
     */
    @ExcelProperty(value = "点检部门")
    private Long inspDept;
    @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "inspDept")
    private String inspDeptName;
    /**
     * çŠ¶æ€ï¼ˆå­—å…¸ï¼‰ 0-启用  1-禁用
     */
    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典")
    private String status;
    /**
     * é¦–次执行时间
     */
    @ExcelProperty(value = "首次执行时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspFirstTime;
    /**
     * ä¸Šæ¬¡æ‰§è¡Œæ—¶é—´
     */
    @ExcelProperty(value = "上次执行时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspLastTime;
    /**
     * ä¸‹æ¬¡æ‰§è¡Œæ—¶é—´
     */
    @ExcelProperty(value = "下次执行时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date inspNextTime;
    /**
     * å¤‡æ³¨
     */
    @ExcelProperty(value = "备注")
    private String remark;
    /**
     * å¾ªçŽ¯å‘¨æœŸ
     */
    private String inspCycleUnitName;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectRecordVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
package org.dromara.eims.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
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.EimsInspectRecord;
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_inspect_record
 *
 * @author zhuguifei
 * @date 2025-03-13
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsInspectRecord.class)
public class EimsInspectRecordVo extends BaseEntity implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @ExcelProperty(value = "id")
    private Long id;
    /**
     * è®¾å¤‡di
     */
    @ExcelProperty(value = "设备di")
    private Long equId;
    @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId")
    private String equName;
    private String assetNo;
    /**
     * ç‚¹æ£€åç§°
     */
    @ExcelProperty(value = "点检名称")
    private String inspName;
    /**
     * ç‚¹æ£€äºº
     */
    private Long inspUser;
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspUser")
    private String inspUserName;
    /**
     * ç‚¹æ£€éƒ¨é—¨
     */
    private Long inspDept;
    @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "inspDept")
    private String inspDeptName;
    /**
     * ç‚¹æ£€æè¿°
     */
    @ExcelProperty(value = "点检描述")
    private String inspDesc;
    /**
     * çŠ¶æ€
     */
    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "eims_inspect_status")
    private String status;
    /**
     * ç‚¹æ£€ç¼–码
     */
    @ExcelProperty(value = "点检编码")
    private String inspCode;
    /**
     * å€¼è®°å½•方式(字典)
     */
    @ExcelProperty(value = "值记录方式", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典")
    private String recordMode;
    /**
     * å‚考值
     */
    @ExcelProperty(value = "参考值")
    private String referenceValue;
    /**
     * ä¸Šé™
     */
    @ExcelProperty(value = "上限")
    private String upperLimit;
    /**
     * ä¸‹é™
     */
    @ExcelProperty(value = "下限")
    private String lowLimit;
    /**
     * æ£€æŸ¥å€¼
     */
    @ExcelProperty(value = "检查值")
    private String checkValue;
    /**
     * ç‚¹æ£€ç»“果(字典)
     */
    @ExcelProperty(value = "点检结果", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "eims_inspect_result")
    private String inspResult;
    /**
     * ç‚¹æ£€ç±»åž‹ï¼ˆå­—典)
     */
    @ExcelDictFormat(dictType = "eims_inspect_type")
    private String inspType;
    /**
     * ç‚¹æ£€æ—¶é—´
     */
    @ExcelProperty(value = "点检时间")
    private Date inspTime;
    /**
     * è®¡åˆ’点检日期
     */
    @ExcelProperty(value = "计划点检日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date planTime;
    /**
     * éªŒè¯äºº
     */
    @ExcelProperty(value = "验证人")
    private Long verifyUser;
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "verifyUser")
    private String verifyUserName;
    /**
     * è®¡åˆ’id
     */
    @ExcelProperty(value = "计划id")
    private Long planId;
    /**
     * å¤‡æ³¨
     */
    @ExcelProperty(value = "备注")
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectStVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
package org.dromara.eims.domain.vo;
import java.util.Date;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.eims.domain.EimsInspectSt;
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;
/**
 * ç‚¹æ£€æ±‡æ€»è§†å›¾å¯¹è±¡ eims_inspect_st
 *
 * @author zhuguifei
 * @date 2025-03-14
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsInspectSt.class)
public class EimsInspectStVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @ExcelProperty(value = "")
    private Long id;
    /**
     * æ ‡é¢˜
     */
    @ExcelProperty(value = "标题")
    private String title;
    /**
     * è®¾å¤‡id
     */
    @ExcelProperty(value = "设备id")
    private Long equId;
    private String equName;
    private String assetNo;
    /**
     * è®¡åˆ’æ—¶é—´
     */
    @ExcelProperty(value = "计划时间")
    private Date planTime;
    /**
     * çŠ¶æ€
     */
    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "eims_inspect_status")
    private String status;
    /**
     * ç‚¹æ£€äºº
     */
    @ExcelProperty(value = "点检人")
    private Long inspUser;
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspUser")
    private String inspUserName;
    /**
     * ç¨½æŸ¥äºº
     */
    @ExcelProperty(value = "稽查人")
    private Long verifyUser;
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "verifyUser")
    private String verifyUserName;
    /**
     * ç¨½æŸ¥æ—¥æœŸ
     */
    @ExcelProperty(value = "稽查日期")
    private Date verifyTime;
    /**
     * ç‰¹è®°äº‹é¡¹
     */
    @ExcelProperty(value = "特记事项")
    private String specialNote;
    /**
     * å¤‡æ³¨
     */
    @ExcelProperty(value = "备注")
    private String remark;
    /**
     * è®°å½•总数
     */
    private Integer recordCount;
    /**
     * å·²ç‚¹æ£€è®°å½•
     */
    private Integer checkCount;
    /**
     * æœªç‚¹æ£€è®°å½•
     */
    private Integer unCheckCount;
    /**
     * ç»“æžœ-正常数
     */
    private Integer normalNum;
    /**
     * ç»“æžœ-异常数
     */
    private Integer abNormalNum;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderVo.java
@@ -127,6 +127,11 @@
    private Date planTime;
    /**
     * å·¥ä½œæè¿°
     */
    private String maintDesc;
    /**
     * ä¿å…»å¼€å§‹æ—¶é—´
     */
    @ExcelProperty(value = "保养开始时间")
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintPlanVo.java
@@ -2,6 +2,7 @@
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
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.EimsMaintPlan;
@@ -25,7 +26,7 @@
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsMaintPlan.class)
public class EimsMaintPlanVo implements Serializable {
public class EimsMaintPlanVo extends BaseEntity implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintStVo.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsMaintOrderStVo.java ÐÞ¸Ä
@@ -3,31 +3,29 @@
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
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.EimsMaintOrderSt;
import org.dromara.eims.domain.EimsMaintSt;
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
 * ä¿å…»å·¥å•汇总视图对象 eims_maint_st
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsMaintOrderSt.class)
public class EimsMaintOrderStVo implements Serializable {
@AutoMapper(target = EimsMaintSt.class)
public class EimsMaintStVo extends BaseEntity implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
@@ -59,7 +57,7 @@
     *
     */
    @ExcelProperty(value = "")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM")
    private Date planTime;
    /**
     *稽查日期
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/job/MaintPlanToOrderJob.java
@@ -99,6 +99,7 @@
            order.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIBAOYANG);
            order.setPlanTime(oldNext);
            order.setPlanId(planVo.getId());
            order.setMaintName(planVo.getMaintName());
            order.setMaintCode(codeService.generateCode("BYZD"));
            EimsMaintPlan plan = MapstructUtils.convert(planVo, EimsMaintPlan.class);
            assert plan != null;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsInspectPlanMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.dromara.eims.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.eims.domain.EimsInspectPlan;
import org.dromara.eims.domain.vo.EimsInspectPlanVo;
/**
 * ç‚¹æ£€è®¡åˆ’Mapper接口
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
public interface EimsInspectPlanMapper extends BaseMapperPlus<EimsInspectPlan, EimsInspectPlanVo> {
    Page<EimsInspectPlanVo> selectInspPlanList(@Param("page") Page<EimsInspectPlanVo> page, @Param(Constants.WRAPPER) Wrapper<EimsInspectPlan> queryWrapper);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsInspectRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package org.dromara.eims.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.eims.domain.EimsInspectRecord;
import org.dromara.eims.domain.vo.EimsInspectRecordVo;
/**
 * ç‚¹æ£€è®°å½•Mapper接口
 *
 * @author zhuguifei
 * @date 2025-03-13
 */
public interface EimsInspectRecordMapper extends BaseMapperPlus<EimsInspectRecord, EimsInspectRecordVo> {
    Page<EimsInspectRecordVo> selectInspRecordList(@Param("page") Page<EimsInspectRecordVo> page, @Param(Constants.WRAPPER) Wrapper<EimsInspectRecord> queryWrapper);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsInspectStMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package org.dromara.eims.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.eims.domain.EimsInspectSt;
import org.dromara.eims.domain.EimsMaintSt;
import org.dromara.eims.domain.vo.EimsInspectStVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.eims.domain.vo.EimsMaintStVo;
/**
 * ç‚¹æ£€æ±‡æ€»Mapper接口
 *
 * @author zhuguifei
 * @date 2025-03-14
 */
public interface EimsInspectStMapper extends BaseMapperPlus<EimsInspectSt, EimsInspectStVo> {
    Page<EimsInspectStVo> selectInspStList(@Param("page") Page<EimsInspectStVo> page, @Param(Constants.WRAPPER) Wrapper<EimsInspectSt> queryWrapper);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintOrderStMapper.java
ÎļþÒÑɾ³ý
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsMaintStMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package org.dromara.eims.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.eims.domain.EimsMaintSt;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * ä¿å…»å·¥å•汇总Mapper接口
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
public interface EimsMaintStMapper extends BaseMapperPlus<EimsMaintSt, EimsMaintStVo> {
    Page<EimsMaintStVo> selectMaintStList(@Param("page") Page<EimsMaintStVo> page, @Param(Constants.WRAPPER) Wrapper<EimsMaintSt> queryWrapper);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectPlanService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.vo.EimsInspectPlanVo;
import org.dromara.eims.domain.bo.EimsInspectPlanBo;
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-03-12
 */
public interface IEimsInspectPlanService {
    /**
     * æŸ¥è¯¢ç‚¹æ£€è®¡åˆ’
     *
     * @param id ä¸»é”®
     * @return ç‚¹æ£€è®¡åˆ’
     */
    EimsInspectPlanVo queryById(Long id);
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€è®¡åˆ’列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€è®¡åˆ’分页列表
     */
    TableDataInfo<EimsInspectPlanVo> queryPageList(EimsInspectPlanBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„点检计划列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ç‚¹æ£€è®¡åˆ’列表
     */
    List<EimsInspectPlanVo> queryList(EimsInspectPlanBo bo);
    /**
     * æ–°å¢žç‚¹æ£€è®¡åˆ’
     *
     * @param bo ç‚¹æ£€è®¡åˆ’
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(EimsInspectPlanBo bo);
    /**
     * ä¿®æ”¹ç‚¹æ£€è®¡åˆ’
     *
     * @param bo ç‚¹æ£€è®¡åˆ’
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsInspectPlanBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ç‚¹æ£€è®¡åˆ’信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€è®¡åˆ’列表-多表查询
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€è®¡åˆ’分页列表
     */
    TableDataInfo<EimsInspectPlanVo> queryPageListCustom(EimsInspectPlanBo bo, PageQuery pageQuery);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.vo.EimsInspectRecordVo;
import org.dromara.eims.domain.bo.EimsInspectRecordBo;
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-03-13
 */
public interface IEimsInspectRecordService {
    /**
     * æŸ¥è¯¢ç‚¹æ£€è®°å½•
     *
     * @param id ä¸»é”®
     * @return ç‚¹æ£€è®°å½•
     */
    EimsInspectRecordVo queryById(Long id);
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€è®°å½•列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€è®°å½•分页列表
     */
    TableDataInfo<EimsInspectRecordVo> queryPageList(EimsInspectRecordBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„点检记录列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ç‚¹æ£€è®°å½•列表
     */
    List<EimsInspectRecordVo> queryList(EimsInspectRecordBo bo);
    /**
     * æ–°å¢žç‚¹æ£€è®°å½•
     *
     * @param bo ç‚¹æ£€è®°å½•
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(EimsInspectRecordBo bo);
    /**
     * ä¿®æ”¹ç‚¹æ£€è®°å½•
     *
     * @param bo ç‚¹æ£€è®°å½•
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsInspectRecordBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ç‚¹æ£€è®°å½•信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€è®°å½•列表-多表查询
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€è®°å½•分页列表
     */
    TableDataInfo<EimsInspectRecordVo> queryPageListCustom(EimsInspectRecordBo bo, PageQuery pageQuery);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsInspectStService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.vo.EimsInspectStVo;
import org.dromara.eims.domain.bo.EimsInspectStBo;
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-03-14
 */
public interface IEimsInspectStService {
    /**
     * æŸ¥è¯¢ç‚¹æ£€æ±‡æ€»
     *
     * @param id ä¸»é”®
     * @return ç‚¹æ£€æ±‡æ€»
     */
    EimsInspectStVo queryById(Long id);
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€æ±‡æ€»åˆ—表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€æ±‡æ€»åˆ†é¡µåˆ—表
     */
    TableDataInfo<EimsInspectStVo> queryPageList(EimsInspectStBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„点检汇总列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ç‚¹æ£€æ±‡æ€»åˆ—表
     */
    List<EimsInspectStVo> queryList(EimsInspectStBo bo);
    /**
     * æ–°å¢žç‚¹æ£€æ±‡æ€»
     *
     * @param bo ç‚¹æ£€æ±‡æ€»
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(EimsInspectStBo bo);
    /**
     * ä¿®æ”¹ç‚¹æ£€æ±‡æ€»
     *
     * @param bo ç‚¹æ£€æ±‡æ€»
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsInspectStBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ç‚¹æ£€æ±‡æ€»ä¿¡æ¯
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintStService.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintOrderStService.java ÐÞ¸Ä
@@ -1,8 +1,8 @@
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.eims.domain.bo.EimsMaintStBo;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
@@ -15,7 +15,7 @@
 * @author zhuguifei
 * @date 2025-03-12
 */
public interface IEimsMaintOrderStService {
public interface IEimsMaintStService {
    /**
     * æŸ¥è¯¢ä¿å…»å·¥å•汇总
@@ -23,7 +23,7 @@
     * @param id ä¸»é”®
     * @return ä¿å…»å·¥å•汇总
     */
    EimsMaintOrderStVo queryById(Long id);
    EimsMaintStVo queryById(Long id);
    /**
     * åˆ†é¡µæŸ¥è¯¢ä¿å…»å·¥å•汇总列表
@@ -32,7 +32,7 @@
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ä¿å…»å·¥å•汇总分页列表
     */
    TableDataInfo<EimsMaintOrderStVo> queryPageList(EimsMaintOrderStBo bo, PageQuery pageQuery);
    TableDataInfo<EimsMaintStVo> queryPageList(EimsMaintStBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„保养工单汇总列表
@@ -40,7 +40,7 @@
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ä¿å…»å·¥å•汇总列表
     */
    List<EimsMaintOrderStVo> queryList(EimsMaintOrderStBo bo);
    List<EimsMaintStVo> queryList(EimsMaintStBo bo);
    /**
     * æ–°å¢žä¿å…»å·¥å•汇总
@@ -48,7 +48,7 @@
     * @param bo ä¿å…»å·¥å•汇总
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(EimsMaintOrderStBo bo);
    Boolean insertByBo(EimsMaintStBo bo);
    /**
     * ä¿®æ”¹ä¿å…»å·¥å•汇总
@@ -56,7 +56,7 @@
     * @param bo ä¿å…»å·¥å•汇总
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsMaintOrderStBo bo);
    Boolean updateByBo(EimsMaintStBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ä¿å…»å·¥å•汇总信息
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectPlanServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,200 @@
package org.dromara.eims.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.vo.EimsMaintPlanVo;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsInspectPlanBo;
import org.dromara.eims.domain.vo.EimsInspectPlanVo;
import org.dromara.eims.domain.EimsInspectPlan;
import org.dromara.eims.mapper.EimsInspectPlanMapper;
import org.dromara.eims.service.IEimsInspectPlanService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
 * ç‚¹æ£€è®¡åˆ’Service业务层处理
 *
 * @author zhuguifei
 * @date 2025-03-12
 */
@RequiredArgsConstructor
@Service
public class EimsInspectPlanServiceImpl implements IEimsInspectPlanService {
    private final EimsInspectPlanMapper baseMapper;
    private final SysDeptMapper sysDeptMapper;
    /**
     * æŸ¥è¯¢ç‚¹æ£€è®¡åˆ’
     *
     * @param id ä¸»é”®
     * @return ç‚¹æ£€è®¡åˆ’
     */
    @Override
    public EimsInspectPlanVo queryById(Long id){
        return baseMapper.selectVoById(id);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€è®¡åˆ’列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€è®¡åˆ’分页列表
     */
    @Override
    public TableDataInfo<EimsInspectPlanVo> queryPageList(EimsInspectPlanBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<EimsInspectPlan> lqw = buildQueryWrapper(bo);
        Page<EimsInspectPlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }
    @Override
    public TableDataInfo<EimsInspectPlanVo> queryPageListCustom(EimsInspectPlanBo bo, PageQuery pageQuery) {
        Page<EimsInspectPlanVo> page = baseMapper.selectInspPlanList(pageQuery.build(), buildWrapper(bo));
        return TableDataInfo.build(page);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„点检计划列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ç‚¹æ£€è®¡åˆ’列表
     */
    @Override
    public List<EimsInspectPlanVo> queryList(EimsInspectPlanBo bo) {
        LambdaQueryWrapper<EimsInspectPlan> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsInspectPlan> buildQueryWrapper(EimsInspectPlanBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<EimsInspectPlan> lqw = Wrappers.lambdaQuery();
        lqw.eq(bo.getEquId() != null, EimsInspectPlan::getEquId, bo.getEquId());
        lqw.eq(StringUtils.isNotBlank(bo.getInspType()), EimsInspectPlan::getInspType, bo.getInspType());
        lqw.like(StringUtils.isNotBlank(bo.getInspName()), EimsInspectPlan::getInspName, bo.getInspName());
        lqw.eq(bo.getInspNo() != null, EimsInspectPlan::getInspNo, bo.getInspNo());
        lqw.eq(bo.getInspCycle() != null, EimsInspectPlan::getInspCycle, bo.getInspCycle());
        lqw.eq(StringUtils.isNotBlank(bo.getInspCycleUnit()), EimsInspectPlan::getInspCycleUnit, bo.getInspCycleUnit());
        lqw.eq(StringUtils.isNotBlank(bo.getInspRule()), EimsInspectPlan::getInspRule, bo.getInspRule());
        lqw.eq(bo.getInspUser() != null, EimsInspectPlan::getInspUser, bo.getInspUser());
        lqw.eq(bo.getInspDept() != null, EimsInspectPlan::getInspDept, bo.getInspDept());
        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsInspectPlan::getStatus, bo.getStatus());
        return lqw;
    }
    private QueryWrapper<EimsInspectPlan> buildWrapper(EimsInspectPlanBo bo) {
        Map<String, Object> params = bo.getParams();
        QueryWrapper<EimsInspectPlan> qw = Wrappers.query();
        qw.eq(bo.getEquId() != null, "ip.equ_id", bo.getEquId());
        qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName());
        qw.like(bo.getAssetNo() != null, "equ.asset_no", bo.getAssetNo());
        qw.eq(StringUtils.isNotBlank(bo.getInspType()), "ip.insp_type", bo.getInspType());
        qw.eq(StringUtils.isNotBlank(bo.getInspCycleUnit()), "ip.insp_cycle_unit", bo.getInspCycleUnit());
        qw.eq(StringUtils.isNotBlank(bo.getInspRule()), "ip.insp_rule", bo.getInspRule());
        qw.eq(bo.getInspUser() != null, "ip.insp_user", bo.getInspUser());
        qw.in(bo.getInspDept() != null, "ip.insp_dept", getAllDescendantIds(bo.getInspDept()));
        qw.eq(bo.getStatus() != null, "ip.status", bo.getStatus());
        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
            "a.plam_time", params.get("beginPlanTime"), params.get("endPlanTime"));
        qw.orderByDesc("ip.create_time");
        return qw;
    }
    /**
     * æ ¹æ®id,获取所有后代id
     *
     * @param rootId
     * @return
     */
    public List<Long> getAllDescendantIds(Long rootId) {
        List<Long> result = new ArrayList<>();
        result.add(rootId);
        collectDescendants(rootId, result);
        return result;
    }
    private void collectDescendants(Long currentId, List<Long> collector) {
        QueryWrapper<SysDept> sysDeptWrapper = new QueryWrapper<>();
        sysDeptWrapper.lambda().eq(SysDept::getParentId, currentId);
        List<SysDeptVo> children = sysDeptMapper.selectVoList(sysDeptWrapper);
        if (children != null && !children.isEmpty()) {
            for (SysDeptVo child : children) {
                Long childId = child.getDeptId();
                collector.add(childId);
                collectDescendants(childId, collector);
            }
        }
    }
    /**
     * æ–°å¢žç‚¹æ£€è®¡åˆ’
     *
     * @param bo ç‚¹æ£€è®¡åˆ’
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsInspectPlanBo bo) {
        EimsInspectPlan add = MapstructUtils.convert(bo, EimsInspectPlan.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setId(add.getId());
        }
        return flag;
    }
    /**
     * ä¿®æ”¹ç‚¹æ£€è®¡åˆ’
     *
     * @param bo ç‚¹æ£€è®¡åˆ’
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsInspectPlanBo bo) {
        EimsInspectPlan update = MapstructUtils.convert(bo, EimsInspectPlan.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(EimsInspectPlan entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ç‚¹æ£€è®¡åˆ’信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,255 @@
package org.dromara.eims.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.SneakyThrows;
import org.dromara.common.core.utils.DateUtils;
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.EimsInspectPlan;
import org.dromara.eims.domain.EimsMaintPlan;
import org.dromara.eims.domain.vo.EimsMaintOrderVo;
import org.dromara.eims.mapper.EimsInspectPlanMapper;
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;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsInspectRecordBo;
import org.dromara.eims.domain.vo.EimsInspectRecordVo;
import org.dromara.eims.domain.EimsInspectRecord;
import org.dromara.eims.mapper.EimsInspectRecordMapper;
import org.dromara.eims.service.IEimsInspectRecordService;
import java.util.*;
/**
 * ç‚¹æ£€è®°å½•Service业务层处理
 *
 * @author zhuguifei
 * @date 2025-03-13
 */
@RequiredArgsConstructor
@Service
public class EimsInspectRecordServiceImpl implements IEimsInspectRecordService {
    private final EimsInspectRecordMapper baseMapper;
    private final SysDeptMapper sysDeptMapper;
    private final EimsInspectPlanMapper planMapper;
    /**
     * æŸ¥è¯¢ç‚¹æ£€è®°å½•
     *
     * @param id ä¸»é”®
     * @return ç‚¹æ£€è®°å½•
     */
    @Override
    public EimsInspectRecordVo queryById(Long id){
        return baseMapper.selectVoById(id);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€è®°å½•列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€è®°å½•分页列表
     */
    @Override
    public TableDataInfo<EimsInspectRecordVo> queryPageList(EimsInspectRecordBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<EimsInspectRecord> lqw = buildQueryWrapper(bo);
        Page<EimsInspectRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }
    @Override
    public TableDataInfo<EimsInspectRecordVo> queryPageListCustom(EimsInspectRecordBo bo, PageQuery pageQuery) {
        Page<EimsInspectRecordVo> page = baseMapper.selectInspRecordList(pageQuery.build(), buildWrapper(bo));
        return TableDataInfo.build(page);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„点检记录列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ç‚¹æ£€è®°å½•列表
     */
    @Override
    public List<EimsInspectRecordVo> queryList(EimsInspectRecordBo bo) {
        LambdaQueryWrapper<EimsInspectRecord> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsInspectRecord> buildQueryWrapper(EimsInspectRecordBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<EimsInspectRecord> lqw = Wrappers.lambdaQuery();
        lqw.eq(bo.getEquId() != null, EimsInspectRecord::getEquId, bo.getEquId());
        lqw.like(StringUtils.isNotBlank(bo.getInspName()), EimsInspectRecord::getInspName, bo.getInspName());
        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsInspectRecord::getStatus, bo.getStatus());
        lqw.eq(StringUtils.isNotBlank(bo.getInspCode()), EimsInspectRecord::getInspCode, bo.getInspCode());
        lqw.eq(StringUtils.isNotBlank(bo.getInspResult()), EimsInspectRecord::getInspResult, bo.getInspResult());
        lqw.eq(bo.getInspTime() != null, EimsInspectRecord::getInspTime, bo.getInspTime());
        lqw.eq(bo.getPlanTime() != null, EimsInspectRecord::getPlanTime, bo.getPlanTime());
        lqw.eq(bo.getVerifyUser() != null, EimsInspectRecord::getVerifyUser, bo.getVerifyUser());
        return lqw;
    }
    private QueryWrapper<EimsInspectRecord> buildWrapper(EimsInspectRecordBo bo) {
        Map<String, Object> params = bo.getParams();
        QueryWrapper<EimsInspectRecord> qw = Wrappers.query();
        qw.like(StringUtils.isNotBlank(bo.getInspCode()),"ir.insp_code", bo.getInspCode());
        qw.like(StringUtils.isNotBlank(bo.getInspName()),"ir.insp_name", bo.getInspName());
        qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName());
        qw.like(bo.getAssetNo() != null, "equ.asset_no", bo.getAssetNo());
        qw.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId());
        qw.eq(StringUtils.isNotBlank(bo.getInspType()), "ir.insp_type", bo.getInspType());
        qw.eq(bo.getInspUser() != null, "ir.insp_user", bo.getInspUser());
        qw.in(bo.getInspDept() != null, "ir.insp_dept", getAllDescendantIds(bo.getInspDept()));
        qw.eq(bo.getStatus() != null, "ir.status", bo.getStatus());
        qw.eq(bo.getInspResult() != null, "ir.insp_result", bo.getInspResult());
        qw.eq(bo.getPlanTime()!=null,
            "ir.plan_time", bo.getPlanTime());
        qw.orderByDesc("ir.create_time");
        return qw;
    }
    /**
     * æ ¹æ®id,获取所有后代id
     *
     * @param rootId
     * @return
     */
    public List<Long> getAllDescendantIds(Long rootId) {
        List<Long> result = new ArrayList<>();
        result.add(rootId);
        collectDescendants(rootId, result);
        return result;
    }
    private void collectDescendants(Long currentId, List<Long> collector) {
        QueryWrapper<SysDept> sysDeptWrapper = new QueryWrapper<>();
        sysDeptWrapper.lambda().eq(SysDept::getParentId, currentId);
        List<SysDeptVo> children = sysDeptMapper.selectVoList(sysDeptWrapper);
        if (children != null && !children.isEmpty()) {
            for (SysDeptVo child : children) {
                Long childId = child.getDeptId();
                collector.add(childId);
                collectDescendants(childId, collector);
            }
        }
    }
    /**
     * æ–°å¢žç‚¹æ£€è®°å½•
     *
     * @param bo ç‚¹æ£€è®°å½•
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsInspectRecordBo bo) {
        EimsInspectRecord add = MapstructUtils.convert(bo, EimsInspectRecord.class);
        //通过保养计划生成的数据需要更新保养计划
        Long planId = bo.getPlanId();
        if(planId!=null){
            EimsInspectPlan plan = planMapper.selectById(planId);
            setInspNextTime(plan);
            planMapper.updateById(plan);
        }
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setId(add.getId());
        }
        return flag;
    }
    /**
     * è®¡ç®—点检计划下次执行时间
     */
    @SneakyThrows
    private void setInspNextTime(EimsInspectPlan bo) {
        Date oldNext = bo.getInspNextTime();
        //TODO ä¸‹æ¬¡ç‚¹æ£€æ—¶é—´è®¡ç®—规则 0-按固定周期  1-按上次保养时间
        Date newNext = null;
        //下次次执行时间为空抛出异常
        if (oldNext == null) {
            throw new Exception("下次点检时间不能为空!");
        }
        //周期
        Long maintCycle = bo.getInspCycle();
        //单位 1-天 2-周 3-月 4-å­£ 5-å¹´
        String maintCycleUnit = bo.getInspCycleUnit();
        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.setInspNextTime(newNext);
        if(bo.getInspFirstTime()==null){
            bo.setInspFirstTime(oldNext);
        }
        bo.setInspLastTime(oldNext);
    }
    /**
     * ä¿®æ”¹ç‚¹æ£€è®°å½•
     *
     * @param bo ç‚¹æ£€è®°å½•
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsInspectRecordBo bo) {
        EimsInspectRecord update = MapstructUtils.convert(bo, EimsInspectRecord.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(EimsInspectRecord entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ç‚¹æ£€è®°å½•信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,204 @@
package org.dromara.eims.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DictConstants;
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.EimsInspectRecord;
import org.dromara.eims.domain.vo.EimsInspectRecordVo;
import org.dromara.eims.mapper.EimsInspectRecordMapper;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsInspectStBo;
import org.dromara.eims.domain.vo.EimsInspectStVo;
import org.dromara.eims.domain.EimsInspectSt;
import org.dromara.eims.mapper.EimsInspectStMapper;
import org.dromara.eims.service.IEimsInspectStService;
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.stream.Collectors;
/**
 * ç‚¹æ£€æ±‡æ€»Service业务层处理
 *
 * @author zhuguifei
 * @date 2025-03-14
 */
@RequiredArgsConstructor
@Service
public class EimsInspectStServiceImpl implements IEimsInspectStService {
    private final EimsInspectStMapper baseMapper;
    private final EimsInspectRecordMapper recordMapper;
    /**
     * æŸ¥è¯¢ç‚¹æ£€æ±‡æ€»
     *
     * @param id ä¸»é”®
     * @return ç‚¹æ£€æ±‡æ€»
     */
    @Override
    public EimsInspectStVo queryById(Long id){
        return baseMapper.selectVoById(id);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢ç‚¹æ£€æ±‡æ€»åˆ—表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ç‚¹æ£€æ±‡æ€»åˆ†é¡µåˆ—表
     */
    @Override
    public TableDataInfo<EimsInspectStVo> queryPageList(EimsInspectStBo bo, PageQuery pageQuery) {
        QueryWrapper<EimsInspectSt> lqw = buildWrapper(bo);
        Page<EimsInspectStVo> result = baseMapper.selectInspStList(pageQuery.build(), lqw);
        // å¡«å……数据
        fillStData(result);
        return TableDataInfo.build(result);
    }
    private void fillStData(Page<EimsInspectStVo> result) {
        List<EimsInspectStVo> records = result.getRecords();
        for (int i = 0; i < records.size(); i++) {
            EimsInspectStVo stVo = records.get(i);
            //2.统计数据
            LambdaQueryWrapper<EimsInspectRecord> recordLqw = Wrappers.lambdaQuery();
            recordLqw.eq(EimsInspectRecord::getEquId, stVo.getEquId());
            LocalDate planTime = stVo.getPlanTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            LocalDate startOfMonth = planTime.with(TemporalAdjusters.firstDayOfMonth());
            LocalDate endOfMonth = planTime.with(TemporalAdjusters.lastDayOfMonth());
            recordLqw.between(EimsInspectRecord::getPlanTime, startOfMonth, endOfMonth);
            // æ‰§è¡ŒæŸ¥è¯¢
            List<EimsInspectRecordVo> recordList = recordMapper.selectVoList(recordLqw);
            // TODO æ ¹æ®å­—å…¸eims_inspect_status
            Map<String, Long> cMap = recordList.stream()
                .filter(order -> List.of("0", "1").contains(order.getStatus()))
                .collect(Collectors.groupingBy(EimsInspectRecordVo::getStatus, Collectors.counting()));
            // TODO æ ¹æ®å­—å…¸eims_inspect_result
            Map<String, Long> rMap = recordList.stream()
                .filter(order ->order.getInspResult()!=null && List.of("1", "2").contains(order.getInspResult()))
                .collect(Collectors.groupingBy(EimsInspectRecordVo::getStatus, Collectors.counting()));
            stVo.setRecordCount(recordList.size());
            stVo.setUnCheckCount(cMap.getOrDefault("0", 0L).intValue());
            stVo.setCheckCount(cMap.getOrDefault("1", 0L).intValue());
            stVo.setNormalNum(rMap.getOrDefault("1", 0L).intValue());
            stVo.setAbNormalNum(rMap.getOrDefault("2", 0L).intValue());
        }
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„点检汇总列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ç‚¹æ£€æ±‡æ€»åˆ—表
     */
    @Override
    public List<EimsInspectStVo> queryList(EimsInspectStBo bo) {
        LambdaQueryWrapper<EimsInspectSt> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsInspectSt> buildQueryWrapper(EimsInspectStBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<EimsInspectSt> lqw = Wrappers.lambdaQuery();
        lqw.eq(bo.getEquId() != null, EimsInspectSt::getEquId, bo.getEquId());
        lqw.eq(bo.getPlanTime() != null, EimsInspectSt::getPlanTime, bo.getPlanTime());
        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsInspectSt::getStatus, bo.getStatus());
        lqw.eq(bo.getInspUser() != null, EimsInspectSt::getInspUser, bo.getInspUser());
        lqw.eq(bo.getVerifyUser() != null, EimsInspectSt::getVerifyUser, bo.getVerifyUser());
        lqw.eq(bo.getVerifyTime() != null, EimsInspectSt::getVerifyTime, bo.getVerifyTime());
        return lqw;
    }
    private QueryWrapper<EimsInspectSt> buildWrapper(EimsInspectStBo bo) {
        Map<String, Object> params = bo.getParams();
        QueryWrapper<EimsInspectSt> qw = Wrappers.query();
        qw.like(StringUtils.isNotBlank(bo.getTitle()), "st.title", bo.getTitle());
        qw.like(StringUtils.isNotBlank(bo.getEquName()), "equ.equ_name", bo.getEquName());
        qw.like(StringUtils.isNotBlank(bo.getAssetNo()), "equ.asset_no", bo.getAssetNo());
        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
            "st.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
        qw.eq(bo.getInspUser() != null, "st.maint_user", bo.getInspUser());
        qw.eq(bo.getVerifyUser() != null, "st.verify_user", bo.getVerifyUser());
        qw.eq(bo.getStatus() != null, "st.status", bo.getStatus());
        qw.orderByDesc( "st.create_time");
        return qw;
    }
    /**
     * æ–°å¢žç‚¹æ£€æ±‡æ€»
     *
     * @param bo ç‚¹æ£€æ±‡æ€»
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsInspectStBo bo) {
        EimsInspectSt add = MapstructUtils.convert(bo, EimsInspectSt.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setId(add.getId());
        }
        return flag;
    }
    /**
     * ä¿®æ”¹ç‚¹æ£€æ±‡æ€»
     *
     * @param bo ç‚¹æ£€æ±‡æ€»
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsInspectStBo bo) {
        EimsInspectSt update = MapstructUtils.convert(bo, EimsInspectSt.class);
        if(bo.getVerifyUser()!=null){
            EimsInspectSt st = baseMapper.selectById(bo.getId());
            String status = st.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(EimsInspectSt entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ç‚¹æ£€æ±‡æ€»ä¿¡æ¯
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
@@ -112,6 +112,8 @@
        qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus());
        qw.eq(bo.getPlanTime()!=null,
            "mo.plan_time", bo.getPlanTime());
        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
            "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
        qw.orderByDesc("mo.create_time");
        return qw;
    }
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintStServiceImpl.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderStServiceImpl.java ÐÞ¸Ä
@@ -1,9 +1,9 @@
package org.dromara.eims.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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;
@@ -12,18 +12,17 @@
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.EimsMaintSt;
import org.dromara.eims.domain.bo.EimsMaintStBo;
import org.dromara.eims.domain.vo.EimsMaintOrderVo;
import org.dromara.eims.domain.vo.EimsMaintStVo;
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.dromara.eims.mapper.EimsMaintStMapper;
import org.dromara.eims.service.IEimsMaintStService;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
@@ -44,9 +43,9 @@
 */
@RequiredArgsConstructor
@Service
public class EimsMaintOrderStServiceImpl implements IEimsMaintOrderStService {
public class EimsMaintStServiceImpl implements IEimsMaintStService {
    private final EimsMaintOrderStMapper baseMapper;
    private final EimsMaintStMapper baseMapper;
    private final EimsEquMapper equMapper;
    private final EimsMaintOrderMapper orderMapper;
@@ -57,7 +56,7 @@
     * @return ä¿å…»å·¥å•汇总
     */
    @Override
    public EimsMaintOrderStVo queryById(Long id) {
    public EimsMaintStVo queryById(Long id) {
        return baseMapper.selectVoById(id);
    }
@@ -69,18 +68,17 @@
     * @return ä¿å…»å·¥å•汇总分页列表
     */
    @Override
    public TableDataInfo<EimsMaintOrderStVo> queryPageList(EimsMaintOrderStBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<EimsMaintOrderSt> lqw = buildQueryWrapper(bo);
        Page<EimsMaintOrderStVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
    public TableDataInfo<EimsMaintStVo> queryPageList(EimsMaintStBo bo, PageQuery pageQuery) {
        Page<EimsMaintStVo> result = baseMapper.selectMaintStList(pageQuery.build(), buildWrapper(bo));
        // å¡«å……数据
        fillStData(result);
        return TableDataInfo.build(result);
    }
    private void fillStData(Page<EimsMaintOrderStVo> result) {
        List<EimsMaintOrderStVo> records = result.getRecords();
    private void fillStData(Page<EimsMaintStVo> result) {
        List<EimsMaintStVo> records = result.getRecords();
        for (int i = 0; i < records.size(); i++) {
            EimsMaintOrderStVo stVo = records.get(i);
            EimsMaintStVo stVo = records.get(i);
            //1.填充设备
            EimsEqu eimsEqu = equMapper.selectById(stVo.getEquId());
            stVo.setAssetNo(eimsEqu.getAssetNo());
@@ -88,7 +86,6 @@
            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);
@@ -115,20 +112,35 @@
     * @return ä¿å…»å·¥å•汇总列表
     */
    @Override
    public List<EimsMaintOrderStVo> queryList(EimsMaintOrderStBo bo) {
        LambdaQueryWrapper<EimsMaintOrderSt> lqw = buildQueryWrapper(bo);
    public List<EimsMaintStVo> queryList(EimsMaintStBo bo) {
        LambdaQueryWrapper<EimsMaintSt> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsMaintOrderSt> buildQueryWrapper(EimsMaintOrderStBo bo) {
    private LambdaQueryWrapper<EimsMaintSt> buildQueryWrapper(EimsMaintStBo 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());
        LambdaQueryWrapper<EimsMaintSt> lqw = Wrappers.lambdaQuery();
        lqw.eq(StringUtils.isNotBlank(bo.getTitle()), EimsMaintSt::getTitle, bo.getTitle());
        lqw.eq(bo.getPlanTime() != null, EimsMaintSt::getPlanTime, bo.getPlanTime());
        lqw.eq(bo.getMaintUser() != null, EimsMaintSt::getMaintUser, bo.getMaintUser());
        lqw.eq(bo.getVerifyUser() != null, EimsMaintSt::getVerifyUser, bo.getVerifyUser());
        return lqw;
    }
    private QueryWrapper<EimsMaintSt> buildWrapper(EimsMaintStBo bo) {
        Map<String, Object> params = bo.getParams();
        QueryWrapper<EimsMaintSt> qw =  Wrappers.query();
        qw.like(StringUtils.isNotBlank(bo.getTitle()), "st.title", bo.getTitle());
        qw.like(StringUtils.isNotBlank(bo.getEquName()), "equ.equ_name", bo.getEquName());
        qw.like(StringUtils.isNotBlank(bo.getAssetNo()), "equ.asset_no", bo.getAssetNo());
        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
            "st.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
        qw.eq(bo.getMaintUser() != null, "st.maint_user", bo.getMaintUser());
        qw.eq(bo.getVerifyUser() != null, "st.verify_user", bo.getVerifyUser());
        qw.eq(bo.getStatus() != null, "st.status", bo.getStatus());
        qw.orderByDesc( "st.create_time");
        return qw;
    }
    /**
@@ -138,8 +150,8 @@
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsMaintOrderStBo bo) {
        EimsMaintOrderSt add = MapstructUtils.convert(bo, EimsMaintOrderSt.class);
    public Boolean insertByBo(EimsMaintStBo bo) {
        EimsMaintSt add = MapstructUtils.convert(bo, EimsMaintSt.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
@@ -155,12 +167,12 @@
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsMaintOrderStBo bo) {
        EimsMaintOrderSt update = MapstructUtils.convert(bo, EimsMaintOrderSt.class);
    public Boolean updateByBo(EimsMaintStBo bo) {
        EimsMaintSt update = MapstructUtils.convert(bo, EimsMaintSt.class);
        if(bo.getVerifyUser()!=null){
            EimsMaintOrderSt eimsMaintOrderSt = baseMapper.selectById(bo.getId());
            String status = eimsMaintOrderSt.getStatus();
            EimsMaintSt eimsMaintSt = baseMapper.selectById(bo.getId());
            String status = eimsMaintSt.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());
@@ -174,7 +186,7 @@
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(EimsMaintOrderSt entity) {
    private void validEntityBeforeSave(EimsMaintSt entity) {
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
@@ -194,7 +206,7 @@
        }
        AtomicBoolean flag = new AtomicBoolean(false);
        ids.stream().anyMatch(id -> {
            EimsMaintOrderStVo stVo = baseMapper.selectVoById(id);
            EimsMaintStVo 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());
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInspectPlanMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<?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.EimsInspectPlanMapper">
    <resultMap type="org.dromara.eims.domain.vo.EimsInspectPlanVo" id="EimsInspectPlanResult">
    </resultMap>
    <select id="selectInspPlanList" resultMap="EimsInspectPlanResult">
        SELECT ip.*,equ.equ_name equName,equ.equ_code equCode,equ.asset_no assetNo,equ.model_no modelNo,
               us.nick_name inspUserName,dp.dept_name inspDeptName,
               CONCAT_WS('', ip.insp_cycle, dd.dict_label) inspCycleUnitName
        FROM eims_inspect_plan ip
                 LEFT JOIN eims_equ equ ON ip.equ_id = equ.equ_id
                 LEFT JOIN sys_user us ON ip.insp_user = us.user_id
                 LEFT JOIN sys_dept dp ON ip.insp_dept = dp.dept_id
                 LEFT JOIN sys_dict_data dd on dd.dict_type = 'maint_cycle_unit' and dd.dict_value = ip.insp_cycle_unit
            ${ew.getCustomSqlSegment}
    </select>
</mapper>
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInspectRecordMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
<?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.EimsInspectRecordMapper">
    <resultMap type="org.dromara.eims.domain.vo.EimsInspectRecordVo" id="EimsInspRecordVoResult">
    </resultMap>
    <select id="selectInspRecordList" resultMap="EimsInspRecordVoResult">
        SELECT ir.*,equ.equ_name equName,equ.equ_code equCode,equ.asset_no assetNo,equ.model_no modelNo,ir.create_time createTime,
               us.nick_name inspUserName,dp.dept_name inspDeptName,ue.nick_name verifyUserName
        FROM eims_inspect_record ir
                 LEFT JOIN eims_equ equ ON ir.equ_id = equ.equ_id
                 LEFT JOIN sys_user us ON ir.insp_user = us.user_id
                 LEFT JOIN sys_user ue ON ir.verify_user = ue.user_id
                 LEFT JOIN sys_dept dp ON ir.insp_dept = dp.dept_id
            ${ew.getCustomSqlSegment}
    </select>
</mapper>
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInspectStMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?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.EimsInspectStMapper">
    <resultMap type="org.dromara.eims.domain.vo.EimsInspectStVo" id="MaintInspStVoResult">
    </resultMap>
    <select id="selectInspStList" resultMap="MaintInspStVoResult">
        SELECT st.*,equ.equ_name equName,equ.asset_no assetNo FROM eims_inspect_st st
                                             LEFT JOIN eims_equ equ on st.equ_id = equ.equ_id
            ${ew.getCustomSqlSegment}
    </select>
</mapper>
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintOrderStMapper.xml
ÎļþÒÑɾ³ý
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsMaintStMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<?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.EimsMaintStMapper">
    <resultMap type="org.dromara.eims.domain.vo.EimsMaintStVo" id="MaintMaintStVoResult">
    </resultMap>
    <select id="selectMaintStList" resultMap="MaintMaintStVoResult">
        SELECT st.*,equ.equ_name equName,equ.asset_no assetNo FROM eims_maint_st st
            LEFT JOIN eims_equ equ on st.equ_id = equ.equ_id
            ${ew.getCustomSqlSegment}
    </select>
</mapper>