lyh
2025-07-03 2a30092c6e1efa28b5ca29a1b518356a08b4044c
修改设备台账
已重命名29个文件
已添加6个文件
已修改23个文件
1549 ■■■■ 文件已修改
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/annotation/DictExt.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/annotation/DictList.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/annotation/FieldQuery.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/system/vo/LoginUser.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EamDictAspect.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/controller/BaseFactoryController.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/controller/BaseFactoryUserController.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/controller/EamBaseRepairDepartController.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/BaseFactory.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/BaseFactoryUser.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/EamBaseRepairDepart.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/EamBaseRepairDepartUser.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/BaseFactoryMapper.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/BaseFactoryUserMapper.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/EamBaseRepairDepartMapper.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/EamBaseRepairDepartUserMapper.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/BaseFactoryMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/BaseFactoryUserMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/EamBaseRepairDepartMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/EamBaseRepairDepartUserMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/EamBaseFactoryTreeModel.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/EamBaseRepairDepartTreeModel.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/RepairDepartIdModel.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/WorkShopIdModel.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/rule/OrgCodeRepDepRule.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/IBaseFactoryService.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/IBaseFactoryUserService.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/IEamBaseRepairDepartService.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/impl/BaseFactoryServiceImpl.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/impl/BaseFactoryUserServiceImpl.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/impl/EamBaseRepairDepartImpl.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/util/FindsBaseFactorysChildrenUtil.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/util/FindsRepairDepartsChildrenUtil.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/util/WorkShopOrgCodeProRule.java 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java 546 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentExtend.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamUserSelectController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentLeanOutServiceImpl.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentScrapServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentSealUpServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentTransferServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceOrderServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/aspect/DicAspectService.java 311 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/aspect/FieldBatchQuery.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java
@@ -52,13 +52,13 @@
    /**
     * å®šä¹‰åˆ‡ç‚¹Pointcut
     */
    @Pointcut("execution(public * org.jeecg.modules..*.*Controller.*(..)) || @annotation(org.jeecg.common.aspect.annotation.AutoDict)")
    @Pointcut("execution(public * org.jeecg.modules.base.*Controller.*(..)) || @annotation(org.jeecg.common.aspect.annotation.AutoDict)")
    public void excudeService() {
    }
    @Around("excudeService()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        long time1=System.currentTimeMillis();
        long time1=System.currentTimeMillis();
        Object result = pjp.proceed();
        long time2=System.currentTimeMillis();
        log.debug("获取JSON数据 è€—时:"+(time2-time1)+"ms");
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/annotation/DictExt.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package org.jeecg.common.aspect.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * å­—典注解扩展,支持多字段匹配
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DictExt {
    /**
     * æ•°æ®å­—典表
     * @return
     */
    String dicTable() default "";
    /**
     * æ•°æ®Text
     * @return
     */
    String dicText() default "";
    /**
     * æ•°æ®code数组
     * @return
     */
    String[] dicCode();
    /**
     * æ•°æ®å‚数数组,参数跟code数组一一对应
     * @return
     */
    String[] dicParams();
}
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/annotation/DictList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package org.jeecg.common.aspect.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * ç±»æè¿°: æ·±åº¦å­—典翻译注解
 * åªèƒ½ç”¨æ¥æ³¨è§£List类型的属性
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DictList {
}
lxzn-boot-base-core/src/main/java/org/jeecg/common/aspect/annotation/FieldQuery.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package org.jeecg.common.aspect.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * å­—典注解
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldQuery{
    /**
     * å…³è”数据表
     * @return
     */
    String dicTable() default "";
    /**
     * æ•°æ®Text
     * @return
     */
    String dicText() default "";
    /**
     * æ•°æ®code数组
     * @return
     */
    String[] dicCode();
    /**
     * æ•°æ®å‚数数组,参数跟code数组一一对应
     * @return
     */
    String[] dicParams();
}
lxzn-boot-base-core/src/main/java/org/jeecg/common/system/vo/LoginUser.java
@@ -89,7 +89,7 @@
     * çŠ¶æ€(1:正常 2:冻结 ï¼‰
     */
    private Integer status;
    private Integer delFlag;
    /**
     * åŒæ­¥å·¥ä½œæµå¼•擎1同步0不同步
@@ -143,4 +143,9 @@
    private String equipmentIds;
    /**
     * è®¾å¤‡ç®¡ç†è®¾å¤‡ç»„
     */
    private String eamEquipmentIds;
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EamDictAspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package org.jeecg.modules.eam.aspect;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.system.aspect.DicAspectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * @Description: Dnc字典aopç±»
 * @Version: 1.0
 */
@Aspect
@Component
@Slf4j
public class EamDictAspect {
    @Autowired
    private DicAspectService dicAspectService;
    // å®šä¹‰åˆ‡ç‚¹Pointcut
    @Pointcut("execution(public * org.jeecg.modules.eam..*.*Controller.*(..))")
    public void excudeService() {
    }
    @Around("excudeService()")
    public Object  doAround(ProceedingJoinPoint pjp) throws Throwable {
        long time1=System.currentTimeMillis();
        Object result = pjp.proceed();
        long time2=System.currentTimeMillis();
        log.debug("获取JSON数据 è€—时:"+(time2-time1)+"ms");
        long start=System.currentTimeMillis();
        this.parseDictText(result);
        long end=System.currentTimeMillis();
        log.debug("解析注入JSON数据  è€—æ—¶"+(end-start)+"ms");
        return result;
    }
    /**
     * æœ¬æ–¹æ³•针对返回对象为Result çš„IPage的分页列表数据进行动态字典注入
     * å­—典注入实现 é€šè¿‡å¯¹å®žä½“类添加注解@dict æ¥æ ‡è¯†éœ€è¦çš„字典内容,字典分为单字典code即可 ï¼Œtable字典 code table text配合使用与原来jeecg的用法相同
     * ç¤ºä¾‹ä¸ºSysUser   å­—段为sex æ·»åŠ äº†æ³¨è§£@Dict(dicCode = "sex") ä¼šåœ¨å­—典服务立马查出来对应的text ç„¶åŽåœ¨è¯·æ±‚list的时候将这个字典text,已字段名称加_dictText形式返回到前端
     * ä¾‹è¾“入当前返回值的就会多出一个sex_dictText字段
     * {
     *      sex:1,
     *      sex_dictText:"男"
     * }
     * å‰ç«¯ç›´æŽ¥å–值sext_dictText在table里面无需再进行前端的字典转换了
     *  customRender:function (text) {
     *               if(text==1){
     *                 return "男";
     *               }else if(text==2){
     *                 return "女";
     *               }else{
     *                 return text;
     *               }
     *             }
     *             ç›®å‰vue是这么进行字典渲染到table上的多了就很麻烦了 è¿™ä¸ªç›´æŽ¥åœ¨æœåŠ¡ç«¯æ¸²æŸ“å®Œæˆå‰ç«¯å¯ä»¥ç›´æŽ¥ç”¨
     * @param result
     */
    private void parseDictText(Object result) {
        if (result instanceof Result) {
            if (((Result) result).getResult() instanceof IPage) {
                List<JSONObject> items = dicAspectService.detailDict(((IPage) ((Result) result).getResult()).getRecords());
                ((IPage) ((Result) result).getResult()).setRecords(items);
            }
            else if(((Result) result).getResult() instanceof List){
                List<JSONObject> items = dicAspectService.detailDict(((List) ((Result) result).getResult()));
                ((Result) result).setResult(items);
            }
        }
    }
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/controller/BaseFactoryController.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/controller/BaseFactoryUserController.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/controller/EamBaseRepairDepartController.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/BaseFactory.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/BaseFactoryUser.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/EamBaseRepairDepart.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/entity/EamBaseRepairDepartUser.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/BaseFactoryMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/BaseFactoryUserMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/EamBaseRepairDepartMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/EamBaseRepairDepartUserMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/BaseFactoryMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/BaseFactoryUserMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/EamBaseRepairDepartMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/mapper/xml/EamBaseRepairDepartUserMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/EamBaseFactoryTreeModel.java
ÎļþÃû´Ó lxzn-module-eam/src/main/java/org/jeecg/modules/eam/base/model/EamBaseFactoryTreeModel.java ÐÞ¸Ä
@@ -1,17 +1,10 @@
package org.jeecg.modules.eam.base.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.modules.eam.base.entity.BaseFactory;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.ArrayList;
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/EamBaseRepairDepartTreeModel.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/RepairDepartIdModel.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/model/WorkShopIdModel.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/rule/OrgCodeRepDepRule.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/IBaseFactoryService.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/IBaseFactoryUserService.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/IEamBaseRepairDepartService.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/impl/BaseFactoryServiceImpl.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/impl/BaseFactoryUserServiceImpl.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/service/impl/EamBaseRepairDepartImpl.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/util/FindsBaseFactorysChildrenUtil.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/util/FindsRepairDepartsChildrenUtil.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/base/util/WorkShopOrgCodeProRule.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.eam.entity;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -14,6 +15,7 @@
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.awt.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@@ -69,287 +71,405 @@
    @ApiModelProperty(value = "删除标记")
    private Integer delFlag;
    /**
     * è®¾å¤‡ç»Ÿä¸€ç¼–号
     * å…³é”®è®¾å¤‡æ ‡è¯†
     */
    @Excel(name = "设备编号", width = 15, orderNum = "1")
    @ApiModelProperty(value = "设备编号")
    @Excel(name = "关键设备标识", width = 15, orderNum = "1")
    @ApiModelProperty(value = "关键设备标识")
    @Dict(dicCode = "equipment_importance")
    private String equipmentImportance;
    /**
     * ç»Ÿä¸€ç¼–码
     */
    @Excel(name = "统一编码", width = 15, orderNum = "2")
    @ApiModelProperty(value = "统一编码")
    private String equipmentCode;
    /**
     * è®¾å¤‡åç§°
     */
    @Excel(name = "设备名称", width = 15, orderNum = "2")
    @Excel(name = "设备名称", width = 15, orderNum = "3")
    @ApiModelProperty(value = "设备名称")
    private String equipmentName;
    /**
     * ä½¿ç”¨éƒ¨é—¨
     * å…¬å¸
     */
    @Excel(name = "使用车间", width = 25, dictTable = "mdc_production", dicText = "production_name", dicCode = "id", orderNum = "9")
    @ApiModelProperty(value = "使用部门")
    @Dict(dicCode = "mdc_production, production_name, id")
    private String orgId;
//    @Excel(name = "公司", width = 15, orderNum = "4")
    @ApiModelProperty(value = "公司")
    @Dict(dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "org_code")
    private transient String gsfactoryOrgCode;
    /**
     * è®¾å¤‡ç®¡ç†å‘˜
     * ä¸­å¿ƒ
     */
    @Excel(name = "设备管理员", width = 35, dictTable = "sys_user", dicText = "realname", dicCode = "username", orderNum = "10")
    @ApiModelProperty(value = "设备管理员")
    @Dict(dicCode = "sys_user, realname, username")
    private String equipmentManager;
//    @Excel(name = "中心", width = 15, orderNum = "5")
    @ApiModelProperty(value = "中心")
    @Dict(dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "org_code")
    private transient String zxfactoryOrgCode;
    /**
     * è®¾å¤‡ç±»åˆ«
     * å·¥åŒº
     */
    @Excel(name = "设备类别", width = 15, dicCode = "equipment_category", orderNum = "5")
    @ApiModelProperty(value = "设备类别")
//    @Excel(name = "工区", width = 15, orderNum = "6")
    @ApiModelProperty(value = "工区")
    @Dict(dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "org_code")
    private transient String gqfactoryOrgCode;
    /**
     * å·¥æ®µ
     */
    @Excel(name = "中心/工区/工段", width = 15, orderNum = "4")
    @ApiModelProperty(value = "中心/工区/工段")
    @Dict(dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "org_code")
    private String factoryOrgCode;
    /**
     * æ‰€å±žåˆ†ç±»
     */
    @Excel(name = "所属分类", width = 15, orderNum = "5")
    @ApiModelProperty(value = "所属分类")
    @Dict(dicCode = "equipment_category")
    private String equipmentCategory;
    /**
     * è®¾å¤‡åž‹å·
     */
    @Excel(name = "设备型号", width = 15, orderNum = "3")
    @ApiModelProperty(value = "设备型号")
    private String equipmentModel;
    /**
     * è®¾å¤‡è§„æ ¼
     */
    @Excel(name = "设备规格", width = 15, orderNum = "4")
    @ApiModelProperty(value = "设备规格")
    private String equipmentSpecification;
    /**
     * å®‰è£…位置
     */
    @Excel(name = "安装位置", width = 15, orderNum = "11")
    @ApiModelProperty(value = "安装位置")
    private String installationPosition;
    /**
     * èµ„产使用状态
     */
    @Excel(name = "资产使用状态", width = 15, dicCode = "asset_status", orderNum = "7")
    @ApiModelProperty(value = "资产状态")
    @Dict(dicCode = "asset_status")
    private String assetStatus;
    /**
     * å‡ºåŽ‚ç¼–å·
     */
    @Excel(name = "出厂编号", width = 15, orderNum = "12")
    @ApiModelProperty(value = "出厂编号")
    private String factoryNumber;
    /**
     * æœºåºŠåނ家
     */
    @Excel(name = "机床厂家", width = 15, orderNum = "13")
    @ApiModelProperty(value = "机床厂家")
    private String manufacturingEnterprise;
    /**
     * æ¥æºå›½å®¶
     */
    @Excel(name = "来源国家", width = 25, orderNum = "14")
    @ApiModelProperty(value = "来源国家")
    private String originCountry;
    /**
     * è®¾å¤‡ä¾›åº”商
     */
    @Excel(name = "设备供应商", width = 25, orderNum = "15")
    @ApiModelProperty(value = "设备供应商")
    private String supplier;
    /**
     * å‡ºåŽ‚æ—¥æœŸ
     */
    @Excel(name = "出厂日期", width = 25, format = "yyyy/MM/dd", orderNum = "16")
    @ApiModelProperty(value = "出厂日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date leaveFactoryDate;
    /**
     * éªŒæ”¶æ—¥æœŸ
     */
    @Excel(name = "投用日期", width = 25, format = "yyyy/MM/dd", orderNum = "17")
    @ApiModelProperty(value = "验收日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date acceptanceCheckDate;
    /**
     * è®¾å¤‡å›¾ç‰‡
     */
    @ApiModelProperty(value = "设备图片")
    private String equipmentImage;
    /**
     * ç”µæœºå°æ•°
     */
    @Excel(name = "电机台数", width = 15, orderNum = "18")
    @ApiModelProperty(value = "电机台数")
    private Integer motorsNumber;
    /**
     * æ€»åŠŸçŽ‡(KW)
     */
    @Excel(name = "总功率(KW)", width = 15, orderNum = "19")
    @ApiModelProperty(value = "总功率")
    private String equipmentPower;
    /**
     * é‡é‡(吨)
     */
    @Excel(name = "重量(吨)", width = 15, orderNum = "20")
    @ApiModelProperty(value = "重量(吨)")
    private String equipmentWeight;
    /**
     * æ˜¯å¦æœ‰å·¥è‰ºå‚æ•°
     */
    @Excel(name = "有无工艺参数", width = 15, dicCode = "has_no", orderNum = "21")
    @ApiModelProperty(value = "是否有工艺参数")
    private String processParametersFlag;
    /**
     * æ˜¯å¦æœ‰ç²¾åº¦å‚æ•°
     */
    @Excel(name = "有无精度参数", width = 15, dicCode = "has_no", orderNum = "22")
    @ApiModelProperty(value = "是否有精度参数")
    private String precisionParametersFlag;
    @TableField(exist = false)
    @Excel(name = "保养状态", width = 15, orderNum = "6",dicCode = "equipment_maintenance_status")
    @ApiModelProperty(value = "保养状态")
    @Dict(dicCode = "equipment_maintenance_status")
    private String maintenanceStatus;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注", width = 50, orderNum = "99")
    @ApiModelProperty(value = "备注")
    private String remark;
    /**
     * å¤–形尺寸
     */
    @Excel(name = "外形尺寸", width = 15, orderNum = "24")
    @ApiModelProperty(value = "外形尺寸")
    private String overallDimensions;
    /**
     * è®¾å¤‡ç§ç±»
     */
    @Excel(name = "设备种类", width = 15, orderNum = "6", dictTable = "sys_category", dicCode = "code", dicText = "name")
    @ApiModelProperty(value = "设备种类")
    @Dict(dictTable = "sys_category", dicCode = "code", dicText = "name")
    private String equipmentType;
    /**
     * åŽŸå§‹ä»·å€¼
     */
    @Excel(name = "原值(元)", width = 15, orderNum = "25")
    @ApiModelProperty(value = "原始价值")
    private BigDecimal originalValue;
    /**
     * èµ„金来源
     */
    @Excel(name = "资金来源", width = 15, orderNum = "26")
    @ApiModelProperty(value = "资金来源")
    private String fundingSource;
    @TableField(exist = false)
    @Excel(name = "维修状态", width = 15, orderNum = "7",dicCode = "equipment_repair_status")
    @ApiModelProperty(value = "维修状态")
    @Dict(dicCode = "equipment_repair_status")
    private String repairStatus;
    /**
     * åŠŸèƒ½ç”¨é€”
     */
    @Excel(name = "功能用途", width = 15, orderNum = "27")
    @ApiModelProperty(value = "功能用途")
    private String functionUse;
    /**
     * æ€§èƒ½æŒ‡æ ‡
     */
    @Excel(name = "性能指标", width = 15, orderNum = "28")
    @ApiModelProperty(value = "性能指标")
    private String performanceIndicators;
    /**
     * å…¥å¸æ—¶é—´
     */
    @Excel(name = "入帐时间", width = 15, format = "yyyy/MM/dd", orderNum = "29")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "入帐时间")
    private Date bookingTime;
    /**
     * ç®¡ç†åˆ†ç±»ï¼ˆA\B\C)
     */
    @Excel(name = "管理分类", width = 15, dicCode = "equipment_abc_flag", orderNum = "8")
    @ApiModelProperty(value = "管理分类")
    @Dict(dicCode = "equipment_abc_flag")
    private String equipmentImportance;
    /**
     * æŠ€æœ¯çŠ¶æ€
     */
    @Excel(name = "技术状态", width = 15, dicCode = "technology_status", orderNum = "7")
    /**技术状态*/
    @TableField(exist = false)
    @Excel(name = "技术状态", width = 15, orderNum = "8",dicCode = "equipment_technology_status")
    @ApiModelProperty(value = "技术状态")
    @Dict(dicCode = "technology_status")
    @Dict(dicCode = "equipment_technology_status")
    private String technologyStatus;
    /**
     * ABC标识
     */
    @Excel(name = "ABC标识", width = 15, orderNum = "9",dicCode = "abc_flag")
    @ApiModelProperty(value = "ABC标识")
    @Dict(dicCode = "abc_flag")
    private String abcFlag;
    /**
     * ç»´ä¿®ç­ç»„
     */
    @Excel(name = "维修班组", width = 15, orderNum = "10")
    @ApiModelProperty(value = "维修班组")
    private String repairDepartOrgCode;
    /** =================== èˆªå®‡æ•‘生 æœªç”¨çš„字段  å¼€å§‹  ==========================**/
    /**
     * å®‰å…¨é…ç½®
     */
    @Excel(name = "安全配置", width = 15, orderNum = "11")
    @ApiModelProperty(value = "安全配置")
    private String securityConfiguration;
    /**
     * å†·å´ç³»ç»Ÿ
     */
    @Excel(name = "冷却系统", width = 15, orderNum = "15",dicCode = "cooling_system")
    @ApiModelProperty(value = "冷却系统")
    @Dict(dicCode = "cooling_system")
    private String coolSystem;
    /**
     * ç­ç«å™¨
     */
    @Excel(name = "灭火器", width = 15, orderNum = "16")
    @ApiModelProperty(value = "灭火器")
    private String fireExtinguisher;
    /**
     * ç­ç«å™¨æœ‰æ•ˆæœŸè‡³
     */
    @Excel(name = "灭火器有效期至", width = 15, orderNum = "17")
    @ApiModelProperty(value = "灭火器有效期至")
    private String fireExtinguisherExpirationDate;
    /**
     * æ“ä½œç³»ç»Ÿ
     */
    @Excel(name = "操作系统", width = 15, orderNum = "18",dicCode = "yn")
    @ApiModelProperty(value = "操作系统")
    @Dict(dicCode = "yn")
    private String operationSystem;
    /**
     * ä¸»è½´è¿žæŽ¥å°ºå¯¸
     */
    @ApiModelProperty(value = "主轴连接尺寸")
    private String spindleConnectDimension;
    /**
     * ç«‹é¡¹å¡å·
     */
    @ApiModelProperty(value = "立项卡号")
    private String cardNumber;
    /**
     * æ˜¯å¦å®žæ–½MDC
     */
    @ApiModelProperty(value = "是否实施MDC")
    private String mdcFlag;
    @ApiModelProperty(value = "MDC设备类型")
    private String deviceType;
    /**
     * ç³»ç»Ÿ
     */
    @Excel(name = "系统", width = 15, orderNum = "19")
    @ApiModelProperty(value = "系统")
    private String system;
    /**
     * è®¾å¤‡ç«¯å£
     */
    @Excel(name = "设备端口", width = 15, orderNum = "20")
    @ApiModelProperty(value = "设备端口")
    private String equipmentPort;
    /**
     * åæ ‡æ•°é‡
     */
    @Excel(name = "坐标数量", width = 15, orderNum = "21")
    @ApiModelProperty(value = "坐标数量")
    private Integer coordinateNum;
    /**
     * ç‰¹ç§è®¾å¤‡;是否为特种设备
     * é‡é‡(吨)
     */
    @ApiModelProperty(value = "是否特种设备")
    private String specialEquipment;
    @Excel(name = "重量(吨)", width = 15, orderNum = "22")
    @ApiModelProperty(value = "重量(吨)")
    private BigDecimal equipmentWeight;
    /**
     * é‡é‡è®¡é‡å•位
     */
    @Excel(name = "重量计量单位", width = 15, orderNum = "23")
    @ApiModelProperty(value = "重量计量单位")
    private String weightUnit;
    /**
     * åŠŸèƒ½ä½ç½®
     */
    @Excel(name = "功能位置", width = 15, orderNum = "24")
    @ApiModelProperty(value = "功能位置")
    private String functionalLocation;
    /**
     * å®‰è£…位置
     */
    @Excel(name = "安装位置", width = 15, orderNum = "25")
    @ApiModelProperty(value = "安装位置")
    private String installationPosition;
    /**
     * å‡ºåŽ‚æ—¥æœŸ
     */
    @Excel(name = "出厂日期", width = 25, format = "yyyy/MM/dd", orderNum = "26")
    @ApiModelProperty(value = "出厂日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date leaveFactoryDate;
    /**
     * ç«‹é¡¹å¡å·
     */
    @Excel(name = "立项卡号", width = 15, orderNum = "27")
    @ApiModelProperty(value = "立项卡号")
    private String cardNumber;
    /**
     * èµ„金来源
     */
    @Excel(name = "资金来源", width = 15, orderNum = "28")
    @ApiModelProperty(value = "资金来源")
    private String fundingSource;
    /**
     * éªŒæ”¶æ—¥æœŸ
     */
    @Excel(name = "投用日期", width = 25, format = "yyyy/MM/dd", orderNum = "29")
    @ApiModelProperty(value = "验收日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date acceptanceCheckDate;
    /**
     * å‡ºåŽ‚ç¼–å·
     */
    @Excel(name = "出厂编号", width = 15, orderNum = "30")
    @ApiModelProperty(value = "出厂编号")
    private String factoryNumber;
    /**
     * èµ„产制造商
     */
    @Excel(name = "资产制造商", width = 25, orderNum = "31")
    @ApiModelProperty(value = "资产制造商")
    private String manufacturingEnterprise;
    /**
     * èµ„产来源国家
     */
    @Excel(name = "资产来源国家", width = 25, orderNum = "32")
    @ApiModelProperty(value = "资产来源国家")
    private String originCountry;
    /**
     * åž‹å·
     */
    @Excel(name = "型号", width = 15, orderNum = "33")
    @ApiModelProperty(value = "型号")
    private String equipmentModel;
    /**
     * è®¾å¤‡è§„æ ¼
     */
    @Excel(name = "设备规格", width = 15, orderNum = "34")
    @ApiModelProperty(value = "设备规格")
    private String equipmentSpecification;
    /**
     * æ€»åŠŸçŽ‡(KW)
     */
    @Excel(name = "总功率(KW)", width = 15, orderNum = "35")
    @ApiModelProperty(value = "总功率")
    private String equipmentPower;
    /**
     * è´¨ä¿å¼€å§‹æ—¥æœŸ
     */
    @Excel(name = "质保开始日期", width = 15, orderNum = "36")
    @ApiModelProperty(value = "质保开始日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date warrantyStartDate;
    /**
     * è´¨ä¿ç»“束日期
     */
    @Excel(name = "质保结束日期", width = 15, orderNum = "37")
    @ApiModelProperty(value = "质保结束日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date warrantyEndDate;
    /** =================== èˆªå®‡æ•‘生 æœªç”¨çš„字段  ç»“束  ==========================**/
    /**
     * èµ„产状态
     */
    @Excel(name = "资产状态", width = 15, orderNum = "38",dicCode = "asset_status")
    @ApiModelProperty(value = "资产状态")
    @Dict(dicCode = "asset_status")
    private String assetStatus;
    /**最新二保日期*/
    @TableField(exist = false)
    @ApiModelProperty(value = "维修状态")
    @Dict(dicCode = "equipment_repair_status")
    private String repairStatus;
    @Excel(name = "最新二保日期", width = 15, orderNum = "39")
    @ApiModelProperty(value = "最新二保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestSecondMaintenance;
    /**下次二保日期*/
    @TableField(exist = false)
    @ApiModelProperty(value = "保养状态")
    @Dict(dicCode = "equipment_maintenance_status")
    private String maintenanceStatus;
    @Excel(name = "下次二保日期", width = 15, orderNum = "40")
    @ApiModelProperty(value = "下次二保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextSecondMaintenance;
    // è®¾åˆ«ç®¡ç† æ‰‹æŒç«¯æŽ¥å£ä½¿ç”¨
    /**本次三保日期*/
    @TableField(exist = false)
    private String value;
    @Excel(name = "本次三保日期", width = 15, orderNum = "41")
    @ApiModelProperty(value = "本次三保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestThirdMaintenance;
    /**下次三保日期*/
    @TableField(exist = false)
    private String text;
    @Excel(name = "下次三保日期", width = 15, orderNum = "42")
    @ApiModelProperty(value = "下次三保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextThirdMaintenance;
    /**三保周期(å¹´)*/
    @TableField(exist = false)
    @Excel(name = "三保周期(å¹´)", width = 15, orderNum = "43")
    @ApiModelProperty(value = "三保周期(å¹´)")
    private Integer thirdMaintenancePeriod;
    /**最新技术状态鉴定日期*/
    @TableField(exist = false)
    @Excel(name = "最新技术状态鉴定日期", width = 15, orderNum = "44")
    @ApiModelProperty(value = "最新技术状态鉴定日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestTechnologyCheck;
    /**技术状态下次鉴定日期*/
    @TableField(exist = false)
    @Excel(name = "技术状态下次鉴定日期", width = 15, orderNum = "45")
    @ApiModelProperty(value = "技术状态下次鉴定日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextTechnologyCheck;
    /**技术鉴定周期(å¹´)*/
    @TableField(exist = false)
    @Excel(name = "技术鉴定周期(å¹´)", width = 15, orderNum = "46")
    @ApiModelProperty(value = "技术鉴定周期(å¹´)")
    private Integer technologyCheckPeriod;
    /**
     * æ˜¯å¦ä¸»è®¾å¤‡
     */
    @Excel(name = "是否主设备", width = 15, dicCode = "yn", orderNum = "47")
    @ApiModelProperty(value = "是否主设备")
    @Dict(dicCode = "yn")
    private String masterFlag;
    /**
     * æ˜¯å¦æœ‰å·¥è‰ºå‚æ•°
     */
    @Excel(name = "有无工艺参数", width = 15, dicCode = "yn", orderNum = "48")
    @ApiModelProperty(value = "是否有工艺参数")
    @Dict(dicCode = "yn")
    private String processParametersFlag;
    /**
     * æ˜¯å¦æœ‰ç²¾åº¦å‚æ•°
     */
    @Excel(name = "有无精度参数", width = 15, dicCode = "yn", orderNum = "49")
    @ApiModelProperty(value = "是否有精度参数")
    @Dict(dicCode = "yn")
    private String precisionParametersFlag;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注", width = 50, orderNum = "50")
    @ApiModelProperty(value = "备注")
    private String remark;
    public void setFactoryOrgCode(String factoryOrgCode){
        this.factoryOrgCode = factoryOrgCode;
        if(StrUtil.isNotEmpty(factoryOrgCode)){
            if(factoryOrgCode.length()==12){
                this.gqfactoryOrgCode = factoryOrgCode.substring(0,9);
                this.zxfactoryOrgCode = factoryOrgCode.substring(0,6);
                this.gsfactoryOrgCode = factoryOrgCode.substring(0,3);
            }
            if(factoryOrgCode.length()==9){
                this.zxfactoryOrgCode = factoryOrgCode.substring(0,6);
                this.gsfactoryOrgCode = factoryOrgCode.substring(0,3);
            }
            if(factoryOrgCode.length()==6){
                this.gsfactoryOrgCode = factoryOrgCode.substring(0,3);
            }
        }
    }
    public void setEquipmentWeight(BigDecimal equipmentWeight){
        //去除小数点后多余的0
        if(equipmentWeight!=null) {
            this.equipmentWeight = equipmentWeight.stripTrailingZeros();
        }
    }
    public String getValue() {
        return this.id;
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentExtend.java
@@ -3,12 +3,14 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
@@ -24,7 +26,7 @@
@Accessors(chain = true)
@ApiModel(value="eam_equipment_extend对象", description="设备台账扩展表")
public class EamEquipmentExtend implements Serializable {
    /**主键*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
@@ -49,16 +51,44 @@
    @Excel(name = "维修状态", width = 15)
    @ApiModelProperty(value = "维修状态")
    private String repairStatus;
    /**技术状态*/
    @Excel(name = "技术状态", width = 15, orderNum = "4")
    @ApiModelProperty(value = "技术状态")
    private String technologyStatus;
    /**最新二保日期*/
    @ApiModelProperty(value = "最新二保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestSecondMaintenance;
    /**下次二保日期*/
    @ApiModelProperty(value = "下次二保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextSecondMaintenance;
    /**最新三保日期*/
    @ApiModelProperty(value = "最新三保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestThirdMaintenance;
    /**下次三保日期*/
    @ApiModelProperty(value = "下次三保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextThirdMaintenance;
    /**三保周期(å¹´)*/
    @ApiModelProperty(value = "三保周期(å¹´)")
    private Integer thirdMaintenancePeriod;
    /**最新技术状态鉴定日期*/
    @ApiModelProperty(value = "最新技术状态鉴定日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestTechnologyCheck;
    /**技术状态下次鉴定日期*/
    @ApiModelProperty(value = "技术状态下次鉴定日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextTechnologyCheck;
    /**技术鉴定周期(å¹´)*/
    @ApiModelProperty(value = "技术鉴定周期(å¹´)")
    private Integer technologyCheckPeriod;
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml
@@ -3,10 +3,21 @@
<mapper namespace="org.jeecg.modules.eam.mapper.EamEquipmentMapper">
    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamEquipment">
        select e.*, ext.repair_status, ext.maintenance_status
        select e.*,
               ext.maintenance_status,
               ext.repair_status,
               ext.latest_second_maintenance,
               ext.next_second_maintenance,
               ext.latest_third_maintenance,
               ext.next_third_maintenance,
               ext.technology_status,
               ext.third_maintenance_period,
               ext.technology_check_period,
               ext.latest_technology_check,
               ext.next_technology_check
        from eam_equipment e
        left join eam_equipment_extend ext
        on e.id = ext.id
        ${ew.customSqlSegment}
    </select>
</mapper>
</mapper>
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
@@ -24,6 +24,12 @@
    EamEquipment saveEquipment(EamEquipment eamEquipment);
    /**
     * å°è´¦è®¾å¤‡ç¼–辑
     * @param eamEquipment
     */
    EamEquipment updateEquipment(EamEquipment eamEquipment);
    /**
     * èŽ·å–äº§çº¿ä¸‹çš„è®¾å¤‡ä¿¡æ¯
     * @param ids äº§çº¿ids
     * @return
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -4,8 +4,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.micrometer.core.instrument.binder.BaseUnits;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.CommonConstant;
@@ -13,6 +15,10 @@
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
import org.jeecg.modules.eam.base.entity.BaseFactory;
import org.jeecg.modules.eam.base.entity.BaseFactoryUser;
import org.jeecg.modules.eam.base.service.IBaseFactoryService;
import org.jeecg.modules.eam.base.service.IBaseFactoryUserService;
import org.jeecg.modules.eam.constant.AssetStatusEnum;
import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus;
import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
@@ -28,6 +34,7 @@
import org.jeecg.modules.eam.vo.EquipmentSearchResult;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -54,6 +61,10 @@
    private IEamEquipmentExtendService equipmentExtendService;
    @Autowired
    private IMdcProductionService mdcProductionService;
    @Autowired
    private IBaseFactoryUserService baseFactoryUserService;
    @Autowired
    private IBaseFactoryService baseFactoryService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -69,13 +80,28 @@
        //扩展表数据同步添加
        EamEquipmentExtend eamEquipmentExtend = new EamEquipmentExtend();
        eamEquipmentExtend.setId(eamEquipment.getId());
        BeanUtils.copyProperties(eamEquipment, eamEquipmentExtend);
        eamEquipmentExtend.setMaintenanceStatus(EquipmentMaintenanceStatus.NORMAL.name());
        eamEquipmentExtend.setRepairStatus(EquipmentRepairStatus.NORMAL.name());
        equipmentExtendService.save(eamEquipmentExtend);
        //插入设备履历   @EquipmentHistoryLog
        return eamEquipment;
    }
    /**
     * å°è´¦è®¾å¤‡ç¼–辑
     * @param eamEquipment
     */
    @Override
    public EamEquipment updateEquipment(EamEquipment eamEquipment){
        if (eamEquipment == null) {
            return null;
        }
        eamEquipmentMapper.updateById(eamEquipment);
        EamEquipmentExtend eamEquipmentExtend = new EamEquipmentExtend();
        BeanUtils.copyProperties(eamEquipment, eamEquipmentExtend);
        equipmentExtendService.updateById(eamEquipmentExtend);
        return eamEquipment;
    }
@@ -109,13 +135,20 @@
        if (sysUser == null) {
            return page;
        }
        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
            //选择了设备,根据设备id过滤设备
            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
            queryWrapper.in("e.equipment_code", equipArr);
        } else {
            //没有选择设备,根据车间过滤设备
            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id", sysUser.getId());
            //没有选择设备,根据中心过滤设备
            List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService.
                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId()));
            if(!CollectionUtils.isEmpty(baseFactoryUserList)){
                List<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toList());
                List<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getFactoryCode).collect(Collectors.toList());
                queryWrapper.in("e.factory_code", factoryCode);
            }
        }
        //查询条件过滤
        if (eamEquipment != null) {
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -322,7 +322,7 @@
                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
                }else {
                    //提交机动办维修,车间管理员确认
                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), null, BusinessCodeConst.PCR0003);
                    if (CollectionUtil.isEmpty(userSelectors)) {
                        throw new JeecgBootException("设备未分配给班组长,无法进入下级审批!");
                    }
@@ -376,7 +376,7 @@
                }
                if(CommonConstant.STATUS_1.equals(request.getLeaderConfirm())) {
                    //通过 æäº¤æœºåŠ¨åŠžç»´ä¿®
                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0006);
                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), null, BusinessCodeConst.PCR0006);
                    if (CollectionUtil.isEmpty(userSelectors)) {
                        throw new JeecgBootException("设备未分配给公司管理员,无法进入下级审批!");
                    }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java
@@ -99,14 +99,14 @@
            return Result.OK("添加失败!");
        }
        //调用mdcEquipment插入MDC设备
        if (CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) {
//        if (CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) {
            //插入MDC设备
//            MdcEquipment mdcEquipment = new MdcEquipment();
//            mdcEquipment.setEquipmentId(entity.getEquipmentCode());
//            mdcEquipment.setEquipmentType(entity.getDeviceType());
//            mdcEquipment.setEquipmentName(entity.getEquipmentName());
//            mdcEquipmentService.addNewEquipmentFromEam(mdcEquipment, eamEquipment.getOrgId());
        }
//        }
        return Result.OK("添加成功!");
    }
@@ -119,7 +119,7 @@
    @ApiOperation(value = "设备台账-编辑", notes = "设备台账-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> edit(@RequestBody EamEquipment eamEquipment) {
        eamEquipmentService.updateById(eamEquipment);
        eamEquipmentService.updateEquipment(eamEquipment);
        return Result.OK("编辑成功!");
    }
@@ -183,9 +183,9 @@
            JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
            translateDictTextUtils.translateField("createBy", eamEquipment.getCreateBy(), item, "sys_user,realname,username");
            translateDictTextUtils.translateField("updateBy", eamEquipment.getUpdateBy(), item, "sys_user,realname,username");
            translateDictTextUtils.translateField("technologyStatus", eamEquipment.getTechnologyStatus(), item, "technology_status");
            translateDictTextUtils.translateField("orgId", eamEquipment.getOrgId(), item, "mdc_production,production_name,id");
            translateDictTextUtils.translateField("equipmentManager", eamEquipment.getEquipmentManager(), item, "sys_user,realname,username");
//            translateDictTextUtils.translateField("technologyStatus", eamEquipment.getTechnologyStatus(), item, "technology_status");
//            translateDictTextUtils.translateField("orgId", eamEquipment.getOrgId(), item, "mdc_production,production_name,id");
//            translateDictTextUtils.translateField("equipmentManager", eamEquipment.getEquipmentManager(), item, "sys_user,realname,username");
            translateDictTextUtils.translateField("equipmentCategory", eamEquipment.getEquipmentCategory(), item, "equipment_category");
            translateDictTextUtils.translateField("assetStatus", eamEquipment.getAssetStatus(), item, "asset_status");
            translateDictTextUtils.translateField("repairStatus", eamEquipment.getRepairStatus(), item, "equipment_repair_status");
@@ -222,7 +222,7 @@
            // èŽ·å–ä¸Šä¼ æ–‡ä»¶å¯¹è±¡
            MultipartFile file = entity.getValue();
            ImportParams params = new ImportParams();
            params.setTitleRows(0);
            params.setTitleRows(2);
            params.setHeadRows(1);
            params.setNeedSave(true);
            params.setStartSheetIndex(0);
@@ -243,25 +243,10 @@
                        sb.append(String.format("设备编码[%s]设备分类为空,无法导入\n\n", eamEquipment.getEquipmentCode()));
                        continue;
                    }
                    if (StringUtils.isBlank(eamEquipment.getOrgId()) || StringUtils.isBlank(eamEquipment.getEquipmentManager())) {
                        sb.append(String.format("设备编码[%s]使用车间或设备管理员为空,无法导入\n\n", eamEquipment.getEquipmentCode()));
                        continue;
                    }
//                    if (eamEquipment.getAcceptanceCheckDate() == null) {
//                        sb.append(String.format("设备编码[%s]验收为空,无法导入\n\r", eamEquipment.getEquipmentCode()));
//                        continue;
//                    }
//                    if (StringUtils.isBlank(eamEquipment.getTechnologyStatus())) {
//                        sb.append(String.format("设备编码[%s]技术状态为空,无法导入\n\r", eamEquipment.getEquipmentCode()));
//                        continue;
//                    }
                    EamEquipment one = eamEquipmentService.getOne(new LambdaQueryWrapper<EamEquipment>().eq(EamEquipment::getEquipmentCode, eamEquipment.getEquipmentCode()).eq(EamEquipment::getDelFlag, CommonConstant.DEL_FLAG_0));
                    if (one != null) {
                        sb.append(String.format("设备编码[%s]已存在,无法重复导入\n\r", eamEquipment.getEquipmentCode()));
                        continue;
                    }
                    if (!CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) {
                        eamEquipment.setMdcFlag(CommonConstant.DEFAULT_0);
                    }
                    EamEquipment equipment = eamEquipmentService.saveEquipment(eamEquipment);
                    if (equipment == null) {
@@ -269,18 +254,7 @@
                        sb.append(String.format("设备编码[%s]保存失败,无法导入\n\r", eamEquipment.getEquipmentCode()));
                        continue;
                    }
                    //调用mdcEquipment插入MDC设备
                    if (CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) {
                        //插入MDC设备
//                        MdcEquipment mdcEquipment = new MdcEquipment();
//                        mdcEquipment.setEquipmentId(eamEquipment.getEquipmentCode());
//                        mdcEquipment.setEquipmentType(eamEquipment.getDeviceType());
//                        mdcEquipment.setEquipmentName(eamEquipment.getEquipmentName());
//                        mdcEquipmentService.addNewEquipmentFromEam(mdcEquipment, eamEquipment.getOrgId());
                    }
                }
                //400条 saveBatch消耗时间1592毫秒  å¾ªçŽ¯æ’å…¥æ¶ˆè€—æ—¶é—´1947毫秒
                //1200条  saveBatch消耗时间3687毫秒 å¾ªçŽ¯æ’å…¥æ¶ˆè€—æ—¶é—´5212毫秒
                log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒");
                //update-end-author:taoyan date:20190528 for:批量插入数据
                if (sb.length() > 0) {
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamUserSelectController.java
@@ -43,7 +43,7 @@
        if (StringUtils.isNotBlank(equipmentId)) {
            EamEquipment equipment = eamEquipmentService.getById(equipmentId);
            if(equipment != null) {
                productionId = equipment.getOrgId();
//                productionId = equipment.getOrgId();
                equipmentCode = equipment.getEquipmentCode();
            }
        }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentLeanOutServiceImpl.java
@@ -136,9 +136,9 @@
        if (StringUtils.isBlank(request.getLeanDepartId())) {
            throw new JeecgBootException("借入车间不允许为空!");
        }
        if (request.getLeanDepartId().equals(equipment.getOrgId())) {
            throw new JeecgBootException("当前设备属于此车间,不需要借用!");
        }
//        if (request.getLeanDepartId().equals(equipment.getOrgId())) {
//            throw new JeecgBootException("当前设备属于此车间,不需要借用!");
//        }
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (sysUser == null) {
            throw new JeecgBootException("当前用户无法添加借用记录!");
@@ -168,9 +168,9 @@
        if (StringUtils.isBlank(request.getLeanDepartId())) {
            throw new JeecgBootException("借入车间不允许为空!");
        }
        if (request.getLeanDepartId().equals(equipment.getOrgId())) {
            throw new JeecgBootException("当前设备属于此车间,不需要借用!");
        }
//        if (request.getLeanDepartId().equals(equipment.getOrgId())) {
//            throw new JeecgBootException("当前设备属于此车间,不需要借用!");
//        }
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (sysUser == null) {
            throw new JeecgBootException("当前用户无法编辑借用记录!");
@@ -230,7 +230,7 @@
        }
        variables.put("proofreading", true);
        List<String> usernames = new ArrayList<>();
        usernames.add(equipment.getEquipmentManager());
//        usernames.add(equipment.getEquipmentManager());
        variables.put("NextAssignee", usernames);
        Result result = flowDefinitionService.startProcessInstanceByKey("equipment_lean_out", variables);
        if (result != null) {
@@ -312,15 +312,15 @@
                break;
            // å½’还
            case WAIT_RETURN:
                if (StringUtils.isBlank(equipment.getEquipmentManager())) {
                    throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
                }
                List<String> userApprovalList = new ArrayList<>(Collections.singletonList(entity.getLeanPerson()));
                userApprovalList.add(equipment.getEquipmentManager());
//                if (StringUtils.isBlank(equipment.getEquipmentManager())) {
//                    throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
//                }
//                List<String> userApprovalList = new ArrayList<>(Collections.singletonList(entity.getLeanPerson()));
//                userApprovalList.add(equipment.getEquipmentManager());
                values.put("dataId", entity.getId());
                values.put("organization", request.getReturnComment());
                values.put("comment", request.getReturnComment());
                values.put("NextAssignee", userApprovalList);
//                values.put("NextAssignee", userApprovalList);
                request.setComment(request.getReturnComment());
                entity.setLeanEndTime(new Date()); //归还时间
                //设置entity
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentScrapServiceImpl.java
@@ -183,7 +183,7 @@
        variables.put("comment", entity.getScrapReason());
        variables.put("proofreading", true);
        // åˆ†é…ç»™è®¾å¤‡ç®¡ç†å‘˜
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004);
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), null, BusinessCodeConst.PCR0004);
        if (CollectionUtil.isEmpty(userSelectors)) {
            throw new JeecgBootException("设备未分配给设备管理员,无法进入下级审批!");
        }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentSealUpServiceImpl.java
@@ -202,7 +202,7 @@
        variables.put("comment", "新增启封默认启动流程");
        variables.put("proofreading", true);
        // åˆ†é…ç»™è®¾å¤‡ç®¡ç†å‘˜
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004);
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), null, BusinessCodeConst.PCR0004);
        if (CollectionUtil.isEmpty(userSelectors)) {
            throw new JeecgBootException("设备未分配给设备管理员,无法进入下级审批!");
        }
@@ -261,7 +261,7 @@
        }
        variables.put("proofreading", true);
        // åˆ†é…ç»™è®¾å¤‡ç®¡ç†å‘˜
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004);
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(),null, BusinessCodeConst.PCR0004);
        if (CollectionUtil.isEmpty(userSelectors)) {
            throw new JeecgBootException("设备未分配给设备管理员,无法进入下级审批!");
        }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentTransferServiceImpl.java
@@ -140,10 +140,10 @@
        if (sysUser == null) {
            throw new JeecgBootException("当前用户无法添加借用记录!");
        }
        if (equipment.getOrgId().equals(request.getNewDepartId())) {
            throw new JeecgBootException("当前设备属于此车间,不需要变动!");
        }
        request.setOldDepartId(equipment.getOrgId());
//        if (equipment.getOrgId().equals(request.getNewDepartId())) {
//            throw new JeecgBootException("当前设备属于此车间,不需要变动!");
//        }
//        request.setOldDepartId(equipment.getOrgId());
        request.setReportUser(sysUser.getUsername());
        return equipmentTransferMapper.insert(request) > 0;
    }
@@ -185,7 +185,7 @@
        variables.put("comment", entity.getTransferReason());
        variables.put("proofreading", true);
        // åˆ†é…ç»™è®¾å¤‡ç®¡ç†å‘˜
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004);
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(),null, BusinessCodeConst.PCR0004);
        if (CollectionUtil.isEmpty(userSelectors)) {
            throw new JeecgBootException("设备未分配给设备管理员,无法进入下级审批!");
        }
