车间能级提升-智能设备管理系统
朱桂飞
2025-01-15 d5dff36d38fc7a211b34916796bbc37f17e7a2d0
完成设备管理部分功能
已添加31个文件
已复制2个文件
已重命名13个文件
已删除3个文件
已修改7个文件
4131 ■■■■■ 文件已修改
eims-ui/apps/web-antd/src/api/eims/equ-statu/index.ts 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/equ-statu/model.d.ts 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/equ-trial/index.ts 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/equ-trial/model.d.ts 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-detail/index.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-statu/equ-statu-drawer.vue 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-statu/index.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-statu/statu-preview-drawer.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-trial/data.tsx 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-trial/equ-trial-drawer.vue 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-trial/index.vue 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ-trial/trial-preview-drawer.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ/data.tsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ/equ-drawer.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/equ/index.vue 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquTypeService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/EquNameTranslationImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquStatuController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTrialController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTypeController.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEqu.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquStatu.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquTrial.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquType.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquBo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquStatuBo.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTrialBo.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTypeBo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquStatuVo.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTrialVo.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTypeVo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquVo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquStatuMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTrialMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTypeMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquTypeMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquStatuService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTrialService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTypeService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquServiceImpl.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquStatuServiceImpl.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTrialServiceImpl.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTypeServiceImpl.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquServiceImpl.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquStatuMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTrialMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTypeMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/api/eims/equ-statu/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
import type { EquStatuVO } from './model';
import type { ID, IDS } from '#/api/common';
import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';
enum Api {
  equStatuExport = '/eims/equStatu/export',
  equStatuList = '/eims/equStatu/list',
  root = '/eims/equStatu'
}
/**
 * æŸ¥è¯¢è®¾å¤‡çŠ¶æ€è®°å½•åˆ—è¡¨
 * @param query
 * @returns {*}
 */
export function listEquStatu(params?: any) {
  return requestClient.get<EquStatuVO[]>(Api.equStatuList, { params });
}
/**
 * æŸ¥è¯¢è®¾å¤‡çŠ¶æ€è®°å½•è¯¦ç»†
 * @param statuId
 */
export function getEquStatu(statuId: ID) {
  return requestClient.get<EquStatuVO>(`${Api.root}/${statuId}`);
}
/**
 * æ–°å¢žè®¾å¤‡çŠ¶æ€è®°å½•
 * @param data
 */
export function addEquStatu(data: any) {
  return requestClient.postWithMsg<void>(Api.root, data);
}
/**
 * ä¿®æ”¹è®¾å¤‡çŠ¶æ€è®°å½•
 * @param data
 */
export function updateEquStatu(data: any) {
  return requestClient.putWithMsg<void>(Api.root, data);
}
/**
 * åˆ é™¤è®¾å¤‡çŠ¶æ€è®°å½•
 * @param statuId
 */
export function delEquStatu(statuId: IDS) {
  return requestClient.deleteWithMsg<void>(`${Api.root}/${statuId}`);
}
/**
 * å¯¼å‡º
 * @param
 */
export function equStatuExport(data: any) {
  return commonExport(Api.equStatuExport, data);
}
eims-ui/apps/web-antd/src/api/eims/equ-statu/model.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,131 @@
export interface EquStatuVO {
  /**
   * è®¾å¤‡çŠ¶æ€è®°å½•id
   */
  equStatuId: string | number;
  /**
   * è®¾å¤‡id
   */
  equId: string | number;
  /**
   * å˜æ›´å‰çŠ¶æ€
   */
  beforeChange: string;
  /**
   * å˜æ›´åŽçŠ¶æ€
   */
  afterChange: string;
  /**
   * å˜æ›´æ—¥æœŸ
   */
  changeDate: string;
  /**
   * å˜æ›´äºº
   */
  changeUser: number;
  /**
   * å˜æ›´äººéƒ¨é—¨
   */
  userDept: number;
  /**
   * å˜æ›´æè¿°
   */
  changeDesc: string;
  /**
   * æè¿°
   */
  remark: string;
}
export interface EquStatuForm extends BaseEntity {
  /**
   * è®¾å¤‡çŠ¶æ€è®°å½•id
   */
  equStatuId?: string | number;
  /**
   * è®¾å¤‡id
   */
  equId?: string | number;
  /**
   * å˜æ›´å‰çŠ¶æ€
   */
  beforeChange?: string;
  /**
   * å˜æ›´åŽçŠ¶æ€
   */
  afterChange?: string;
  /**
   * å˜æ›´æ—¥æœŸ
   */
  changeDate?: string;
  /**
   * å˜æ›´äºº
   */
  changeUser?: number;
  /**
   * å˜æ›´äººéƒ¨é—¨
   */
  userDept?: number;
  /**
   * å˜æ›´æè¿°
   */
  changeDesc?: string;
  /**
   * æè¿°
   */
  remark?: string;
}
export interface EquStatuQuery extends PageQuery {
  /**
   * è®¾å¤‡id
   */
  equId?: string | number;
  /**
   * å˜æ›´å‰çŠ¶æ€
   */
  beforeChange?: string;
  /**
   * å˜æ›´åŽçŠ¶æ€
   */
  afterChange?: string;
  /**
   * å˜æ›´æ—¥æœŸ
   */
  changeDate?: string;
  /**
   * å˜æ›´äºº
   */
  changeUser?: number;
    /**
     * æ—¥æœŸèŒƒå›´å‚æ•°
     */
    params?: any;
}
eims-ui/apps/web-antd/src/api/eims/equ-trial/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
import type { EquTrialVO } from './model';
import type { ID, IDS } from '#/api/common';
import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';
enum Api {
  equTrialExport = '/eims/equTrial/export',
  equTrialList = '/eims/equTrial/list',
  root = '/eims/equTrial'
}
/**
 * æŸ¥è¯¢è®¾å¤‡è¯•产记录列表
 * @param query
 * @returns {*}
 */
export function listEquTrial(params?: any) {
  return requestClient.get<EquTrialVO[]>(Api.equTrialList, { params });
}
/**
 * æŸ¥è¯¢è®¾å¤‡è¯•产记录详细
 * @param trialId
 */
export function getEquTrial(trialId: ID) {
  return requestClient.get<EquTrialVO>(`${Api.root}/${trialId}`);
}
/**
 * æ–°å¢žè®¾å¤‡è¯•产记录
 * @param data
 */
export function addEquTrial(data: any) {
  return requestClient.postWithMsg<void>(Api.root, data);
}
/**
 * ä¿®æ”¹è®¾å¤‡è¯•产记录
 * @param data
 */
export function updateEquTrial(data: any) {
  return requestClient.putWithMsg<void>(Api.root, data);
}
/**
 * åˆ é™¤è®¾å¤‡è¯•产记录
 * @param trialId
 */
export function delEquTrial(trialId: IDS) {
  return requestClient.deleteWithMsg<void>(`${Api.root}/${trialId}`);
}
/**
 * å¯¼å‡º
 * @param
 */
export function equTrialExport(data: any) {
  return commonExport(Api.equTrialExport, data);
}
eims-ui/apps/web-antd/src/api/eims/equ-trial/model.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,225 @@
export interface EquTrialVO {
  /**
   * è¯•用记录id
   */
  trialId: number | string;
  /**
   * è®¾å¤‡id
   */
  equId: number | string;
  /**
   * è¯•产数量
   */
  trialNum: number;
  /**
   * è¯•产日期
   */
  trialDate: string;
  /**
   * è‰¯å“æ•°é‡
   */
  proGoodNum: number;
  /**
   * è‰¯å“çއ
   */
  proGoodRate: number;
  /**
   * æ“ä½œäºº(id)
   */
  operatorId: number | string;
  /**
   * å¼€å§‹æ—¶é—´
   */
  startTime: string;
  /**
   * ç»“束时间
   */
  endTime: string;
  /**
   * è¿è¡Œæ—¶é•¿
   */
  runTime: string;
  /**
   * åœæœºæ—¶é•¿
   */
  stopTime: string;
  /**
   * è®¡åˆ’运行时长
   */
  planRunTime: string;
  /**
   * è°ƒè¯•履历
   */
  debugHistory: string;
  /**
   * è®¾å¤‡ç»¼åˆæ•ˆçއ
   */
  oee: number;
  /**
   * å¤‡æ³¨
   */
  remark: string;
}
export interface EquTrialForm extends BaseEntity {
  /**
   * è¯•用记录id
   */
  trialId?: number | string;
  /**
   * è®¾å¤‡id
   */
  equId?: number | string;
  /**
   * è¯•产数量
   */
  trialNum?: number;
  /**
   * è¯•产日期
   */
  trialDate?: string;
  /**
   * è‰¯å“æ•°é‡
   */
  proGoodNum?: number;
  /**
   * è‰¯å“çއ
   */
  proGoodRate?: number;
  /**
   * æ“ä½œäºº(id)
   */
  operatorId?: number | string;
  /**
   * å¼€å§‹æ—¶é—´
   */
  startTime?: string;
  /**
   * ç»“束时间
   */
  endTime?: string;
  /**
   * è¿è¡Œæ—¶é•¿
   */
  runTime?: string;
  /**
   * åœæœºæ—¶é•¿
   */
  stopTime?: string;
  /**
   * è®¡åˆ’运行时长
   */
  planRunTime?: string;
  /**
   * è°ƒè¯•履历
   */
  debugHistory?: string;
  /**
   * è®¾å¤‡ç»¼åˆæ•ˆçއ
   */
  oee?: number;
  /**
   * å¤‡æ³¨
   */
  remark?: string;
}
export interface EquTrialQuery extends PageQuery {
  /**
   * è®¾å¤‡id
   */
  equId?: number | string;
  /**
   * è¯•产数量
   */
  trialNum?: number;
  /**
   * è¯•产日期
   */
  trialDate?: string;
  /**
   * è‰¯å“æ•°é‡
   */
  proGoodNum?: number;
  /**
   * è‰¯å“çއ
   */
  proGoodRate?: number;
  /**
   * æ“ä½œäºº(id)
   */
  operatorId?: number | string;
  /**
   * å¼€å§‹æ—¶é—´
   */
  startTime?: string;
  /**
   * ç»“束时间
   */
  endTime?: string;
  /**
   * è¿è¡Œæ—¶é•¿
   */
  runTime?: string;
  /**
   * åœæœºæ—¶é•¿
   */
  stopTime?: string;
  /**
   * è®¡åˆ’运行时长
   */
  planRunTime?: string;
  /**
   * è°ƒè¯•履历
   */
  debugHistory?: string;
  /**
   * è®¾å¤‡ç»¼åˆæ•ˆçއ
   */
  oee?: number;
  /**
   * æ—¥æœŸèŒƒå›´å‚æ•°
   */
  params?: any;
}
eims-ui/apps/web-antd/src/views/eims/equ-detail/index.vue
@@ -11,6 +11,8 @@
import { getEqu } from '#/api/eims/equ';
import equDrawer from '#/views/eims/equ/equ-drawer.vue';
import EquTrial from '#/views/eims/equ-trial/index.vue';
import EquStatu from '#/views/eims/equ-statu/index.vue';
const route = useRoute();
const equId = route.params.equId as string;
@@ -57,24 +59,21 @@
          <div class="w-3/4 min-w-[640px] flex align-center justify-around">
            <Divider class="h-full" type="vertical" />
            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100"
                 style="background: #f2f6fe">
            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100" style="background: #f2f6fe">
              <Image :preview="false" :width="40" src="/src/assets/logo.png" />
              <div class="flex flex-col ml-6 mr-2">
                <span class="text-xl font-bold">100%</span>
                <span class="mt-5 text-gray-500">设备健康度</span>
              </div>
            </div>
            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100"
                 style="background: #fcf8ee">
            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100" style="background: #fcf8ee">
              <Image :preview="false" :width="40" src="/src/assets/logo.png" />
              <div class="flex flex-col ml-6 mr-2">
                <span class="text-xl font-bold">86.6h</span>
                <span class="mt-5 text-gray-500">平均故障时间</span>
              </div>
            </div>
            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100"
                 style="background: #ecf5de">
            <div class="flex w-1/4 h-full cursor-pointer items-center justify-center rounded-sm hover:bg-gray-100" style="background: #ecf5de">
              <Image :preview="false" :width="40" src="/src/assets/logo.png" />
              <div class="flex flex-col ml-6 mr-2">
                <span class="text-xl font-bold">0元</span>
@@ -115,10 +114,8 @@
            <Descriptions class="mt-3" size="small" title="设备图片">
              <DescriptionsItem>
                <ImagePreviewGroup>
                  <Image :width="200"
                         src="https://shlanpu.cn/uploads/images/202404/ebb24dc0610cf8e83a19fb0f568bf530.png" />
                  <Image :width="200"
                         src="https://shlanpu.cn/uploads/images/202404/c2212b8fc38bdd20e9d1cf79da40698d.jpg" />
                  <Image :width="200" src="https://shlanpu.cn/uploads/images/202404/ebb24dc0610cf8e83a19fb0f568bf530.png" />
                  <Image :width="200" src="https://shlanpu.cn/uploads/images/202404/c2212b8fc38bdd20e9d1cf79da40698d.jpg" />
                </ImagePreviewGroup>
              </DescriptionsItem>
            </Descriptions>
@@ -127,10 +124,14 @@
          <TabPane key="3" tab="保养">Content of Tab Pane 3</TabPane>
          <TabPane key="4" tab="点检">Content of Tab Pane 3</TabPane>
          <TabPane key="5" tab="备件">Content of Tab Pane 3</TabPane>
          <TabPane key="5" tab="附件">Content of Tab Pane 3</TabPane>
          <TabPane key="6" tab="设备履历">Content of Tab Pane 3</TabPane>
          <TabPane key="7" tab="试产记录">Content of Tab Pane 3</TabPane>
          <TabPane key="8" tab="状态记录">Content of Tab Pane 3</TabPane>
          <TabPane key="6" tab="附件">Content of Tab Pane 3</TabPane>
          <TabPane key="7" tab="设备履历">Content of Tab Pane 3</TabPane>
          <TabPane key="8" tab="试产记录">
            <EquTrial :equ-detail-flag="true" :equ-id="equId" />
          </TabPane>
          <TabPane key="9" tab="状态记录">
            <EquStatu :equ-detail-flag="true" :equ-id="equId" />
          </TabPane>
        </Tabs>
      </Card>
    </div>
eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,269 @@
import type { VxeGridProps } from '#/adapter/vxe-table';
import type { DescItem } from '#/components/description';
import { DictEnum } from '@vben/constants';
import { getPopupContainer } from '@vben/utils';
import { Tag } from 'ant-design-vue';
import { type FormSchemaGetter } from '#/adapter/form';
import { getDictOptions } from '#/utils/dict';
export const querySchema: FormSchemaGetter = () => [
  {
    component: 'Select',
    componentProps: {
      showSearch: true,
      allowClear: true,
      getPopupContainer
    },
    fieldName: 'equId',
    label: '设备名称'
  },
  {
    component: 'RangePicker',
    fieldName: 'changeDate',
    label: '变更日期'
  }
];
export const columns: VxeGridProps['columns'] = [
  { type: 'checkbox', width: 60, fixed: 'left' },
  {
    title: '设备名称',
    field: 'equName',
    minWidth: 100,
    fixed: 'left',
    slots: { default: 'equName' }
  },
  {
    title: '变更日期',
    field: 'changeDate',
    sortable: true,
    minWidth: 180
  },
  {
    title: '变更前',
    field: 'beforeChange',
    sortable: true,
    slots: {
      default: ({ row }) => {
        const statu = row.beforeChange;
        switch (statu) {
          case '0': {
            return <Tag color="cyan">试用</Tag>;
          }
          case '1': {
            return <Tag color="green">入固</Tag>;
          }
          case '2': {
            return <Tag color="orange">迁移</Tag>;
          }
          case '3': {
            return <Tag color="red">报废</Tag>;
          }
          case null: {
            return '';
          }
          // No default
        }
        return '';
      }
    },
    minWidth: 80,
    fixed: 'left'
  },
  {
    title: '变更后',
    field: 'afterChange',
    sortable: true,
    slots: {
      default: ({ row }) => {
        const statu = row.afterChange;
        switch (statu) {
          case '0': {
            return <Tag color="cyan">试用</Tag>;
          }
          case '1': {
            return <Tag color="green">入固</Tag>;
          }
          case '2': {
            return <Tag color="orange">迁移</Tag>;
          }
          case '3': {
            return <Tag color="red">报废</Tag>;
          }
          case null: {
            return '';
          }
          // No default
        }
        return '';
      }
    },
    minWidth: 80,
    fixed: 'left'
  },
  {
    title: '变更描述',
    field: 'changeDesc',
    minWidth: 120
  },
  {
    title: '变更人',
    field: 'changeUserName',
    minWidth: 120
  },
  {
    field: 'action',
    fixed: 'right',
    slots: { default: 'action' },
    title: '操作',
    width: 200
  }
];
export const drawerSchema: FormSchemaGetter = () => [
  {
    component: 'Input',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    },
    fieldName: 'equStatuId'
  },
  {
    component: 'Select',
    componentProps: {
      showSearch: true,
      allowClear: true,
      getPopupContainer
    },
    fieldName: 'equId',
    label: '设备名称'
  },
  {
    component: 'DatePicker',
    componentProps: {
      format: 'YYYY-MM-DD',
      showTime: false,
      valueFormat: 'YYYY-MM-DD HH:mm:ss',
      getPopupContainer
    },
    fieldName: 'changeDate',
    label: '变更日期'
  },
  {
    component: 'TreeSelect',
    // åœ¨drawer里更新 è¿™é‡Œä¸éœ€è¦é»˜è®¤çš„componentProps
    defaultValue: undefined,
    fieldName: 'userDept',
    label: '变更人部门',
    help: `变更人员所属部门`
    // rules: 'selectRequired',
  },
  {
    component: 'Select',
    componentProps: {
      allowClear: true,
      showSearch: true,
      getPopupContainer
    },
    fieldName: 'changeUser',
    label: '变更人',
    help: `设备状态变更操作人员`
  },
  {
    component: 'RadioGroup',
    componentProps: {
      buttonStyle: 'solid',
      options: getDictOptions(DictEnum.SYS_EQU_STATUS),
      optionType: 'button'
    },
    fieldName: 'beforeChange',
    label: '变更前',
    help: '设备变更前状态'
  },
  {
    component: 'RadioGroup',
    componentProps: {
      buttonStyle: 'solid',
      options: getDictOptions(DictEnum.SYS_EQU_STATUS),
      optionType: 'button'
    },
    fieldName: 'afterChange',
    label: '变更后',
    help: '设备变更后状态'
  },
  {
    component: 'Textarea',
    fieldName: 'changeDesc',
    label: '变更描述'
  }
];
export const descSchema: DescItem[] = [
  {
    field: 'equName',
    label: '设备名称'
  },
  {
    field: 'beforeChange',
    label: '变更前',
    render(value) {
      switch (value) {
        case '0': {
          return <Tag color="cyan">试用</Tag>;
        }
        case '1': {
          return <Tag color="green">入固</Tag>;
        }
        case '2': {
          return <Tag color="orange">迁移</Tag>;
        }
        case '3': {
          return <Tag color="red">报废</Tag>;
        }
        case null: {
          return '';
        }
      }
    }
  },
  {
    field: 'afterChange',
    label: '变更后',
    render(value) {
      switch (value) {
        case '0': {
          return <Tag color="cyan">试用</Tag>;
        }
        case '1': {
          return <Tag color="green">入固</Tag>;
        }
        case '2': {
          return <Tag color="orange">迁移</Tag>;
        }
        case '3': {
          return <Tag color="red">报废</Tag>;
        }
        case null: {
          return '';
        }
      }
    }
  },
  {
    field: 'changeDate',
    label: '变更日期'
  },
  {
    field: 'changeDesc',
    label: '变更描述'
  },
  {
    field: 'changeUserName',
    label: '变更人'
  }
];
eims-ui/apps/web-antd/src/views/eims/equ-statu/equ-statu-drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
<script setup lang="ts">
import { computed, ref } from 'vue';
import { useVbenDrawer } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils';
import { useVbenForm } from '#/adapter/form';
import { listEqu } from '#/api/eims/equ';
import { addEquStatu, getEquStatu, updateEquStatu } from '#/api/eims/equ-statu';
import { getDeptTree, userList } from '#/api/system/user';
import { drawerSchema } from './data';
const emit = defineEmits<{ reload: [] }>();
const isUpdate = ref(false);
const title = computed(() => {
  return isUpdate.value ? $t('pages.common.edit') : $t('pages.common.add');
});
const [BasicForm, formApi] = useVbenForm({
  commonConfig: {
    formItemClass: 'col-span-2',
    componentProps: {
      class: 'w-full'
    },
    labelWidth: 120
  },
  schema: drawerSchema(),
  showDefaultActions: false,
  wrapperClass: 'grid-cols-2'
});
const [BasicDrawer, drawerApi] = useVbenDrawer({
  onCancel: handleCancel,
  onConfirm: handleConfirm,
  async onOpenChange(isOpen) {
    if (!isOpen) {
      return null;
    }
    drawerApi.drawerLoading(true);
    const { id } = drawerApi.getData() as { id?: number | string };
    isUpdate.value = !!id;
    // åˆå§‹åŒ–
    await setupEquSelect();
    await setupDeptSelect();
    // è®¾å¤‡è¯¦æƒ…页打开指定设备id
    const { equId } = drawerApi.getData() as { equId?: number | string };
    if (equId) {
      await formApi.setValues({ equId});
    }
    // æ›´æ–° && èµ‹å€¼
    if (isUpdate.value && id) {
      const record = await getEquStatu(id);
      await formApi.setValues(record);
    }
    // è®¾å¤‡id有值时不允许编辑(1.编辑 2.设备详情页打开)
    const flag = equId !== undefined || isUpdate.value;
    formApi.updateSchema([
      {
        componentProps: {
          disabled: flag
        },
        fieldName: 'equId'
      }
    ]);
    drawerApi.drawerLoading(false);
  }
});
async function setupEquSelect() {
  const equPageResult = await listEqu({
    pageNum: 1,
    pageSize: 1000,
  });
  // ä½¿ç”¨map来跟踪已经遇到的equId,使用filter来过滤掉重复的元素。
  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
  const options = uniqueItems.map((item) => ({
    label: item.equName || item.equName,
    value: item.equId
  }));
  // ç­›é€‰
  const filterOption = (input: string, option: any) => {
    return option.label.toLowerCase().includes(input.toLowerCase());
  };
  const placeholder = options.length > 0 ? '请选择' : '暂无设备记录';
  formApi.updateSchema([
    {
      componentProps: {
        options,
        placeholder,
        filterOption,
        async onSelect(equId: number | string) {
          const equ = equPageResult.rows.find((item) => item.equId === equId);
          if (equ && equ.status !== undefined) {
            await formApi.setValues({ beforeChange: equ.status });
          }
        }
      },
      fieldName: 'equId'
    }
  ]);
}
/**
 * ç”¨æˆ·çš„加载
 */
async function setupUserOptions(deptId: any) {
  const params = { deptId };
  const userPageResult = await userList({
    pageNum: 1,
    pageSize: 500,
    ...params
  });
  const options = userPageResult.rows.map((item) => ({
    label: item.nickName || item.userName,
    value: item.userId
  }));
  // ç­›é€‰
  const filterOption = (input: string, option: any) => {
    return option.label.toLowerCase().includes(input.toLowerCase());
  };
  const placeholder = options.length > 0 ? '请选择' : '该部门下暂无用户';
  formApi.updateSchema([
    {
      componentProps: { options, placeholder, filterOption },
      fieldName: 'changeUser'
    }
  ]);
}
/**
 * åˆå§‹åŒ–部门选择
 */
async function setupDeptSelect() {
  // updateSchema
  const deptTree = await getDeptTree();
  // é€‰ä¸­åŽæ˜¾ç¤ºåœ¨è¾“入框的值 å³çˆ¶èŠ‚ç‚¹ / å­èŠ‚ç‚¹
  addFullName(deptTree, 'label', ' / ');
  formApi.updateSchema([
    {
      componentProps: (formModel) => ({
        class: 'w-full',
        fieldNames: {
          key: 'id',
          value: 'id',
          children: 'children'
        },
        getPopupContainer,
        async onSelect(deptId: number | string) {
          /** æ ¹æ®éƒ¨é—¨ID加载用户 */
          await setupUserOptions(deptId);
          /** å˜åŒ–后需要重新选择用户 */
          formModel.respPerson = undefined;
        },
        placeholder: '请选择',
        showSearch: true,
        treeData: deptTree,
        treeDefaultExpandAll: true,
        treeLine: { showLeafIcon: false },
        // ç­›é€‰çš„字段
        treeNodeFilterProp: 'label',
        // é€‰ä¸­åŽæ˜¾ç¤ºåœ¨è¾“入框的值
        treeNodeLabelProp: 'fullName'
      }),
      fieldName: 'userDept'
    }
  ]);
}
async function handleConfirm() {
  try {
    drawerApi.drawerLoading(true);
    const { valid } = await formApi.validate();
    if (!valid) {
      return;
    }
    const data = cloneDeep(await formApi.getValues());
    await (isUpdate.value ? updateEquStatu(data) : addEquStatu(data));
    emit('reload');
    await handleCancel();
  } catch (error) {
    console.error(error);
  } finally {
    drawerApi.drawerLoading(false);
  }
}
async function handleCancel() {
  drawerApi.close();
  await formApi.resetForm();
}
</script>
<template>
  <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
    <BasicForm />
  </BasicDrawer>
</template>
eims-ui/apps/web-antd/src/views/eims/equ-statu/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,244 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { onMounted } from 'vue';
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { getVxePopupContainer } from '@vben/utils';
import { Modal, Popconfirm, Space } from 'ant-design-vue';
import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { listEqu } from '#/api/eims/equ';
import { delEquStatu, equStatuExport, listEquStatu } from '#/api/eims/equ-statu';
import { commonDownloadExcel } from '#/utils/file/download';
import { columns, querySchema } from './data';
import equStatuDrawer from './equ-statu-drawer.vue';
import statuPreviewDrawer from './statu-preview-drawer.vue';
// ä»Žè®¾å¤‡æ˜Žç»†æ‰“开页面 1.不需要设备筛选 2.只查询当前设备数据
interface Props {
  equDetailFlag?: boolean;
  equId?: string;
}
const props = withDefaults(defineProps<Props>(), { equDetailFlag: false, equId: undefined });
const formOptions: VbenFormProps = {
  commonConfig: {
    labelWidth: 80,
    componentProps: {
      allowClear: true
    }
  },
  schema: querySchema(),
  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',
  // æ—¥æœŸé€‰æ‹©æ ¼å¼åŒ–
  fieldMappingTime: [['changeDate', ['params[beginTime]', 'params[endTime]'], ['YYYY-MM-DD 00:00:00', 'YYYY-MM-DD 23:59:59']]]
};
const gridOptions: VxeGridProps = {
  checkboxConfig: {
    // é«˜äº®
    highlight: true,
    // ç¿»é¡µæ—¶ä¿ç•™é€‰ä¸­çŠ¶æ€
    reserve: true
    // ç‚¹å‡»è¡Œé€‰ä¸­
    // trigger: 'row'
  },
  columns,
  height: 'auto',
  keepSource: true,
  pagerConfig: {},
  proxyConfig: {
    ajax: {
      query: async ({ page }, formValues = {}) => {
        // å¦‚果传入了equId则只查询当前id数据
        if (props.equDetailFlag && props.equId) {
          const queryEqu = { equId: props.equId };
          Object.assign(formValues, queryEqu);
        }
        return await listEquStatu({
          pageNum: page.currentPage,
          pageSize: page.pageSize,
          ...formValues
        });
      }
    }
  },
  rowConfig: {
    isHover: true,
    keyField: 'equStatuId'
  },
  sortConfig: {
    // è¿œç¨‹æŽ’序
    remote: true,
    // æ”¯æŒå¤šå­—段排序 é»˜è®¤å…³é—­
    multiple: true,
  },
  id: 'eims-equ-statu-index'
};
const [BasicTable, tableApi] = useVbenVxeGrid({
  formOptions,
  gridOptions,
  gridEvents: {
    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
  },
});
const [EquStatuDrawer, equStatuDrawerApi] = useVbenDrawer({
  connectedComponent: equStatuDrawer
});
const [StatuPreviewDrawer, statuPreviewDrawerApi] = useVbenDrawer({
  connectedComponent: statuPreviewDrawer
});
/**
 * é¢„览
 * @param record
 */
