Browse Source

Merge remote-tracking branch 'origin/demo_' into demo_

hfxc226 2 năm trước cách đây
mục cha
commit
b223cfba0f
35 tập tin đã thay đổi với 1163 bổ sung66 xóa
  1. 66 0
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbChangeLogDTO.java
  2. 32 1
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbInfoDTO.java
  3. 5 0
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbMeasureLogDTO.java
  4. 1 1
      platform-dao/src/main/java/com/platform/dao/entity/fill/FillGatherTask.java
  5. 63 0
      platform-dao/src/main/java/com/platform/dao/entity/sb/SbChangeLog.java
  6. 9 1
      platform-dao/src/main/java/com/platform/dao/enums/FillGatherTaskStatusEnum.java
  7. 30 0
      platform-dao/src/main/java/com/platform/dao/enums/SbChangeLogTypeEnum.java
  8. 26 0
      platform-dao/src/main/java/com/platform/dao/mapper/sb/SbChangeLogMapper.java
  9. 1 1
      platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java
  10. 1 1
      platform-dao/src/main/java/com/platform/dao/util/ExcelUtil.java
  11. 155 0
      platform-dao/src/main/java/com/platform/dao/util/compare/FieldComparedUtils.java
  12. 62 0
      platform-dao/src/main/java/com/platform/dao/util/compare/annotation/FieldCompared.java
  13. 64 0
      platform-dao/src/main/java/com/platform/dao/vo/export/sb/ExportSbChangeLogVO.java
  14. 25 1
      platform-dao/src/main/java/com/platform/dao/vo/export/sb/ExportSbInfoVO.java
  15. 56 0
      platform-dao/src/main/java/com/platform/dao/vo/query/sb/SbChangeLogVO.java
  16. 58 0
      platform-dao/src/main/resources/mapper/sb/SbChangeLogMapper.xml
  17. 6 0
      platform-dao/src/main/resources/mapper/sb/SbInfoMapper.xml
  18. 6 5
      platform-office/src/main/java/com/platform/office/poi/excel/ExcelImportUtil.java
  19. 5 4
      platform-office/src/main/java/com/platform/office/poi/excel/imports/ExcelImportServer.java
  20. 11 5
      platform-office/src/main/java/com/platform/office/poi/excel/imports/base/ImportBaseService.java
  21. 1 1
      platform-office/src/main/java/com/platform/office/poi/excel/imports/sax/parse/SaxRowRead.java
  22. 3 3
      platform-office/src/main/java/com/platform/office/util/ExcelImportUtil.java
  23. 14 0
      platform-rest/src/main/java/com/platform/rest/controller/fill/FillGatherTaskController.java
  24. 18 7
      platform-rest/src/main/java/com/platform/rest/controller/mobile/IgnoreController.java
  25. 141 0
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbChangeLogController.java
  26. 3 1
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbInfoController.java
  27. 7 5
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbMeasureLogController.java
  28. 6 0
      platform-service/src/main/java/com/platform/service/fill/FillGatherTaskService.java
  29. 16 0
      platform-service/src/main/java/com/platform/service/fill/impl/FillGatherTaskServiceImpl.java
  30. 35 0
      platform-service/src/main/java/com/platform/service/sb/SbChangeLogService.java
  31. 6 1
      platform-service/src/main/java/com/platform/service/sb/SbInfoService.java
  32. 5 0
      platform-service/src/main/java/com/platform/service/sb/SbMeasureLogService.java
  33. 51 0
      platform-service/src/main/java/com/platform/service/sb/impl/SbChangeLogServiceImpl.java
  34. 124 4
      platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java
  35. 51 24
      platform-service/src/main/java/com/platform/service/sb/impl/SbMeasureLogServiceImpl.java

+ 66 - 0
platform-dao/src/main/java/com/platform/dao/dto/sb/SbChangeLogDTO.java

@@ -0,0 +1,66 @@
+package com.platform.dao.dto.sb;
+
+import com.platform.common.bean.BaseDTO;
+import com.platform.common.validation.group.UpdateGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.*;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.time.LocalDate;
+
+/**
+ * @Description 设备修改记录表DTO
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class SbChangeLogDTO extends BaseDTO implements Serializable {
+
+    /**
+     * 主键
+     */
+    private String id;
+    /**
+     * 修改人ID
+     */
+    private String createdUserId;
+    /**
+     * 修改人
+     */
+    private String createdUserName;
+    /**
+     * 修改时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 修改时间开始
+     */
+    private LocalDateTime createdTimeStart;
+    /**
+     * 修改时间结束
+     */
+    private LocalDateTime createdTimeEnd;
+    /**
+     * 涉及对象的ID
+     */
+    private String objId;
+    /**
+     * 记录类型 0 设备 1 备件 2 仓库
+     */
+    private Integer objType;
+    /**
+     * 修改记录值
+     */
+    private String updateJson;
+    /**
+     * 关键字
+     */
+    private String keyword;
+
+}

+ 32 - 1
platform-dao/src/main/java/com/platform/dao/dto/sb/SbInfoDTO.java

@@ -4,6 +4,7 @@ import com.platform.common.bean.BaseDTO;
 import com.platform.common.validation.group.UpdateGroup;
 import com.platform.dao.entity.sb.SbModelSpareBom;
 import com.platform.dao.entity.upms.SysFile;
+import com.platform.dao.util.compare.annotation.FieldCompared;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -49,10 +50,12 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 自定义参数列表
      */
+    @FieldCompared(name="自定义参数列表")
     private String paramList;
     /**
      * 是否子设备:0 父设备,1 子设备
      */
+    @FieldCompared(name="是否子设备",type = 1,value = "SB_IS_CHILD")
     private Integer isChild;
     /**
      * 是否在大屏显示设备:0 不显示,1 显示
@@ -61,6 +64,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 是否固定资产:0 否1 是
      */
+    @FieldCompared(name = "固定资产",type = 1,value = "SB_IS_FINANCING")
     private Integer isFinancing;
     /**
      * 主键
@@ -71,6 +75,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 设备编号/设备(新号)
      */
+    @FieldCompared(name="设备编号")
     private String no;
     /**
      * 自编号/设备(旧号)
@@ -80,6 +85,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 财务编码
      */
+    @FieldCompared(name = "资产编号")
     private String financingNo;
     /**
      * 财务编码/固定资产编号
@@ -100,10 +106,12 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 设备名称
      */
+    @FieldCompared(name="设备名称")
     private String name;
     /**
      * 型号
      */
+    @FieldCompared(name="型号")
     private String model;
     /**
      * 名称型号
@@ -117,11 +125,13 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 设备类别
      */
+    @FieldCompared(name="设备类别",type = 2,value = "sbTypeMapper")
     private String typeId;
 
     /**
      * 设备等级
      */
+    @FieldCompared(name="设备等级",type = 1,value = "SBINFO_LEVEL")
     private Integer level;
     /**
      * 净残值率
@@ -138,6 +148,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 设备原值
      */
+    @FieldCompared(name="设备价值")
     private BigDecimal initialValue;
 
     /**
@@ -153,6 +164,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 生产商
      */
+    @FieldCompared(name="生产商",type = 2,value = "firmProducerMapper")
     private String producerId;
     /**
      * 生产商名称:模糊查询
@@ -183,6 +195,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      *
      */
+    @FieldCompared(name = "父设备",type = 2,value = "sbInfoMapper")
     private String parentId;
     /**
      * 上层设备id
@@ -197,6 +210,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 所属车间
      */
+    @FieldCompared(name="设备位置",type = 2,value = "sbPositionMapper")
     private String positionId;
 
     /**
@@ -234,6 +248,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 保管人-跟超哥确认,该字段没用了
      */
+    @FieldCompared(name = "使用人员",type = 2,value = "sysUserMapper",fieldName = "getRealName")
     private String saveUser;
     /**
      * 维修人员
@@ -283,16 +298,19 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 购置日期
      */
+    @FieldCompared(name = "购置日期")
     private LocalDate buyDate;
 
     /**
      * 投用日期
      */
+    @FieldCompared(name = "投用日期")
     private LocalDate startDate;
 
     /**
      * 下次检定日期
      */
+    @FieldCompared(name = "下次检定日期")
     private LocalDate nextCheckDate;
 
     /**
@@ -303,6 +321,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 预计工作年限
      */
+    @FieldCompared(name = "使用寿命")
     private Double workYear;
 
     /**
@@ -343,6 +362,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 状态
      */
+    @FieldCompared(name="状态",type = 1,value = "SB_INFO_STATUS")
     private Integer status;
 
     /**
@@ -354,6 +374,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      * 备注
      */