@@ -305,7 +305,7 @@
        updateWrapper.set("equipment_id", request.getEquipmentId());
        updateWrapper.set("remark", request.getRemark());
        updateWrapper.set("transfer_reason", request.getTransferReason());
        updateWrapper.set("old_depart_id", equipment.getOrgId());
//        updateWrapper.set("old_depart_id", equipment.getOrgId());
        updateWrapper.set("new_depart_id", request.getNewDepartId());
        updateWrapper.eq("id", request.getId());
        updateWrapper.eq("report_user", sysUser.getUsername());
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java
@@ -392,17 +392,17 @@
        Map<String, Object> values = new HashMap<>();
        if (InspectionStatus.UNDER_INSPECTION.name().equals(order.getInspectionStatus()) && user.getUsername().equals(order.getOperator())) {
            // ç‚¹æ£€äººç‚¹æ£€ç»“束
            String manager = Optional.ofNullable(iEamEquipmentService.getById(order.getEquipmentId()))
                    .map(EamEquipment::getEquipmentManager)
                    .orElse(null);
            if (manager == null) {
                throw new IllegalArgumentException("设备管理员未配置");
            }
            List<String> usernameList = Collections.singletonList(manager);
//            String manager = Optional.ofNullable(iEamEquipmentService.getById(order.getEquipmentId()))
//                    .map(EamEquipment::getEquipmentManager)
//                    .orElse(null);
//            if (manager == null) {
//                throw new IllegalArgumentException("设备管理员未配置");
//            }
//            List<String> usernameList = Collections.singletonList(manager);
            values.put("dataId", order.getId());
            values.put("organization", "点检人点检结束");
            values.put("comment", "点检人点检结束");
            values.put("NextAssignee", usernameList);
//            values.put("NextAssignee", usernameList);
            request.setComment("点检人点检结束");
        } else {
            // ç­ç»„长确认
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
@@ -357,15 +357,15 @@
            case UNDER_MAINTENANCE:
                //执行完成
                //设备管理员确认
                String equipmentManager = equipment.getEquipmentManager();
                if(StringUtils.isBlank(equipmentManager)) {
                    throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
                }
                userApprovalList = Collections.singletonList(equipmentManager);
//                String equipmentManager = equipment.getEquipmentManager();
//                if(StringUtils.isBlank(equipmentManager)) {
//                    throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
//                }
//                userApprovalList = Collections.singletonList(equipmentManager);
                values.put("dataId", entity.getId());
                values.put("organization", "二保执行结束");
                values.put("comment", "二保执行结束");
                values.put("NextAssignee", userApprovalList);
//                values.put("NextAssignee", userApprovalList);
                request.setComment("二保执行结束");
                //设置entity
                entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_CONFIRM.name());