function handlePreview(record: Recordable<any>) {
  statuPreviewDrawerApi.setData({ record });
  statuPreviewDrawerApi.open();
}
onMounted(async () => {
  await setupEquSelect();
});
async function setupEquSelect() {
  const equPageResult = await listEqu({
    pageNum: 1,
    pageSize: 1000
  });
  if (!equPageResult || equPageResult.rows.length < 0) {
    return false;
  }
  // ä½¿ç”¨map来跟踪已经遇到的equId,使用filter来过滤掉重复的元素。
  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
  const options = uniqueItems.map((item) => ({
    label: item.equName || item.equName,
    value: item.equId
  }));
  // ç­›é€‰
  const filterOption = (input: string, option: any) => {
    return option.label.toLowerCase().includes(input.toLowerCase());
  };
  const placeholder = options.length > 0 ? '请选择' : '暂无设备记录';
  // æ›´æ–°selectOptions
  tableApi.formApi.updateSchema([
    {
      componentProps: {
        options,
        placeholder,
        filterOption
      },
      dependencies: {
        show: () => !props.equDetailFlag,
        triggerFields: ['']
      },
      fieldName: 'equId'
    }
  ]);
}
function handleAdd() {
  // è®¾å¤‡è¯¦æƒ…页打开时 åªèƒ½æ–°å¢žæŒ‡å®šè®¾å¤‡id数据
  if (props.equDetailFlag && props.equId) {
    equStatuDrawerApi.setData({ equId: props.equId });
  } else {
    equStatuDrawerApi.setData({});
  }
  equStatuDrawerApi.open();
}
async function handleEdit(record: Recordable<any>) {
  equStatuDrawerApi.setData({ id: record.equStatuId });
  equStatuDrawerApi.open();
}
async function handleDelete(row: Recordable<any>) {
  await delEquStatu(row.equStatuId);
  await tableApi.query();
}
function handleMultiDelete() {
  const rows = tableApi.grid.getCheckboxRecords();
  const ids = rows.map((row: any) => row.equStatuId);
  Modal.confirm({
    title: '提示',
    okType: 'danger',
    content: `确认删除选中的${ids.length}条记录吗?`,
    onOk: async () => {
      await delEquStatu(ids);
      await tableApi.query();
    }
  });
}
function handleDownloadExcel() {
  commonDownloadExcel(equStatuExport, '设备状态变更记录', tableApi.formApi.form.values, {
    fieldMappingTime: formOptions.fieldMappingTime
  });
}
</script>
<template>
  <Page :auto-content-height="true">
    <div class="flex h-full gap-[8px]">
      <BasicTable class="flex-1 overflow-hidden" table-title="试产列表">
        <template #toolbar-tools>
          <Space>
            <a-button v-access:code="['eims:equStatu:export']" @click="handleDownloadExcel">
              {{ $t('pages.common.export') }}
            </a-button>
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:equStatu:remove']"
              @click="handleMultiDelete"
            >
              {{ $t('pages.common.delete') }}
            </a-button>
            <a-button type="primary" v-access:code="['eims:equStatu:add']" @click="handleAdd">
              {{ $t('pages.common.add') }}
            </a-button>
          </Space>
        </template>
        <template #equName="{ row }">
          <Space>
            <span>{{ row.equName }}</span>
          </Space>
        </template>
        <template #action="{ row }">
          <Space>
            <ghost-button v-access:code="['eims:equStatu:edit']" @click.stop="handleEdit(row)">
              {{ $t('pages.common.edit') }}
            </ghost-button>
            <ghost-button class="btn-success" v-access:code="['eims:equStatu:list']" @click.stop="handlePreview(row)">
              {{ $t('pages.common.preview') }}
            </ghost-button>
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
              <ghost-button danger v-access:code="['eims:equStatu:remove']" @click.stop="">
                {{ $t('pages.common.delete') }}
              </ghost-button>
            </Popconfirm>
          </Space>
        </template>
      </BasicTable>
    </div>
    <EquStatuDrawer @reload="tableApi.query()" />
    <StatuPreviewDrawer />
  </Page>
</template>
eims-ui/apps/web-antd/src/views/eims/equ-statu/statu-preview-drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { useVbenDrawer } from '@vben/common-ui';
import { Description, useDescription } from '#/components/description';
import { descSchema } from './data';
const [BasicDrawer, drawerApi] = useVbenDrawer({
  onOpenChange: handleOpenChange,
});
const [registerDescription, { setDescProps }] = useDescription({
  column: 1,
  schema: descSchema,
});
function handleOpenChange(open: boolean) {
  if (!open) {
    return null;
  }
  const { record } = drawerApi.getData() as { record: Recordable<any> };
  setDescProps({ data: record }, true);
}
</script>
<template>
  <BasicDrawer :footer="false" class="w-[600px]" title="试产记录明细">
    <Description @register="registerDescription" />
  </BasicDrawer>
</template>
eims-ui/apps/web-antd/src/views/eims/equ-trial/data.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,291 @@
import type { VxeGridProps } from '#/adapter/vxe-table';
import type { DescItem } from '#/components/description';
import { getPopupContainer } from '@vben/utils';
import { type FormSchemaGetter } from '#/adapter/form';
export const querySchema: FormSchemaGetter = () => [
  {
    component: 'Select',
    componentProps: {
      showSearch: true,
      allowClear: true,
      getPopupContainer
    },
    fieldName: 'equId',
    label: '设备名称'
  },
  {
    component: 'RangePicker',
    fieldName: 'trialDate',
    label: '试产日期'
  }
];
export const columns: VxeGridProps['columns'] = [
  { type: 'checkbox', width: 60, fixed: 'left' },
  {
    title: '设备名称',
    field: 'equName',
    minWidth: 100,
    fixed: 'left',
    slots: { default: 'equName' }
  },
  /* {
    title: '类型',
    slots: {
      // eslint-disable-next-line no-empty-pattern
      default: ({}) => {
        return <Tag color="cyan">试用</Tag>;
      }
    },
    minWidth: 80,
    fixed: 'left'
  },*/
  {
    title: '试产日期',
    field: 'trialDate',
    sortable: true,
    minWidth: 120
  },
  {
    title: '试产数量',
    field: 'trialNum',
    minWidth: 100
  },
  {
    title: '良品数量',
    field: 'proGoodNum',
    minWidth: 100
  },
  {
    title: '良品率',
    field: 'proGoodRate',
    minWidth: 100
  },
  {
    title: '计划运行时长',
    field: 'planRunTime',
    minWidth: 120
  },
  {
    title: '运行时长',
    field: 'runTime',
    minWidth: 100
  },
  {
    title: '停机时长',
    field: 'stopTime',
    minWidth: 100
  },
  {
    title: '调试履历',
    field: 'debugHistory',
    minWidth: 100
  },
  {
    title: '综合效率',
    field: 'oee',
    minWidth: 100
  },
  {
    title: '操作人',
    field: 'operatorName',
    minWidth: 100
  },
  {
    field: 'action',
    fixed: 'right',
    slots: { default: 'action' },
    title: '操作',
    width: 200
  }
];
export const drawerSchema: FormSchemaGetter = () => [
  {
    component: 'Input',
    dependencies: {
      show: () => false,
      triggerFields: ['']
    },
    fieldName: 'trialId'
  },
  {
    component: 'Select',
    componentProps: {
      showSearch: true,
      allowClear: true,
      getPopupContainer
    },
    fieldName: 'equId',
    label: '设备名称'
  },
  {
    component: 'DatePicker',
    componentProps: {
      format: 'YYYY-MM-DD',
      showTime: false,
      valueFormat: 'YYYY-MM-DD',
      getPopupContainer
    },
    fieldName: 'trialDate',
    label: '试产日期'
  },
  {
    component: 'Input',
    fieldName: 'trialNum',
    label: '试产数量'
  },
  {
    component: 'Input',
    fieldName: 'proGoodNum',
    label: '良品数量',
    help: '试产中产品合格数'
  },
  {
    component: 'Input',
    fieldName: 'proGoodRate',
    label: '良品率',
    help: '试产中产品合格率'
  },
  {
    component: 'TimePicker',
    componentProps: {
      format: 'HH:mm:ss',
      showTime: false,
      valueFormat: 'HH:mm:ss',
      getPopupContainer
    },
    fieldName: 'startTime',
    label: '开始时间'
  },
  {
    component: 'TimePicker',
    componentProps: {
      format: 'HH:mm:ss',
      showTime: false,
      valueFormat: 'HH:mm:ss',
      getPopupContainer
    },
    fieldName: 'endTime',
    label: '结束时间'
  },
  {
    component: 'TimePicker',
    componentProps: {
      format: 'HH:mm:ss',
      showTime: false,
      valueFormat: 'HH:mm:ss',
      getPopupContainer
    },
    fieldName: 'planRunTime',
    label: '计划运行时长'
  },
  {
    component: 'TimePicker',
    componentProps: {
      format: 'HH:mm:ss',
      showTime: false,
      valueFormat: 'HH:mm:ss',
      getPopupContainer
    },
    fieldName: 'runTime',
    label: '运行时长'
  },
  {
    component: 'TimePicker',
    componentProps: {
      format: 'HH:mm:ss',
      showTime: false,
      valueFormat: 'HH:mm:ss',
      getPopupContainer
    },
    fieldName: 'stopTime',
    label: '停机时长'
  },
  {
    component: 'Textarea',
    formItemClass: 'items-baseline',
    fieldName: 'debugHistory',
    label: '调试履历'
  },
  {
    component: 'TreeSelect',
    // åœ¨drawer里更新 è¿™é‡Œä¸éœ€è¦é»˜è®¤çš„componentProps
    defaultValue: undefined,
    fieldName: 'operatorDept',
    label: '操作人部门',
    help: `试产操作人员所属部门`
    // rules: 'selectRequired',
  },
  {
    component: 'Select',
    componentProps: {
      allowClear: true,
      showSearch: true,
      getPopupContainer
    },
    fieldName: 'operatorId',
    label: '操作人',
    help: `试产操作人员`
  }
];
export const descSchema: DescItem[] = [
  {
    field: 'equName',
    label: '设备名称'
  },
  {
    field: 'oee',
    label: '综合效率'
  },
  {
    field: 'operatorName',
    label: '操作人'
  },
  {
    field: 'trialDate',
    label: '试产日期'
  },
  {
    field: 'trialNum',
    label: '试产数量'
  },
  {
    field: 'proGoodNum',
    label: '良品数量'
  },
  {
    field: 'proGoodRate',
    label: '良品率'
  },
  {
    field: 'startTime',
    label: '开始时间'
  },
  {
    field: 'endTime',
    label: '结束时间'
  },
  {
    field: 'planRunTime',
    label: '计划运行时长'
  },
  {
    field: 'runTime',
    label: '运行时长'
  },
  {
    field: 'stopTime',
    label: '停机时间'
  },
  {
    field: 'debugHistory',
    label: '设备履历'
  }
];
eims-ui/apps/web-antd/src/views/eims/equ-trial/equ-trial-drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,200 @@
<script setup lang="ts">
import { computed, ref } from 'vue';
import { useVbenDrawer } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { addFullName, cloneDeep, getPopupContainer } from '@vben/utils';
import { useVbenForm } from '#/adapter/form';
import { listEqu } from '#/api/eims/equ';
import { addEquTrial, getEquTrial, updateEquTrial } from '#/api/eims/equ-trial';
import { getDeptTree, userList } from '#/api/system/user';
import { drawerSchema } from './data';
const emit = defineEmits<{ reload: [] }>();
const isUpdate = ref(false);
const title = computed(() => {
  return isUpdate.value ? $t('pages.common.edit') : $t('pages.common.add');
});
const [BasicForm, formApi] = useVbenForm({
  commonConfig: {
    formItemClass: 'col-span-2',
    componentProps: {
      class: 'w-full'
    },
    labelWidth: 120
  },
  schema: drawerSchema(),
  showDefaultActions: false,
  wrapperClass: 'grid-cols-2'
});
const [BasicDrawer, drawerApi] = useVbenDrawer({
  onCancel: handleCancel,
  onConfirm: handleConfirm,
  async onOpenChange(isOpen) {
    if (!isOpen) {
      return null;
    }
    drawerApi.drawerLoading(true);
    const { id } = drawerApi.getData() as { id?: number | string };
    // è®¾å¤‡è¯¦æƒ…页打开指定设备id
    const { equId } = drawerApi.getData() as { equId?: number | string };
    if (equId) {
      await formApi.setValues({ equId });
    }
    isUpdate.value = !!id;
    // åˆå§‹åŒ–
    await setupEquSelect();
    await setupDeptSelect();
    // æ›´æ–° && èµ‹å€¼
    if (isUpdate.value && id) {
      const record = await getEquTrial(id);
      await formApi.setValues(record);
    }
    // è®¾å¤‡id有值时不允许编辑(1.编辑 2.设备详情页打开)
    const flag = equId !== undefined || isUpdate.value;
    formApi.updateSchema([
      {
        componentProps: {
          disabled: flag
        },
        fieldName: 'equId'
      }
    ]);
    drawerApi.drawerLoading(false);
  }
});
async function setupEquSelect() {
  // status-0 åªæŸ¥è¯¢è¯•用设备
  const params = { status: '0' };
  const equPageResult = await listEqu({
    pageNum: 1,
    pageSize: 1000,
    ...params
  });
  // ä½¿ç”¨map来跟踪已经遇到的equId,使用filter来过滤掉重复的元素。
  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
  const options = uniqueItems.map((item) => ({
    label: item.equName || item.equName,
    value: item.equId
  }));
  // ç­›é€‰
  const filterOption = (input: string, option: any) => {
    return option.label.toLowerCase().includes(input.toLowerCase());
  };
  const placeholder = options.length > 0 ? '请选择' : '暂无设备记录';
  formApi.updateSchema([
    {
      componentProps: {
        options,
        placeholder,
        filterOption
      },
      fieldName: 'equId'
    }
  ]);
}
/**
 * ç”¨æˆ·çš„加载
 */
async function setupUserOptions(deptId: any) {
  const params = { deptId };
  const userPageResult = await userList({
    pageNum: 1,
    pageSize: 500,
    ...params
  });
  const options = userPageResult.rows.map((item) => ({
    label: item.nickName || item.userName,
    value: item.userId
  }));
  // ç­›é€‰
  const filterOption = (input: string, option: any) => {
    return option.label.toLowerCase().includes(input.toLowerCase());
  };
  const placeholder = options.length > 0 ? '请选择' : '该部门下暂无用户';
  formApi.updateSchema([
    {
      componentProps: { options, placeholder, filterOption },
      fieldName: 'operatorId'
    }
  ]);
}
/**
 * åˆå§‹åŒ–部门选择
 */
async function setupDeptSelect() {
  // updateSchema
  const deptTree = await getDeptTree();
  // é€‰ä¸­åŽæ˜¾ç¤ºåœ¨è¾“入框的值 å³çˆ¶èŠ‚ç‚¹ / å­èŠ‚ç‚¹
  addFullName(deptTree, 'label', ' / ');
  formApi.updateSchema([
    {
      componentProps: (formModel) => ({
        class: 'w-full',
        fieldNames: {
          key: 'id',
          value: 'id',
          children: 'children'
        },
        getPopupContainer,
        async onSelect(deptId: number | string) {
          /** æ ¹æ®éƒ¨é—¨ID加载用户 */
          await setupUserOptions(deptId);
          /** å˜åŒ–后需要重新选择用户 */
          formModel.respPerson = undefined;
        },
        placeholder: '请选择',
        showSearch: true,
        treeData: deptTree,
        treeDefaultExpandAll: true,
        treeLine: { showLeafIcon: false },
        // ç­›é€‰çš„字段
        treeNodeFilterProp: 'label',
        // é€‰ä¸­åŽæ˜¾ç¤ºåœ¨è¾“入框的值
        treeNodeLabelProp: 'fullName'
      }),
      fieldName: 'operatorDept'
    }
  ]);
}
async function handleConfirm() {
  try {
    drawerApi.drawerLoading(true);
    const { valid } = await formApi.validate();
    if (!valid) {
      return;
    }
    const data = cloneDeep(await formApi.getValues());
    await (isUpdate.value ? updateEquTrial(data) : addEquTrial(data));
    emit('reload');
    await handleCancel();
  } catch (error) {
    console.error(error);
  } finally {
    drawerApi.drawerLoading(false);
  }
}
async function handleCancel() {
  drawerApi.close();
  await formApi.resetForm();
}
</script>
<template>
  <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
    <BasicForm />
  </BasicDrawer>
