xiongchao 3 лет назад
Родитель
Сommit
ea175dba8a
24 измененных файлов с 601 добавлено и 29 удалено
  1. 13 1
      platform-dao/src/main/java/com/platform/dao/dto/check/CheckStandardDTO.java
  2. 49 0
      platform-dao/src/main/java/com/platform/dao/dto/check/CheckStandardSpareDTO.java
  3. 8 2
      platform-dao/src/main/java/com/platform/dao/entity/check/CheckStandard.java
  4. 45 0
      platform-dao/src/main/java/com/platform/dao/entity/check/CheckStandardSpare.java
  5. 1 1
      platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogDetailTypeEnum.java
  6. 4 1
      platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogTypeEnum.java
  7. 37 0
      platform-dao/src/main/java/com/platform/dao/mapper/check/CheckStandardSpareMapper.java
  8. 2 2
      platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java
  9. 4 0
      platform-dao/src/main/java/com/platform/dao/util/MessageTemplateUtil.java
  10. 65 0
      platform-dao/src/main/java/com/platform/dao/vo/query/check/CheckStandardSpareVO.java
  11. 15 0
      platform-dao/src/main/java/com/platform/dao/vo/query/check/CheckStandardVO.java
  12. 52 0
      platform-dao/src/main/resources/mapper/check/CheckStandardSpareMapper.xml
  13. 3 0
      platform-dao/src/main/resources/mapper/sb/SbInfoMapper.xml
  14. 2 1
      platform-dao/src/main/resources/mapper/sqarepartmanage/SparePartInfoMapper.xml
  15. 12 0
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbModelSpareBomController.java
  16. 3 3
      platform-rest/src/main/java/com/platform/rest/task/CheckJobTask.java
  17. 28 0
      platform-rest/src/main/java/com/platform/rest/task/CheckStandardTask.java
  18. 2 0
      platform-service/src/main/java/com/platform/service/check/CheckStandardService.java
  19. 35 0
      platform-service/src/main/java/com/platform/service/check/CheckStandardSpareService.java
  20. 22 2
      platform-service/src/main/java/com/platform/service/check/impl/CheckJobServiceImpl.java
  21. 143 16
      platform-service/src/main/java/com/platform/service/check/impl/CheckStandardServiceImpl.java
  22. 47 0
      platform-service/src/main/java/com/platform/service/check/impl/CheckStandardSpareServiceImpl.java
  23. 3 0
      platform-service/src/main/java/com/platform/service/sqarepartmanage/SparePartInfoService.java
  24. 6 0
      platform-service/src/main/java/com/platform/service/sqarepartmanage/impl/SparePartInfoServiceImpl.java

+ 13 - 1
platform-dao/src/main/java/com/platform/dao/dto/check/CheckStandardDTO.java