@@ -389,7 +389,7 @@
                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.SECOND_MAINTENANCE_WAIT_CONFIRM.name());
                break;
            case WAIT_CONFIRM:
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(),null, BusinessCodeConst.PCR0003);
                if (CollectionUtil.isEmpty(userSelectors)) {
                    throw new JeecgBootException("设备未分配给车间班组长,无法进入下级审批!");
                }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceOrderServiceImpl.java
@@ -186,7 +186,7 @@
            variables.put("proofreading", true);
            //并行任务会签
            variables.put("maintenance_execution", Collections.singletonList(request.getOperator()));
            variables.put("precision_check", Collections.singletonList(equipment.getEquipmentManager()));
//            variables.put("precision_check", Collections.singletonList(equipment.getEquipmentManager()));
            Result result = flowDefinitionService.startProcessInstanceByKey("third_maintenance_process", variables);
            if (result != null) {
                //更新设备保养状态
@@ -257,7 +257,7 @@
            variables.put("proofreading", true);
            //并行任务会签
            variables.put("maintenance_execution", Collections.singletonList(request.getOperator()));
            variables.put("precision_check", Collections.singletonList(equipment.getEquipmentManager()));
//            variables.put("precision_check", Collections.singletonList(equipment.getEquipmentManager()));
            Result result = flowDefinitionService.startProcessInstanceByKey("third_maintenance_process", variables);
            if (result != null) {
                //更新设备保养状态
@@ -283,9 +283,9 @@
        if (equipment == null) {
            throw new JeecgBootException("设备不存在,添加失败!");
        }
        if (StringUtils.isBlank(equipment.getEquipmentManager())) {
            throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
        }
//        if (StringUtils.isBlank(equipment.getEquipmentManager())) {
//            throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
//        }
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (sysUser == null || !BusinessCodeConst.PCR0001.equals(sysUser.getPost())) {
            throw new JeecgBootException("不是操作工,无法领取此工单!");
@@ -312,7 +312,7 @@
        variables.put("proofreading", true);
        //并行任务会签
        variables.put("maintenance_execution", Collections.singletonList(sysUser.getUsername()));
        variables.put("precision_check", Collections.singletonList(equipment.getEquipmentManager()));
//        variables.put("precision_check", Collections.singletonList(equipment.getEquipmentManager()));
        Result result = flowDefinitionService.startProcessInstanceByKey("third_maintenance_process", variables);
        if (result != null) {
            //更新设备保养状态
@@ -368,7 +368,7 @@
            case UNDER_MAINTENANCE:
                boolean parallelCompletion = flowTaskService.checkParallelCompletion(flowMyBusiness.getTaskId());
                //执行完成
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0006);
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), null, BusinessCodeConst.PCR0006);
                if (CollectionUtil.isEmpty(userSelectors)) {
                    throw new JeecgBootException("设备未分配给车间班组长,无法进入下级审批!");
                }
@@ -416,7 +416,7 @@
                }
                break;
            case WAIT_CONFIRM:
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(),null, BusinessCodeConst.PCR0003);
                if (CollectionUtil.isEmpty(userSelectors)) {
                    throw new JeecgBootException("设备未分配给车间班组长,无法进入下级审批!");
                }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java