</template>
eims-ui/apps/web-antd/src/views/eims/equ-trial/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,247 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { onMounted } from 'vue';
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { getVxePopupContainer } from '@vben/utils';
import { Modal, Popconfirm, Space } from 'ant-design-vue';
import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { listEqu } from '#/api/eims/equ';
import { delEquTrial, equTrialExport, listEquTrial } from '#/api/eims/equ-trial';
import { commonDownloadExcel } from '#/utils/file/download';
import { columns, querySchema } from './data';
import equTrialDrawer from './equ-trial-drawer.vue';
import trialPreviewDrawer from './trial-preview-drawer.vue';
// ä»Žè®¾å¤‡æ˜Žç»†æ‰“开页面 1.不需要设备筛选 2.只查询当前设备数据
interface Props {
  equDetailFlag?: boolean;
  equId?: string;
}
const props = withDefaults(defineProps<Props>(), { equDetailFlag: false, equId: undefined });
const formOptions: VbenFormProps = {
  commonConfig: {
    labelWidth: 80,
    componentProps: {
      allowClear: true
    }
  },
  schema: querySchema(),
  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',
  // æ—¥æœŸé€‰æ‹©æ ¼å¼åŒ–
  fieldMappingTime: [['trialDate', ['params[beginTime]', 'params[endTime]'], ['YYYY-MM-DD', 'YYYY-MM-DD']]]
};
const gridOptions: VxeGridProps = {
  checkboxConfig: {
    // é«˜äº®
    highlight: true,
    // ç¿»é¡µæ—¶ä¿ç•™é€‰ä¸­çŠ¶æ€
    reserve: true
    // ç‚¹å‡»è¡Œé€‰ä¸­
    // trigger: 'row'
  },
  columns,
  height: 'auto',
  keepSource: true,
  pagerConfig: {},
  proxyConfig: {
    ajax: {
      query: async ({ page }, formValues = {}) => {
        // å¦‚果传入了equId则只查询当前id数据
        if (props.equDetailFlag && props.equId) {
          const queryEqu = { equId: props.equId };
          Object.assign(formValues, queryEqu);
        }
        return await listEquTrial({
          pageNum: page.currentPage,
          pageSize: page.pageSize,
          ...formValues
        });
      }
    }
  },
  rowConfig: {
    isHover: true,
    keyField: 'trialId'
  },
  sortConfig: {
    // è¿œç¨‹æŽ’序
    remote: true,
    // æ”¯æŒå¤šå­—段排序 é»˜è®¤å…³é—­
    multiple: true,
  },
  id: 'eims-equ-trial-index'
};
const [BasicTable, tableApi] = useVbenVxeGrid({
  formOptions,
  gridOptions,
  gridEvents: {
    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
  },
});
const [EquTrialDrawer, equTrialDrawerApi] = useVbenDrawer({
  connectedComponent: equTrialDrawer
});
const [TrialPreviewDrawer, trialPreviewDrawerApi] = useVbenDrawer({
  connectedComponent: trialPreviewDrawer
});
/**
 * é¢„览
 * @param record
 */
function handlePreview(record: Recordable<any>) {
  trialPreviewDrawerApi.setData({ record });
  trialPreviewDrawerApi.open();
}
onMounted(async () => {
  await setupEquSelect();
});
async function setupEquSelect() {
  // status-0 åªæŸ¥è¯¢è¯•用设备
  const params = { status: '0' };
  const equPageResult = await listEqu({
    pageNum: 1,
    pageSize: 1000,
    ...params
  });
  if (!equPageResult || equPageResult.rows.length < 0) {
    return false;
  }
  // ä½¿ç”¨map来跟踪已经遇到的equId,使用filter来过滤掉重复的元素。
  const uniqueItems = equPageResult.rows.filter((item, index, self) => index === self.findIndex((tm) => tm.equId === item.equId));
  const options = uniqueItems.map((item) => ({
    label: item.equName || item.equName,
    value: item.equId
  }));
  // ç­›é€‰
  const filterOption = (input: string, option: any) => {
    return option.label.toLowerCase().includes(input.toLowerCase());
  };
  const placeholder = options.length > 0 ? '请选择' : '暂无设备记录';
  // æ›´æ–°selectOptions
  tableApi.formApi.updateSchema([
    {
      componentProps: {
        options,
        placeholder,
        filterOption
      },
      dependencies: {
        show: () => !props.equDetailFlag,
        triggerFields: ['']
      },
      fieldName: 'equId'
    }
  ]);
}
function handleAdd() {
  // è®¾å¤‡è¯¦æƒ…页打开时 åªèƒ½æ–°å¢žæŒ‡å®šè®¾å¤‡id数据
  if (props.equDetailFlag && props.equId) {
    equTrialDrawerApi.setData({ equId: props.equId });
  } else {
    equTrialDrawerApi.setData({});
  }
  equTrialDrawerApi.open();
}
async function handleEdit(record: Recordable<any>) {
  equTrialDrawerApi.setData({ id: record.trialId });
  equTrialDrawerApi.open();
}
async function handleDelete(row: Recordable<any>) {
  await delEquTrial(row.trialId);
  await tableApi.query();
}
function handleMultiDelete() {
  const rows = tableApi.grid.getCheckboxRecords();
  const ids = rows.map((row: any) => row.trialId);
  Modal.confirm({
    title: '提示',
    okType: 'danger',
    content: `确认删除选中的${ids.length}条记录吗?`,
    onOk: async () => {
      await delEquTrial(ids);
      await tableApi.query();
    }
  });
}
function handleDownloadExcel() {
  commonDownloadExcel(equTrialExport, '试产记录', tableApi.formApi.form.values, {
    fieldMappingTime: formOptions.fieldMappingTime
  });
}
</script>
<template>
  <Page :auto-content-height="true">
    <div class="flex h-full gap-[8px]">
      <BasicTable class="flex-1 overflow-hidden" table-title="试产列表">
        <template #toolbar-tools>
          <Space>
            <a-button v-access:code="['eims:equTrial:export']" @click="handleDownloadExcel">
              {{ $t('pages.common.export') }}
            </a-button>
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:equTrial:remove']"
              @click="handleMultiDelete"
            >
              {{ $t('pages.common.delete') }}
            </a-button>
            <a-button type="primary" v-access:code="['eims:equTrial:add']" @click="handleAdd">
              {{ $t('pages.common.add') }}
            </a-button>
          </Space>
        </template>
        <template #equName="{ row }">
          <Space>
            <span>{{ row.equName }}</span>
          </Space>
        </template>
        <template #action="{ row }">
          <Space>
            <ghost-button v-access:code="['eims:equTrial:edit']" @click.stop="handleEdit(row)">
              {{ $t('pages.common.edit') }}
            </ghost-button>
            <ghost-button class="btn-success" v-access:code="['eims:equTrial:list']" @click.stop="handlePreview(row)">
              {{ $t('pages.common.preview') }}
            </ghost-button>
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
              <ghost-button danger v-access:code="['eims:equTrial:remove']" @click.stop="">
                {{ $t('pages.common.delete') }}
              </ghost-button>
            </Popconfirm>
          </Space>
        </template>
      </BasicTable>
    </div>
    <EquTrialDrawer @reload="tableApi.query()" />
    <TrialPreviewDrawer />
  </Page>
</template>
eims-ui/apps/web-antd/src/views/eims/equ-trial/trial-preview-drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { useVbenDrawer } from '@vben/common-ui';
import { Description, useDescription } from '#/components/description';
import { descSchema } from './data';
const [BasicDrawer, drawerApi] = useVbenDrawer({
  onOpenChange: handleOpenChange,
});
const [registerDescription, { setDescProps }] = useDescription({
  column: 1,
  schema: descSchema,
});
function handleOpenChange(open: boolean) {
  if (!open) {
    return null;
  }
  const { record } = drawerApi.getData() as { record: Recordable<any> };
  setDescProps({ data: record }, true);
}
</script>
<template>
  <BasicDrawer :footer="false" class="w-[600px]" title="试产记录明细">
    <Description @register="registerDescription" />
  </BasicDrawer>
</template>
eims-ui/apps/web-antd/src/views/eims/equ/data.tsx
@@ -29,7 +29,7 @@
  },
  {
    component: 'RangePicker',
    fieldName: 'createTime',
    fieldName: 'deployDate',
    label: '使用日期'
  }
];
@@ -47,6 +47,7 @@
  {
    title: '状态',
    field: 'status',
    sortable: true,
    slots: {
      default: ({ row }) => {
        const statu = row.status;
@@ -77,12 +78,14 @@
  {
    title: '资产编号',
    field: 'assetNo',
    sortable: true,
    minWidth: 100,
    fixed: 'left'
  },
  {
    title: '设备编号',
    field: 'equCode',
    sortable: true,
    minWidth: 100
  },
  {
@@ -133,6 +136,7 @@
  {
    title: '采购日期',
    field: 'purchaseDate',
    sortable: true,
    minWidth: 120
  },
  {
@@ -158,11 +162,13 @@
  {
    title: '导入状态',
    field: 'importStatus',
    slots: { default: 'importStatus' },
    minWidth: 100
  },
  {
    title: '盘点标志',
    field: 'inventoryFlag',
    slots: { default: 'inventoryFlag' },
    minWidth: 100
  },
  {
@@ -185,7 +191,7 @@
    fixed: 'right',
    slots: { default: 'action' },
    title: '操作',
    width: 180
    width: 200
  }
];
@@ -282,8 +288,8 @@
  {
    component: 'Select',
    componentProps: {
      // é€‰ä¸­äº†å°±åªèƒ½ä¿®æ”¹ ä¸èƒ½é‡ç½®ä¸ºæ— è´Ÿè´£äºº
      allowClear: true,
      showSearch: true,
      getPopupContainer
    },
    fieldName: 'respPerson',
eims-ui/apps/web-antd/src/views/eims/equ/equ-drawer.vue
@@ -127,10 +127,15 @@
    label: item.nickName || item.userName,
    value: item.userId
  }));
  // ç­›é€‰
  const filterOption = (input: string, option: any) => {
    return option.label.toLowerCase().includes(input.toLowerCase());
  };
  const placeholder = options.length > 0 ? '请选择' : '该部门下暂无用户';
  formApi.updateSchema([
    {
      componentProps: { options, placeholder },
      componentProps: { options, placeholder ,filterOption },
      fieldName: 'respPerson'
    }
  ]);
eims-ui/apps/web-antd/src/views/eims/equ/index.vue
@@ -7,9 +7,9 @@
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { getVxePopupContainer } from '@vben/utils';
import { Dropdown, Menu, MenuItem, Modal, Popconfirm, Space } from 'ant-design-vue';
import { Modal, Popconfirm, Space } from 'ant-design-vue';
import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps } from '#/adapter/vxe-table';
import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
import { delEqu, equExport, listEqu } from '#/api/eims/equ';
import { commonDownloadExcel } from '#/utils/file/download';
@@ -76,19 +76,26 @@
    isHover: true,
    keyField: 'equId'
  },
  sortConfig: {
    // è¿œç¨‹æŽ’序
    remote: true,
    // æ”¯æŒå¤šå­—段排序 é»˜è®¤å…³é—­
    multiple: true,
  },
  id: 'eims-equ-index'
};
const [BasicTable, tableApi] = useVbenVxeGrid({
  formOptions,
  gridOptions
  gridOptions,
  gridEvents: {
    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams),
  },
});
const [EquDrawer, equDrawerApi] = useVbenDrawer({
  connectedComponent: equDrawer
});
function handleAdd() {
  equDrawerApi.setData({});
@@ -125,7 +132,15 @@
  });
}
function getImportStatus(row: any) {
  const importStatus = row.importStatus === null || row.importStatus;
  return importStatus ? '未导入' : '已导入';
}
function getInventoryFlag(row: any) {
  const inventoryFlag = row.inventoryFlag === null || row.inventoryFlag;
  return inventoryFlag ? '未盘点' : '已盘点';
}
const router = useRouter();
function handleDetail(record: Recordable<any>) {
@@ -136,25 +151,14 @@
<template>
  <Page :auto-content-height="true">
    <div class="flex h-full gap-[8px]">
      <EquTypeTree
        v-model:select-dept-id="selectDeptId"
        class="w-[260px]"
        @reload="() => tableApi.reload()"
        @select="() => tableApi.reload()"
      />
      <EquTypeTree v-model:select-dept-id="selectDeptId" class="w-[260px]" @reload="() => tableApi.reload()" @select="() => tableApi.reload()" />
      <BasicTable class="flex-1 overflow-hidden" table-title="设备列表">
        <template #toolbar-tools>
          <Space>
            <a-button v-access:code="['eims:equ:export']" @click="handleDownloadExcel">
              {{ $t('pages.common.export') }}
            </a-button>
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:equ:remove']"
              @click="handleMultiDelete"
            >
            <a-button :disabled="!vxeCheckboxChecked(tableApi)" danger type="primary" v-access:code="['eims:equ:remove']" @click="handleMultiDelete">
              {{ $t('pages.common.delete') }}
            </a-button>
            <a-button type="primary" v-access:code="['eims:equ:add']" @click="handleAdd">
@@ -171,25 +175,26 @@
        <template #action="{ row }">
          <Space>
            <ghost-button v-access:code="['system:role:edit']" @click.stop="handleEdit(row)">
            <ghost-button v-access:code="['eims:equ:edit']" @click.stop="handleEdit(row)">
              {{ $t('pages.common.edit') }}
            </ghost-button>
            <ghost-button v-if="row.menuType !== 'F'" class="btn-success" v-access:code="['eims:equ:list']" @click="handleDetail(row)">
              {{ $t('pages.common.info') }}
            </ghost-button>
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
              <ghost-button danger v-access:code="['system:role:remove']" @click.stop="">
              <ghost-button danger v-access:code="['eims:equ:remove']" @click.stop="">
                {{ $t('pages.common.delete') }}
              </ghost-button>
            </Popconfirm>
          </Space>
          <Dropdown :get-popup-container="getVxePopupContainer" placement="bottomRight">
            <template #overlay>
              <Menu>
                <MenuItem key="1" @click="handleDetail(row)"> è¯¦æƒ… </MenuItem>
              </Menu>
            </template>
            <a-button size="small" type="link">
              {{ $t('pages.common.more') }}
            </a-button>
          </Dropdown>
        <template #importStatus="{ row }">
          <span>{{ getImportStatus(row) }}</span>
        </template>
        <template #inventoryFlag="{ row }">
          <span>{{ getInventoryFlag(row) }}</span>
        </template>
      </BasicTable>
    </div>
eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package org.dromara.common.core.service;
public interface EquService {
    /**
     * é€šè¿‡è®¾å¤‡ID查询设备类型名称
     *
     * @param equIds è®¾å¤‡ID串逗号分隔
     * @return è®¾å¤‡åç§°ä¸²é€—号分隔
     */
    String selectEquNameByIds(String equIds);
}
eims/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/EquTypeService.java
@@ -4,8 +4,8 @@
    /**
     * é€šè¿‡è®¾å¤‡ç±»åž‹ID查询设备类型名称
     *
     * @param equTypeIds éƒ¨é—¨ID串逗号分隔
     * @return éƒ¨é—¨åç§°ä¸²é€—号分隔
     * @param equTypeIds è®¾å¤‡ç±»åž‹ID串逗号分隔
     * @return è®¾å¤‡ç±»åž‹åç§°ä¸²é€—号分隔
     */
    String selectEquTypeNameByIds(String equTypeIds);
}
eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java
@@ -33,7 +33,12 @@
    String OSS_ID_TO_URL = "oss_id_to_url";
    /**
     * è®¾å¤‡åç§°id转名称
     * è®¾å¤‡ç±»åž‹åç§°id转名称
     */
    String EQU_YPE_ID_TO_NAME = "equ_type_id_to_name";
    /**
     * è®¾å¤‡åç§°id转名称
     */
    String EQU_ID_TO_NAME = "equ_id_to_name";
}
eims/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/EquNameTranslationImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package org.dromara.common.translation.core.impl;
import lombok.AllArgsConstructor;
import org.dromara.common.core.service.EquService;
import org.dromara.common.core.service.EquTypeService;
import org.dromara.common.translation.annotation.TranslationType;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.common.translation.core.TranslationInterface;
/**
 * è®¾å¤‡ç¿»è¯‘实现
 *
 * @author zhuguifei
 */
