Forráskód Böngészése

Merge remote-tracking branch 'origin/mode-min-unit' into mode-min-unit

fangpy 11 hónapja
szülő
commit
72cb04254d

+ 68 - 14
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -26,7 +26,6 @@ import com.rongwei.safecommon.utils.CXCommonUtils;
 import com.rongwei.safecommon.utils.SaveConstans;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,7 +42,6 @@ import static com.rongwei.bscommon.sys.service.impl.ApsProductionOrderServiceImp
 import static com.rongwei.bscommon.sys.utils.ApsUtils.addNewConflictsDesc;
 import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMDHMS;
 import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE;
-import static com.rongwei.safecommon.utils.SaveConstans.JobStatus.JOBSTATUS_TO_BE_START;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
 import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
@@ -352,17 +350,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 .set(ApsBlankOrderDo::getLockmark, LOCKMARK_N));
 
         // 解锁该坯料计划所有作业明细,设置是否锁定=否
-        boolean bool2 = apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                .eq(ApsProcessOperationProcessEquDo::getBlankid, blankOrderId)
-                .set(ApsProcessOperationProcessEquDo::getLockmark, LOCKMARK_N));
+        boolean bool2 = apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                .eq(ApsProcessOperationDo::getBlankid, blankOrderId)
+                .set(ApsProcessOperationDo::getLockmark, LOCKMARK_N));
 
         if (bool1 && bool2) {
-            //重新排程
-            this.apsReScheduling();
-            R r = new R();
-            r.setCode("200");
-            r.setMsg("正在插单重排,并已自动备份排程结果,如果重排结果不满意,可以恢复排程结果");
-            return r;
+            return R.ok();
         } else {
             return R.error();
         }
@@ -1900,7 +1893,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             apsProcessOutputProductDo.setBlankid(apsBlankOrderDo.getId());
             apsProcessOutputProductDo.setTenantid(tenantId);
         }
-        apsProcessOutputProductService.saveOrUpdateBatch(apsProcessOutputProductDoList);
+        if (ObjectUtil.isNotEmpty(apsProcessOutputProductDoList)) {
+            apsProcessOutputProductService.saveOrUpdateBatch(apsProcessOutputProductDoList);
+        }
 
         //如果在制品不为空,并且为新增备料
         if (ObjectUtil.isNotEmpty(req.getProgressId()) && apsBlankOrderDo.getPreparematerial().equals("是")) {
@@ -1981,6 +1976,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     }
 
     public R checkBlankOrder(CheckAndSaveOrUpdateBlankReq req, int j) {
+
+        //校验坯料计划的必填项
+        R checkRes = checkBlankMustWrite(req);
+        if (!checkRes.getCode().equals("200")) {
+            return R.error("第" + j + "个坯料计划 " + checkRes.getMsg());
+        }
+
         //获取校验等级
         Integer checkLevel = req.getCheckLevel();
         //获取坯料计划内容
@@ -2265,6 +2267,58 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return R.ok();
     }
 