+    @FieldCompared(name = "备注")
     private String remark;
 
     /**
@@ -379,15 +400,19 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
     /**
      *测量设备相关参数
      */
+    @FieldCompared(name="系列号(出厂编号)")
     private String zzh;//制造号(车架号)/系列号(出厂编号)
     private String fdjxh;//发动机型号/准确度等级
+    @FieldCompared(name = "检定日期")
     private LocalDate checkDate;//检定日期(新增字段)
+    @FieldCompared(name = "检定周期")
     private Integer checkPeriod;//检定周期(新增字段),以月为单位
     private String dph;//检定单位
     private String zaiz;//检定人
     private Integer rlType;//检定结论:合格不合格
     private Integer color;//是否周检查
     private String sbdh;//检定证书编号
+    @FieldCompared(name = "预警天数")
     private Integer seatNumber;//预警天数,默认45天
 
     //private Integer financingFlag;//是否固定资产/这个通过financingNo是否为空判断,不需要单独字段,暂时不新增
@@ -427,9 +452,9 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
      * 维保手册
      */
     private List<SysFile> sbFileList;
-
     private String fdjh;//发动机号
     private String cph;//车牌号
+    @FieldCompared(name="自重")
     private String zz;//自重
     private String zjm;//助记码
     private String jbdh;//交保单号
@@ -437,6 +462,7 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
 
     private BigDecimal totalMiles;//总行驶里程
     private BigDecimal totalHours;//总行驶小时
+    @FieldCompared(name="自定义类型",type = 1,value = "SB_USE_TYPE")
     private Integer useType;//自定义类型
     private LocalDate lastRepaireTime;//最近维修时间
     private Integer repaireTimes;//维修次数
@@ -548,4 +574,9 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
      * 关联的维修部门ID
      */
     private String repairDeptId;
+
+    /**
+     * 前端勾选的ID
+     */
+    private List<String> ids;
 }

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/dto/sb/SbMeasureLogDTO.java

@@ -206,4 +206,9 @@ public class SbMeasureLogDTO extends BaseDTO implements Serializable {
      * 搜索结束日期
      */
     private LocalDate searchEndTime;
+
+    /**
+     * 批量检定/校准设备
+     */
+    private List<String> sbIds;
 }

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/entity/fill/FillGatherTask.java

@@ -91,7 +91,7 @@ public class FillGatherTask implements Serializable {
      */
     private Integer lateHistoryHours;
     /**
-     * 变更记录
+     * 审核备注
      */
     private String recordJson;
     /**

+ 63 - 0
platform-dao/src/main/java/com/platform/dao/entity/sb/SbChangeLog.java

@@ -0,0 +1,63 @@
+package com.platform.dao.entity.sb;
+
+import lombok.Data;
+
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.time.LocalDate;
+
+import lombok.experimental.Accessors;
+import com.platform.common.bean.DataScope;
+
+import javax.persistence.Transient;
+
+/**
+ * @Description 设备修改记录表实体类
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@Table(name = "t_sb_change_log")
+public class SbChangeLog implements Serializable {
+
+    /**
+     * 主键
+     */
+    @Id
+    private String id;
+    /**
+     * 修改人ID
+     */
+    private String createdUserId;
+    /**
+     * 修改人
+     */
+    private String createdUserName;
+    /**
+     * 修改时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 涉及对象的ID
+     */
+    private String objId;
+    /**
+     * 记录类型 0 设备 1 备件 2 仓库
+     */
+    private Integer objType;
+    /**
+     * 修改记录值
+     */
+    private String updateJson;
+
+    /**
+     * 数据权限
+     */
+    @Transient
+    private DataScope dataScope;
+
+}

+ 9 - 1
platform-dao/src/main/java/com/platform/dao/enums/FillGatherTaskStatusEnum.java

@@ -22,7 +22,7 @@ public enum FillGatherTaskStatusEnum {
      */
     PROCESSING(1),
     /**
-     * 巡检完成
+     * 巡检完成--待主管审核
      */
     COMPLETED(2),
     /**
@@ -37,6 +37,14 @@ public enum FillGatherTaskStatusEnum {
      * 巡检暂停
      */
     PAUSE(5),
+    /**
+     * 巡检审核通过
+     */
+    SUCCESS(6),
+    /**
+     * 审核拒绝
+     */
+    REFUSED(7),
     ;
     private final Integer value;
 }

+ 30 - 0
platform-dao/src/main/java/com/platform/dao/enums/SbChangeLogTypeEnum.java

@@ -0,0 +1,30 @@
+package com.platform.dao.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description 设备显示设备
+ * @Author liuyu
+ * @Date 2020/05/05
+ * @Version Copyright (c) 2019,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Getter
+@AllArgsConstructor
+public enum SbChangeLogTypeEnum {
+
+    /**
+     * 设备
+     */
+    SB(0),
+    /**
+     * 备件
+     */
+    SB_SPARE(1),
+    /**
+     * 仓库
+     */
+    SB_SPARE_STORE(2);
+    private final Integer value;
+
+}

+ 26 - 0
platform-dao/src/main/java/com/platform/dao/mapper/sb/SbChangeLogMapper.java

@@ -0,0 +1,26 @@
+package com.platform.dao.mapper.sb;
+
+import com.platform.dao.dto.sb.SbChangeLogDTO;
+import com.platform.dao.config.MyMapper;
+import com.platform.dao.entity.sb.SbChangeLog;
+import com.platform.dao.vo.query.sb.SbChangeLogVO;
+import org.springframework.stereotype.Component;
+import java.util.List;
+
+
+/**
+ * @Description 设备修改记录表 mapper
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Component
+public interface SbChangeLogMapper extends MyMapper<SbChangeLog> {
+    /**
+     * 分页查询
+     * @param dto
+     * @return
+     */
+    List<SbChangeLogVO> selectList(SbChangeLogDTO dto);
+
+}

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java

@@ -535,7 +535,7 @@ public class CustomExcelImportUtil {
             return Collections.emptyList();
         }
 