@AllArgsConstructor
@TranslationType(type = TransConstant.EQU_ID_TO_NAME)
public class EquNameTranslationImpl implements TranslationInterface<String> {
    private final EquService equService;
    @Override
    public String translation(Object key, String other) {
        if (key instanceof String ids) {
            return equService.selectEquNameByIds(ids);
        } else if (key instanceof Long id) {
            return equService.selectEquNameByIds(id.toString());
        }
        return null;
    }
}
eims/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -5,3 +5,4 @@
org.dromara.common.translation.core.impl.UserNameTranslationImpl
org.dromara.common.translation.core.impl.NicknameTranslationImpl
org.dromara.common.translation.core.impl.EquTypeNameTranslationImpl
org.dromara.common.translation.core.impl.EquNameTranslationImpl
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquController.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquController.java ÐÞ¸Ä
@@ -2,9 +2,9 @@
import java.util.List;
import org.dromara.eims.domain.bo.SysEquBo;
import org.dromara.eims.domain.vo.SysEquVo;
import org.dromara.eims.service.ISysEquService;
import org.dromara.eims.domain.bo.EimsEquBo;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.eims.service.IEimsEquService;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
@@ -34,28 +34,28 @@
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/equ")
public class SysEquController extends BaseController {
public class EimsEquController extends BaseController {
    private final ISysEquService sysEquipmentService;
    private final IEimsEquService eimsEquipmentService;
    /**
     * æŸ¥è¯¢ã€è®¾å¤‡å°è´¦ã€‘列表
     */
    @SaCheckPermission("system:equipment:list")
    @SaCheckPermission("eims:equ:list")
    @GetMapping("/list")
    public TableDataInfo<SysEquVo> list(SysEquBo bo, PageQuery pageQuery) {
        return sysEquipmentService.queryPageList(bo, pageQuery);
    public TableDataInfo<EimsEquVo> list(EimsEquBo bo, PageQuery pageQuery) {
        return eimsEquipmentService.queryPageList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºã€è®¾å¤‡å°è´¦ã€‘列表
     */
    @SaCheckPermission("system:equipment:export")
    @SaCheckPermission("eims:equ:export")
    @Log(title = "【设备台账】", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(SysEquBo bo, HttpServletResponse response) {
        List<SysEquVo> list = sysEquipmentService.queryList(bo);
        ExcelUtil.exportExcel(list, "【设备台账】", SysEquVo.class, response);
    public void export(EimsEquBo bo, HttpServletResponse response) {
        List<EimsEquVo> list = eimsEquipmentService.queryList(bo);
        ExcelUtil.exportExcel(list, "【设备台账】", EimsEquVo.class, response);
    }
    /**
@@ -63,33 +63,33 @@
     *
     * @param equId ä¸»é”®
     */
    @SaCheckPermission("system:equipment:query")
    @SaCheckPermission("eims:equ:query")
    @GetMapping("/{equId}")
    public R<SysEquVo> getInfo(@NotNull(message = "主键不能为空")
    public R<EimsEquVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long equId) {
        return R.ok(sysEquipmentService.queryById(equId));
        return R.ok(eimsEquipmentService.queryById(equId));
    }
    /**
     * æ–°å¢žã€è®¾å¤‡å°è´¦ã€‘
     */
    @SaCheckPermission("system:equipment:add")
    @SaCheckPermission("eims:equ:add")
    @Log(title = "【设备台账】", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody SysEquBo bo) {
        return toAjax(sysEquipmentService.insertByBo(bo));
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquBo bo) {
        return toAjax(eimsEquipmentService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹ã€è®¾å¤‡å°è´¦ã€‘
     */
    @SaCheckPermission("system:equipment:edit")
    @SaCheckPermission("eims:equ:edit")
    @Log(title = "【设备台账】", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysEquBo bo) {
        return toAjax(sysEquipmentService.updateByBo(bo));
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquBo bo) {
        return toAjax(eimsEquipmentService.updateByBo(bo));
    }
    /**
@@ -97,11 +97,11 @@
     *
     * @param equIds ä¸»é”®ä¸²
     */
    @SaCheckPermission("system:equipment:remove")
    @SaCheckPermission("eims:equ:remove")
    @Log(title = "【设备台账】", businessType = BusinessType.DELETE)
    @DeleteMapping("/{equIds}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] equIds) {
        return toAjax(sysEquipmentService.deleteWithValidByIds(List.of(equIds), true));
        return toAjax(eimsEquipmentService.deleteWithValidByIds(List.of(equIds), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquStatuController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package org.dromara.eims.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.eims.domain.vo.EimsEquStatuVo;
import org.dromara.eims.domain.bo.EimsEquStatuBo;
import org.dromara.eims.service.IEimsEquStatuService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
 * è®¾å¤‡çŠ¶æ€è®°å½•
 *
 * @author zhuguifei
 * @date 2025-01-14
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/equStatu")
public class EimsEquStatuController extends BaseController {
    private final IEimsEquStatuService eimsEquStatuService;
    /**
     * æŸ¥è¯¢è®¾å¤‡çŠ¶æ€è®°å½•åˆ—è¡¨
     */
    @SaCheckPermission("eims:equStatu:list")
    @GetMapping("/list")
    public TableDataInfo<EimsEquStatuVo> list(EimsEquStatuBo bo, PageQuery pageQuery) {
        return eimsEquStatuService.queryPageList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºè®¾å¤‡çŠ¶æ€è®°å½•åˆ—è¡¨
     */
    @SaCheckPermission("eims:equStatu:export")
    @Log(title = "设备状态记录", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(EimsEquStatuBo bo, HttpServletResponse response) {
        List<EimsEquStatuVo> list = eimsEquStatuService.queryList(bo);
        ExcelUtil.exportExcel(list, "设备状态记录", EimsEquStatuVo.class, response);
    }
    /**
     * èŽ·å–è®¾å¤‡çŠ¶æ€è®°å½•è¯¦ç»†ä¿¡æ¯
     *
     * @param equStatuId ä¸»é”®
     */
    @SaCheckPermission("eims:equStatu:query")
    @GetMapping("/{equStatuId}")
    public R<EimsEquStatuVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long equStatuId) {
        return R.ok(eimsEquStatuService.queryById(equStatuId));
    }
    /**
     * æ–°å¢žè®¾å¤‡çŠ¶æ€è®°å½•
     */
    @SaCheckPermission("eims:equStatu:add")
    @Log(title = "设备状态记录", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquStatuBo bo) {
        return toAjax(eimsEquStatuService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹è®¾å¤‡çŠ¶æ€è®°å½•
     */
    @SaCheckPermission("eims:equStatu:edit")
    @Log(title = "设备状态记录", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquStatuBo bo) {
        return toAjax(eimsEquStatuService.updateByBo(bo));
    }
    /**
     * åˆ é™¤è®¾å¤‡çŠ¶æ€è®°å½•
     *
     * @param equStatuIds ä¸»é”®ä¸²
     */
    @SaCheckPermission("eims:equStatu:remove")
    @Log(title = "设备状态记录", businessType = BusinessType.DELETE)
    @DeleteMapping("/{equStatuIds}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] equStatuIds) {
        return toAjax(eimsEquStatuService.deleteWithValidByIds(List.of(equStatuIds), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTrialController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package org.dromara.eims.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.eims.domain.vo.EimsEquTrialVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.eims.domain.bo.EimsEquTrialBo;
import org.dromara.eims.service.IEimsEquTrialService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
 * è®¾å¤‡è¯•产记录
 *
 * @author zhuguifei
 * @date 2025-01-09
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/equTrial")
public class EimsEquTrialController extends BaseController {
    private final IEimsEquTrialService eimsEquTrialService;
    /**
     * æŸ¥è¯¢è®¾å¤‡è¯•产记录列表
     */
    @SaCheckPermission("eims:equTrial:list")
    @GetMapping("/list")
    public TableDataInfo<EimsEquTrialVo> list(EimsEquTrialBo bo, PageQuery pageQuery) {
        return eimsEquTrialService.queryPageList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºè®¾å¤‡è¯•产记录列表
     */
    @SaCheckPermission("eims:equTrial:export")
    @Log(title = "设备试产记录", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(EimsEquTrialBo bo, HttpServletResponse response) {
        List<EimsEquTrialVo> list = eimsEquTrialService.queryList(bo);
        ExcelUtil.exportExcel(list, "设备试产记录", EimsEquTrialVo.class, response);
    }
    /**
     * èŽ·å–è®¾å¤‡è¯•äº§è®°å½•è¯¦ç»†ä¿¡æ¯
     *
     * @param trialId ä¸»é”®
     */
    @SaCheckPermission("eims:equTrial:query")
    @GetMapping("/{trialId}")
    public R<EimsEquTrialVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long trialId) {
        return R.ok(eimsEquTrialService.queryById(trialId));
    }
    /**
     * æ–°å¢žè®¾å¤‡è¯•产记录
     */
    @SaCheckPermission("eims:equTrial:add")
    @Log(title = "设备试产记录", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquTrialBo bo) {
        return toAjax(eimsEquTrialService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹è®¾å¤‡è¯•产记录
     */
    @SaCheckPermission("eims:equTrial:edit")
    @Log(title = "设备试产记录", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquTrialBo bo) {
        return toAjax(eimsEquTrialService.updateByBo(bo));
    }
    /**
     * åˆ é™¤è®¾å¤‡è¯•产记录
     *
     * @param trialIds ä¸»é”®ä¸²
     */
    @SaCheckPermission("eims:equTrial:remove")
    @Log(title = "设备试产记录", businessType = BusinessType.DELETE)
    @DeleteMapping("/{trialIds}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] trialIds) {
        return toAjax(eimsEquTrialService.deleteWithValidByIds(List.of(trialIds), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsEquTypeController.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/SysEquTypeController.java ÐÞ¸Ä
@@ -7,20 +7,19 @@
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.eims.domain.vo.EimsEquTypeVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.eims.domain.vo.SysEquTypeVo;
import org.dromara.eims.domain.bo.SysEquTypeBo;
import org.dromara.eims.service.ISysEquTypeService;
import org.dromara.eims.domain.bo.EimsEquTypeBo;
import org.dromara.eims.service.IEimsEquTypeService;
/**
 * è®¾å¤‡ç±»åž‹
@@ -32,17 +31,17 @@
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/equType")
public class SysEquTypeController extends BaseController {
public class EimsEquTypeController extends BaseController {
    private final ISysEquTypeService sysEquTypeService;
    private final IEimsEquTypeService eimsEquTypeService;
    /**
     * æŸ¥è¯¢è®¾å¤‡ç±»åž‹åˆ—表
     */
    @SaCheckPermission("eims:equType:list")
    @GetMapping("/list")
    public R<List<SysEquTypeVo>> list(SysEquTypeBo bo) {
        List<SysEquTypeVo> list = sysEquTypeService.queryList(bo);
    public R<List<EimsEquTypeVo>> list(EimsEquTypeBo bo) {
        List<EimsEquTypeVo> list = eimsEquTypeService.queryList(bo);
        return R.ok(list);
    }
@@ -51,8 +50,8 @@
     */
    @SaCheckPermission("eims:equType:list")
    @GetMapping("/tree")
    public R<List<Tree<Long>>> equTypeTree(SysEquTypeBo bo) {
        return R.ok(sysEquTypeService.selectEquTypeTreeList(bo));
    public R<List<Tree<Long>>> equTypeTree(EimsEquTypeBo bo) {
        return R.ok(eimsEquTypeService.selectEquTypeTreeList(bo));
    }
    /**
@@ -61,9 +60,9 @@
    @SaCheckPermission("eims:equType:export")
    @Log(title = "设备类型", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(SysEquTypeBo bo, HttpServletResponse response) {
        List<SysEquTypeVo> list = sysEquTypeService.queryList(bo);
        ExcelUtil.exportExcel(list, "设备类型", SysEquTypeVo.class, response);
    public void export(EimsEquTypeBo bo, HttpServletResponse response) {
        List<EimsEquTypeVo> list = eimsEquTypeService.queryList(bo);
        ExcelUtil.exportExcel(list, "设备类型", EimsEquTypeVo.class, response);
    }
    /**
@@ -73,9 +72,9 @@
     */
    @SaCheckPermission("eims:equType:query")
    @GetMapping("/{equTypeId}")
    public R<SysEquTypeVo> getInfo(@NotNull(message = "主键不能为空")
    public R<EimsEquTypeVo> getInfo(@NotNull(message = "主键不能为空")
                                   @PathVariable Long equTypeId) {
        return R.ok(sysEquTypeService.queryById(equTypeId));
        return R.ok(eimsEquTypeService.queryById(equTypeId));
    }
    /**
@@ -85,8 +84,8 @@
    @Log(title = "设备类型", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody SysEquTypeBo bo) {
        return toAjax(sysEquTypeService.insertByBo(bo));
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsEquTypeBo bo) {
        return toAjax(eimsEquTypeService.insertByBo(bo));
    }
    /**
@@ -96,8 +95,8 @@
    @Log(title = "设备类型", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysEquTypeBo bo) {
        return toAjax(sysEquTypeService.updateByBo(bo));
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsEquTypeBo bo) {
        return toAjax(eimsEquTypeService.updateByBo(bo));
    }
    /**
@@ -114,11 +113,11 @@
            return R.warn("请选择需要删除的数据");
        }
        for (int i = 0; i < equTypeIds.length; i++) {
            if (sysEquTypeService.hasChildByEquTypeId(equTypeIds[i])) {
            if (eimsEquTypeService.hasChildByEquTypeId(equTypeIds[i])) {
                return R.warn("存在子菜单,不允许删除");
            }
        }
        return toAjax(sysEquTypeService.deleteWithValidByIds(List.of(equTypeIds), true));
        return toAjax(eimsEquTypeService.deleteWithValidByIds(List.of(equTypeIds), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEqu.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEqu.java ÐÞ¸Ä
@@ -10,15 +10,15 @@
import java.io.Serial;
/**
 * ã€è®¾å¤‡å°è´¦ã€‘对象 sys_equ
 * ã€è®¾å¤‡å°è´¦ã€‘对象 eims_equ
 *
 * @author zhuguifei
 * @date 2025-01-04
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_equ")
public class SysEqu extends BaseEntity {
@TableName("eims_equ")
public class EimsEqu extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquStatu.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package org.dromara.eims.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
 * è®¾å¤‡çŠ¶æ€è®°å½•å¯¹è±¡ eims_equ_statu
 *
 * @author zhuguifei
 * @date 2025-01-14
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eims_equ_statu")
public class EimsEquStatu extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * è®¾å¤‡çŠ¶æ€è®°å½•id
     */
    @TableId(value = "equ_statu_id")
    private Long equStatuId;
    /**
     * è®¾å¤‡id
     */
    private Long equId;
    /**
     * å˜æ›´å‰çŠ¶æ€
     */
    private String beforeChange;
    /**
     * å˜æ›´åŽçŠ¶æ€
     */
    private String afterChange;
    /**
     * å˜æ›´æ—¥æœŸ
     */
    private Date changeDate;
    /**
     * å˜æ›´äºº
     */
    private Long changeUser;
    /**
     * å˜æ›´äººéƒ¨é—¨
     */
    private Long userDept;
    /**
     * å˜æ›´æè¿°
     */
    private String changeDesc;
    /**
     * æè¿°
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquTrial.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package org.dromara.eims.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
 * è®¾å¤‡è¯•产记录对象 eims_equ_trial
 *
 * @author zhuguifei
 * @date 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eims_equ_trial")
public class EimsEquTrial extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * è¯•用记录id
     */
    @TableId(value = "trial_id")
    private Long trialId;
    /**
     * è®¾å¤‡id
     */
    private Long equId;
    /**
     * è¯•产数量
     */
    private Long trialNum;
    /**
     * è¯•产日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date trialDate;
    /**
     * è‰¯å“æ•°é‡
     */
    private Long proGoodNum;
    /**
     * è‰¯å“çއ
     */
    private Long proGoodRate;
    /**
     * æ“ä½œäººéƒ¨é—¨
     */
    private Long operatorDept;
    /**
     * æ“ä½œäºº(id)
     */
    private Long operatorId;
    /**
     * å¼€å§‹æ—¶é—´
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date startTime;
    /**
     * ç»“束时间
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date endTime;
    /**
     * è¿è¡Œæ—¶é•¿
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date runTime;
    /**
     * åœæœºæ—¶é•¿
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date stopTime;
    /**
     * è®¡åˆ’运行时长
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date planRunTime;
    /**
     * è°ƒè¯•履历
     */
    private String debugHistory;
    /**
     * è®¾å¤‡ç»¼åˆæ•ˆçއ
     */
    private Long oee;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsEquType.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/SysEquType.java ÐÞ¸Ä
@@ -8,15 +8,15 @@
import java.io.Serial;
/**
 * è®¾å¤‡ç±»åž‹å¯¹è±¡ sys_equ_type
 * è®¾å¤‡ç±»åž‹å¯¹è±¡ eims_equ_type
 *
 * @author zhuguifei
 * @date 2025-01-06
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_equ_type")
public class SysEquType extends BaseEntity {
@TableName("eims_equ_type")
public class EimsEquType extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquBo.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquBo.java ÐÞ¸Ä
@@ -1,10 +1,8 @@
package org.dromara.eims.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.eims.domain.SysEqu;
import org.dromara.eims.domain.EimsEqu;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -14,15 +12,15 @@
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
 * ã€è®¾å¤‡å°è´¦ã€‘业务对象 sys_equipment
 * ã€è®¾å¤‡å°è´¦ã€‘业务对象 eims_equ
 *
 * @author zhuguifei
 * @date 2025-01-04
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysEqu.class, reverseConvertGenerate = false)
public class SysEquBo extends BaseEntity {
@AutoMapper(target = EimsEqu.class, reverseConvertGenerate = false)
public class EimsEquBo extends BaseEntity {
    /**
     *
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquStatuBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package org.dromara.eims.domain.bo;
import org.dromara.eims.domain.EimsEquStatu;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
 * è®¾å¤‡çŠ¶æ€è®°å½•ä¸šåŠ¡å¯¹è±¡ eims_equ_statu
 *
 * @author zhuguifei
 * @date 2025-01-14
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = EimsEquStatu.class, reverseConvertGenerate = false)
public class EimsEquStatuBo extends BaseEntity {
    /**
     * è®¾å¤‡çŠ¶æ€è®°å½•id
     */
    private Long equStatuId;
    /**
     * è®¾å¤‡id
     */
    private Long equId;
    /**
     * å˜æ›´å‰çŠ¶æ€
     */
    private String beforeChange;
    /**
     * å˜æ›´åŽçŠ¶æ€
     */
    private String afterChange;
    /**
     * å˜æ›´æ—¥æœŸ
     */
    private Date changeDate;
    /**
     * å˜æ›´äºº
     */
    private Long changeUser;
    /**
     * å˜æ›´äººéƒ¨é—¨
     */
    private Long userDept;
    /**
     * å˜æ›´æè¿°
     */
    @NotBlank(message = "变更描述不能为空", groups = { AddGroup.class, EditGroup.class })
    private String changeDesc;
    /**
     * æè¿°
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTrialBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
package org.dromara.eims.domain.bo;
import org.dromara.eims.domain.EimsEquTrial;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
 * è®¾å¤‡è¯•产记录业务对象 sys_equ_trial
 *
 * @author zhuguifei
 * @date 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = EimsEquTrial.class, reverseConvertGenerate = false)
public class EimsEquTrialBo extends BaseEntity {
    /**
     * è¯•用记录id
     */
    @NotNull(message = "试用记录id不能为空", groups = { EditGroup.class })
    private Long trialId;
    /**
     * è®¾å¤‡id
     */
    private Long equId;
    /**
     * è¯•产数量
     */
    private Long trialNum;
    /**
     * è¯•产日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date trialDate;
    /**
     * è‰¯å“æ•°é‡
     */
    private Long proGoodNum;
    /**
     * è‰¯å“çއ
     */
    private Long proGoodRate;
    /**
     * æ“ä½œäººéƒ¨é—¨
     */
    private Long operatorDept;
    /**
     * æ“ä½œäºº(id)
     */
    private Long operatorId;
    /**
     * å¼€å§‹æ—¶é—´
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date startTime;
    /**
     * ç»“束时间
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date endTime;
    /**
     * è¿è¡Œæ—¶é•¿
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date runTime;
    /**
     * åœæœºæ—¶é•¿
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date stopTime;
    /**
     * è®¡åˆ’运行时长
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private Date planRunTime;
    /**
     * è°ƒè¯•履历
     */
    private String debugHistory;
    /**
     * è®¾å¤‡ç»¼åˆæ•ˆçއ
     */
    private Long oee;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsEquTypeBo.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/SysEquTypeBo.java ÐÞ¸Ä
@@ -1,13 +1,10 @@
package org.dromara.eims.domain.bo;
import org.dromara.eims.domain.SysEquType;
import org.dromara.eims.domain.EimsEquType;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
 * è®¾å¤‡ç±»åž‹ä¸šåŠ¡å¯¹è±¡ sys_equ_type
@@ -17,8 +14,8 @@
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysEquType.class, reverseConvertGenerate = false)
public class SysEquTypeBo extends BaseEntity {
@AutoMapper(target = EimsEquType.class, reverseConvertGenerate = false)
public class EimsEquTypeBo extends BaseEntity {
    /**
     * ç±»åž‹id
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquStatuVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
package org.dromara.eims.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.eims.domain.EimsEquStatu;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
 * è®¾å¤‡çŠ¶æ€è®°å½•è§†å›¾å¯¹è±¡ eims_equ_statu
 *
 * @author zhuguifei
 * @date 2025-01-14
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsEquStatu.class)
public class EimsEquStatuVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * è®¾å¤‡çŠ¶æ€è®°å½•id
     */
    @ExcelProperty(value = "设备状态记录id")
    private Long equStatuId;
    /**
     * è®¾å¤‡id
     */
    @ExcelProperty(value = "设备id")
    private Long equId;
    /**
     * è®¾å¤‡åç§°
     */
    @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId")
    private String equName;
    /**
     * å˜æ›´å‰çŠ¶æ€
     */
    @ExcelProperty(value = "变更前状态")
    private String beforeChange;
    /**
     * å˜æ›´åŽçŠ¶æ€
     */
    @ExcelProperty(value = "变更后状态")
    private String afterChange;
    /**
     * å˜æ›´æ—¥æœŸ
     */
    @ExcelProperty(value = "变更日期")
    private Date changeDate;
    /**
     * å˜æ›´äºº
     */
    private Long changeUser;
    @ExcelProperty(value = "变更人")
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "changeUser")
    private  String changeUserName;
    /**
     * å˜æ›´äººéƒ¨é—¨
     */
    @ExcelProperty(value = "变更人部门")
    private Long userDept;
    /**
     * å˜æ›´æè¿°
     */
    @ExcelProperty(value = "变更描述")
    private String changeDesc;
    /**
     * æè¿°
     */
    @ExcelProperty(value = "描述")
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTrialVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
package org.dromara.eims.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.eims.domain.EimsEquTrial;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
 * è®¾å¤‡è¯•产记录视图对象 eims_equ_trial
 *
 * @author zhuguifei
 * @date 2025-01-09
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsEquTrial.class)
public class EimsEquTrialVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * è¯•用记录id
     */
    @ExcelProperty(value = "试用记录id")
    private Long trialId;
    /**
     * è®¾å¤‡id
     */
    @ExcelProperty(value = "设备id")
    private Long equId;
    /**
     * è®¾å¤‡åç§°
     */
    @Translation(type = TransConstant.EQU_ID_TO_NAME, mapper = "equId")
    private String equName;
    /**
     * è¯•产数量
     */
    @ExcelProperty(value = "试产数量")
    private Long trialNum;
    /**
     * è¯•产日期
     */
    @ExcelProperty(value = "试产日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date trialDate;
    /**
     * è‰¯å“æ•°é‡
     */
    @ExcelProperty(value = "良品数量")
    private Long proGoodNum;
    /**
     * è‰¯å“çއ
     */
    @ExcelProperty(value = "良品率")
    private Long proGoodRate;
    /**
     * æ“ä½œäººéƒ¨é—¨
     */
    private Long operatorDept;
    /**
     * æ“ä½œäºº(id)
     */
    @ExcelProperty(value = "操作人(id)")
    private Long operatorId;
    /**
     * æ“ä½œäºº
     */
    @ExcelProperty(value = "操作人")
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "operatorId")
    private String operatorName;
    /**
     * å¼€å§‹æ—¶é—´
     */
    @ExcelProperty(value = "开始时间")
    @JsonFormat(pattern = "HH:mm:ss")
    private Date startTime;
    /**
     * ç»“束时间
     */
    @ExcelProperty(value = "结束时间")
    @JsonFormat(pattern = "HH:mm:ss")
    private Date endTime;
    /**
     * è¿è¡Œæ—¶é•¿
     */
    @ExcelProperty(value = "运行时长")
    @JsonFormat(pattern = "HH:mm:ss")
    private Date runTime;
    /**
     * åœæœºæ—¶é•¿
     */
    @ExcelProperty(value = "停机时长")
    @JsonFormat(pattern = "HH:mm:ss")
    private Date stopTime;
    /**
     * è®¡åˆ’运行时长
     */
    @ExcelProperty(value = "计划运行时长")
    @JsonFormat(pattern = "HH:mm:ss")
    private Date planRunTime;
    /**
     * è°ƒè¯•履历
     */
    @ExcelProperty(value = "调试履历")
    private String debugHistory;
    /**
     * è®¾å¤‡ç»¼åˆæ•ˆçއ
     */
    @ExcelProperty(value = "设备综合效率")
    private Long oee;
    /**
     * å¤‡æ³¨
     */
    @ExcelProperty(value = "备注")
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquTypeVo.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquTypeVo.java ÐÞ¸Ä
@@ -1,6 +1,6 @@
package org.dromara.eims.domain.vo;
import org.dromara.eims.domain.SysEquType;
import org.dromara.eims.domain.EimsEquType;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
@@ -10,7 +10,6 @@
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@@ -22,8 +21,8 @@
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysEquType.class)
public class SysEquTypeVo implements Serializable {
@AutoMapper(target = EimsEquType.class)
public class EimsEquTypeVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
@@ -84,7 +83,7 @@
    @ExcelProperty(value = "备注")
    private String remark;
    private List<SysEquTypeVo> children;
    private List<EimsEquTypeVo> children;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsEquVo.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/SysEquVo.java ÐÞ¸Ä
@@ -3,11 +3,10 @@
import java.util.Date;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.eims.domain.SysEqu;
import org.dromara.eims.domain.EimsEqu;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
@@ -18,15 +17,15 @@
/**
 * ã€è®¾å¤‡å°è´¦ã€‘视图对象 sys_equipment
 * ã€è®¾å¤‡å°è´¦ã€‘视图对象 eims_equ
 *
 * @author zhuguifei
 * @date 2025-01-04
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysEqu.class)
public class SysEquVo implements Serializable {
@AutoMapper(target = EimsEqu.class)
public class EimsEquVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package org.dromara.eims.mapper;
import org.dromara.eims.domain.EimsEqu;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * ã€è®¾å¤‡å°è´¦ã€‘Mapper接口
 *
 * @author zhuguifei
 * @date 2025-01-04
 */
public interface EimsEquMapper extends BaseMapperPlus<EimsEqu, EimsEquVo> {
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquStatuMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package org.dromara.eims.mapper;
import org.dromara.eims.domain.EimsEquStatu;
import org.dromara.eims.domain.vo.EimsEquStatuVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * è®¾å¤‡çŠ¶æ€è®°å½•Mapper接口
 *
 * @author zhuguifei
 * @date 2025-01-14
 */
public interface EimsEquStatuMapper extends BaseMapperPlus<EimsEquStatu, EimsEquStatuVo> {
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTrialMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package org.dromara.eims.mapper;
import org.dromara.eims.domain.EimsEquTrial;
import org.dromara.eims.domain.vo.EimsEquTrialVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * è®¾å¤‡è¯•产记录Mapper接口
 *
 * @author zhuguifei
 * @date 2025-01-09
 */
public interface EimsEquTrialMapper extends BaseMapperPlus<EimsEquTrial, EimsEquTrialVo> {
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsEquTypeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package org.dromara.eims.mapper;
import org.dromara.eims.domain.EimsEquType;
import org.dromara.eims.domain.vo.EimsEquTypeVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * è®¾å¤‡ç±»åž‹Mapper接口
 *
 * @author zhuguifei
 * @date 2025-01-06
 */
public interface EimsEquTypeMapper extends BaseMapperPlus<EimsEquType, EimsEquTypeVo> {
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquMapper.java
ÎļþÒÑɾ³ý
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/SysEquTypeMapper.java
ÎļþÒÑɾ³ý
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquService.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/ISysEquService.java ÐÞ¸Ä
@@ -1,8 +1,8 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.bo.SysEquBo;
import org.dromara.eims.domain.vo.SysEquVo;
import org.dromara.eims.domain.bo.EimsEquBo;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -15,7 +15,7 @@
 * @author zhuguifei
 * @date 2025-01-04
 */
public interface ISysEquService {
public interface IEimsEquService {
    /**
     * æŸ¥è¯¢ã€è®¾å¤‡å°è´¦ã€‘
@@ -23,7 +23,7 @@
     * @param equId ä¸»é”®
     * @return ã€è®¾å¤‡å°è´¦ã€‘
     */
    SysEquVo queryById(Long equId);
    EimsEquVo queryById(Long equId);
    /**
     * åˆ†é¡µæŸ¥è¯¢ã€è®¾å¤‡å°è´¦ã€‘列表
@@ -32,7 +32,7 @@
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ã€è®¾å¤‡å°è´¦ã€‘分页列表
     */
    TableDataInfo<SysEquVo> queryPageList(SysEquBo bo, PageQuery pageQuery);
    TableDataInfo<EimsEquVo> queryPageList(EimsEquBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„【设备台账】列表
@@ -40,7 +40,7 @@
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ã€è®¾å¤‡å°è´¦ã€‘列表
     */
    List<SysEquVo> queryList(SysEquBo bo);
    List<EimsEquVo> queryList(EimsEquBo bo);
    /**
     * æ–°å¢žã€è®¾å¤‡å°è´¦ã€‘
@@ -48,7 +48,7 @@
     * @param bo ã€è®¾å¤‡å°è´¦ã€‘
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(SysEquBo bo);
    Boolean insertByBo(EimsEquBo bo);
    /**
     * ä¿®æ”¹ã€è®¾å¤‡å°è´¦ã€‘
@@ -56,7 +56,7 @@
     * @param bo ã€è®¾å¤‡å°è´¦ã€‘
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(SysEquBo bo);
    Boolean updateByBo(EimsEquBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ã€è®¾å¤‡å°è´¦ã€‘信息
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquStatuService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.vo.EimsEquStatuVo;
import org.dromara.eims.domain.bo.EimsEquStatuBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
 * è®¾å¤‡çŠ¶æ€è®°å½•Service接口
 *
 * @author zhuguifei
 * @date 2025-01-14
 */
public interface IEimsEquStatuService {
    /**
     * æŸ¥è¯¢è®¾å¤‡çŠ¶æ€è®°å½•
     *
     * @param equStatuId ä¸»é”®
     * @return è®¾å¤‡çŠ¶æ€è®°å½•
     */
    EimsEquStatuVo queryById(Long equStatuId);
    /**
     * åˆ†é¡µæŸ¥è¯¢è®¾å¤‡çŠ¶æ€è®°å½•åˆ—è¡¨
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return è®¾å¤‡çŠ¶æ€è®°å½•åˆ†é¡µåˆ—è¡¨
     */
    TableDataInfo<EimsEquStatuVo> queryPageList(EimsEquStatuBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„设备状态记录列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return è®¾å¤‡çŠ¶æ€è®°å½•åˆ—è¡¨
     */
    List<EimsEquStatuVo> queryList(EimsEquStatuBo bo);
    /**
     * æ–°å¢žè®¾å¤‡çŠ¶æ€è®°å½•
     *
     * @param bo è®¾å¤‡çŠ¶æ€è®°å½•
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(EimsEquStatuBo bo);
    /**
     * ä¿®æ”¹è®¾å¤‡çŠ¶æ€è®°å½•
     *
     * @param bo è®¾å¤‡çŠ¶æ€è®°å½•
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsEquStatuBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤è®¾å¤‡çŠ¶æ€è®°å½•ä¿¡æ¯
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTrialService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.vo.EimsEquTrialVo;
import org.dromara.eims.domain.bo.EimsEquTrialBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
 * è®¾å¤‡è¯•产记录Service接口
 *
 * @author zhuguifei
 * @date 2025-01-09
 */
public interface IEimsEquTrialService {
    /**
     * æŸ¥è¯¢è®¾å¤‡è¯•产记录
     *
     * @param trialId ä¸»é”®
     * @return è®¾å¤‡è¯•产记录
     */
    EimsEquTrialVo queryById(Long trialId);
    /**
     * åˆ†é¡µæŸ¥è¯¢è®¾å¤‡è¯•产记录列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return è®¾å¤‡è¯•产记录分页列表
     */
    TableDataInfo<EimsEquTrialVo> queryPageList(EimsEquTrialBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„设备试产记录列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return è®¾å¤‡è¯•产记录列表
     */
    List<EimsEquTrialVo> queryList(EimsEquTrialBo bo);
    /**
     * æ–°å¢žè®¾å¤‡è¯•产记录
     *
     * @param bo è®¾å¤‡è¯•产记录
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(EimsEquTrialBo bo);
    /**
     * ä¿®æ”¹è®¾å¤‡è¯•产记录
     *
     * @param bo è®¾å¤‡è¯•产记录
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsEquTrialBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤è®¾å¤‡è¯•产记录信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsEquTypeService.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/ISysEquTypeService.java ÐÞ¸Ä
@@ -1,8 +1,8 @@
package org.dromara.eims.service;
import cn.hutool.core.lang.tree.Tree;
import org.dromara.eims.domain.vo.SysEquTypeVo;
import org.dromara.eims.domain.bo.SysEquTypeBo;
import org.dromara.eims.domain.bo.EimsEquTypeBo;
import org.dromara.eims.domain.vo.EimsEquTypeVo;
import java.util.Collection;
import java.util.List;
@@ -13,7 +13,7 @@
 * @author zhuguifei
 * @date 2025-01-06
 */
public interface ISysEquTypeService {
public interface IEimsEquTypeService {
    /**
     * æŸ¥è¯¢è®¾å¤‡ç±»åž‹
@@ -21,7 +21,7 @@
     * @param equTypeId ä¸»é”®
     * @return è®¾å¤‡ç±»åž‹
     */
    SysEquTypeVo queryById(Long equTypeId);
    EimsEquTypeVo queryById(Long equTypeId);
    /**
@@ -30,7 +30,7 @@
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return è®¾å¤‡ç±»åž‹åˆ—表
     */
    List<SysEquTypeVo> queryList(SysEquTypeBo bo);
    List<EimsEquTypeVo> queryList(EimsEquTypeBo bo);
    /**
     * æ–°å¢žè®¾å¤‡ç±»åž‹
@@ -38,7 +38,7 @@
     * @param bo è®¾å¤‡ç±»åž‹
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(SysEquTypeBo bo);
    Boolean insertByBo(EimsEquTypeBo bo);
    /**
     * ä¿®æ”¹è®¾å¤‡ç±»åž‹
@@ -46,7 +46,7 @@
     * @param bo è®¾å¤‡ç±»åž‹
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(SysEquTypeBo bo);
    Boolean updateByBo(EimsEquTypeBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤è®¾å¤‡ç±»åž‹ä¿¡æ¯
@@ -70,6 +70,6 @@
     * @param bo
     * @return æ ‘列表
     */
    List<Tree<Long>> selectEquTypeTreeList(SysEquTypeBo bo);
    List<Tree<Long>> selectEquTypeTreeList(EimsEquTypeBo bo);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
package org.dromara.eims.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.core.service.EquService;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.eims.domain.EimsEqu;
import org.dromara.eims.domain.EimsEquType;
import org.dromara.eims.domain.bo.EimsEquBo;
import org.dromara.eims.domain.vo.EimsEquTypeVo;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.eims.mapper.EimsEquMapper;
import org.dromara.eims.mapper.EimsEquTypeMapper;
import org.dromara.eims.service.IEimsEquService;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.stereotype.Service;
import java.util.*;
/**
 * ã€è®¾å¤‡å°è´¦ã€‘Service业务层处理
 *
 * @author zhuguifei
 * @date 2025-01-04
 */
@RequiredArgsConstructor
@Service
public class EimsEquServiceImpl implements IEimsEquService, EquService {
    private final EimsEquMapper baseMapper;
    private final EimsEquTypeMapper equTypeMapper;
    /**
     * æŸ¥è¯¢ã€è®¾å¤‡å°è´¦ã€‘
     *
     * @param equId ä¸»é”®
     * @return ã€è®¾å¤‡å°è´¦ã€‘
     */
    @Override
    public EimsEquVo queryById(Long equId){
        return baseMapper.selectVoById(equId);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢ã€è®¾å¤‡å°è´¦ã€‘列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return ã€è®¾å¤‡å°è´¦ã€‘分页列表
     */
    @Override
    public TableDataInfo<EimsEquVo> queryPageList(EimsEquBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<EimsEqu> lqw = buildQueryWrapper(bo);
        Page<EimsEquVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„【设备台账】列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return ã€è®¾å¤‡å°è´¦ã€‘列表
     */
    @Override
    public List<EimsEquVo> queryList(EimsEquBo bo) {
        LambdaQueryWrapper<EimsEqu> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsEqu> buildQueryWrapper(EimsEquBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<EimsEqu> lqw = Wrappers.lambdaQuery();
        lqw.like(StringUtils.isNotBlank(bo.getAssetNo()), EimsEqu::getAssetNo, bo.getAssetNo());
        Long equTypeId = bo.getEquTypeId();
        /**
         * equTypeId = 0 æ—¶æŸ¥è¯¢æ‰€æœ‰è®¾å¤‡ï¼ˆé»˜è®¤æ ¹ç›®å½•id为0,详见SysEquTypeServiceImpl中selectEquTypeTreeList)
         * equTypeId   ä¸ºå…¶ä»–值时只查当前设备类型id和后代设备类型id
         */
        if (equTypeId != null && equTypeId > 0) {
            List<Long> allDescendantIds = getAllDescendantIds(equTypeId);
            lqw.in(EimsEqu::getEquTypeId,allDescendantIds);
        }
        lqw.like(StringUtils.isNotBlank(bo.getEquName()), EimsEqu::getEquName, bo.getEquName());
        lqw.eq(StringUtils.isNotBlank(bo.getModelNo()), EimsEqu::getModelNo, bo.getModelNo());
        lqw.eq(StringUtils.isNotBlank(bo.getMadeIn()), EimsEqu::getMadeIn, bo.getMadeIn());
        lqw.eq(bo.getRatedPower() != null, EimsEqu::getRatedPower, bo.getRatedPower());
        lqw.eq(StringUtils.isNotBlank(bo.getPlateInfo()), EimsEqu::getPlateInfo, bo.getPlateInfo());
        lqw.eq(bo.getPurchaseDate() != null, EimsEqu::getPurchaseDate, bo.getPurchaseDate());
        lqw.eq(bo.getStatus() != null, EimsEqu::getStatus, bo.getStatus());
        lqw.eq(StringUtils.isNotBlank(bo.getLocation()), EimsEqu::getLocation, bo.getLocation());
        lqw.eq(bo.getDeptUsed() != null, EimsEqu::getDeptUsed, bo.getDeptUsed());
        lqw.eq(bo.getRespPerson() != null, EimsEqu::getRespPerson, bo.getRespPerson());
        lqw.eq(StringUtils.isNotBlank(bo.getContactPhone()), EimsEqu::getContactPhone, bo.getContactPhone());
        lqw.eq(bo.getDeployDate() != null, EimsEqu::getDeployDate, bo.getDeployDate());
        lqw.eq(bo.getTrialDate() != null, EimsEqu::getTrialDate, bo.getTrialDate());
        lqw.eq(bo.getPlanAcceptDate() != null, EimsEqu::getPlanAcceptDate, bo.getPlanAcceptDate());
        lqw.eq(bo.getActualAcceptDate() != null, EimsEqu::getActualAcceptDate, bo.getActualAcceptDate());
        lqw.eq(bo.getImportStatus() != null, EimsEqu::getImportStatus, bo.getImportStatus());
        lqw.eq(StringUtils.isNotBlank(bo.getEquCode()), EimsEqu::getEquCode, bo.getEquCode());
        lqw.eq(bo.getInventoryFlag() != null, EimsEqu::getInventoryFlag, bo.getInventoryFlag());
        lqw.eq(bo.getInventoryDate() != null, EimsEqu::getInventoryDate, bo.getInventoryDate());
        lqw.eq(bo.getServiceLife() != null, EimsEqu::getServiceLife, bo.getServiceLife());
        lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
            EimsEqu::getDeployDate, params.get("beginTime"), params.get("endTime"));
        return lqw;
    }
    /**
     * æ ¹æ®id,获取所有后代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<EimsEquType> equTypeWrapper = new QueryWrapper<>();
        equTypeWrapper.lambda().eq(EimsEquType::getParentId, currentId);
        List<EimsEquTypeVo> children = equTypeMapper.selectVoList(equTypeWrapper);
        if (children != null && !children.isEmpty()) {
            for (EimsEquTypeVo child : children) {
                Long childId = child.getEquTypeId();
                collector.add(childId);
                collectDescendants(childId, collector);
            }
        }
    }
    /**
     * æ–°å¢žã€è®¾å¤‡å°è´¦ã€‘
     *
     * @param bo ã€è®¾å¤‡å°è´¦ã€‘
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsEquBo bo) {
        EimsEqu add = MapstructUtils.convert(bo, EimsEqu.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setEquId(add.getEquId());
        }
        return flag;
    }
    /**
     * ä¿®æ”¹ã€è®¾å¤‡å°è´¦ã€‘
     *
     * @param bo ã€è®¾å¤‡å°è´¦ã€‘
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsEquBo bo) {
        EimsEqu update = MapstructUtils.convert(bo, EimsEqu.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(EimsEqu entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ã€è®¾å¤‡å°è´¦ã€‘信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
    @Override
    public String selectEquNameByIds(String equIds) {
        List<String> list = new ArrayList<>();
        for (Long id : StringUtils.splitTo(equIds, Convert::toLong)) {
            EimsEquVo vo = SpringUtils.getAopProxy(this).queryById(id);
            if (ObjectUtil.isNotNull(vo)) {
                list.add(vo.getEquName());
            }
        }
        return String.join(StringUtils.SEPARATOR, list);
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquStatuServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
package org.dromara.eims.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.eims.domain.EimsEqu;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsEquStatuBo;
import org.dromara.eims.domain.vo.EimsEquStatuVo;
import org.dromara.eims.domain.EimsEquStatu;
import org.dromara.eims.mapper.EimsEquStatuMapper;
import org.dromara.eims.service.IEimsEquStatuService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
 * è®¾å¤‡çŠ¶æ€è®°å½•Service业务层处理
 *
 * @author zhuguifei
 * @date 2025-01-14
 */
@RequiredArgsConstructor
@Service
public class EimsEquStatuServiceImpl implements IEimsEquStatuService {
    private final EimsEquStatuMapper baseMapper;
    /**
     * æŸ¥è¯¢è®¾å¤‡çŠ¶æ€è®°å½•
     *
     * @param equStatuId ä¸»é”®
     * @return è®¾å¤‡çŠ¶æ€è®°å½•
     */
    @Override
    public EimsEquStatuVo queryById(Long equStatuId){
        return baseMapper.selectVoById(equStatuId);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢è®¾å¤‡çŠ¶æ€è®°å½•åˆ—è¡¨
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return è®¾å¤‡çŠ¶æ€è®°å½•åˆ†é¡µåˆ—è¡¨
     */
    @Override
    public TableDataInfo<EimsEquStatuVo> queryPageList(EimsEquStatuBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<EimsEquStatu> lqw = buildQueryWrapper(bo);
        Page<EimsEquStatuVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„设备状态记录列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return è®¾å¤‡çŠ¶æ€è®°å½•åˆ—è¡¨
     */
    @Override
    public List<EimsEquStatuVo> queryList(EimsEquStatuBo bo) {
        LambdaQueryWrapper<EimsEquStatu> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsEquStatu> buildQueryWrapper(EimsEquStatuBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<EimsEquStatu> lqw = Wrappers.lambdaQuery();
        lqw.eq(bo.getEquId() != null, EimsEquStatu::getEquId, bo.getEquId());
        lqw.eq(StringUtils.isNotBlank(bo.getBeforeChange()), EimsEquStatu::getBeforeChange, bo.getBeforeChange());
        lqw.eq(StringUtils.isNotBlank(bo.getAfterChange()), EimsEquStatu::getAfterChange, bo.getAfterChange());
        lqw.eq(bo.getChangeUser() != null, EimsEquStatu::getChangeUser, bo.getChangeUser());
        lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
            EimsEquStatu::getChangeDate, params.get("beginTime"), params.get("endTime"));
        return lqw;
    }
    /**
     * æ–°å¢žè®¾å¤‡çŠ¶æ€è®°å½•
     *
     * @param bo è®¾å¤‡çŠ¶æ€è®°å½•
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsEquStatuBo bo) {
        EimsEquStatu add = MapstructUtils.convert(bo, EimsEquStatu.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setEquStatuId(add.getEquStatuId());
        }
        return flag;
    }
    /**
     * ä¿®æ”¹è®¾å¤‡çŠ¶æ€è®°å½•
     *
     * @param bo è®¾å¤‡çŠ¶æ€è®°å½•
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsEquStatuBo bo) {
        EimsEquStatu update = MapstructUtils.convert(bo, EimsEquStatu.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(EimsEquStatu entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤è®¾å¤‡çŠ¶æ€è®°å½•ä¿¡æ¯
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTrialServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
package org.dromara.eims.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.eims.domain.EimsEquTrial;
import org.dromara.eims.domain.bo.EimsEquTrialBo;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.vo.EimsEquTrialVo;
import org.dromara.eims.mapper.EimsEquTrialMapper;
import org.dromara.eims.service.IEimsEquTrialService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
 * è®¾å¤‡è¯•产记录Service业务层处理
 *
 * @author zhuguifei
 * @date 2025-01-09
 */
@RequiredArgsConstructor
@Service
public class EimsEquTrialServiceImpl implements IEimsEquTrialService {
    private final EimsEquTrialMapper baseMapper;
    /**
     * æŸ¥è¯¢è®¾å¤‡è¯•产记录
     *
     * @param trialId ä¸»é”®
     * @return è®¾å¤‡è¯•产记录
     */
    @Override
    public EimsEquTrialVo queryById(Long trialId){
        return baseMapper.selectVoById(trialId);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢è®¾å¤‡è¯•产记录列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return è®¾å¤‡è¯•产记录分页列表
     */
    @Override
    public TableDataInfo<EimsEquTrialVo> queryPageList(EimsEquTrialBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<EimsEquTrial> lqw = buildQueryWrapper(bo);
        Page<EimsEquTrialVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„设备试产记录列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return è®¾å¤‡è¯•产记录列表
     */
    @Override
    public List<EimsEquTrialVo> queryList(EimsEquTrialBo bo) {
        LambdaQueryWrapper<EimsEquTrial> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsEquTrial> buildQueryWrapper(EimsEquTrialBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<EimsEquTrial> lqw = Wrappers.lambdaQuery();
        lqw.eq(bo.getEquId() != null, EimsEquTrial::getEquId, bo.getEquId());
        lqw.eq(bo.getTrialNum() != null, EimsEquTrial::getTrialNum, bo.getTrialNum());
        lqw.eq(bo.getTrialDate() != null, EimsEquTrial::getTrialDate, bo.getTrialDate());
        lqw.eq(bo.getProGoodNum() != null, EimsEquTrial::getProGoodNum, bo.getProGoodNum());
        lqw.eq(bo.getProGoodRate() != null, EimsEquTrial::getProGoodRate, bo.getProGoodRate());
        lqw.eq(bo.getOperatorId() != null, EimsEquTrial::getOperatorId, bo.getOperatorId());
        lqw.eq(bo.getStartTime() != null, EimsEquTrial::getStartTime, bo.getStartTime());
        lqw.eq(bo.getEndTime() != null, EimsEquTrial::getEndTime, bo.getEndTime());
        lqw.eq(bo.getRunTime() != null, EimsEquTrial::getRunTime, bo.getRunTime());
        lqw.eq(bo.getStopTime() != null, EimsEquTrial::getStopTime, bo.getStopTime());
        lqw.eq(bo.getPlanRunTime() != null, EimsEquTrial::getPlanRunTime, bo.getPlanRunTime());
        lqw.eq(StringUtils.isNotBlank(bo.getDebugHistory()), EimsEquTrial::getDebugHistory, bo.getDebugHistory());
        lqw.eq(bo.getOee() != null, EimsEquTrial::getOee, bo.getOee());
        lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
            EimsEquTrial::getTrialDate, params.get("beginTime"), params.get("endTime"));
        return lqw;
    }
    /**
     * æ–°å¢žè®¾å¤‡è¯•产记录
     *
     * @param bo è®¾å¤‡è¯•产记录
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsEquTrialBo bo) {
        EimsEquTrial add = MapstructUtils.convert(bo, EimsEquTrial.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setTrialId(add.getTrialId());
        }
        return flag;
    }
    /**
     * ä¿®æ”¹è®¾å¤‡è¯•产记录
     *
     * @param bo è®¾å¤‡è¯•产记录
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsEquTrialBo bo) {
        EimsEquTrial update = MapstructUtils.convert(bo, EimsEquTrial.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(EimsEquTrial entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤è®¾å¤‡è¯•产记录信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsEquTypeServiceImpl.java
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquTypeServiceImpl.java ÐÞ¸Ä
@@ -13,12 +13,12 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.TreeBuildUtils;
import org.dromara.eims.domain.EimsEquType;
import org.dromara.eims.domain.bo.EimsEquTypeBo;
import org.dromara.eims.domain.vo.EimsEquTypeVo;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.SysEquTypeBo;
import org.dromara.eims.domain.vo.SysEquTypeVo;
import org.dromara.eims.domain.SysEquType;
import org.dromara.eims.mapper.SysEquTypeMapper;
import org.dromara.eims.service.ISysEquTypeService;
import org.dromara.eims.mapper.EimsEquTypeMapper;
import org.dromara.eims.service.IEimsEquTypeService;
import java.util.ArrayList;
import java.util.List;
@@ -33,9 +33,9 @@
 */
@RequiredArgsConstructor
@Service
public class SysEquTypeServiceImpl implements ISysEquTypeService, EquTypeService {
public class EimsEquTypeServiceImpl implements IEimsEquTypeService, EquTypeService {
    private final SysEquTypeMapper baseMapper;
    private final EimsEquTypeMapper baseMapper;
    /**
     * æŸ¥è¯¢è®¾å¤‡ç±»åž‹
@@ -44,7 +44,7 @@
     * @return è®¾å¤‡ç±»åž‹
     */
    @Override
    public SysEquTypeVo queryById(Long equTypeId){
    public EimsEquTypeVo queryById(Long equTypeId){
        return baseMapper.selectVoById(equTypeId);
    }
@@ -56,21 +56,21 @@
     * @return è®¾å¤‡ç±»åž‹åˆ—表
     */
    @Override
    public List<SysEquTypeVo> queryList(SysEquTypeBo bo) {
        LambdaQueryWrapper<SysEquType> lqw = buildQueryWrapper(bo);
    public List<EimsEquTypeVo> queryList(EimsEquTypeBo bo) {
        LambdaQueryWrapper<EimsEquType> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<SysEquType> buildQueryWrapper(SysEquTypeBo bo) {
    private LambdaQueryWrapper<EimsEquType> buildQueryWrapper(EimsEquTypeBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<SysEquType> lqw = Wrappers.lambdaQuery();
        lqw.like(StringUtils.isNotBlank(bo.getTypeName()), SysEquType::getTypeName, bo.getTypeName());
        lqw.eq(StringUtils.isNotBlank(bo.getTypeCode()), SysEquType::getTypeCode, bo.getTypeCode());
        lqw.eq(bo.getParentId() != null, SysEquType::getParentId, bo.getParentId());
        lqw.eq(bo.getOrderNum() != null, SysEquType::getOrderNum, bo.getOrderNum());
        lqw.eq(StringUtils.isNotBlank(bo.getMenuType()), SysEquType::getMenuType, bo.getMenuType());
        lqw.eq(StringUtils.isNotBlank(bo.getIcon()), SysEquType::getIcon, bo.getIcon());
        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysEquType::getStatus, bo.getStatus());
        LambdaQueryWrapper<EimsEquType> lqw = Wrappers.lambdaQuery();
        lqw.like(StringUtils.isNotBlank(bo.getTypeName()), EimsEquType::getTypeName, bo.getTypeName());
        lqw.eq(StringUtils.isNotBlank(bo.getTypeCode()), EimsEquType::getTypeCode, bo.getTypeCode());
        lqw.eq(bo.getParentId() != null, EimsEquType::getParentId, bo.getParentId());
        lqw.eq(bo.getOrderNum() != null, EimsEquType::getOrderNum, bo.getOrderNum());
        lqw.eq(StringUtils.isNotBlank(bo.getMenuType()), EimsEquType::getMenuType, bo.getMenuType());
        lqw.eq(StringUtils.isNotBlank(bo.getIcon()), EimsEquType::getIcon, bo.getIcon());
        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsEquType::getStatus, bo.getStatus());
        return lqw;
    }
@@ -81,8 +81,8 @@
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(SysEquTypeBo bo) {
        SysEquType add = MapstructUtils.convert(bo, SysEquType.class);
    public Boolean insertByBo(EimsEquTypeBo bo) {
        EimsEquType add = MapstructUtils.convert(bo, EimsEquType.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
@@ -98,8 +98,8 @@
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(SysEquTypeBo bo) {
        SysEquType update = MapstructUtils.convert(bo, SysEquType.class);
    public Boolean updateByBo(EimsEquTypeBo bo) {
        EimsEquType update = MapstructUtils.convert(bo, EimsEquType.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
@@ -107,7 +107,7 @@
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(SysEquType entity){
    private void validEntityBeforeSave(EimsEquType entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
@@ -133,7 +133,7 @@
     */
    @Override
    public boolean hasChildByEquTypeId(Long equTypeId) {
        return baseMapper.exists(new LambdaQueryWrapper<SysEquType>().eq(SysEquType::getParentId, equTypeId));
        return baseMapper.exists(new LambdaQueryWrapper<EimsEquType>().eq(EimsEquType::getParentId, equTypeId));
    }
    /**
     * èŽ·å–è®¾å¤‡ç±»åž‹æ ‘åˆ—è¡¨
@@ -142,20 +142,20 @@
     * @return æ ‘列表
     */
    @Override
    public List<Tree<Long>> selectEquTypeTreeList(SysEquTypeBo bo) {
    public List<Tree<Long>> selectEquTypeTreeList(EimsEquTypeBo bo) {
        // åªæŸ¥è¯¢æœªç¦ç”¨éƒ¨é—¨
        bo.setStatus(UserConstants.DEPT_NORMAL);
        LambdaQueryWrapper<SysEquType> lqw = buildQueryWrapper(bo);
        List<SysEquTypeVo> equTypeVoList = baseMapper.selectVoList(lqw);
        LambdaQueryWrapper<EimsEquType> lqw = buildQueryWrapper(bo);
        List<EimsEquTypeVo> equTypeVoList = baseMapper.selectVoList(lqw);
        for (int i = 0; i < equTypeVoList.size(); i++) {
            SysEquTypeVo sysEquTypeVo = equTypeVoList.get(i);
            if(sysEquTypeVo.getParentId() == null){
            EimsEquTypeVo eimsEquTypeVo = equTypeVoList.get(i);
            if(eimsEquTypeVo.getParentId() == null){
                equTypeVoList.get(i).setParentId(0L);
            }
        }
        //加根目录
        SysEquTypeVo root = new SysEquTypeVo();
        EimsEquTypeVo root = new EimsEquTypeVo();
        root.setEquTypeId(0L);
        root.setMenuType("M");
        root.setTypeName("所有设备");
@@ -175,7 +175,7 @@
     * @param equTypeVoList è®¾å¤‡ç±»åž‹åˆ—表
     * @return ä¸‹æ‹‰æ ‘结构列表
     */
    public List<Tree<Long>> buildEquTypeTreeSelect(List<SysEquTypeVo> equTypeVoList) {
    public List<Tree<Long>> buildEquTypeTreeSelect(List<EimsEquTypeVo> equTypeVoList) {
        if (CollUtil.isEmpty(equTypeVoList)) {
            return CollUtil.newArrayList();
        }
@@ -195,7 +195,7 @@
    public String selectEquTypeNameByIds(String equTypeIds) {
        List<String> list = new ArrayList<>();
        for (Long id : StringUtils.splitTo(equTypeIds, Convert::toLong)) {
            SysEquTypeVo vo = SpringUtils.getAopProxy(this).queryById(id);
            EimsEquTypeVo vo = SpringUtils.getAopProxy(this).queryById(id);
            if (ObjectUtil.isNotNull(vo)) {
                list.add(vo.getTypeName());
            }
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/SysEquServiceImpl.java
ÎļþÒÑɾ³ý
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquMapper.xml
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquMapper.xml ÐÞ¸Ä
@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.eims.mapper.SysEquMapper">
<mapper namespace="org.dromara.eims.mapper.EimsEquMapper">
</mapper>
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquStatuMapper.xml
copy from eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml copy to eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquStatuMapper.xml
Îļþ´Ó eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml ¸´ÖÆ
@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.eims.mapper.SysEquTypeMapper">
<mapper namespace="org.dromara.eims.mapper.EimsEquStatuMapper">
</mapper>
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTrialMapper.xml
ÎļþÃû´Ó eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml ÐÞ¸Ä
@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.eims.mapper.SysEquTypeMapper">
<mapper namespace="org.dromara.eims.mapper.EimsEquTrialMapper">
</mapper>
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTypeMapper.xml
copy from eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml copy to eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsEquTypeMapper.xml
Îļþ´Ó eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/SysEquTypeMapper.xml ¸´ÖÆ
@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.eims.mapper.SysEquTypeMapper">
<mapper namespace="org.dromara.eims.mapper.EimsEquTypeMapper">
</mapper>