@@ -361,7 +361,7 @@
        switch (status) {
            case UNDER_MAINTENANCE:
                //执行完成
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), null, BusinessCodeConst.PCR0003);
                if (CollectionUtil.isEmpty(userSelectors)) {
                    throw new JeecgBootException("设备未分配给班组长,无法进入下级审批!");
                }
@@ -393,12 +393,12 @@
                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.WEEK_MAINTENANCE_WAIT_CONFIRM.name());
                break;
            case WAIT_CONFIRM:
                if (StringUtils.isBlank(equipment.getEquipmentManager())) {
                    throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
                }
//                if (StringUtils.isBlank(equipment.getEquipmentManager())) {
//                    throw new JeecgBootException("设备未分配设备管理员,无法进入下级审批!");
//                }
                //班组长确认
                userApprovalList = new ArrayList<>();
                userApprovalList.add(equipment.getEquipmentManager());
//                userApprovalList.add(equipment.getEquipmentManager());
                values.put("dataId", entity.getId());
                values.put("organization", request.getConfirmComment());
                values.put("comment", request.getConfirmComment());
@@ -425,7 +425,7 @@
                }
                break;
            case WAIT_INITIAL_ACCEPTANCE:
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0005);
                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), null, BusinessCodeConst.PCR0005);
                if (CollectionUtil.isEmpty(userSelectors)) {
                    throw new JeecgBootException("设备未分配给设能部管理员,无法进入下级审批!");
                }
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/aspect/DicAspectService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,311 @@
package org.jeecg.modules.system.aspect;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ReflectUtil;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.common.aspect.annotation.DictExt;
import org.jeecg.common.aspect.annotation.DictList;
import org.jeecg.common.aspect.annotation.FieldQuery;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.system.service.ISysDictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * å­—典字段翻译服务
 *   æ”¯æŒåµŒå¥—翻译
 * @since 2020/5/27
 */