-        List<ExportSbInfoVO> list = ExcelImportUtil.importExcel(inputstream, ExportSbInfoVO.class,new ImportParams());
+        List<ExportSbInfoVO> list = ExcelImportUtil.importExcel(null,inputstream, ExportSbInfoVO.class,new ImportParams());
         List<SbInfo> resultList = BeanConverterUtil.copyListProperties(list, SbInfo.class);
 
         resultList.forEach(item -> {

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/util/ExcelUtil.java

@@ -44,7 +44,7 @@ public class ExcelUtil {
         ImportParams params = new ImportParams();
         //标题行数
         params.setTitleRows(titleRows);
-        return ExcelImportUtil.importExcel(inputStream, pojoClass, params);
+        return ExcelImportUtil.importExcel(new MyDictHandle(),inputStream, pojoClass, params);
     }
 
     /**

+ 155 - 0
platform-dao/src/main/java/com/platform/dao/util/compare/FieldComparedUtils.java

@@ -0,0 +1,155 @@
+package com.platform.dao.util.compare;
+
+import com.platform.common.cache.DictCache;
+import com.platform.common.util.BeanUtils;
+import com.platform.common.util.DateUtils;
+import com.platform.common.util.StringUtils;
+import com.platform.dao.util.compare.annotation.FieldCompared;
+
+import javax.persistence.Transient;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 比较同一类 的 两个实列 哪些属性存在差异
+ * 用于数据更新前后 对比。
+ *
+ * @author huxingnan
+ * @date 2018/3/29 18:55
+ */
+public class FieldComparedUtils {
+    /**
+     * descripion: 校验两对象差异
+     * author: zhixing.wang
+     * date: 2018/3/30 11:21
+     * param: requestBean  数据库旧值   fitBean  将要修改的值
+     * return: java.lang.String
+     */
+    public static String compareBean(Object requestBean, Object fitBean) {
+        StringBuilder stringBuilder = new StringBuilder();
+        try {
+            // 请求对象的Field
+            Class requestClazz = requestBean.getClass();
+            Field[] requestFields = requestClazz.getDeclaredFields();
+            // 本地对象的Field
+            Class fitClazz = fitBean.getClass();
+            Field[] fitFields = fitClazz.getDeclaredFields();
+
+            Map map = new HashMap();
+            for (Field field : fitFields) {
+                map.put(field.getName(), field.getName());
+            }
+            // serialVersionUID 不做比较
+            for (Field field : requestFields) {
+                if ("serialVersionUID".equals(field.getName())) {
+                    continue;
+                }
+                // 请求对象有Field 但 本地对象没有的Field 不做比较
+                if (!map.containsKey(field.getName())) {
+                    continue;
+                }
+                Transient transientField = field.getAnnotation(Transient.class);
+                if (transientField != null) {
+                    continue;
+                }
+                FieldCompared fieldCompared = field.getAnnotation(FieldCompared.class);
+                if (fieldCompared == null || fieldCompared.isIgnore()) {
+                    continue;
+                }
+                // 获取Field的get方法
+                Method getRequestMethod = requestClazz.getMethod(getGetMethod(field.getName()));
+                Method getFitMethod = fitClazz.getMethod(getGetMethod(field.getName()));
+                // 获取Field属性值
+                Object requestField = getRequestMethod.invoke(requestBean);
+                Object fitField = getFitMethod.invoke(fitBean);
+                // 返回异常信息
+                if (!Objects.equals(requestField, fitField)) {
+                    // 当累类型为BigDecimal
+                    if(requestField instanceof BigDecimal){
+                        BigDecimal req = (BigDecimal)requestField;
+                        BigDecimal res = (BigDecimal)fitField;
+                        if(req.subtract(res).doubleValue() == 0){
+                            continue;
+                        }
+                    }
+                    stringBuilder.append("【"+fieldCompared.name()+"】");
+                    String beforeVal = "-";
+                    String afterVal = "-";
+                    // 根据type类型比较
+                    if(fieldCompared.type() == 1){  // 数据字典
+                        if(requestField != null){
+                            beforeVal = DictCache.getObjByValue(fieldCompared.value(), requestField);
+                        }
+                        afterVal = DictCache.getObjByValue(fieldCompared.value(), fitField);
+                    } else if(fieldCompared.type() == 2){ // 通过ID查询
+                        Object targetObj = BeanUtils.getBean(fieldCompared.value());  // mapper-Bean
+                        Class cla = targetObj.getClass();
+                        Method m = cla.getMethod("selectByPrimaryKey",Object.class);
+                        String getName = "getName";
+                        if(StringUtils.isNotBlank(fieldCompared.fieldName())){
+                            getName = fieldCompared.fieldName();
+                        }
+                        // 修改之前的值
+                        if(requestField != null){
+                            Object obj = m.invoke(targetObj,requestField); // 通过ID获取单条记录值
+                            Method getMethod = obj.getClass().getMethod(getName); // 获取属性值方法,默认是getName()
+                            beforeVal = (String)getMethod.invoke(obj);
+                        }
+                        if(fitField != null){
+                            Object obj = m.invoke(targetObj,fitField);
+                            Method getMethod = obj.getClass().getMethod(getName);
+                            afterVal = (String)getMethod.invoke(obj);
+                        }
+                    }else{
+                        if(requestField instanceof LocalDateTime){
+                            beforeVal = DateUtils.dateToString((LocalDateTime)requestField, DateUtils.PATTERN_YMD_HMS);
+                            afterVal = DateUtils.dateToString((LocalDateTime)fitField, DateUtils.PATTERN_YMD_HMS);
+                        }else if(requestField instanceof LocalDate){
+                            beforeVal = DateUtils.dateToString((LocalDate)requestField, DateUtils.PATTERN_YMD);
+                            afterVal = DateUtils.dateToString((LocalDate)fitField, DateUtils.PATTERN_YMD);
+                        }else {
+                            beforeVal = requestField + "";
+                            afterVal = fitField + "";
+                        }
+
+                    }
+                    stringBuilder.append(beforeVal + "修改为:" + afterVal + ";");
+                    stringBuilder.append("\n");
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return stringBuilder.toString();
+    }
+
+
+    public static void main(String[] args) {
+        /*UserInfo userInfo = new UserInfo();
+        userInfo.setUserId("11");
+        userInfo.setRealName("熊超");
+        UserInfo userInfo2 = new UserInfo();
+        userInfo2.setUserId("22");
+        userInfo2.setRealName("xc");
+        String result = compareBean(userInfo, userInfo2);
+        System.out.println(result);*/
+
+        String info = "[<a href='https://www.yuexiang.cn/yx/borrow/1712291375973093.do' target=_blank>购车周转贷171230-04</a>]借款入账10,000元。";
+        String ss = info.split("target=_blank>")[1].split("</a>")[0];
+        System.out.println(ss);
+    }
+
+    public static String getGetMethod(String fieldName){
+        char cha = fieldName.charAt(0);
+        return "get" + Character.toUpperCase(cha) + fieldName.substring(1);
+    }
+
+}
+
+

+ 62 - 0
platform-dao/src/main/java/com/platform/dao/util/compare/annotation/FieldCompared.java

@@ -0,0 +1,62 @@
+/**
+ * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com)
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.platform.dao.util.compare.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Excel 导出基本注释
+ *
+ * @author JueYue
+ * @date 2014年6月20日 下午10:25:12
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface FieldCompared {
+
+    /**
+     * 导出时,对应数据库的字段 主要是用户区分每个字段, 不能有annocation重名的 导出时的列名
+     * 导出排序跟定义了annotation的字段的顺序有关 可以使用a_id,b_id来确实是否使用
+     */
+    public String name() default "";
+
+    /**
+     * 0 不处理  1 数据字典 2 主键获取
+     * @return
+     */
+    public int type() default 0;
+
+    /**
+     * 当type 为 1和2时必填,填写mapper属性
+     * @return
+     */
+    public String value() default "";
+
+    /**
+     * 当type为2时,可选,默认是getName
+     * @return
+     */
+    public String fieldName() default "";
+
+    /**
+     * 是否忽略,不进行对比
+     */
+    public boolean isIgnore() default false;
+
+}

+ 64 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/sb/ExportSbChangeLogVO.java

@@ -0,0 +1,64 @@
+package com.platform.dao.vo.export.sb;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.time.LocalDate;
+
+/**
+ * @Description 设备修改记录表导出VO
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportSbChangeLogVO implements Serializable {
+
+    /**
+     * 主键
+     */
+    @Excel(name = "主键", orderNum = "1")
+    private String id;
+
+    /**
+     * 修改人ID
+     */
+    @Excel(name = "修改人ID", orderNum = "2")
+    private String createdUserId;
+
+    /**
+     * 修改人
+     */
+    @Excel(name = "修改人", orderNum = "3")
+    private String createdUserName;
+
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", orderNum = "4")
+    private LocalDateTime createdTime;
+
+    /**
+     * 涉及对象的ID
+     */
+    @Excel(name = "涉及对象的ID", orderNum = "5")
+    private String objId;
+
+    /**
+     * 记录类型 0 设备 1 备件 2 仓库
+     */
+    @Excel(name = "记录类型 0 设备 1 备件 2 仓库", orderNum = "6")
+    private Integer objType;
+
+    /**
+     * 修改记录值
+     */
+    @Excel(name = "修改记录值", orderNum = "7")
+    private String updateJson;
+
+
+}

+ 25 - 1
platform-dao/src/main/java/com/platform/dao/vo/export/sb/ExportSbInfoVO.java

@@ -64,7 +64,7 @@ public class ExportSbInfoVO implements Serializable {
      * 自定义类型
      */
     @Excel(name = "自定义类型", orderNum = "9", dicCode="SB_USE_TYPE")
-    private String useType;
+    private Integer useType;
     /**
      * 大小/尺寸
      */
@@ -121,4 +121,28 @@ public class ExportSbInfoVO implements Serializable {
     @Excel(name = "财务编码", orderNum = "20")
     private String financingNo;
 
+    /**
+     * 上次检定日期
+     */
+    @Excel(name = "上次检定日期", orderNum = "21")
+    private LocalDate checkDate;
+
+    /**
+     * 检定周期
+     */
+    @Excel(name = "检定周期", orderNum = "22")
+    private Integer checkPeriod;
+
+    /**
+     * 下次检定日期
+     */
+    @Excel(name = "下次检定日期", orderNum = "23")
+    private LocalDate nextCheckDate;
+
+    /**
+     * 预警天数
+     */
+    @Excel(name = "预警天数", orderNum = "24")
+    private Integer seatNumber;
+
 }

+ 56 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/sb/SbChangeLogVO.java

@@ -0,0 +1,56 @@
+package com.platform.dao.vo.query.sb;
+
+import lombok.Data;
+import com.platform.common.bean.BaseVO;
+import com.platform.common.bean.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.*;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.time.LocalDate;
+
+/**
+ * @Description 设备修改记录表VO结果类
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class SbChangeLogVO extends BaseVO implements Serializable {
+
+    /**
+     * 主键
+     */
+    private String id;
+    /**
+     * 修改人ID
+     */
+    private String createdUserId;
+    /**
+     * 修改人
+     */
+    private String createdUserName;
+    /**
+     * 修改时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 涉及对象的ID
+     */
+    private String objId;
+    /**
+     * 记录类型 0 设备 1 备件 2 仓库
+     */
+    private Integer objType;
+    /**
+     * 修改记录值
+     */
+    private String updateJson;
+
+
+}

+ 58 - 0
platform-dao/src/main/resources/mapper/sb/SbChangeLogMapper.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.platform.dao.mapper.sb.SbChangeLogMapper">
+    <sql id="Base_Column_List">
+     sb.id,
+     sb.created_user_id,
+     sb.created_user_name,
+     sb.created_time,
+     sb.obj_id,
+     sb.obj_type,
+     sb.update_json
+</sql>
+    <sql id="Ref_Column_List">
+                                                                                                                                                                                                             sb.obj_id,
+                                     sb.obj_type,
+                                     sb.update_json
+                                </sql>
+    <sql id="List_Condition">
+        <if test="id != null and id != ''">
+            and sb.id = #{id}
+        </if>
+        <if test="createdUserId != null and createdUserId != ''">
+            and sb.created_user_id = #{createdUserId}
+        </if>
+        <if test="createdUserName != null and createdUserName != ''">
+            and sb.created_user_name = #{createdUserName}
+        </if>
+        <if test="createdTimeStart != null">
+            and sb.created_time <![CDATA[>=]]>; #{createdTimeStart}
+        </if>
+        <if test="createdTimeEnd != null">
+            and sb.created_time <![CDATA[<=]]> #{createdTimeEnd}
+        </if>
+        <if test="createdTime != null">
+            and sb.created_time = #{createdTime}
+        </if>
+        <if test="objId != null and objId != ''">
+            and sb.obj_id = #{objId}
+        </if>
+        <if test="objType != null">
+            and sb.obj_type = #{objType}
+        </if>
+        <if test="updateJson != null">
+            and sb.update_json = #{updateJson}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            and sb.id like concat(concat('%',#{keyword}),'%')
+        </if>
+    </sql>
+    <select id="selectList" parameterType="com.platform.dao.dto.sb.SbChangeLogDTO"
+            resultType="com.platform.dao.vo.query.sb.SbChangeLogVO">
+        select sb.*
+        from t_sb_change_log as sb
+        <where>
+            <include refid="List_Condition"/>
+        </where>
+    </select>
+</mapper>

+ 6 - 0
platform-dao/src/main/resources/mapper/sb/SbInfoMapper.xml

@@ -230,6 +230,12 @@ user.real_name as saveUserName,sb.repair_dept_id
                 #{item}
             </foreach>
         </if>
+        <if test="ids != null">
+            AND sb.id in
+            <foreach item="item" index="index" collection="ids" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="useType != null">
             and sb.use_type = #{useType}
         </if>

+ 6 - 5
platform-office/src/main/java/com/platform/office/poi/excel/ExcelImportUtil.java

@@ -1,5 +1,6 @@
 package com.platform.office.poi.excel;
 
+import com.platform.office.poi.cache.DictHandle;
 import com.platform.office.poi.excel.entity.ImportParams;
 import com.platform.office.poi.excel.entity.result.ExcelImportResult;
 import com.platform.office.poi.excel.imports.ExcelImportServer;
@@ -44,7 +45,7 @@ public final class ExcelImportUtil {
         List<T> result = null;
         try {
             in = new FileInputStream(file);
-            result = new ExcelImportServer().importExcelByIs(in, pojoClass, params).getList();
+            result = new ExcelImportServer().importExcelByIs(null,in, pojoClass, params).getList();
         } catch (Exception e) {
             LOGGER.error(e.getMessage(), e);
         } finally {
@@ -66,8 +67,8 @@ public final class ExcelImportUtil {
      * @throws Exception
      */
     @SneakyThrows
-    public static <T> List<T> importExcel(InputStream inputstream, Class<?> pojoClass, ImportParams params) {
-        return new ExcelImportServer().importExcelByIs(inputstream, pojoClass, params).getList();
+    public static <T> List<T> importExcel(DictHandle dictHandle,InputStream inputstream, Class<?> pojoClass, ImportParams params) {
+        return new ExcelImportServer().importExcelByIs(dictHandle,inputstream, pojoClass, params).getList();
     }
 
     /**
@@ -79,7 +80,7 @@ public final class ExcelImportUtil {
      * @throws Exception
      */
     public static <T> ExcelImportResult<T> importExcelVerify(InputStream inputstream, Class<?> pojoClass, ImportParams params) throws Exception {
-        return new ExcelImportServer().importExcelByIs(inputstream, pojoClass, params);
+        return new ExcelImportServer().importExcelByIs(null,inputstream, pojoClass, params);
     }
 
     /**
@@ -95,7 +96,7 @@ public final class ExcelImportUtil {
         FileInputStream in = null;
         try {
             in = new FileInputStream(file);
-            return new ExcelImportServer().importExcelByIs(in, pojoClass, params);
+            return new ExcelImportServer().importExcelByIs(null,in, pojoClass, params);
         } catch (Exception e) {
             LOGGER.error(e.getMessage(), e);
         } finally {

+ 5 - 4
platform-office/src/main/java/com/platform/office/poi/excel/imports/ExcelImportServer.java

@@ -1,6 +1,7 @@
 package com.platform.office.poi.excel.imports;
 
 import com.platform.office.annotation.ExcelTarget;
+import com.platform.office.poi.cache.DictHandle;
 import com.platform.office.poi.excel.entity.ImportParams;
 import com.platform.office.poi.excel.entity.params.ExcelCollectionParams;
 import com.platform.office.poi.excel.entity.params.ExcelImportEntity;
@@ -141,7 +142,7 @@ public class ExcelImportServer extends ImportBaseService {
         return excelImportEntity.getSaveUrl();
     }
 
-    private <T> List<T> importExcel(Collection<T> result, Sheet sheet, Class<?> pojoClass, ImportParams params, Map<String, PictureData> pictures) throws Exception {
+    private <T> List<T> importExcel(DictHandle dictHandle,Collection<T> result, Sheet sheet, Class<?> pojoClass, ImportParams params, Map<String, PictureData> pictures) throws Exception {
         List collection = new ArrayList();
         Map<String, ExcelImportEntity> excelParams = new HashMap<>();
         List<ExcelCollectionParams> excelCollection = new ArrayList<>();
@@ -152,7 +153,7 @@ public class ExcelImportServer extends ImportBaseService {
             if (etarget != null) {
                 targetId = etarget.value();
             }
-            getAllExcelField(targetId, fields, excelParams, excelCollection, pojoClass, null);
+            getAllExcelField(dictHandle,targetId, fields, excelParams, excelCollection, pojoClass, null);
         }
         Iterator<Row> rows = sheet.rowIterator();
         for (int j = 0; j < params.getTitleRows(); j++) {
@@ -269,7 +270,7 @@ public class ExcelImportServer extends ImportBaseService {
      * @return
      * @throws Exception
      */
-    public ExcelImportResult importExcelByIs(InputStream inputstream, Class<?> pojoClass, ImportParams params) throws Exception {
+    public ExcelImportResult importExcelByIs(DictHandle dictHandle,InputStream inputstream, Class<?> pojoClass, ImportParams params) throws Exception {
         if (LOGGER.isDebugEnabled()) {
             LOGGER.debug("Excel import start ,class is {}", pojoClass);
         }
@@ -299,7 +300,7 @@ public class ExcelImportServer extends ImportBaseService {
             if (LOGGER.isDebugEnabled()) {
                 LOGGER.debug(" end to read excel by is ,endTime is {}", System.currentTimeMillis());
             }
-            result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, params, pictures));
+            result.addAll(importExcel(dictHandle,result, book.getSheetAt(i), pojoClass, params, pictures));
             if (LOGGER.isDebugEnabled()) {
                 LOGGER.debug(" end to read excel list by pos ,endTime is {}", System.currentTimeMillis());
             }

+ 11 - 5
platform-office/src/main/java/com/platform/office/poi/excel/imports/base/ImportBaseService.java

@@ -3,6 +3,7 @@ package com.platform.office.poi.excel.imports.base;
 import com.platform.office.annotation.Excel;
 import com.platform.office.annotation.ExcelCollection;
 import com.platform.office.annotation.ExcelVerify;
+import com.platform.office.poi.cache.DictHandle;
 import com.platform.office.poi.excel.entity.ImportParams;
 import com.platform.office.poi.excel.entity.params.ExcelCollectionParams;
 import com.platform.office.poi.excel.entity.params.ExcelImportEntity;
@@ -37,7 +38,7 @@ public class ImportBaseService {
      * @param temp
      * @throws Exception
      */
-    public void addEntityToMap(String targetId, Field field, ExcelImportEntity excelEntity, Class<?> pojoClass, List<Method> getMethods, Map<String, ExcelImportEntity> temp) throws Exception {
+    public void addEntityToMap(DictHandle dictHandle,String targetId, Field field, ExcelImportEntity excelEntity, Class<?> pojoClass, List<Method> getMethods, Map<String, ExcelImportEntity> temp) throws Exception {
         Excel excel = field.getAnnotation(Excel.class);
         excelEntity = new ExcelImportEntity();
         excelEntity.setType(excel.type());
@@ -48,6 +49,11 @@ public class ImportBaseService {
         excelEntity.setVerify(getImportVerify(field));
         excelEntity.setSuffix(excel.suffix());
         getExcelField(targetId, field, excelEntity, excel, pojoClass);
+        // dictCode不为空
+        if(StringUtils.isNotBlank(excel.dicCode()) && dictHandle != null){
+            String[] replace = dictHandle.getReplace(excel.dicCode());
+            excelEntity.setReplace(replace);
+        }
         if (getMethods != null) {
             List<Method> newMethods = new ArrayList<Method>();
             newMethods.addAll(getMethods);
@@ -90,7 +96,7 @@ public class ImportBaseService {
      * @param excelCollection
      * @throws Exception
      */
-    public void getAllExcelField(String targetId, Field[] fields, Map<String, ExcelImportEntity> excelParams, List<ExcelCollectionParams> excelCollection, Class<?> pojoClass, List<Method> getMethods) throws Exception {
+    public void getAllExcelField(DictHandle dictHandle, String targetId, Field[] fields, Map<String, ExcelImportEntity> excelParams, List<ExcelCollectionParams> excelCollection, Class<?> pojoClass, List<Method> getMethods) throws Exception {
         ExcelImportEntity excelEntity = null;
         for (int i = 0; i < fields.length; i++) {
             Field field = fields[i];
@@ -111,14 +117,14 @@ public class ImportBaseService {
                 additionalCollectionName(collection);
                 excelCollection.add(collection);
             } else if (PoiPublicUtil.isJavaClass(field)) {
-                addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, excelParams);
+                addEntityToMap(dictHandle,targetId, field, excelEntity, pojoClass, getMethods, excelParams);
             } else {
                 List<Method> newMethods = new ArrayList<Method>();
                 if (getMethods != null) {
                     newMethods.addAll(getMethods);
                 }
                 newMethods.add(PoiPublicUtil.getMethod(field.getName(), pojoClass));
-                getAllExcelField(targetId, PoiPublicUtil.getClassFields(field.getType()), excelParams, excelCollection, field.getType(), newMethods);
+                getAllExcelField(dictHandle,targetId, PoiPublicUtil.getClassFields(field.getType()), excelParams, excelCollection, field.getType(), newMethods);
             }
         }
     }
@@ -156,7 +162,7 @@ public class ImportBaseService {
                 continue;
             }
             if (PoiPublicUtil.isJavaClass(field)) {
-                addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, temp);
+                addEntityToMap(null,targetId, field, excelEntity, pojoClass, getMethods, temp);
             } else {
                 List<Method> newMethods = new ArrayList<Method>();
                 if (getMethods != null) {

+ 1 - 1
platform-office/src/main/java/com/platform/office/poi/excel/imports/sax/parse/SaxRowRead.java

@@ -75,7 +75,7 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead {
             if (etarget != null) {
                 targetId = etarget.value();
             }
-            getAllExcelField(targetId, fields, excelParams, excelCollection, pojoClass, null);
+            getAllExcelField(null,targetId, fields, excelParams, excelCollection, pojoClass, null);
         } catch (Exception e) {
             LOGGER.error(e.getMessage(), e);
             throw new ExcelImportException(e.getMessage());

+ 3 - 3
platform-office/src/main/java/com/platform/office/util/ExcelImportUtil.java

@@ -25,7 +25,7 @@ public class ExcelImportUtil {
      * @return :
      */
     public static <T> List<T> importExcel(InputStream inputStream, Class<? extends T> pojoClass, ImportParams params) {
-        return com.platform.office.poi.excel.ExcelImportUtil.importExcel(inputStream, pojoClass, params);
+        return com.platform.office.poi.excel.ExcelImportUtil.importExcel(null,inputStream, pojoClass, params);
     }
 
     /**
@@ -44,7 +44,7 @@ public class ExcelImportUtil {
         params.setHeadRows(1);
         // 开始读取数据的行数
         params.setStartRows(1);
-        return com.platform.office.poi.excel.ExcelImportUtil.importExcel(inputStream, pojoClass, params);
+        return com.platform.office.poi.excel.ExcelImportUtil.importExcel(null,inputStream, pojoClass, params);
     }
 
     /**
@@ -67,7 +67,7 @@ public class ExcelImportUtil {
         params.setHeadRows(headRow);
         // 开始读取数据的行数
         params.setStartRows(startRow);
-        return com.platform.office.poi.excel.ExcelImportUtil.importExcel(inputStream, pojoClass, params);
+        return com.platform.office.poi.excel.ExcelImportUtil.importExcel(null,inputStream, pojoClass, params);
     }
 
 }

+ 14 - 0
platform-rest/src/main/java/com/platform/rest/controller/fill/FillGatherTaskController.java

@@ -179,6 +179,20 @@ public class FillGatherTaskController {
         return new R<>();
     }
 
+    /**
+     *  审核巡检任务
+     * @param fillGatherTaskDTO 巡检任务DTO
+     * @return R
+     */
+    @SysLog("审核巡检任务")
+    @PutMapping("/verify/{id}")
+    @PreAuthorize("@pms.hasPermission('fill-tasks-dispatch')")
+    public R verify(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody FillGatherTaskDTO fillGatherTaskDTO) {
+        fillGatherTaskDTO.setId(id);
+        fillGatherTaskService.verifyTask(fillGatherTaskDTO);
+        return new R<>();
+    }
+
     /**
      *  巡检任务填报
      * @param fillGatherTaskDTO 巡检任务DTO

+ 18 - 7
platform-rest/src/main/java/com/platform/rest/controller/mobile/IgnoreController.java

@@ -51,6 +51,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -284,14 +285,24 @@ public class IgnoreController {
     }
 
     @GetMapping("/test/test")
-    public R testNum(){
+    public R testNum() throws Exception{
         // 启动接收超时监控
-        String minuteStr = "1";
-        int minute = 1;// 默认30分钟
-        if (com.platform.common.util.StringUtils.isNotBlank(minuteStr)) {
-            minute = Integer.valueOf(minuteStr);
-        }
-        RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_STEP_FIRST + RedisKeyConstants.EXPIRE_BUSINESS_SEP + "repairId", "repairId", minute, TimeUnit.MINUTES);
+        Class cla = BeanUtils.getBean("sbInfoMapper").getClass();
+        /*Method[] methods = cla.getMethods();
+        for(Method method : methods){
+            System.out.println("mapper----"+method.getName());
+        }*/
+        Method m = cla.getMethod("selectByPrimaryKey",Object.class);
+        Object obj = m.invoke(BeanUtils.getBean("sbInfoMapper"),"6316b58a107dea2d5027971a");
+        Method getName = obj.getClass().getMethod("getName");
+        String sbName = (String)getName.invoke(obj);
+        System.out.println(sbName);
+        // 启动接收超时监控
+        /*Class cla2 = BeanUtils.getBean("sbChangeLogService").getClass();
+        Method[] methods2 = cla2.getMethods();
+        for(Method method : methods2){
+            System.out.println("service----"+method.getName());
+        }*/
         return new R<>();
     }
 

+ 141 - 0
platform-rest/src/main/java/com/platform/rest/controller/sb/SbChangeLogController.java

@@ -0,0 +1,141 @@
+package com.platform.rest.controller.sb;
+
+import com.platform.common.util.R;
+import com.platform.dao.dto.sb.SbChangeLogDTO;
+import com.platform.dao.entity.sb.SbChangeLog;
+import com.platform.service.sb.SbChangeLogService;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.sb.ExportSbChangeLogVO;
+import com.platform.dao.vo.query.sb.SbChangeLogVO;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.validation.group.AddGroup;
+import com.platform.common.validation.group.UpdateGroup;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import lombok.AllArgsConstructor;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.rest.log.annotation.SysLog;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @Description 设备修改记录表 控制器
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/sb/change-logs")
+public class SbChangeLogController {
+
+  private final  SbChangeLogService sbChangeLogService;
+
+  /**
+   * 通过id查询单条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @GetMapping("/{id}")
+  public R<SbChangeLog> getById(@PathVariable("id") String id){
+      return new R<>(sbChangeLogService.getModelById(id));
+  }
+
+  /**
+   * 新增记录
+   *
+   * @param sbChangeLogDTO 设备修改记录表DTO
+   * @return R
+   */
+  @SysLog("新增设备修改记录表")
+  @PostMapping
+  @PreAuthorize("@pms.hasPermission('sb-change-logs-add')")
+  public R save(@Validated({AddGroup.class}) @RequestBody SbChangeLogDTO sbChangeLogDTO) {
+      return new R<>(sbChangeLogService.saveModelByDTO(sbChangeLogDTO));
+  }
+
+  /**
+   * 修改记录
+   *
+   * @param sbChangeLogDTO 设备修改记录表DTO
+   * @return R
+   */
+  @SysLog("修改设备修改记录表")
+  @PutMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('sb-change-logs-edit')")
+  public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody SbChangeLogDTO sbChangeLogDTO) {
+      sbChangeLogService.modModelByDTO(sbChangeLogDTO);
+      return new R<>();
+  }
+
+
+                                            
+  /**
+   * 通过id删除一条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @SysLog("删除设备修改记录表")
+  @DeleteMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('sb-change-logs-del')")
+  public R removeById(@PathVariable String id){
+    sbChangeLogService.deleteByPrimaryKey(id);
+    return new R<>();
+  }
+
+    /**
+     * 批量记录
+     *
+     * @param ids 主键
+     * @return R
+     */
+    @SysLog("批量删除设备修改记录表")
+    @DeleteMapping("")
+    @PreAuthorize("@pms.hasPermission('sb-change-logs-del')")
+    public R removeIds(@RequestBody List<String> ids){
+        sbChangeLogService.batchDelete(ids);
+        return new R<>();
+    }
+
+  /**
+   * 获取分页
+   *
+   * @param pageNum 当前页码
+   * @param pageSize 每页条数
+   * @param sbChangeLogDTO 设备修改记录表DTO
+   * @return R
+   */
+  @GetMapping("/page")
+  public R<AbstractPageResultBean<SbChangeLogVO>> query(SbChangeLogDTO sbChangeLogDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
+      return new R<>(sbChangeLogService.selectPageList(sbChangeLogDTO, pageNum, pageSize));
+  }
+
+  /**
+   * 获取列表
+   *
+   * @param sbChangeLogDTO 设备修改记录表DTO
+   * @return R
+   */
+  @GetMapping("")
+  public R query(SbChangeLogDTO sbChangeLogDTO) {
+      return new R<>(sbChangeLogService.getModelListByDTO(sbChangeLogDTO));
+  }
+
+  /**
+     * 设备修改记录表导出
+     *
+     * @param sbChangeLogDTO 设备修改记录表DTO
+     * @return R
+     */
+  @GetMapping("/export")
+  @SysLog("设备修改记录表导出")
+  @PreAuthorize("@pms.hasPermission('sb-change-logs-export')")
+  public void export(HttpServletResponse response, SbChangeLogDTO sbChangeLogDTO) {
+    List<SbChangeLog> list = sbChangeLogService.getModelListByDTO(sbChangeLogDTO);
+    ExcelUtil.exportResponseDict(response, ExportSbChangeLogVO.class, BeanConverterUtil.copyListProperties(list, ExportSbChangeLogVO.class), "设备修改记录表");
+  }
+
+}

+ 3 - 1
platform-rest/src/main/java/com/platform/rest/controller/sb/SbInfoController.java

@@ -420,6 +420,8 @@ public class SbInfoController {
             result = sbInfoService.importListByUpdateALl(file);
         }else if(type == 3){
             result = sbInfoService.importListByAddWithStandard(file);
+        } else if(type == 4){
+            result = sbInfoService.updateImportUpdateForLongYan(file);
         }
         return new R<>(result);
     }
@@ -478,7 +480,7 @@ public class SbInfoController {
 
     public static void main(String[] args) throws FileNotFoundException {
         String[] files = {"C:\\Users\\cyz\\Downloads\\2021.8.3设备基础导入 修改设备等级 设备类型 自定义类型.xls"};
-        List<ExportSbInfoVO> list = ExcelImportUtil.importExcel(new FileInputStream(files[0]), ExportSbInfoVO.class,new ImportParams());
+        List<ExportSbInfoVO> list = ExcelImportUtil.importExcel(null,new FileInputStream(files[0]), ExportSbInfoVO.class,new ImportParams());
         list.forEach(item -> {
             System.out.println(item.toString());
         });

+ 7 - 5
platform-rest/src/main/java/com/platform/rest/controller/sb/SbMeasureLogController.java

@@ -5,17 +5,12 @@ import com.platform.common.util.BeanConverterUtil;
 import com.platform.common.util.R;
 import com.platform.common.validation.group.AddGroup;
 import com.platform.common.validation.group.UpdateGroup;
-import com.platform.dao.dto.check.CheckJobDTO;
-import com.platform.dao.dto.check.CheckStandardDTO;
 import com.platform.dao.dto.sb.SbMeasureLogDTO;
-import com.platform.dao.entity.check.CheckStandard;
 import com.platform.dao.entity.sb.SbMeasureLog;
 import com.platform.dao.util.ExcelUtil;
-import com.platform.dao.vo.export.check.ExportCheckStandardVO;
 import com.platform.dao.vo.export.sb.ExportSbMeasureLogVO;
 import com.platform.dao.vo.query.sb.SbMeasureLogVO;
 import com.platform.rest.log.annotation.SysLog;
-import com.platform.service.check.CheckStandardService;
 import com.platform.service.sb.SbMeasureLogService;
 import lombok.AllArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -61,6 +56,13 @@ public class SbMeasureLogController {
       return new R<>(checkStandardService.saveModelByDTO(checkStandardDTO));
   }
 
+  @SysLog("批量新增设备计量记录")
+  @PostMapping("/batch")
+  public R saveBatch(@Validated({AddGroup.class}) @RequestBody SbMeasureLogDTO checkStandardDTO) {
+    checkStandardService.saveBatchByDTO(checkStandardDTO);
+    return new R<>();
+  }
+
   /**
    * 修改记录
    *

+ 6 - 0
platform-service/src/main/java/com/platform/service/fill/FillGatherTaskService.java

@@ -73,4 +73,10 @@ public interface FillGatherTaskService extends IBaseService<FillGatherTask, Fill
 
     List<FillGatherTask> selectAll();
 
+    /**
+     * 巡检审核
+     * @param model
+     */
+    void verifyTask(FillGatherTaskDTO model);
+
                                                                                                                                                                                                                 }

+ 16 - 0
platform-service/src/main/java/com/platform/service/fill/impl/FillGatherTaskServiceImpl.java

@@ -7,6 +7,7 @@ import com.github.pagehelper.PageHelper;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.cache.ConfigCache;
 import com.platform.common.constant.RedisKeyConstants;
+import com.platform.common.exception.DeniedException;
 import com.platform.common.model.UserInfo;
 import com.platform.common.util.*;
 import com.platform.dao.bean.MyPage;
@@ -281,6 +282,21 @@ public class FillGatherTaskServiceImpl extends BaseServiceImpl<FillGatherTaskMap
         return mapper.selectAll();
     }
 
+    @Override
+    public void verifyTask(FillGatherTaskDTO model) {
+        if(StringUtils.isBlank(model.getId())){
+            throw new DeniedException("任务ID不能为空");
+        }
+        FillGatherTask task = new FillGatherTask();
+        task.setId(model.getId());
+        task.setRecordJson(model.getRecordJson());
+        task.setUpdateTime(LocalDateTime.now());
+        task.setStatus(model.getStatus());
+        mapper.updateByPrimaryKeySelective(task);
+        // 通知巡检人
+        //sendMessageToChecker(mapper.selectByPrimaryKey(task.getId()),null);
+    }
+
     /**
      * 给巡检人发送消息
      * @param task

+ 35 - 0
platform-service/src/main/java/com/platform/service/sb/SbChangeLogService.java

@@ -0,0 +1,35 @@
+package com.platform.service.sb;
+
+import com.platform.dao.vo.query.sb.SbChangeLogVO;
+import com.platform.dao.dto.sb.SbChangeLogDTO;
+import com.platform.dao.entity.sb.SbChangeLog;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.service.base.IBaseService;
+import java.util.List;
+
+/**
+ * @Description 设备修改记录表 service
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+public interface SbChangeLogService extends IBaseService<SbChangeLog, SbChangeLogDTO> {
+
+   /**
+    * 批量删除
+    *
+    * @param ids :
+    * @return :
+    */
+    int batchDelete(List<String> ids);
+
+    /**
+     * 分页查询
+     * @param record
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    AbstractPageResultBean<SbChangeLogVO> selectPageList(SbChangeLogDTO record, int pageNum, int pageSize);
+
+                                                                                        }

+ 6 - 1
platform-service/src/main/java/com/platform/service/sb/SbInfoService.java

@@ -1,6 +1,5 @@
 package com.platform.service.sb;
 
-import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.dao.bean.MyVOPage;
 import com.platform.dao.dto.sb.SbInfoDTO;
 import com.platform.dao.entity.sb.SbInfo;
@@ -313,4 +312,10 @@ public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {
 
     public SbTreeVO getSbVOById(SbInfoDTO sbInfoDTO);
 
+    /**
+     * 批量导出后,批量修改
+     * @param file
+     * @return
+     */
+    String updateImportUpdateForLongYan(MultipartFile file);
 }

+ 5 - 0
platform-service/src/main/java/com/platform/service/sb/SbMeasureLogService.java

@@ -36,5 +36,10 @@ public interface SbMeasureLogService extends IBaseService<SbMeasureLog, SbMeasur
 
     List<SbMeasureLogVO> selectList(SbMeasureLogDTO record);
 
+    /**
+     * 批量检定/校准设备
+     * @param record
+     */
+    void saveBatchByDTO(SbMeasureLogDTO record);
 
 }

+ 51 - 0
platform-service/src/main/java/com/platform/service/sb/impl/SbChangeLogServiceImpl.java

@@ -0,0 +1,51 @@
+package com.platform.service.sb.impl;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.BeanUtils;
+import com.platform.dao.bean.MyPage;
+import com.github.pagehelper.PageHelper;
+import com.platform.dao.vo.query.sb.SbChangeLogVO;
+import com.platform.dao.dto.sb.SbChangeLogDTO;
+import com.platform.dao.entity.sb.SbChangeLog;
+import com.platform.dao.mapper.sb.SbChangeLogMapper;
+import com.platform.service.sb.SbChangeLogService;
+import org.springframework.stereotype.Service;
+import com.platform.service.base.impl.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+import lombok.AllArgsConstructor;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * @Description 设备修改记录表 service 实现类
+ * @Author lsq
+ * @Date 2022-09-23 09:31:33
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@AllArgsConstructor
+@Service("sbChangeLogService")
+public class SbChangeLogServiceImpl extends BaseServiceImpl<SbChangeLogMapper, SbChangeLog, SbChangeLogDTO> implements SbChangeLogService {
+
+    @Override
+    public int batchDelete(List<String> ids) {
+        Weekend<SbChangeLog> weekend = new Weekend<>(SbChangeLog.class);
+        WeekendCriteria<SbChangeLog, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(SbChangeLog::getId, ids);
+        mapper.deleteByExample(weekend);
+        return 1;
+    }
+
+    @Override
+    public AbstractPageResultBean<SbChangeLogVO> selectPageList(SbChangeLogDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public AbstractPageResultBean<SbChangeLog> selectPageInfo(SbChangeLogDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+                                                                                        }

+ 124 - 4
platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

@@ -7,7 +7,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.platform.activiti.bean.ActObj;
 import com.platform.activiti.enums.ActApplyEnum;
-import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.cache.ConfigCache;
 import com.platform.common.constant.CommonConstants;
 import com.platform.common.enums.DataFilterTypeEnum;
@@ -15,7 +14,6 @@ import com.platform.common.enums.ResultCode;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.model.UserInfo;
 import com.platform.common.util.*;
-import com.platform.dao.bean.MyPage;
 import com.platform.dao.bean.MyVOPage;
 import com.platform.dao.dto.check.CheckStandardDTO;
 import com.platform.dao.dto.part.PartInfoDTO;
@@ -43,14 +41,16 @@ import com.platform.dao.mapper.part.PartTypeMapper;
 import com.platform.dao.mapper.repair.RepairApplicationFormMapper;
 import com.platform.dao.mapper.sb.*;
 import com.platform.dao.mapper.upms.SysDeptMapper;
-import com.platform.dao.mapper.upms.SysUserDeptMapper;
 import com.platform.dao.mapper.upms.SysUserMapper;
 import com.platform.dao.mapper.workplace.WorkplaceBacklogUserMapper;
 import com.platform.dao.util.CustomExcelImportUtil;
+import com.platform.dao.util.ExcelUtil;
 import com.platform.dao.util.MessageTemplateUtil;
 import com.platform.dao.util.UserUtil;
+import com.platform.dao.util.compare.FieldComparedUtils;
 import com.platform.dao.vo.SysUserDeptVO;
 import com.platform.dao.vo.SysUserVO;
+import com.platform.dao.vo.export.sb.ExportSbInfoVO;
 import com.platform.dao.vo.query.upms.SysDeptVO;
 import com.platform.dao.vo.sb.*;
 import com.platform.service.base.impl.BaseServiceImpl;
@@ -112,7 +112,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
 
     private final SysDeptService sysDeptService;
 
-    private final SysUserDeptMapper sysUserDeptMapper;
+    private final SbChangeLogMapper sbChangeLogMapper;
 
     private final SbModelMapper sbModelMapper;
 
@@ -480,6 +480,11 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         }
         setSaveDept(model);
         setSbStatusLogAndStopLog(model);
+        // 保存修改记录
+        SbInfo sbInfo = mapper.selectByPrimaryKey(model.getId());
+        SbInfoDTO oldDTO = BeanConverterUtil.copyObjectProperties(sbInfo,SbInfoDTO.class);
+        String updateInfo = FieldComparedUtils.compareBean(oldDTO,model);
+        packageLogInfo(updateInfo,model.getId());
         super.modModelByDTO(model);
         // 保存文件
         this.saveImageFile(model);
@@ -488,6 +493,19 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         this.saveRecheckFile(model);
     }
 
+    private void packageLogInfo(String updateInfo,String sbId){
+        SbChangeLog log = new SbChangeLog();
+        log.setCreatedTime(LocalDateTime.now());
+        log.setCreatedUserId(SecurityUtils.getUserInfo().getUserId());
+        log.setCreatedUserName(SecurityUtils.getUserInfo().getUsername());
+        log.setId(IdGeneratorUtils.getObjectId());
+        log.setObjId(sbId);
+        log.setUpdateJson(updateInfo);
+        log.setObjType(SbChangeLogTypeEnum.SB.getValue());
+        sbChangeLogMapper.insert(log);
+    }
+
+
     @Override
     public void modModelByDTOIgnore(SbInfoDTO model) {
        /* SbModelVO sbModelVO = sbModelMapper.getById(model.getModelId());
@@ -641,6 +659,108 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         return sbTreeVO;
     }
 
+    @Override
+    public String updateImportUpdateForLongYan(MultipartFile file) {
+        int addNum = 0;
+        List<FirmProducer> producerList = firmProducerMapper.selectAll(); // 生产厂商
+        List<SbPosition> positionList = sbPositionMapper.selectAll(); // 设备位置
+        List<SbType> typeList = sbTypeMapper.selectAll(); // 设备类型集合
+        List<SbInfo> updateList = new ArrayList<SbInfo>();  // 待修改集合
+        List<SysUser> users = sysUserMapper.selectAll(); // 用户集合
+        try {
+            List<ExportSbInfoVO> list = ExcelUtil.importExcel(file.getInputStream(), ExportSbInfoVO.class, 1);
+            if(CollectionUtil.isNotEmpty(list)){
+                for(ExportSbInfoVO vo : list){
+                    SbInfo tempInfo = BeanConverterUtil.copyObjectProperties(vo,SbInfo.class);
+                    if(StringUtils.isNotBlank(vo.getTypeName())){ // 设备类型匹配
+                        boolean findSbType = false;
+                        for (SbType sbType : typeList) {
+                            if (sbType.getName().equalsIgnoreCase(vo.getTypeName().trim())) {
+                                tempInfo.setTypeId(sbType.getId());
+                                findSbType = true;
+                                break;
+                            }
+                        }
+                        if (!findSbType) {
+                            throw new BusinessException("系统找不到该设备类型名称,请先添加设备类型, 设备类型名称" + vo.getTypeName());
+                        }
+                    }
+                    if(StringUtils.isNotBlank(vo.getPositionName())){ // 设备位置匹配
+                        boolean findPosition = false;
+                        for (SbPosition position : positionList) {
+                            if (position.getName().equalsIgnoreCase(vo.getPositionName().trim())) {
+                                tempInfo.setPositionId(position.getId());
+                                findPosition = true;
+                                break;
+                            }
+                        }
+                        if (!findPosition) {
+                            throw new BusinessException("系统找不到车间名称,请先添加车间, 车间名称" + vo.getPositionName());
+                        }
+                    }
+                    if(StringUtils.isNotBlank(vo.getProducerName())){ // 生产商匹配
+                        boolean findProducer = false;
+                        for (FirmProducer producer : producerList) {
+                            if (producer.getName().equalsIgnoreCase(vo.getProducerName().trim())) {
+                                tempInfo.setProducerId(producer.getId());
+                                findProducer = true;
+                                break;
+                            }
+                        }
+                        if (!findProducer) {
+                            throw new BusinessException("找不到生产商,请先添加:" + vo.getProducerName());
+                        }
+                    }
+                    if(StringUtils.isNotBlank(vo.getSaveUserName())){ // 使用人员
+                        boolean findSaveUser = false;
+                        for (SysUser user : users) {
+                            if (user.getRealName().equalsIgnoreCase(vo.getSaveUserName().trim())) {
+                                tempInfo.setSaveUser(user.getUserId());
+                                findSaveUser = true;
+                                break;
+                            }
+                        }
+                        if (!findSaveUser) {
+                            throw new BusinessException("找不到使用人员,请先添加, 名称" + vo.getSaveUserName());
+                        }
+                    }
+                    // 如果计量设备
+                    if(vo.getUseType() == SbUseType.BGCL.getValue()){
+                        if(vo.getCheckDate() == null && vo.getNextCheckDate() == null){
+                            throw new BusinessException("上次和下次检定日期,不能全部为空");
+                        }
+                        if(vo.getCheckPeriod() == null){
+                            throw new BusinessException("检定周期不能为空");
+                        }
+                    }
+                    updateList.add(tempInfo);
+                }
+            }
+            // 执行更新操作和记录
+            updateListAndSaveChange(updateList);
+            return "总计更新:" + (updateList.size());
+        } catch (Exception e) {
+            throw new BusinessException(e.getMessage());
+        }
+    }
+
+    /**
+     * 更新和记录修改
+     * @param sbInfos
+     */
+    private void updateListAndSaveChange(List<SbInfo> sbInfos){
+        if(sbInfos.size() > 0){
+            for(SbInfo sbInfo : sbInfos){
+                SbInfoDTO afterDTO = BeanConverterUtil.copyObjectProperties(sbInfo,SbInfoDTO.class);
+                SbInfo old = mapper.selectByPrimaryKey(sbInfo.getId());
+                SbInfoDTO beforeDTO = BeanConverterUtil.copyObjectProperties(old,SbInfoDTO.class);
+                mapper.updateByPrimaryKeySelective(sbInfo);
+                String info = FieldComparedUtils.compareBean(beforeDTO,afterDTO);
+                packageLogInfo(info,sbInfo.getId()); // 保存修改记录
+            }
+        }
+    }
+
 
     private void setSbNum(LocalDateTime now, SbInfoWorkplaceVO vo) {
 

+ 51 - 24
platform-service/src/main/java/com/platform/service/sb/impl/SbMeasureLogServiceImpl.java

@@ -1,42 +1,24 @@
 package com.platform.service.sb.impl;
 
-import cn.hutool.core.collection.CollectionUtil;
 import com.github.pagehelper.PageHelper;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.exception.BusinessException;
-import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.exception.DeniedException;
 import com.platform.common.util.DateUtils;
-import com.platform.common.util.IdGeneratorUtils;
 import com.platform.common.util.ListUtils;
+import com.platform.common.util.StringUtils;
 import com.platform.dao.bean.MyPage;
-import com.platform.dao.dto.check.CheckJobDTO;
-import com.platform.dao.dto.check.CheckStandardDTO;
-import com.platform.dao.dto.part.PartInfoDTO;
 import com.platform.dao.dto.sb.SbMeasureLogDTO;
-import com.platform.dao.entity.check.CheckJob;
 import com.platform.dao.entity.check.CheckProjectStandardRelation;
-import com.platform.dao.entity.check.CheckStandard;
-import com.platform.dao.entity.check.CheckStandardParam;
-import com.platform.dao.entity.part.PartInfo;
 import com.platform.dao.entity.sb.SbInfo;
-import com.platform.dao.entity.sb.SbInfoMeasure;
 import com.platform.dao.entity.sb.SbMeasureLog;
 import com.platform.dao.entity.upms.SysFile;
-import com.platform.dao.enums.*;
-import com.platform.dao.mapper.check.CheckJobMapper;
-import com.platform.dao.mapper.check.CheckProjectStandardRelationMapper;
-import com.platform.dao.mapper.check.CheckStandardMapper;
-import com.platform.dao.mapper.check.CheckStandardParamMapper;
+import com.platform.dao.enums.SbUseType;
+import com.platform.dao.enums.SysFileTypeEnum;
 import com.platform.dao.mapper.sb.SbInfoMapper;
-import com.platform.dao.mapper.sb.SbInfoMeasureMapper;
 import com.platform.dao.mapper.sb.SbMeasureLogMapper;
-import com.platform.dao.mapper.upms.SysFileMapper;
-import com.platform.dao.vo.query.check.CheckStandardVO;
 import com.platform.dao.vo.query.sb.SbMeasureLogVO;
 import com.platform.service.base.impl.BaseServiceImpl;
-import com.platform.service.check.CheckStandardParamService;
-import com.platform.service.check.CheckStandardService;
-import com.platform.service.part.PartInfoService;
 import com.platform.service.sb.SbMeasureLogService;
 import com.platform.service.upms.SysFileService;
 import lombok.AllArgsConstructor;
@@ -44,9 +26,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import tk.mybatis.mapper.weekend.Weekend;
 
-import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -84,6 +64,53 @@ public class SbMeasureLogServiceImpl extends BaseServiceImpl<SbMeasureLogMapper,
         return mapper.selectList(record);
     }
 
+    @Override
+    public void saveBatchByDTO(SbMeasureLogDTO model) {
+        List<SbInfo> sbInfos = new ArrayList<>();
+        // 检定校验 1、是否有非计量设备 2 、是否有未设置检定周期设备
+        String info = validateMeasure(model.getSbIds(),sbInfos);
+        if(StringUtils.isNotBlank(info)){
+            throw new DeniedException(info);
+        }
+        SbInfo updInfo = null;
+        String serialNo = "B-"+DateUtils.dateToString(LocalDateTime.now(),DateUtils.PATTERNYMDHMS);
+        for(SbInfo sbInfo : sbInfos){
+            // 保存检定记录
+            model.setSbId(sbInfo.getId());
+            SbMeasureLog sbMeasureLog = super.saveModelByDTO(model);
+            // 保存文件
+            sysFileService.saveFile(sbMeasureLog.getId(), SysFileTypeEnum.Sb_MEASURE_IMGS.getValue(), model.getCheckImgList());
+            sysFileService.saveFile(sbMeasureLog.getId(), SysFileTypeEnum.Sb_MEASURE_FILES.getValue(), model.getCheckFileList());
+            // 修改设备信息
+            updInfo = new SbInfo();
+            updInfo.setId(sbInfo.getId());
+            updInfo.setCheckDate(model.getLastDate());
+            updInfo.setNextCheckDate(model.getLastDate().minusMonths(-sbInfo.getCheckPeriod()).minusDays(1));
+            updInfo.setZaiz(model.getName());// 检定单位
+            updInfo.setSbdh(serialNo);// 检定编号
+            updInfo.setRemark(model.getRemark());// 备注
+            updInfo.setDph(model.getRequirement());// 检定人
+            sbInfoMapper.updateByPrimaryKeySelective(updInfo);
+        }
+    }
+
+    private String validateMeasure(List<String> sbIds,List<SbInfo> sbInfos){
+        String info = "";
+        for(String sbId : sbIds){
+            SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(sbId);
+            if((!sbInfo.getUseType().equals(SbUseType.BGCL.getValue())) && (!sbInfo.getUseType().equals(SbUseType.TZSB.getValue()))){
+                info = "非计量和非特种的设备, 无需填报检定记录,设备名称【"+sbInfo.getName() + "】";
+                break;
+            }
+            if(sbInfo.getCheckPeriod() == null){
+                info = "检定设备的检定周期未设置,设备名称【"+sbInfo.getName() + "】";
+                break;
+            }
+            sbInfos.add(sbInfo);
+        }
+        return info;
+    }
+
     @Override
     public AbstractPageResultBean<SbMeasureLog> selectPageInfo(SbMeasureLogDTO record, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);