@@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
 import javax.persistence.Transient;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -37,6 +38,14 @@ public class CheckStandardDTO extends BaseDTO implements Serializable {
      * 设备id
      */
     private String sbId;
+    /**
+     * 上次实际执行日期
+     */
+    private LocalDate lastDate;
+    /**
+     * 下次预计执行日期
+     */
+    private LocalDate nextDate;
     /**
      * 设备名称
      */
@@ -179,5 +188,8 @@ public class CheckStandardDTO extends BaseDTO implements Serializable {
      * 保养手册
      */
     private List<SysFile> checkFileList;
-
+    /**
+     * 更换备件
+     */
+    private List<CheckStandardSpareDTO> detailList;
 }

+ 49 - 0
platform-dao/src/main/java/com/platform/dao/dto/check/CheckStandardSpareDTO.java

@@ -0,0 +1,49 @@
+package com.platform.dao.dto.check;
+
+import com.platform.common.bean.BaseDTO;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Description 用户与角色DTO
+ * @Author chenli
+ * @Date 2019-05-17 16:04:47
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class CheckStandardSpareDTO extends BaseDTO implements Serializable {
+    /**
+     * id
+     */
+    private String id;
+    /**
+     * 数量
+     */
+    private BigDecimal num;
+    /**
+     * 标准ID
+     */
+    private String checkId;
+    /**
+     * 标准ID列表
+     */
+    private List<String> checkIds;
+    /**
+     * 设备备件bom表ID
+     */
+    private String bomId;
+    /**
+     * 设备ID
+     */
+    private String sbId;
+    /**
+     * 备件ID
+     */
+    private String spareId;
+
+}

+ 8 - 2
platform-dao/src/main/java/com/platform/dao/entity/check/CheckStandard.java

@@ -1,6 +1,7 @@
 package com.platform.dao.entity.check;
 
 import com.platform.dao.entity.upms.SysFile;
+import com.platform.dao.vo.query.check.CheckStandardSpareVO;
 import lombok.Data;
 
 import javax.persistence.Id;
@@ -58,11 +59,11 @@ public class CheckStandard implements Serializable{
     /**
      * 上次实际执行日期
      */
-    //private LocalDate lastDate;
+    private LocalDate lastDate;
     /**
      * 下次预计执行日期
      */
-    //private LocalDate nextDate;
+    private LocalDate nextDate;
     /**
      * 周期类型: 参考数据字典
      */
@@ -158,4 +159,9 @@ public class CheckStandard implements Serializable{
      * 保养手册
      */
     private List<SysFile> checkFileList;
+
+    /**
+     * 保养标准关联备件
+     */
+    private List<CheckStandardSpareVO> detailList;
 }

+ 45 - 0
platform-dao/src/main/java/com/platform/dao/entity/check/CheckStandardSpare.java

@@ -0,0 +1,45 @@
+package com.platform.dao.entity.check;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Description 标准备件关联表
+ * @Author chenli
+ * @Date 2019-05-17 16:04:47
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@Table(name = "t_check_standard_spare")
+public class CheckStandardSpare implements Serializable {
+    /**
+     * id
+     */
+    private String id;
+    /**
+     * 数量
+     */
+    private BigDecimal num;
+    /**
+     * 标准ID
+     */
+    private String checkId;
+    /**
+     * 设备备件bom表ID
+     */
+    private String bomId;
+    /**
+     * 设备ID
+     */
+    private String sbId;
+    /**
+     * 备件ID
+     */
+    private String spareId;
+
+}

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

@@ -102,7 +102,7 @@ public enum WorkplaceBacklogDetailTypeEnum {
      * 采购验收提醒-物资
      */
     PURCHASE_WUZI_MESSAGE(502, "询价审批结果提醒"),
-    ;
+    CHECK_SPARE_WARN(1000, "备件不足提醒");
 
     private Integer value;
 

+ 4 - 1
platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogTypeEnum.java

@@ -71,8 +71,11 @@ public enum WorkplaceBacklogTypeEnum {
      * 采购验收提醒-物资
      */
     PURCHASE_WUZI_MESSAGE(502),
-    ;
 
+    /**
+     * 6个月内保养备件不足提醒
+     */
+    CHECK_SPARE_WARN(400) ;
     private Integer value;
 
 }

+ 37 - 0
platform-dao/src/main/java/com/platform/dao/mapper/check/CheckStandardSpareMapper.java

@@ -0,0 +1,37 @@
+package com.platform.dao.mapper.check;
+
+import com.platform.dao.config.MyMapper;
+import com.platform.dao.dto.check.CheckStandardSpareDTO;
+import com.platform.dao.entity.check.CheckStandardSpare;
+import com.platform.dao.vo.query.check.CheckStandardSpareVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description 保养与备件 mapper
+ * @Author chenli
+ * @Date 2019-05-17 16:04:47
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Component
+public interface CheckStandardSpareMapper extends MyMapper<CheckStandardSpare> {
+
+    /**
+     * 查询保养对应的备件列表
+     *
+     * @param checkId :
+     * @return :
+     */
+    List<CheckStandardSpareVO> selectVOListByCheckId(String checkId);
+
+    void updateBatch(List<CheckStandardSpare> updateDetailList);
+
+    /**
+     *  查询需要的备件列表
+     *
+     * @param dto
+     * @return
+     */
+    List<CheckStandardSpareVO> selectSpareWarn(CheckStandardSpareDTO dto);
+}

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

@@ -965,10 +965,10 @@ public class CustomExcelImportUtil {
         int type = 0;// 没有负责人的,1有
         if(sheet.getRow(4).getCell(10) != null && StringUtils.isNotBlank(sheet.getRow(4).getCell(10) .getStringCellValue())){
             type = 0;
-            sbNo = sheet.getRow(4).getCell(10).getStringCellValue();
+            sbNo = sheet.getRow(4).getCell(10).getStringCellValue().trim();
         }else{
             type = 1;
-            sbNo = sheet.getRow(4).getCell(13).getStringCellValue();
+            sbNo = sheet.getRow(4).getCell(13).getStringCellValue().trim();
         }
         StringBuffer error = new StringBuffer();
         LOGGER.info("文件行数:" + rowCounts);

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/util/MessageTemplateUtil.java

@@ -88,6 +88,10 @@ public class MessageTemplateUtil {
         return String.format("报修【%s】已超过%d小时未完成", id);
     }
 
+    public static String getSpareWarnNotic(String str, int num) {
+        return String.format("近6个月内有【%s】种备件不足,请注意:明细如下:" + System.getProperty("line.separator") + "【%s】", num, str);
+    }
+
     public static String getRepairCheck(String id) {
         return String.format("报修【%s】已完成,请验收", id);
     }

+ 65 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/check/CheckStandardSpareVO.java

@@ -0,0 +1,65 @@
+package com.platform.dao.vo.query.check;
+
+import com.platform.common.bean.BaseVO;
+import com.platform.common.validation.group.UpdateGroup;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Description 用户与角色实体类
+ * @Author chenli
+ * @Date 2019-05-17 16:04:47
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+public class CheckStandardSpareVO extends BaseVO implements Serializable {
+
+    /**
+     * id
+     */
+    private String id;
+    /**
+     * 数量
+     */
+    private BigDecimal num;
+    /**
+     * 库存数量
+     */
+    private BigDecimal storeNum;
+    /**
+     * 标准ID
+     */
+    private String checkId;
+    /**
+     * 设备备件bom表ID
+     */
+    private String bomId;
+    /**
+     * 设备ID
+     */
+    private String sbId;
+    /**
+     * 备件ID
+     */
+    private String spareId;
+    /**
+     * 备件名称
+     */
+    private String spareName;
+    /**
+     * 设备名称
+     */
+    private String sbName;
+    /**
+     * 规格型号:使用备件的sb_guige
+     */
+    private String ggxh;
+
+    @Override
+    public String toString(){
+        return this.spareName + "," + this.ggxh + "需要数量:" + this.num+",库存数量:" + this.storeNum + ";" + System.getProperty("line.separator");
+    }
+}

+ 15 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/check/CheckStandardVO.java

@@ -2,6 +2,7 @@ package com.platform.dao.vo.query.check;
 
 import com.platform.common.bean.BaseVO;
 import com.platform.common.bean.DataScope;
+import com.platform.dao.dto.check.CheckStandardSpareDTO;
 import com.platform.dao.entity.check.CheckStandardParam;
 import com.platform.dao.entity.upms.SysFile;
 import lombok.Data;
@@ -10,6 +11,7 @@ import lombok.experimental.Accessors;
 
 import javax.persistence.Transient;
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -87,6 +89,14 @@ public class CheckStandardVO extends BaseVO implements Serializable{
      * 设备部位Id
      */
     private String part;
+    /**
+     * 上次实际执行日期
+     */
+    private LocalDate lastDate;
+    /**
+     * 下次预计执行日期
+     */
+    private LocalDate nextDate;
     /**
      * 标准工时
      */
@@ -157,4 +167,9 @@ public class CheckStandardVO extends BaseVO implements Serializable{
      * 保养手册
      */
     private List<SysFile> checkFileList;
+
+    /**
+     * 更换备件
+     */
+    private List<CheckStandardSpareVO> detailList;
 }

+ 52 - 0
platform-dao/src/main/resources/mapper/check/CheckStandardSpareMapper.xml

@@ -0,0 +1,52 @@
+<?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.check.CheckStandardSpareMapper">
+
+    <select id="selectVOListByCheckId" parameterType="java.lang.String"
+            resultType="com.platform.dao.vo.query.check.CheckStandardSpareVO">
+        select
+            relation.*,
+            spare.name spareName,
+            spare.no spareNo,
+            spare.id as spareId,
+            spare.ggxh
+        from t_check_standard_spare relation
+                 LEFT JOIN t_spare_part_info spare on relation.spare_id = spare.id
+        where relation.check_id = #{id}
+    </select>
+
+    <select id="selectSpareWarn" parameterType="com.platform.dao.dto.check.CheckStandardSpareDTO"
+            resultType="com.platform.dao.vo.query.check.CheckStandardSpareVO">
+        SELECT
+            cs.spare_id,
+            cs.check_id,
+            SUM( cs.num ) num,
+            spare.NAME spareName,
+            spare.NO,
+            spare.ggxh,
+            store.num storeNum
+        FROM
+        t_check_standard_spare cs
+        LEFT JOIN t_spare_part_info spare ON cs.spare_id = spare.id
+        LEFT JOIN t_spare_store store ON cs.spare_id = store.spare_id
+        where
+        <if test="checkIds != null and checkIds.size > 0">
+            cs.check_id in
+            <foreach item="item" index="index" collection="checkIds" open="(" close=")" separator=",">
+            #{item}
+            </foreach>
+        </if>
+        GROUP BY
+            cs.spare_id
+    </select>
+
+    <update id="updateBatch" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+            update t_check_standard_spare
+            <set>
+                num=#{item.num}
+            </set>
+            where id = #{item.id}
+        </foreach>
+    </update>
+</mapper>

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

@@ -189,6 +189,9 @@ sb.scrap_user_name
             sb.no like concat('%',#{keyword},'%')
             )
         </if>
+        <if test="zbh != null and zbh!=''">
+            and sb.zbh like concat('%',#{zbh},'%')
+        </if>
         <if test="likeDeptCode != null and likeDeptCode!=''">
             and sdDept.dept_code like concat(#{likeDeptCode},'%')
         </if>

+ 2 - 1
platform-dao/src/main/resources/mapper/sqarepartmanage/SparePartInfoMapper.xml

@@ -200,7 +200,8 @@
                tcpsr.id as id,
                tcpsr.period,
                tcpsr.period_type as periodType,
-               tcpsr.model_id as modelId, tcpsr.num as num,
+               tcpsr.model_id as modelId,
+               tcpsr.sb_id as sbId,
                part.name as sbPartName
         from t_spare_part_info spare
         left join t_sb_model_spare_bom tcpsr on tcpsr.spare_id=spare.id

+ 12 - 0
platform-rest/src/main/java/com/platform/rest/controller/sb/SbModelSpareBomController.java

@@ -254,6 +254,18 @@ public class SbModelSpareBomController {
         return new R<>(list);
     }
 
+    /**
+     * 设备关联备件
+     *
+     * @param sbId 设备型号bom标准关联DTO
+     * @return R
+     */
+    @SysLog("分页查询设备关联的备件bom")
+    @GetMapping("sbpage/{sbId}")
+    public R selectSpareInfoListBySbId(@PathVariable String sbId, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
+        return new R<>(sparePartInfoService.selectSpareInfoPageListBySbId(sbId, pageNum, pageSize));
+    }
+
     /**
      * 关联某个备件关联的设备型号
      *

+ 3 - 3
platform-rest/src/main/java/com/platform/rest/task/CheckJobTask.java

@@ -19,7 +19,7 @@ public class CheckJobTask {
     private CheckJobService checkJobService;
 
     /**
-     * 点检任务生成
+     * 点检任务生成-废弃
      */
     public void genSpotCheckJob () {
         checkJobService.genTask(1);
@@ -34,14 +34,14 @@ public class CheckJobTask {
     }
 
     /**
-     * 保养任务生成
+     * 保养任务生成-废弃
      */
     public void genPollingCheckJob () {
         checkJobService.genTask(2);
     }
 
     /**
-     * 润滑任务生成
+     * 润滑任务生成-废弃
      */
     public void genRunCheckJob () {
         checkJobService.genTask(3);

+ 28 - 0
platform-rest/src/main/java/com/platform/rest/task/CheckStandardTask.java

@@ -0,0 +1,28 @@
+package com.platform.rest.task;
+
+import com.platform.service.check.CheckJobService;
+import com.platform.service.check.CheckStandardService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description 点巡检任务处理
+ * @Author liuyu
+ * @Date 2020-05-09 16:40:01
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Slf4j
+@Component("checkStandardTask")
+@AllArgsConstructor
+public class CheckStandardTask {
+    private CheckStandardService checkStandardService;
+
+    /**
+     * 备件需求预警:以年为单位保养才需要
+     */
+    public void genSpareWarn () {
+        checkStandardService.genSpareWarnTask(2);
+    }
+
+}

+ 2 - 0
platform-service/src/main/java/com/platform/service/check/CheckStandardService.java

@@ -49,4 +49,6 @@ public interface CheckStandardService extends IBaseService<CheckStandard, CheckS
     String copyFormSb(CheckStandardDTO model);
 
     String importListByAdd(MultipartFile file);
+
+    void genSpareWarnTask(int type);
 }

+ 35 - 0
platform-service/src/main/java/com/platform/service/check/CheckStandardSpareService.java

@@ -0,0 +1,35 @@
+package com.platform.service.check;
+
+
+import com.platform.dao.dto.check.CheckStandardSpareDTO;
+import com.platform.dao.entity.check.CheckStandardSpare;
+import com.platform.dao.vo.query.check.CheckStandardSpareVO;
+import com.platform.service.base.IBaseService;
+import tk.mybatis.mapper.weekend.Weekend;
+
+import java.util.List;
+
+/**
+ * @Description 用户与角色 service
+ * @Author chenli
+ * @Date 2019-05-17 16:04:47
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+public interface CheckStandardSpareService extends IBaseService<CheckStandardSpare, CheckStandardSpareDTO> {
+
+    void deleteByExample(Weekend<CheckStandardSpare> detailWeekend);
+
+    void insertListforComplex(List<CheckStandardSpare> addDetailList);
+
+    void updateBatch(List<CheckStandardSpare> updateDetailList);
+
+    /**
+     * 查询保养对应的备件列表
+     *
+     * @param checkId :
+     * @return :
+     */
+    List<CheckStandardSpareVO> selectVOListByCheckId(String checkId);
+
+    CheckStandardSpare selectOneByExample(Weekend<CheckStandardSpare> weekend);
+}

+ 22 - 2
platform-service/src/main/java/com/platform/service/check/impl/CheckJobServiceImpl.java

@@ -519,7 +519,7 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
         }
         endDate = DateUtils.plus(endDate, -1, ChronoUnit.DAYS);
         checkJob.setStartTime(endDate);
-
+        checkStandard.setNextDate(endDate);
     }
 
     @Override
@@ -538,6 +538,11 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
         return vo;
     }
 
+    /**
+     * 接收任务:记录接收任务时间,计算完成耗时
+     *
+     * @param id
+     */
     @Override
     public void executeJob(Object id) {
         CheckJob checkJob = mapper.selectByPrimaryKey(id);
@@ -584,19 +589,34 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
 
         // 非台时和公里,则需要生成下一次的任务
         CheckStandard checkStandard = standardMapper.selectByPrimaryKey(checkJob.getStandardId());
+        CheckJob nextCheckJob = BeanConverterUtil.copyObjectProperties(checkJob,CheckJob.class);
         if(!CheckPlanPeriodTypeEnum.MILES.getValue().equals(checkStandard.getPeriodType()) && !CheckPlanPeriodTypeEnum.TAISHI.getValue().equals(checkStandard.getPeriodType()) ){
-            CheckJob nextCheckJob = BeanConverterUtil.copyObjectProperties(checkJob,CheckJob.class);
             nextCheckJob.setId(IdGeneratorUtils.getObjectId());
             calcTime(nextCheckJob,now,checkStandard);
             mapper.insert(nextCheckJob);
         }
+
+        // 更新标准的上次执行时间和下次执行时间
+        checkStandard.setLastDate(now.toLocalDate());
+        checkStandard.setNextDate(nextCheckJob.getStartTime());
+        standardMapper.updateByPrimaryKey(checkStandard);
     }
 
+    /**
+     * 批量接收任务
+     *
+     * @param ids
+     */
     @Override
     public void executeJobBatch(List<String> ids) {
         ids.forEach(id->this.executeJob(id));
     }
 
+    /**
+     * 批量完成任务
+     *
+     * @param ids
+     */
     @Override
     public void finishJobBatch(List<String> ids) {
         ids.forEach(id->{

+ 143 - 16
platform-service/src/main/java/com/platform/service/check/impl/CheckStandardServiceImpl.java

@@ -1,5 +1,6 @@
 package com.platform.service.check.impl;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.github.pagehelper.PageHelper;
 import com.platform.common.exception.BusinessException;
@@ -8,38 +9,37 @@ 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.check.CheckStandardParamDTO;
+import com.platform.dao.dto.check.CheckStandardSpareDTO;
 import com.platform.dao.dto.part.PartInfoDTO;
 import com.platform.dao.dto.sb.SbInfoDTO;
-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.dto.store.InStoreDetailDTO;
+import com.platform.dao.entity.check.*;
 import com.platform.dao.entity.maintain.MaintainProjectStandardRelation;
 import com.platform.dao.entity.maintain.MaintainStandardParam;
 import com.platform.dao.entity.part.PartInfo;
+import com.platform.dao.entity.repair.RepairApplicationForm;
 import com.platform.dao.entity.sb.SbInfo;
 import com.platform.dao.entity.sb.SbType;
 import com.platform.dao.entity.sqarepartmanage.SparePartInfo;
 import com.platform.dao.entity.store.InStoreDetail;
 import com.platform.dao.entity.upms.SysFile;
 import com.platform.dao.entity.upms.SysUser;
-import com.platform.dao.enums.CheckJobStatusEnum;
-import com.platform.dao.enums.CheckPlanPeriodTypeEnum;
-import com.platform.dao.enums.SysFileTypeEnum;
-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.*;
+import com.platform.dao.mapper.check.*;
 import com.platform.dao.mapper.maintain.MaintainProjectStandardRelationMapper;
 import com.platform.dao.mapper.part.PartInfoMapper;
 import com.platform.dao.mapper.sb.SbInfoMapper;
 import com.platform.dao.mapper.upms.SysFileMapper;
 import com.platform.dao.mapper.upms.SysUserMapper;
 import com.platform.dao.util.CustomExcelImportUtil;
+import com.platform.dao.util.MessageTemplateUtil;
+import com.platform.dao.vo.query.check.CheckStandardSpareVO;
 import com.platform.dao.vo.query.check.CheckStandardVO;
 import com.platform.dao.vo.sb.SbInfoVO;
 import com.platform.service.check.CheckStandardParamService;
 import com.platform.service.check.CheckStandardService;
+import com.platform.service.check.CheckStandardSpareService;
+import com.platform.service.event.WorkplaceBacklogEvent;
 import com.platform.service.part.PartInfoService;
 import org.springframework.stereotype.Service;
 import com.platform.service.base.impl.BaseServiceImpl;
@@ -55,6 +55,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -70,6 +71,8 @@ public class CheckStandardServiceImpl extends BaseServiceImpl<CheckStandardMappe
     private CheckStandardParamService paramService;
     private CheckProjectStandardRelationMapper relationMapper;
     private CheckStandardParamMapper paramMapper;
+    private CheckStandardSpareMapper spareMapper;
+    private CheckStandardSpareService spareService;
     private CheckJobMapper checkJobMapper;
     private PartInfoService partInfoService;
     private final SysFileMapper sysFileMapper;
@@ -140,6 +143,14 @@ public class CheckStandardServiceImpl extends BaseServiceImpl<CheckStandardMappe
         model.setNo(IdGeneratorUtils.getCheckStandardNo(++count));
         CheckStandard checkStandard = super.saveModelByDTO(model);
         this.saveFile(model);
+
+        // 保存备件
+        List<CheckStandardSpareDTO> paramList = model.getDetailList();
+        paramList.forEach(item -> {
+            item.setCheckId(checkStandard.getId());
+            item.setId(IdGeneratorUtils.getObjectId());
+        });
+        spareService.saveModelListByDTO(paramList);
         // 保存参数
        /* List<CheckStandardParamDTO> paramList = model.getParamList();
         paramList.forEach(item -> {
@@ -160,10 +171,48 @@ public class CheckStandardServiceImpl extends BaseServiceImpl<CheckStandardMappe
         }
 
         super.modModelByDTO(model);
-        // 删掉参数后插入
-        Weekend<CheckStandardParam> weekend = new Weekend<>(CheckStandardParam.class);
-        weekend.weekendCriteria().andEqualTo(CheckStandardParam::getStandardId, model.getId());
-        paramMapper.deleteByExample(weekend);
+
+        // 先删后插,前端删除的不存在与ids里面,说明被删掉了,需要删除
+        List<CheckStandardSpareDTO> detailList = model.getDetailList();
+        Weekend<CheckStandardSpare> detailWeekend = new Weekend<>(CheckStandardSpare.class);
+        List<String> ids = detailList.stream().map(CheckStandardSpareDTO::getId).collect(Collectors.toList());
+        ids = ids.stream().filter(item -> StringUtils.isNotBlank(item)).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(ids) && ids.size()>0) {
+            detailWeekend.weekendCriteria().andNotIn(CheckStandardSpare::getId, ids);
+            spareService.deleteByExample(detailWeekend);
+        }else{
+            // 全部刪除
+            detailWeekend.weekendCriteria().andEqualTo(CheckStandardSpare::getCheckId, model.getId());
+            spareService.deleteByExample(detailWeekend);
+        }
+        // 新增或者更新备件
+        List<CheckStandardSpare> updateDetailList = new ArrayList<CheckStandardSpare>();
+        List<CheckStandardSpare> addDetailList = new ArrayList<CheckStandardSpare>();
+
+        for(CheckStandardSpareDTO detail:detailList) {
+            if(ObjectUtil.isNull(detail.getId())){
+                detail.setCheckId(model.getId());
+                CheckStandardSpare realDetail = new CheckStandardSpare();
+                realDetail = BeanConverterUtil.copyObjectProperties(detail, CheckStandardSpare.class);
+                realDetail.setId(IdGeneratorUtils.getObjectId());
+                realDetail.setCheckId(model.getId());
+                addDetailList.add(realDetail);
+            }else{
+                Weekend<CheckStandardSpare> weekend = new Weekend<>(CheckStandardSpare.class);
+                weekend.weekendCriteria().andEqualTo(CheckStandardSpare::getId, detail.getId());
+                CheckStandardSpare realDetail = spareService.selectOneByExample(weekend);
+                realDetail.setNum(detail.getNum());
+                updateDetailList.add(realDetail);
+            }
+        };
+
+        if(!CollectionUtils.isEmpty(addDetailList)){
+            spareService.insertListforComplex(addDetailList);
+        }
+        if(!CollectionUtils.isEmpty(updateDetailList)){
+            spareService.updateBatch(updateDetailList);
+        }
+
         this.saveFile(model);
         // 保存参数
   /*      List<CheckStandardParamDTO> paramList = model.getParamList();
@@ -224,6 +273,10 @@ public class CheckStandardServiceImpl extends BaseServiceImpl<CheckStandardMappe
         });
         checkStandard.setCheckImgList(checkImgList);
         checkStandard.setCheckFileList(checkFileList);
+
+        // 备件列表
+        List<CheckStandardSpareVO> spareList = spareService.selectVOListByCheckId(checkStandard.getId());
+        checkStandard.setDetailList(spareList);
         return checkStandard;
     }
 
@@ -360,7 +413,7 @@ public class CheckStandardServiceImpl extends BaseServiceImpl<CheckStandardMappe
                 weekendCriteria.andEqualTo(SbInfo::getNo, fileSbNo).orEqualTo(SbInfo::getZbh, fileSbNo);
                 SbInfo sbInfo = sbInfoMapper.selectOneByExample(weekend);
                 if(sbInfo == null){
-                    throw new BusinessException("查不到设备,请确保编号正确" + ", 导入文件中的号:" + fileSbNo);
+                    throw new BusinessException("新号或者旧号均查不到,请确保编号正确" + ", 导入文件中的号:" + fileSbNo);
                 }
                 List<CheckStandard> addItems = new ArrayList<CheckStandard>();
                 List<SysUser> users = sysUserMapper.selectAll();
@@ -406,4 +459,78 @@ public class CheckStandardServiceImpl extends BaseServiceImpl<CheckStandardMappe
             throw new BusinessException(e.getMessage());
         }
     }
+
+    /**
+     * 查询备件预警
+     *
+     * @param type
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void genSpareWarnTask(int type) {
+        CheckStandardDTO checkStandardDTO = new CheckStandardDTO();
+        checkStandardDTO.setPeriodType(CheckPlanPeriodTypeEnum.YEAR.getValue());
+        List<CheckStandard> checkStandardList = super.getModelListByDTO(checkStandardDTO);
+
+        // 查询近六个月待执行的任务列表。
+        LocalDate now = LocalDate.now();
+        LocalDate afterSixMonth = DateUtils.plus(now, 6, ChronoUnit.MONTHS);
+        Weekend<CheckJob> weekend = new Weekend<>(CheckJob.class);
+        weekend.weekendCriteria().andNotEqualTo(CheckJob::getStatus, CheckJobStatusEnum.FINISHED.getValue())
+        .andBetween(CheckJob::getStartTime, now, afterSixMonth);
+        List<CheckJob> checkJobs = checkJobMapper.selectByExample(weekend);
+
+        // 获取未执行的标准id,不能用stream获取id列表,会覆盖重复的标准id(不会重复,因为一个标准对应一个任务。)
+        if(CollectionUtil.isNotEmpty(checkJobs)){
+            List<String> ids = checkJobs.stream().map(CheckJob::getStandardId).collect(Collectors.toList());
+            ids = ids.stream().filter(item -> StringUtils.isNotBlank(item)).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(ids) && ids.size()>0) {
+                CheckStandardSpareDTO dto = new CheckStandardSpareDTO();
+                dto.setCheckIds(ids);
+                List<CheckStandardSpareVO> voList = spareMapper.selectSpareWarn(dto);
+                List<CheckStandardSpareVO> warnList = new ArrayList<CheckStandardSpareVO>();
+                if(CollectionUtil.isNotEmpty(voList)){
+                    for(CheckStandardSpareVO vo: voList){
+                        if(vo.getNum().compareTo(vo.getStoreNum())>0){
+                            warnList.add(vo);
+                        }
+                    }
+                    if(CollectionUtil.isNotEmpty(warnList)){
+                        List<SysUser> users = getUsersByIdentity(Arrays.asList(new Integer[]{SysUserIdentityType.WXZG.getValue()}));
+                        sendOverTimeNotice(users, warnList);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 根据身份获取用户
+     *
+     * @param identities
+     * @return
+     */
+    private List<SysUser> getUsersByIdentity(List<Integer> identities) {
+        Weekend<SysUser> w = new Weekend<>(SysUser.class);
+        w.weekendCriteria().andIn(SysUser::getIdentityType, identities);
+        return sysUserMapper.selectByExample(w);
+    }
+
+    /**
+     * 备件不足消息推送
+     *
+     * @param users
+     * @param tasks
+     */
+    private void sendOverTimeNotice(List<SysUser> users, List<CheckStandardSpareVO> tasks) {
+        if (CollectionUtil.isNotEmpty(users) && CollectionUtil.isNotEmpty(tasks)) {
+            List<String> userIds = users.stream().map(item -> item.getUserId()).collect(Collectors.toList());
+            List<String> mails = users.stream().map(item -> item.getEmail()).collect(Collectors.toList());
+            StringBuffer context = new StringBuffer();
+            tasks.forEach(item -> context.append(item.toString()));
+            SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.CHECK_SPARE_WARN.getValue(), WorkplaceBacklogDetailTypeEnum.CHECK_SPARE_WARN.getValue(),
+                    null, MessageTemplateUtil.getSpareWarnNotic(context.toString(), tasks.size()),
+                    null, userIds, mails));
+        }
+    }
 }

+ 47 - 0
platform-service/src/main/java/com/platform/service/check/impl/CheckStandardSpareServiceImpl.java

@@ -0,0 +1,47 @@
+package com.platform.service.check.impl;
+
+import com.platform.dao.dto.check.CheckStandardSpareDTO;
+import com.platform.dao.entity.check.CheckStandardSpare;
+import com.platform.dao.mapper.check.CheckStandardSpareMapper;
+import com.platform.dao.vo.query.check.CheckStandardSpareVO;
+import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.check.CheckStandardSpareService;
+import org.springframework.stereotype.Service;
+import tk.mybatis.mapper.weekend.Weekend;
+
+import java.util.List;
+
+/**
+ * @Description 用户与角色 service 实现类
+ * @Author chenli
+ * @Date 2019-05-17 16:04:47
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Service("checkStandardSpareService")
+public class CheckStandardSpareServiceImpl extends BaseServiceImpl<CheckStandardSpareMapper, CheckStandardSpare, CheckStandardSpareDTO> implements CheckStandardSpareService {
+    @Override
+    public void deleteByExample(Weekend<CheckStandardSpare> detailWeekend) {
+        mapper.deleteByExample(detailWeekend);
+    }
+
+    @Override
+    public void insertListforComplex(List<CheckStandardSpare> addDetailList) {
+        mapper.insertListforComplex(addDetailList);
+    }
+
+    @Override
+    public void updateBatch(List<CheckStandardSpare> updateDetailList) {
+        mapper.updateBatch(updateDetailList);
+    }
+
+    @Override
+    public List<CheckStandardSpareVO> selectVOListByCheckId(String checkId) {
+        return mapper.selectVOListByCheckId(checkId);
+    }
+
+    @Override
+    public CheckStandardSpare selectOneByExample(Weekend<CheckStandardSpare> weekend) {
+        return mapper.selectOneByExample(weekend);
+    }
+
+}

+ 3 - 0
platform-service/src/main/java/com/platform/service/sqarepartmanage/SparePartInfoService.java

@@ -1,5 +1,6 @@
 package com.platform.service.sqarepartmanage;
 
+import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.dao.dto.sqarepartmanage.SparePartInfoDTO;
 import com.platform.dao.entity.sqarepartmanage.SparePartInfo;
 import com.platform.dao.vo.query.sparepartmanage.SparePartInfoVO;
@@ -54,4 +55,6 @@ public interface SparePartInfoService extends IBaseService<SparePartInfo, SpareP
     void updateQrCode(SparePartInfoDTO sbInfoDTO);
 
     List<SparePartInfoVO> selectSpareInfoListBySbId(String sbId);
+
+    AbstractPageResultBean<SparePartInfoVO> selectSpareInfoPageListBySbId(String sbId, int pageNum, int pageSize);
 }

+ 6 - 0
platform-service/src/main/java/com/platform/service/sqarepartmanage/impl/SparePartInfoServiceImpl.java

@@ -99,6 +99,12 @@ public class SparePartInfoServiceImpl extends BaseServiceImpl<SparePartInfoMappe
         return mapper.selectSpareInfoListBySbId(sbId);
     }
 
+    @Override
+    public AbstractPageResultBean<SparePartInfoVO> selectSpareInfoPageListBySbId(String sbId, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectSpareInfoListBySbId(sbId));
+    }
+
     @Override
     public List<SparePartInfo> getModelListByDTO(SparePartInfoDTO sparePartInfoDTO) {
         if(sparePartInfoDTO.getTypeId() != null){