+    private R checkBlankMustWrite(CheckAndSaveOrUpdateBlankReq req) {
+        ApsBlankOrderDo apsBlankOrderDo = req.getApsBlankOrderDo();
+        List<ApsProcessOutputProductDo> apsProcessOutputProductDoList = req.getApsProcessOutputProductDoList();
+
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getBlanknumber())) {
+            return R.error("坯料计划编号不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getMaterialname())) {
+            return R.error("物料名称不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getBlanktype())) {
+            return R.error("坯料类型不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getProducttype())) {
+            return R.error("产品类型不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getAlloy())) {
+            return R.error("合金不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getThickness())) {
+            return R.error("厚度不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getProwidth())) {
+            return R.error("宽度不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getSinglerollweight())) {
+            return R.error("单卷重不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getNumberunit())) {
+            return R.error("数量单位不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getRollnum())) {
+            return R.error("卷数不能为空");
+        }
+        if (ObjectUtil.isEmpty(apsBlankOrderDo.getBlankappearance())) {
+            return R.error("坯料外观类型不能为空");
+        }
+        if (ObjectUtil.isNotEmpty(apsProcessOutputProductDoList)) {
+            for (ApsProcessOutputProductDo apsProcessOutputProductDo : apsProcessOutputProductDoList) {
+                if (ObjectUtil.isEmpty(apsProcessOutputProductDo.getProducttype())
+                        || ObjectUtil.isEmpty(apsProcessOutputProductDo.getOutputonerollweigth())
+                        || ObjectUtil.isEmpty(apsProcessOutputProductDo.getPlanoutputorderroll())
+                        || ObjectUtil.isEmpty(apsProcessOutputProductDo.getHadrollcount())) {
+                    return R.error("输出成品的必填项未填");
+                }
+            }
+        } else {
+            return R.error("输出成品必填");
+        }
+        return R.ok();
+    }
+
     @Override
     @Transactional
     public R removeBlankOrder(ApsBlankOrderDo req) {
@@ -2576,8 +2630,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         // 更新数据
         this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getId, apsBlankOrderDo.getId())
                 .set(BaseDo::getDeleted, 0)
-                .set(ApsBlankOrderDo::getScheduledatestart,startDate)
-                .set(ApsBlankOrderDo::getScheduledateend,startDate)
+                .set(ApsBlankOrderDo::getScheduledatestart, startDate)
+                .set(ApsBlankOrderDo::getScheduledateend, startDate)
                 .set(apsBlankOrderDo.getPromisedatestart() == null, ApsBlankOrderDo::getPromisedatestart, timeAddHour(startDate, 48))
                 .set(apsBlankOrderDo.getPromisedateend() == null, ApsBlankOrderDo::getPromisedateend, timeAddHour(endDate, 48)));
         apsBlankOrderDo.setPromisedatestart(timeAddHour(startDate, 48));

+ 71 - 50
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java

@@ -1,7 +1,6 @@
 package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.StopWatch;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquDao;
@@ -9,18 +8,15 @@ import com.rongwei.bscommon.sys.dao.ApsReportRecordsDao;
 import com.rongwei.bscommon.sys.service.ApsProcessOperationBackupService;
 import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
 import com.rongwei.bscommon.sys.service.GanttService;
-import com.rongwei.bsentity.domain.ApsProcessOperationBackupDo;
 import com.rongwei.bsentity.domain.ApsProcessOperationDo;
 import com.rongwei.bsentity.vo.GanttVos;
 import com.rongwei.bsentity.vo.ProcessOutputAndInputNumber;
 import com.rongwei.bsentity.vo.ScheduleGanttVo;
 import com.rongwei.commonservice.service.RedisService;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
-import com.rongwei.rwcommon.base.BaseDo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.base.exception.CustomException;
 import com.rongwei.safecommon.utils.CXCommonUtils;
-import com.rongwei.safecommon.utils.SaveConstans;
 import org.apache.commons.lang.StringUtils;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -65,14 +61,26 @@ public class GanttServiceImpl implements GanttService {
     public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     public static final String DEFAULT_TYPE = "project";
     public static final String DEFAULT_RENDER = "split";
-    public static final String SCHEDULING_STR = "%s-正在排程 %s";
-    public static final String SCHEDULING_TO_BE_PUBLISHED_STR = "%s-排程结束待发布";
+    public static final String SCHEDULING_STR = "%s-%s %s";
     public static final String DEFAULT_SPLIT = "-;-";
-    public static final Map<String,String> GANTT_PROCESS_STATUS_MAP=new HashMap<String,String>(){{
-        put(JOBSTATUS_TO_BE_START,TO_BE_STARTED );
-        put(JOBSTATUS_TO_BE_STARTING,PROCESSING);
-        put(JOBSTATUS_TO_BE_END,COMPLETED);
+    public static final Map<String, String> GANTT_PROCESS_STATUS_MAP = new HashMap<String, String>() {{
+        put(JOBSTATUS_TO_BE_START, TO_BE_STARTED);
+        put(JOBSTATUS_TO_BE_STARTING, PROCESSING);
+        put(JOBSTATUS_TO_BE_END, COMPLETED);
     }};
+    public static final Map<String, Integer> NUM_MAP = new HashMap<String, Integer>() {{
+        put("一", 1);
+        put("二", 2);
+        put("三", 3);
+        put("四", 4);
+        put("五", 5);
+        put("六", 6);
+        put("七", 7);
+        put("八", 8);
+        put("九", 9);
+        put("十", 10);
+    }};
+
 
     private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
     @Autowired
@@ -102,7 +110,7 @@ public class GanttServiceImpl implements GanttService {
     public R getListByCondition(Date startDate, Date endDate, String factoryId,
                                 List<String> workShopIdList, List<String> orderNoList,
                                 List<String> productionLineId, List<String> equId,
-                                String productionLineName, String equName,String blankNumber) {
+                                String productionLineName, String equName, String blankNumber) {
         if (endDate == null && startDate != null) {
             List<Date> searchDateList = getSearchDate(startDate);
             startDate = searchDateList.get(0);
@@ -112,7 +120,7 @@ public class GanttServiceImpl implements GanttService {
         stopWatch.start();
         List<GanttVos> apsProcessOperationProcessEquDos = apsProcessOperationProcessEquDao.getGanttDataList(
                 startDate, endDate, factoryId, workShopIdList, orderNoList,
-                null, productionLineId, equId, null, productionLineName, equName,blankNumber);
+                null, productionLineId, equId, null, productionLineName, equName, blankNumber);
         stopWatch.stop();
         log.error("甘特图查询用时:{}", stopWatch.getTotalTimeSeconds());
         StopWatch stopWatch1 = new StopWatch();
@@ -147,34 +155,29 @@ public class GanttServiceImpl implements GanttService {
         log.debug("判断工厂:{}是否正在排程", factoryId);
         RLock rLock = redissonClient.getLock(factoryId);
         log.debug("是否正在排程:{}", rLock.isLocked());
+        SysUserVo sysUserVo;
+        try {
+            sysUserVo = (SysUserVo) redisService.getRedisCatchObj("apsUser-" + factoryId);
+        } catch (Exception e) {
+            log.error("获取当前排程用户失败,原因:{}", e.toString());
+            return R.error("获取排程用户失败,请联系管理员");
+        }
+        if (sysUserVo == null) {
+            log.error("无法获取当前排程用户信息");
+            return R.ok("");
+        }
+        String returnMsg="";
         //正在排程直接返回
         if (rLock.isLocked()) {
-            try {
-                SysUserVo sysUserVo = (SysUserVo) redisService.getRedisCatchObj("apsUser-" + factoryId);
-                String returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(),"");
-                if(StringUtils.isNotBlank(sysUserVo.getRoption())){
-                    returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(),"排程异常:"+sysUserVo.getRoption());
-                }
-                return R.ok(returnMsg);
-            } catch (Exception e) {
-                log.error("获取当前排程用户失败,原因:{}", e.toString());
-                return R.error("获取排程用户失败,请联系管理员");
+            returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(), "正在排程", "");
+        } else {
+            if (StringUtils.isNotBlank(sysUserVo.getRoption())) {
+                returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(), ":" + sysUserVo.getRoption());
+            } else {
+                returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(), "排程结束", "");
             }
-
         }
-        // 判断是否存在备份信息
-        List<ApsProcessOperationBackupDo> backUpInfo = apsProcessOperationBackupService.list(new LambdaQueryWrapper<ApsProcessOperationBackupDo>()
-                .eq(BaseDo::getDeleted, 0).eq(ApsProcessOperationBackupDo::getTenantid, factoryId));
-        if (backUpInfo.isEmpty()) {
-            log.debug("不存在排程备份信息");
-            // 不存在备份信息 直接返回
-            return R.ok("");
-        }
-        ApsProcessOperationBackupDo backupDo = backUpInfo.stream()
-                .filter(info -> StringUtils.isNotBlank(info.getBackupuser()))
-                .findFirst()
-                .orElse(null);
-        return R.ok(String.format(SCHEDULING_TO_BE_PUBLISHED_STR, backupDo == null ? "" : backupDo.getBackupuser()));
+        return R.ok(returnMsg);
     }
 
     /**
@@ -195,27 +198,43 @@ public class GanttServiceImpl implements GanttService {
 
         // 对数据按照加工车间分组
         LinkedHashMap<String, List<GanttVos>> dataMap = workshopAndDeviceByFactoryId.stream()
-                .collect(Collectors.groupingBy(GanttVos::getProcessworkshopid,
+                .collect(Collectors.groupingBy(GanttVos::getProcessworkshop,
                         LinkedHashMap::new, Collectors.toList()));
+        // 对于加工车间重新排序
+        List<String> linkedHashMapKey = dataMap.keySet().stream().sorted((o1, o2) -> {
+            try {
+                String d1 = NUM_MAP.entrySet().stream()
+                        .reduce(o1, (s, entry) -> s.replaceAll(entry.getKey(), String.valueOf(entry.getValue())), String::concat);
+                String d2 = NUM_MAP.entrySet().stream()
+                        .reduce(o2, (s, entry) -> s.replaceAll(entry.getKey(), String.valueOf(entry.getValue())), String::concat);
+                return d1.compareTo(d2);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            return 0;
+        }).collect(Collectors.toList());
+
         /**
          * 工序的对象
          */
         ScheduleGanttVo workShopVo;
         // 设备的对象
         ScheduleGanttVo deviceVo;
-        for (Map.Entry<String, List<GanttVos>> workShopEntry : dataMap.entrySet()) {
+        List<GanttVos> ganttVoList;
+        for (String mapKey : linkedHashMapKey) {
+            ganttVoList = dataMap.get(mapKey);
             workShopVo = new ScheduleGanttVo();
-            workShopVo.setId(workShopEntry.getValue().get(0).getProcessworkshopid());
-            workShopVo.setText(workShopEntry.getValue().get(0).getProcessworkshop());
+            workShopVo.setId(ganttVoList.get(0).getProcessworkshopid());
+            workShopVo.setText(ganttVoList.get(0).getProcessworkshop());
             workShopVo.setOpen(true);
             workShopVo.setType(DEFAULT_TYPE);
-            workShopVo.setStart_date(workShopEntry.getValue().get(0).getPlanstartdate());
+            workShopVo.setStart_date(ganttVoList.get(0).getPlanstartdate());
             resultVo.add(workShopVo);
             // 对数据按照设备进行分组
-            LinkedHashMap<String, List<GanttVos>> processMap = workShopEntry.getValue().stream().collect(Collectors.groupingBy(GanttVos::getProcessdeviceid,
+            LinkedHashMap<String, List<GanttVos>> processMap = ganttVoList.stream().collect(Collectors.groupingBy(GanttVos::getProcessdeviceid,
                     LinkedHashMap::new, Collectors.toList()));
             // 循环设备数据
-            for (GanttVos ganttVos : workShopEntry.getValue()) {
+            for (GanttVos ganttVos : ganttVoList) {
                 deviceVo = new ScheduleGanttVo();
                 deviceVo.setId(ganttVos.getProcessdeviceid());
                 deviceVo.setText(ganttVos.getProcessdevice());
@@ -228,6 +247,8 @@ public class GanttServiceImpl implements GanttService {
                 resultVo.add(deviceVo);
             }
         }
+
+
         return R.ok(resultVo);
     }
 
@@ -293,8 +314,8 @@ public class GanttServiceImpl implements GanttService {
                     String joinids = "'" + CollUtil.join(queryProcessids, "','") + "'";
                     retGantvos = apsProcessOperationProcessEquDao.getGanttDataList(
                             null, null, null, null, null,
-                            joinids,null, null, null, null,
-                            null,null);
+                            joinids, null, null, null, null,
+                            null, null);
                 }
             }
 
@@ -316,15 +337,15 @@ public class GanttServiceImpl implements GanttService {
      */
     public List<ScheduleGanttVo> assembleGanttData(List<GanttVos> apsProcessOperationProcessEquDos) {
         // 修改工序作业的生产状态
-        apsProcessOperationProcessEquDos.parallelStream().forEach(data->{
+        apsProcessOperationProcessEquDos.parallelStream().forEach(data -> {
             /**
              * 作业生产状态不是待发布 ——>作业明细的作业状态
              * 作业生产状态是待发-> 待发布
              */
-            if(TO_BE_PUBLISHED.equals(data.getProcessstatus())){
+            if (TO_BE_PUBLISHED.equals(data.getProcessstatus())) {
                 data.setGanttprocessstatus(TO_BE_PUBLISHED);
-            } else{
-                data.setGanttprocessstatus(GANTT_PROCESS_STATUS_MAP.getOrDefault(data.getWorkstatus(),""));
+            } else {
+                data.setGanttprocessstatus(GANTT_PROCESS_STATUS_MAP.getOrDefault(data.getWorkstatus(), ""));
             }
         });
         // 需要返回给前端的数据
@@ -342,7 +363,7 @@ public class GanttServiceImpl implements GanttService {
         int workShopIndex = 1;
         // 对数据按照设备进行分组
         LinkedHashMap<String, List<GanttVos>> processMap = apsProcessOperationProcessEquDos.stream().collect(Collectors.groupingBy(GanttVos::getProcessdeviceid,
-                    LinkedHashMap::new, Collectors.toList()));
+                LinkedHashMap::new, Collectors.toList()));
         for (Map.Entry<String, List<GanttVos>> deviceEntry : processMap.entrySet()) {
             // 对数据按照 计划开始时间 分组
             LinkedHashMap<String, List<GanttVos>> planDataMap = deviceEntry.getValue().stream().collect(Collectors.groupingBy(info -> {

+ 2 - 2
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -452,7 +452,7 @@
           and (a1.PROCESSDEVICE is not null and a1.PROCESSDEVICE !='' )
           and (a1.PROCESSWORKSHOP is not null and a1.PROCESSWORKSHOP !='' )
         ORDER BY
-            CONVERT( a1.PROCESSWORKSHOP USING gbk) desc,
+            a1.PROCESSWORKSHOP,
             b.CHECKITEMTYPE,
             a1.PROCESSDEVICE
     </select>
@@ -461,7 +461,7 @@
         from aps_process_operation_process_equ apope
         left join aps_process_operation app on apope.PROCESSID = app.ID and app.DELETED='0'
         <where>
-              apope.ID != #{id}
+            apope.ID != #{id}
             AND  apope.PROCESSDEVICEID =#{equId}
             and ( #{oldStartDate} BETWEEN apope.PLANSTARTDATE AND  apope.PLANENDDATE
             OR  #{oldEndDate} BETWEEN apope.PLANSTARTDATE AND  apope.PLANENDDATE )

+ 4 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -128,6 +128,10 @@ public class ApsBlankOrderController {
         try {
             log.info("插单;参数为:{}", params);
             R resData = apsBlankOrderService.insertOrder(params);
+            if (resData.getCode().equals("200")) {
+                //重新排程
+                apsBlankOrderService.apsReScheduling();
+            }
             return resData;
         } catch (Exception e) {
             e.printStackTrace();

+ 8 - 2
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspSafeAttachmentsServiceImpl.java

@@ -122,7 +122,10 @@ public class AspSafeAttachmentsServiceImpl extends ServiceImpl<AspSafeAttachment
                     sendNotifyMap.put(data, alertUser);
                     for (String userId : alertUser) {
                         if (sendMailMap.containsKey(userId)) {
-                            sendMailMap.get(userId).add(data);
+                            List<String> dataIdList = sendMailMap.get(userId).stream().map(AspSafeAttachmentsDo::getId).collect(Collectors.toList());
+                            if (!dataIdList.contains(data.getId())) {
+                                sendMailMap.get(userId).add(data);
+                            }
                         }
                     }
                 } else if (daysBetween <= 90) {
@@ -131,7 +134,10 @@ public class AspSafeAttachmentsServiceImpl extends ServiceImpl<AspSafeAttachment
                     data.setReminderstate(MIDDLE);
                     for (String userId : alertUser) {
                         if (sendMailMap.containsKey(userId)) {
-                            sendMailMap.get(userId).add(data);
+                            List<String> dataIdList = sendMailMap.get(userId).stream().map(AspSafeAttachmentsDo::getId).collect(Collectors.toList());
+                            if (!dataIdList.contains(data.getId())) {
+                                sendMailMap.get(userId).add(data);
+                            }
                         }
                     }
                 } else {

+ 9 - 2
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspSpecialEquipmentCertificateServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwe.scentity.domian.AspSafeAttachmentsDo;
 import com.rongwe.scentity.domian.AspSpecialEquipmentCertificateDo;
+import com.rongwe.scentity.domian.CheckItemsDo;
 import com.rongwe.scentity.vo.UserMailOrgVo;
 import com.rongwei.rwadmincommon.system.domain.SysDictDo;
 import com.rongwei.rwadmincommon.system.service.SysConfigFeignService;
@@ -99,7 +100,10 @@ public class AspSpecialEquipmentCertificateServiceImpl extends ServiceImpl<AspSp
                     sendNotifyMap.put(data, alertUser);
                     for (String userId : alertUser) {
                         if (sendMailMap.containsKey(userId)) {
-                            sendMailMap.get(userId).add(data);
+                            List<String> dataIdList = sendMailMap.get(userId).stream().map(AspSpecialEquipmentCertificateDo::getId).collect(Collectors.toList());
+                            if (!dataIdList.contains(data.getId())) {
+                                sendMailMap.get(userId).add(data);
+                            }
                         }
                     }
                 } else if (daysBetween <= 90) {
@@ -108,7 +112,10 @@ public class AspSpecialEquipmentCertificateServiceImpl extends ServiceImpl<AspSp
                     data.setReminderstate(MIDDLE);
                     for (String userId : alertUser) {
                         if (sendMailMap.containsKey(userId)) {
-                            sendMailMap.get(userId).add(data);
+                            List<String> dataIdList = sendMailMap.get(userId).stream().map(AspSpecialEquipmentCertificateDo::getId).collect(Collectors.toList());
+                            if (!dataIdList.contains(data.getId())) {
+                                sendMailMap.get(userId).add(data);
+                            }
                         }
                     }
                 } else {

+ 10 - 4
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/CheckItemsServiceImpl.java

@@ -226,7 +226,10 @@ public class CheckItemsServiceImpl extends ServiceImpl<CheckItemsDao, CheckItems
                     sendNotifyMap.put(data, alertUser);
                     for (String userId : alertUser) {
                         if (sendMailMap.containsKey(userId)) {
-                            sendMailMap.get(userId).add(data);
+                            List<String> dataIdList = sendMailMap.get(userId).stream().map(CheckItemsDo::getId).collect(Collectors.toList());
+                            if (!dataIdList.contains(data.getId())) {
+                                sendMailMap.get(userId).add(data);
+                            }
                         }
                     }
                 } else if (daysBetween <= 90) {
@@ -235,7 +238,10 @@ public class CheckItemsServiceImpl extends ServiceImpl<CheckItemsDao, CheckItems
                     data.setReminderstate(MIDDLE);
                     for (String userId : alertUser) {
                         if (sendMailMap.containsKey(userId)) {
-                            sendMailMap.get(userId).add(data);
+                            List<String> dataIdList = sendMailMap.get(userId).stream().map(CheckItemsDo::getId).collect(Collectors.toList());
+                            if (!dataIdList.contains(data.getId())) {
+                                sendMailMap.get(userId).add(data);
+                            }
                         }
                     }
                 } else {
@@ -278,8 +284,8 @@ public class CheckItemsServiceImpl extends ServiceImpl<CheckItemsDao, CheckItems
                 String deviceoutcode = ObjectUtil.isNotEmpty(checkItemsDo.getDeviceoutcode()) ? checkItemsDo.getDeviceoutcode() : "";
                 //设备名称
                 String checkitemname = ObjectUtil.isNotEmpty(checkItemsDo.getCheckitemname()) ? checkItemsDo.getCheckitemname() : "";
-                //检验日期
-                Date devicecheckdate = checkItemsDo.getDevicecheckdate();
+                //下次检验日期
+                Date devicecheckdate = checkItemsDo.getNextcheckdate();
                 String checkDate = "";
                 if (ObjectUtil.isNotEmpty(devicecheckdate)) {
                     checkDate = DateUtil.format(devicecheckdate, "yyyy-MM-dd");