@Service
@Slf4j
public class DicAspectService {
    @Autowired
    private ISysDictService dictService;
    /**
     * æœ¬æ–¹æ³•针对列表数据进行动态字典注入
     * å­—典注入实现 é€šè¿‡å¯¹å®žä½“类添加注解@dict æ¥æ ‡è¯†éœ€è¦çš„字典内容,字典分为单字典code即可 ï¼Œtable字典 code table text配合使用与原来jeecg的用法相同
     * ç¤ºä¾‹ä¸ºSysUser   å­—段为sex æ·»åŠ äº†æ³¨è§£@Dict(dicCode = "sex") ä¼šåœ¨å­—典服务立马查出来对应的text ç„¶åŽåœ¨è¯·æ±‚list的时候将这个字典text,已字段名称加_dictText形式返回到前端
     * ä¾‹è¾“入当前返回值的就会多出一个sex_dictText字段
     * {
     *      sex:1,
     *      sex_dictText:"男"
     * }
     * å‰ç«¯ç›´æŽ¥å–值sext_dictText在table里面无需再进行前端的字典转换了
     *  customRender:function (text) {
     *               if(text==1){
     *                 return "男";
     *               }else if(text==2){
     *                 return "女";
     *               }else{
     *                 return text;
     *               }
     *             }
     *             ç›®å‰vue是这么进行字典渲染到table上的多了就很麻烦了 è¿™ä¸ªç›´æŽ¥åœ¨æœåŠ¡ç«¯æ¸²æŸ“å®Œæˆå‰ç«¯å¯ä»¥ç›´æŽ¥ç”¨
     * @param records
     * @return
     */
    public List<JSONObject> detailDict(List<Object> records){
        List<JSONObject> items = new ArrayList<>();
        FieldBatchQuery batchQuery = new FieldBatchQuery();
        boolean hasDict = false;
        for (Object record : records) {
            JSONObject item = parseDictItem(record);
            Field[] fieldsArray = oConvertUtils.getAllFields(record);
            for (int i = 0; i < fieldsArray.length; i++) {
                Field field = fieldsArray[i];
                if (field.getAnnotation(Dict.class) != null && records.size()<=500) {
                    hasDict = true;
                    String code = field.getAnnotation(Dict.class).dicCode();
                    String text = field.getAnnotation(Dict.class).dicText();
                    String table = field.getAnnotation(Dict.class).dictTable();
                    String key = String.valueOf(item.get(field.getName()));
                    //翻译字典值对应的txt
                    String textValue = translateDictValue(code, text, table, key);
                    item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                }
                // å­—典翻译扩展功能,支持字典多字段匹配
                else if(field.getAnnotation(DictExt.class) != null && records.size() <= 500){
                    hasDict = true;
                    String[] code = field.getAnnotation(DictExt.class).dicCode();
                    String text = field.getAnnotation(DictExt.class).dicText();
                    String table = field.getAnnotation(DictExt.class).dicTable();
                    String[] params = field.getAnnotation(DictExt.class).dicParams();
                    String[] paramValues = this.getParamValues(item, params);
                    String textValue = this.translateDictValue(code, text, table, paramValues);
                    item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    item.put(field.getName(), ArrayUtil.join(paramValues, ","));
                }
                else if(field.getAnnotation(FieldQuery.class) != null && records.size() <= 500){
                    FieldQuery ann = field.getAnnotation(FieldQuery.class);
                    batchQuery.put(ann.dicTable(), ann.dicText(), ann.dicCode(),
                            this.getParamValues(item, ann.dicParams()));
                }
                // æ·±åº¦ç¿»è¯‘list元素
                else if(field.getAnnotation(DictList.class) != null){
                    Object fieldValue = ReflectUtil.getFieldValue(record, field);
                    if(fieldValue == null){
                        // no-op
                    }
                    else if(null != fieldValue && fieldValue instanceof List){
                        try{
                            List<JSONObject> listDetail = this.detailDict((List)fieldValue);
                            item.put(field.getName(), listDetail);
                        }catch (Exception e){
                            log.error("字段翻译错误,index=" + i + ",fieldName=" + field.getName() + ",fieldValue=" + fieldValue + ",record=" + record);
                        }
                    }else{
                        log.error("深度字典翻译只支持List类型,当前类型为" + fieldValue.getClass());
                    }
                }
                //date类型默认转换string格式化日期
                if (field.getType().getName().equals("java.util.Date")&&field.getAnnotation(JsonFormat.class)==null&&item.get(field.getName())!=null){
                    SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                }
            }
            if(records.size()>500 && hasDict){
                log.error("使用 @Dict注解超过500条记录请使用分页查询");
            }
            items.add(item);
        }
        // æ‰¹é‡æŸ¥è¯¢å…³è”数据
        if(batchQuery.size() > 0){
            Map<String, List<Map>> batchResult = new HashMap<>();
            batchQuery.forEach((queryKey, queryParam) -> {
                // æ‰¹é‡æŸ¥è¯¢
                try {
                    queryParam.setQueryResult(this.batchQueryFieldValue(queryParam.getQueryTable(),
                            queryParam.getColumns(),
                            queryParam.getParamName(),
                            queryParam.getParamValues()));
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
            for (int i = 0; i < records.size(); i++) {
                Object record = records.get(i);
                JSONObject item = items.get(i);
                try {
                    this.fillItemValue(record, item, batchQuery);
                } catch (Exception e) {
                    e.printStackTrace();
                    log.info("批量查询数据填充出错:{}", e.getMessage());
                }
            }
        }
        return items;
    }
    /**
     * å•表批量查询
     *
     * @param queryTable
     * @param columns
     * @param paramName
     * @param paramValues
     * @return
     */
    private List<Map> batchQueryFieldValue(String queryTable, String[] columns,
                                           String paramName, String[] paramValues) throws Exception {
        try{
            return this.dictService.queryTableFieldByParams(queryTable, columns, paramName, paramValues);
        }catch (Exception e){
            log.error("FieldQuery查询错误", e);
            throw new Exception("FieldQuery查询错误");
        }
    }
    /**
     * å¡«å……item批量查询数据
     * @param record
     * @param item
     * @param batchQuery
     */
    private void fillItemValue(Object record, JSONObject item, FieldBatchQuery batchQuery) throws Exception{
        for (Field field : oConvertUtils.getAllFields(record)) {
            if(field.getAnnotation(FieldQuery.class) != null){
                FieldQuery fieldQuery = field.getAnnotation(FieldQuery.class);
                String[] paramValues = this.getParamValues(item, fieldQuery.dicParams());
                Object textValue = batchQuery.findResult(fieldQuery.dicTable(),
                        fieldQuery.dicCode(), paramValues, fieldQuery.dicText());
                item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                item.put(field.getName(), ArrayUtil.join(paramValues, ","));
            }
        }
    }
    /**
     * è§£æžå­—å…¸Item
     * @param record
     * @return
     */
    private JSONObject parseDictItem(Object record) {
        ObjectMapper mapper = new ObjectMapper();
        String json="{}";
        try {
            //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
            json = mapper.writeValueAsString(record);
        } catch (JsonProcessingException e) {
            log.error("json解析失败"+e.getMessage(),e);
        }
        return JSONObject.parseObject(json);
    }
    /**
     * èŽ·å–å‚æ•°æ•°å€¼
     * @param item
     * @param paramNames
     * @return
     */
    private String[] getParamValues(JSONObject item, String[] paramNames) {
        // èŽ·å–å®žé™…å‚æ•°
        String[] values = new String[paramNames.length];
        for (int i = 0; i < paramNames.length; i++) {
            String param = paramNames[i];
            if(param.startsWith("$")){
                values[i] = (String) item.get(param.substring(1));
            }else{
                values[i] = param;
            }
            if(values[i] == null) return null;
            if(values[i].indexOf("&&") > -1){
                log.error(">>>参数["+values[i]+"]包含非法字符','");
                return null;
            }
        }
        return values;
    }
    /**
     * ç¿»è¯‘字典文本
     *
     * @param code
     * @param text
     * @param table
     * @param paramValues
     * @return
     */
    private String translateDictValue(String[] code, String text, String table, String[] paramValues) {
        if(paramValues == null || paramValues.length <=0 || oConvertUtils.isEmpty(table)){
            return null;
        }
        try{
            return this.dictService.queryTableDictByParams(table,text,
                    ArrayUtil.join(code, "&&"),
                    ArrayUtil.join(paramValues, "&&"));
        }catch (Exception e){
            log.error("字典翻译异常table={},text={},code={},paramValues={}", table, text, ArrayUtil.join(code, "&&"),ArrayUtil.join(paramValues, "&&") );
            throw e;
        }
    }
    /**
     *  ç¿»è¯‘字典文本
     * @param code
     * @param text
     * @param table
     * @param key
     * @return
     */
    private String translateDictValue(String code, String text, String table, String key) {
        if(oConvertUtils.isEmpty(key)) {
            return null;
        }
        StringBuffer textValue=new StringBuffer();
        String[] keys = key.split(",");
        for (String k : keys) {
            String tmpValue = null;
            if (k.trim().length() == 0) {
                continue; //跳过循环
            }
            if (!StringUtils.isEmpty(table)){
                tmpValue= dictService.queryTableDictTextByKey(table,text,code,k.trim());
            }else {
                tmpValue = dictService.queryDictTextByKey(code, k.trim());
            }
            if (tmpValue != null) {
                if (!"".equals(textValue.toString())) {
                    textValue.append(",");
                }
                textValue.append(tmpValue);
            }
        }
        return textValue.toString();
    }
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/aspect/FieldBatchQuery.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
package org.jeecg.modules.system.aspect;
import cn.hutool.core.util.ArrayUtil;
import java.util.*;
import java.util.function.BiConsumer;
/**
 * æ‰¹é‡æŸ¥è¯¢å™¨
 */
public class FieldBatchQuery {
    // key=查询要素=table+paramName, value=查询条件
    private Map<String, QueryParam> queryBatch = new HashMap<>();
    /**
     * ä¾¿åˆ©æŸ¥è¯¢è¦ç´ 
     * @param action
     */
    public void forEach(BiConsumer<? super String, ? super QueryParam> action) {
        this.queryBatch.forEach(action);
    }
    /**
     * æŸ¥è¯¢è¡¨æ•°é‡
     * @return
     */
    public int size() {
        return queryBatch.size();
    }
    /**
     * æŸ¥æ‰¾æŸ¥è¯¢ç»“æžœ
     * @param tableName
     * @param paramName
     * @param paramValue
     * @param column
     * @return
     */
    public Object findResult(String tableName, String[] paramName, String[] paramValue, String column) {
        String queryKey = tableName + "()" + ArrayUtil.join(paramName, ",");
        if(!this.queryBatch.containsKey(queryKey)) return null;
        return this.queryBatch.get(queryKey).findResult(paramValue, column);
    }
    /**
     * ä¿å­˜æŸ¥è¯¢æ¡ä»¶
     * @param tableName æŸ¥è¯¢è¡¨å
     * @param textName æŸ¥è¯¢å­—段名称
     * @param paramName æŸ¥è¯¢å‚数名称
     * @param paramValue æŸ¥è¯¢å‚数值
     */
    public void put(String tableName, String textName, String[] paramName, String[] paramValue) {
        String queryKey = tableName + "()" + ArrayUtil.join(paramName, ",");
        QueryParam queryParams;
        if(this.queryBatch.containsKey(queryKey)){
            queryParams = this.queryBatch.get(queryKey);
        }else{
            queryParams = new QueryParam(tableName, paramName);
            this.queryBatch.put(queryKey, queryParams);
        }
        // æ·»åŠ æŸ¥è¯¢ç»“æžœcolumn名称
        queryParams.addTextName(textName);
        // æ·»åŠ æŸ¥è¯¢å‚æ•°
        queryParams.addParamValue(paramValue);
    }
    public static class QueryParam {
        private String queryTable;
        private Set<String> columns = new HashSet<>();
        private Set<String> paramValueSet = new HashSet<>();
        private String[] paramName;
        private List<Map> queryResult = new ArrayList<>();
        private Map<String, Integer> resultIndex = new HashMap<>();
        public QueryParam(String tableName, String[] column) {
            this.queryTable = tableName;
            this.paramName = column;
        }
        public void addTextName(String textName) {
            this.columns.add(textName);
        }
        public void addParamValue(String[] paramValue) {
            paramValueSet.add(ArrayUtil.join(paramValue, ","));
        }
        public String getQueryTable() {
            return queryTable;
        }
        public String[] getColumns() {
            String[] ret = new String[this.columns.size()];
            this.columns.toArray(ret);
            return ret;
        }
        public String getParamName() {
            return "concat(" + ArrayUtil.join(this.paramName, ",',',") + ")";
        }
        public String[] getParamValues() {
            String[] ret = new String[this.paramValueSet.size()];
            this.paramValueSet.toArray(ret);
            return ret;
        }
        public void setQueryResult(List<Map> queryResult) {
            this.queryResult = queryResult;
        }
        public Object findResult(String[] paramValue, String column) {
            if(paramValue == null) return null;
            String value = ArrayUtil.join(paramValue, ",");
            if(this.resultIndex.containsKey(value)){
                return this.queryResult.get(this.resultIndex.get(value)).get(column);
            }
            for (int i = 0; i < this.queryResult.size(); i++) {
                Map<String, Object> map = queryResult.get(i);
                if(value.equals(map.get("paramValue"))){
                    this.resultIndex.put(value, i);
                    return map.get(column);
                }
            }
            return null;
        }
    }
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java
@@ -189,6 +189,18 @@
    private String productionIds;
    /**
     * eam中心分配
     */
    @Excel(name="eam中心分配",width = 15,dictTable ="eam_base_factory",dicText = "factory_name",dicCode = "id")
    @Dict(dictTable ="eam_base_factory",dicText = "factory_name",dicCode = "id")
    private transient String eamFactoryIds;
    /**
     * eam设备组
     */
    private String eamEquipmentIds;
    /**
     * è´Ÿè´£ç»´ä¿®éƒ¨é—¨ç­ç»„
     */
    @Excel(name="负责维修部门班组",width = 15,dictTable ="eam_base_repair_depart",dicText = "depart_name",dicCode = "id")
@@ -210,8 +222,6 @@
    private String homePath;
//    @Dict(dicCode = "id",dictTable = "mom_base_team",dicText = "name")
    private String teamId;
//    @Dict(dicCode = "id",dictTable = "mom_base_area",dicText = "name")
    private String areaId;
    /**
     * å¯†ç é¦–次使用标识 1是 0否
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java
@@ -25,7 +25,7 @@
 * @since 2018-12-28
 */
public interface SysDictMapper extends BaseMapper<SysDict> {
    /**
     * é‡å¤æ£€æŸ¥SQL
     * @param duplicateCheckVo
@@ -152,13 +152,13 @@
     * @return
     */
    public List<DictModel> queryAllDepartBackDictModel();
    /**
     * æŸ¥è¯¢æ‰€æœ‰ç”¨æˆ·  ä½œä¸ºå­—典信息 username -->value,realname -->text
     * @return
     */
    public List<DictModel> queryAllUserBackDictModel();
//    /**
//     * é€šè¿‡å…³é”®å­—查询出字典表
//     * @param table
@@ -263,4 +263,25 @@
     */
    @Deprecated
    List<DictModel> queryTableDictByKeysAndFilterSql(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql,  @Param("codeValues") List<String> codeValues);
    /**
     * ä½¿ç”¨å­Sql查询字典数据
     * @param table
     * @param text
     * @param subSql
     * @return
     */
    String queryTableDictTextBySubSql(@Param("table") String table, @Param("text") String text, @Param("subSql") String subSql);
    /**
     * å•表批量查询
     * @param queryTable
     * @param columns
     * @param paramName
     * @param paramValues
     * @return
     */
    List<Map> queryTableFieldByParams(@Param("table") String queryTable, @Param("columns") String columns, @Param("paramName") String paramName, @Param("paramValues") String[] paramValues);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml
@@ -36,7 +36,7 @@
    <!-- é€šè¿‡å­—å…¸code获取字典数据 -->
    <select id="queryDictTextByKey" parameterType="String"  resultType="String">
           select s.item_text from sys_dict_item s
           select s.item_text from sys_dict_item s
           where s.dict_id = (select id from sys_dict where dict_code = #{code})
           and s.item_value = #{key}
    </select>
@@ -66,7 +66,7 @@
    <select id="queryTableDictItemsByCode" parameterType="String"  resultType="org.jeecg.common.system.vo.DictModel">
           select ${text} as "text",${code} as "value" from ${table}
    </select>
    <!--通过查询指定table的 text code èŽ·å–å­—å…¸ï¼ˆæŒ‡å®šæŸ¥è¯¢æ¡ä»¶ï¼‰-->
    <select id="queryTableDictItemsByCodeAndFilter" parameterType="String"  resultType="org.jeecg.common.system.vo.DictModel">
           select ${text} as "text",${code} as "value" from ${table}
@@ -74,7 +74,7 @@
            where ${filterSql}
        </if>
    </select>
    <!--通过查询指定table的 text code key èŽ·å–å­—å…¸å€¼-->
    <select id="queryTableDictTextByKey" parameterType="String" resultType="String">
           select ${text} as "text" from ${table} where ${code}= #{key}
@@ -101,27 +101,27 @@
    <select id="duplicateCheckCountSql" resultType="Long" parameterType="org.jeecg.modules.system.model.DuplicateCheckVo">
        SELECT COUNT(*) FROM ${tableName} WHERE ${fieldName} = #{fieldVal} and id &lt;&gt; #{dataId}
    </select>
    <!-- é‡å¤æ ¡éªŒ sql语句 -->
    <select id="duplicateCheckCountSqlNoDataId" resultType="Long" parameterType="org.jeecg.modules.system.model.DuplicateCheckVo">
        SELECT COUNT(*) FROM ${tableName} WHERE ${fieldName} = #{fieldVal}
    </select>
    <!-- æŸ¥è¯¢éƒ¨é—¨ä¿¡æ¯ ä½œä¸ºå­—典数据 -->
    <select id="queryAllDepartBackDictModel" resultType="org.jeecg.common.system.vo.DictModel">
        select id as "value",depart_name as "text" from sys_depart where del_flag = '0'
    </select>
        <!-- æŸ¥è¯¢ç”¨æˆ·ä¿¡æ¯ ä½œä¸ºå­—典数据 -->
    <select id="queryAllUserBackDictModel" resultType="org.jeecg.common.system.vo.DictModel">
        select username as "value",realname as "text" from sys_user where del_flag = '0'
    </select>
    <!--通过查询指定table的 text code èŽ·å–å­—å…¸æ•°æ®ï¼Œä¸”æ”¯æŒå…³é”®å­—æŸ¥è¯¢
    <select id="queryTableDictItems" parameterType="String"  resultType="org.jeecg.common.system.vo.DictModel">
        select ${text} as "text",${code} as "value" from ${table} where ${text} like #{keyword}
    </select> -->
    <!-- æ ¹æ®è¡¨åã€æ˜¾ç¤ºå­—段名、存储字段名、父ID查询树 -->
    <select id="queryTreeList" parameterType="Object" resultType="org.jeecg.modules.system.model.TreeSelectModel">
        select ${text} as "title",
@@ -213,7 +213,14 @@
            and ${filterSql}
        </if>
    </select>
    <select id="queryTableFieldByParams" resultType="java.util.Map">
        select ${columns},${paramName} as paramValue
        from ${table} where ${paramName} in
        <foreach item="key" collection="paramValues" open="(" separator="," close=")">
            #{key}
        </foreach>
    </select>
    <select id="queryTableDictTextBySubSql" resultType="java.lang.String">
        select ${text} as "text" from ${table} where ${subSql}
    </select>
</mapper>
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictService.java
@@ -255,4 +255,16 @@
     */
    List<DictModel> loadDict(String dictCode, String keyword, Integer pageSize);
    String queryTableDictByParams(String table, String text, String codes, String params);
    /**
     * å•表批量查询
     * @param queryTable
     * @param columns
     * @param paramName
     * @param paramValues
     * @return
     */
    List<Map> queryTableFieldByParams(String queryTable, String[] columns, String paramName, String[] paramValues);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
@@ -1,5 +1,7 @@
package org.jeecg.modules.system.service.impl;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -153,7 +155,7 @@
        log.debug("无缓存dictTableList的时候调用这里!");
        return sysDictMapper.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql);
    }
    /**
     * é€šè¿‡æŸ¥è¯¢æŒ‡å®štable的 text code èŽ·å–å­—å…¸å€¼text
     * dictTableCache采用redis缓存有效期10分钟
@@ -282,7 +284,7 @@
    public List<DictModel> queryAllUserBackDictModel() {
        return baseMapper.queryAllUserBackDictModel();
    }
//    @Override
//    public List<DictModel> queryTableDictItems(String table, String text, String code, String keyword) {
//        return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%");
@@ -475,4 +477,37 @@
        }
    }
    @Override
    @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE)
    public String queryTableDictByParams(String table, String text, String codes, String params) {
        log.info("无缓存dictTable queryTableDictByKeys的时候调用这里!");
        String[] codeArr = codes.split("&&");
        String[] paramArr = params.split("&&");
        String subSql = "";
        for (int i = 0; i < codeArr.length; i++) {
            String column = codeArr[i];
            // é»˜è®¤å‚数为空字符串
            String param = paramArr.length > i ? paramArr[i] : "";
            if(column == null || ! Validator.isGeneral(column)){
                log.error("<<<非法字段:" + column);
                return null;
            }
            if(null == param || (!"-1".equals(param) && ! Validator.isGeneralWithChinese(param.replaceAll(" ", "")))){
                log.error("<<<非法参数:" + param);
                return null;
            }
            if(i != 0) subSql += " and ";
            subSql += column+" = '"+param+"'";
        }
        return sysDictMapper.queryTableDictTextBySubSql(table,text,subSql);
    }
    @Override
    public List<Map> queryTableFieldByParams(String queryTable, String[] columns, String paramName, String[] paramValues) {
        String column = ArrayUtil.join(columns, ",");
        return this.baseMapper.queryTableFieldByParams(queryTable, column, paramName, paramValues);
    }
}