From cf89583e4dd54632a0f11c06b859315c03958820 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期三, 17 一月 2024 17:36:41 +0800
Subject: [PATCH] 设备运行状态及利用率预警任务

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java |  230 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 207 insertions(+), 23 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
index d57b283..1d64041 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -3,14 +3,18 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.mdc.dto.EquipmentMachingDto;
+import org.jeecg.modules.mdc.dto.MdcAlarmListDto;
 import org.jeecg.modules.mdc.dto.MdcEquipmentRunningSectionDto;
 import org.jeecg.modules.mdc.entity.*;
 import org.jeecg.modules.mdc.mapper.MdcEquipmentRunningSectionMapper;
 import org.jeecg.modules.mdc.service.*;
 import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.mdc.util.TimeFieldUtils;
+import org.jeecg.modules.mdc.vo.MdcAlarmAnalyzeQueryVo;
 import org.jeecg.modules.mdc.vo.MdcEquipmentRunningSectionVo;
+import org.jeecg.modules.system.service.ISysDictService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +43,12 @@
     @Resource
     private IEquipmentWorkLineService equipmentWorkLineService;
 
+    @Resource
+    private ISysDictService sysDictService;
+
+    @Resource
+    private IEquipmentRunningTraceService equipmentRunningTraceService;
+
     @Override
     public List<MdcEquipmentRunningSectionDto> logList(MdcEquipmentRunningSectionVo equipmentRunningSectionVo) {
 
@@ -52,23 +62,22 @@
         List<MdcEquipmentRunningSection> errs = loadEquipmentErrorTrace(equipmentRunningSectionVo.getEquipmentId(), equipmentRunningSectionVo.getCollectTimeStr());
         if (!running.isEmpty()) {
             MdcEquipmentRunningSectionDto dto;
+            Equipment equip = equipmentService.getOne(new LambdaQueryWrapper<Equipment>().eq(Equipment::getEquipmentid, equipmentRunningSectionVo.getEquipmentId()));
+            String tableName = "";
+            Boolean isTableExist = false;
+            if (equip != null) {
+                if (StringUtils.isNotBlank(equip.getDrivetype())) {
+                    tableName = equip.getDrivetype() + "_" + equip.getEquipmentid();
+                    isTableExist = equipmentWorkLineService.isTableExist(tableName);
+                }
+            }
             for (MdcEquipmentRunningSection entity : running) {
                 dto = new MdcEquipmentRunningSectionDto();
                 BeanUtils.copyProperties(entity, dto);
-                if (entity.getStatus() == 3 && StringUtils.isBlank(entity.getSequenceNumber())) {
-                    Equipment equip = equipmentService.getOne(new LambdaQueryWrapper<Equipment>().eq(Equipment::getEquipmentid, entity.getEquipmentId()));
-                    if (equip != null) {
-                        if (StringUtils.isNotBlank(equip.getDrivetype())) {
-                            try {
-                                List<EquipmentMachingDto> esList = equipmentWorkLineService.getEquipmentSequencenumber(equip.getDrivetype(), equip.getEquipmentid(), entity.getStartTime(), entity.getEndTime());
-                                if (esList != null && esList.size() > 1) {
-                                    dto.setSequenceNumber(esList.get(0).getSequencenumber());
-                                }
-                            } catch (Exception e) {
-                                continue;
-                            }
-
-                        }
+                if (entity.getStatus() == 3 && StringUtils.isBlank(entity.getSequenceNumber()) && isTableExist && !"ZUOLAN".equals(equip.getDrivetype())) {
+                    List<EquipmentMachingDto> esList = equipmentWorkLineService.getEquipmentSequencenumber(tableName, entity.getStartTime(), entity.getEndTime());
+                    if (esList != null && esList.size() > 1) {
+                        dto.setSequenceNumber(esList.get(0).getSequencenumber());
                     }
                 }
                 dtos.add(dto);
@@ -155,8 +164,9 @@
                     list = notExecuteData;
                 }
             } else {
-                if (notExecuteData != null && !notExecuteData.isEmpty())
+                if (notExecuteData != null && !notExecuteData.isEmpty()) {
                     list.addAll(notExecuteData);
+                }
             }
         } else {
             LambdaQueryWrapper<MdcEquipmentRunningSection> queryWrapper = new LambdaQueryWrapper<>();
@@ -463,7 +473,7 @@
      * 璁惧杩愯鐘舵�佺偣鏃堕棿杞负娈垫椂闂�
      */
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void runningAllEquipmentTraceProcess() {
         //鑾峰彇鎵�鏈夎澶�
         List<Equipment> equipmentList = equipmentService.list();
@@ -471,9 +481,9 @@
             //鑾峰彇running杩愯鐨勬棩蹇楄褰�
             List<MdcEquipmentRunningSection> list = this.equipmentRunningTracesLog(equipment.getEquipmentid());
             if (list != null && !list.isEmpty()) {
-                //List<MdcEquipmentRunningSection> equipList = addSequenceNumber(list); //娣诲姞绋嬪簭鍙�
-                this.ergodicTrim(list);
-                super.saveBatch(list);
+                List<MdcEquipmentRunningSection> equipList = addSequenceNumber(list); //娣诲姞绋嬪簭鍙�
+                this.ergodicTrim(equipList);
+                super.saveBatch(equipList);
             }
             //鑾峰彇鎶ヨ鐨勬棩蹇楄褰�
             List<MdcEquipmentRunningSection> errorList = this.equipmentRunningTracesErrorLog(equipment.getEquipmentid());
@@ -482,7 +492,81 @@
                 //save errorList
                 super.saveBatch(errorList);
             }
+            List<DictModel> dictList = sysDictService.queryDictItemsByCode("data_synchronization_flag");
+            if (dictList != null && !dictList.isEmpty() && "0".equals(dictList.get(0).getValue())) {
+                this.dataSynchronizationHandler(list, errorList);
+            }
         }
+    }
+
+    /**
+     * 璁惧杩愯鏃ュ織娣诲姞绋嬪簭鍙�
+     *
+     * @param list
+     * @return
+     */
+    public List<MdcEquipmentRunningSection> addSequenceNumber(List<MdcEquipmentRunningSection> list) {
+        if (list == null || list.size() < 1) {
+            return Collections.emptyList();
+        }
+        Equipment equip = null;
+        for (MdcEquipmentRunningSection e : list) {
+            if (e.getStatus() == 3) {
+                equip = equipmentService.getOne(new LambdaQueryWrapper<Equipment>().eq(Equipment::getEquipmentid, e.getEquipmentId()));
+                if (StringUtils.isNotBlank(equip.getDrivetype()) && equip.getDrivetype().startsWith("FANUC")) {
+                    List<EquipmentMachingDto> esList = equipmentWorkLineService.getEquipProgramNum(equip.getDrivetype(), equip.getEquipmentid(),
+                            e.getStartTime(), e.getEndTime());
+                    if (esList != null && esList.size() > 1) {
+                        e.setSequenceNumber(esList.get(0).getProgramnumber());
+                    }
+                } else if (StringUtils.isNotBlank(equip.getDrivetype()) && equip.getDrivetype().startsWith("SIEMENS")) {
+                    List<EquipmentMachingDto> esList = equipmentWorkLineService.getEquipmentSequencenumber(equip.getDrivetype() + "_" + equip.getEquipmentid(), e.getStartTime(), e.getEndTime());
+                    if (esList != null && esList.size() > 1) {
+                        e.setSequenceNumber(esList.get(0).getSequencenumber());
+                    }
+                }
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 鏁版嵁鍚屾澶勭悊
+     * @param list
+     * @param errorList
+     */
+    private void dataSynchronizationHandler(List<MdcEquipmentRunningSection> list, List<MdcEquipmentRunningSection> errorList) {
+        // 鏁版嵁杞崲
+        List<EquipmentRunningTrace> equipList = new ArrayList<>();
+        if (list != null && !list.isEmpty()) {
+            list.forEach(item -> {
+                EquipmentRunningTrace equipmentRunningSection = new EquipmentRunningTrace();
+                equipmentRunningSection.setEquipment(item.getEquipmentId());
+                equipmentRunningSection.setAlarm(item.getAlarm());
+                equipmentRunningSection.setCreateTime(item.getCreateTime());
+                equipmentRunningSection.setDuration(item.getDuration());
+                equipmentRunningSection.setEndTime(item.getEndTime());
+                equipmentRunningSection.setStartTime(item.getStartTime());
+                equipmentRunningSection.setStatus(item.getStatus());
+                equipmentRunningSection.setSequencenumber(item.getSequenceNumber());
+                equipList.add(equipmentRunningSection);
+            });
+        }
+        if (errorList != null && !errorList.isEmpty()) {
+            errorList.forEach(item -> {
+                EquipmentRunningTrace equipmentRunningSection = new EquipmentRunningTrace();
+                equipmentRunningSection.setEquipment(item.getEquipmentId());
+                equipmentRunningSection.setAlarm(item.getAlarm());
+                equipmentRunningSection.setCreateTime(item.getCreateTime());
+                equipmentRunningSection.setDuration(item.getDuration());
+                equipmentRunningSection.setEndTime(item.getEndTime());
+                equipmentRunningSection.setStartTime(item.getStartTime());
+                equipmentRunningSection.setStatus(item.getStatus());
+                equipmentRunningSection.setSequencenumber(item.getSequenceNumber());
+                equipList.add(equipmentRunningSection);
+            });
+        }
+        equipmentRunningTraceService.saveBatch(equipList);
     }
 
     /**
@@ -518,8 +602,108 @@
         return result;
     }
 
+    /**
+     * 璁$畻涓�娈垫椂闂村唴鐨勬暟鎹�
+     */
+    @Override
+    public List<MdcEquipmentRunningSection> listEquipmentRunningSection(String equipmentid, long start, long end) {
+        return this.baseMapper.listEquipmentRunningSection(equipmentid, start, end);
+    }
+
+    @Override
+    public List<MdcEquipmentRunningSection> listRunningSectionFromLog(String equipmentid, long start, long end) {
+        if (StringUtils.isBlank(equipmentid) || start <= 0 || end <= 0) {
+            return null;
+        }
+        Date startTime = DateUtils.toDate(DateUtils.longToDate(start), DateUtils.STR_DATE_TIME_SMALL);
+        Date endTime = DateUtils.toDate(DateUtils.longToDate(end), DateUtils.STR_DATE_TIME_SMALL);
+        EquipmentLog equipmentLog = equipmentLogService.getRow(equipmentid, startTime);
+        if (equipmentLog == null) {
+            return null;
+        }
+        List<EquipmentLog> logList = new ArrayList<>();
+        EquipmentLog equipmentOne = new EquipmentLog();
+        equipmentOne.setEquipmentId(equipmentid);
+        equipmentOne.setOporation(equipmentLog.getOporation());
+        equipmentOne.setCollectTime(startTime);
+        logList.add(equipmentOne);
+        List<EquipmentLog> logListLast = equipmentLogService.findEquipmentLogByEndTime(equipmentid, startTime);
+        if (logListLast == null || logListLast.isEmpty()) {
+            EquipmentLog two = new EquipmentLog();
+            two.setEquipmentId(equipmentid);
+            two.setOporation(equipmentLog.getOporation());
+            two.setCollectTime(endTime);
+            logList.add(two);
+        } else {
+            for (EquipmentLog log : logListLast) {
+                if (log.getCollectTime().getTime() <= endTime.getTime()) {
+                    logList.add(log);
+                }
+            }
+        }
+        if (logList.get(logList.size() - 1).getCollectTime().getTime() < endTime.getTime()) {
+            EquipmentLog two = new EquipmentLog();
+            two.setEquipmentId(equipmentid);
+            two.setOporation(logList.get(logList.size() - 1).getOporation());
+            two.setCollectTime(endTime);
+            logList.add(two);
+        }
+        //鐐规暟鎹浆涓烘鏁版嵁
+        List<MdcEquipmentRunningSection> erts = parseLogToRunningTrace(logList);
+        if (erts.isEmpty()) {
+            return Collections.emptyList();
+        }
+        //鏁村悎鍔犲伐鍜屽緟鏈烘椂闂村皬浜巒绉掔殑鏁版嵁
+        erts = mergeLessMinTimeRecords(erts, null);
+        List<MdcEquipmentRunningSection> running = mergeRunningTrace(erts);
+        if (running != null && !running.isEmpty()) {
+            this.ergodicTrim(running);
+        }
+        return running;
+    }
+
+    @Override
+    public List<MdcEquipmentRunningSection> listEquipmentRunningSectionRun(String equipmentid, long start, long end) {
+        return this.baseMapper.listEquipmentRunningSectionRun(equipmentid, start, end);
+    }
+
+    @Override
+    public List<MdcEquipmentRunningSection> listEquipmentRunningSectionError(String equipmentid, long start, long end) {
+        return this.baseMapper.listEquipmentRunningSectionError(equipmentid, start, end);
+    }
+
+    @Override
+    public List<MdcEquipmentRunningSection> findAlarmList(MdcAlarmAnalyzeQueryVo vo) {
+        return this.baseMapper.findAlarmList(vo);
+    }
+
+    @Override
+    public Integer findAlarmCount(String equipmentId, String startDate, String endDate, String alarmCode) {
+        return this.baseMapper.findAlarmCount(equipmentId, startDate, endDate, alarmCode);
+    }
+
+    @Override
+    public Integer findAlarmCountByDate(String startDate, String endDate, MdcAlarmAnalyzeQueryVo vo) {
+        return this.baseMapper.findAlarmCountByDate(startDate, endDate, vo);
+    }
+
+    @Override
+    public List<MdcEquipmentRunningSection> selectRunningData(String equipmentId, Date startDate, Date endDate) {
+        return this.baseMapper.selectRunningData(equipmentId, startDate, endDate);
+    }
+
+    @Override
+    public List<MdcAlarmListDto> selectAlarmList(MdcAlarmAnalyzeQueryVo mdcAlarmAnalyzeQueryVo, String startDate, String endDate) {
+        return this.baseMapper.selectAlarmList(mdcAlarmAnalyzeQueryVo, startDate, endDate);
+    }
+
+    @Override
+    public List<Integer> getDataList(String equipmentId, Date date) {
+        return this.baseMapper.getDataList(equipmentId, date);
+    }
+
     private Map<String, List<MdcEquipmentRunningSectionDto>> logCharts(MdcEquipmentRunningSectionVo equipmentRunningSectionVo, String date) {
-        Map<String, List<MdcEquipmentRunningSectionDto>> map = new  HashMap<>();
+        Map<String, List<MdcEquipmentRunningSectionDto>> map = new HashMap<>();
         List<MdcEquipmentRunningSectionDto> normal = new ArrayList<>();
         List<MdcEquipmentRunningSectionDto> waring = new ArrayList<>();
         //杩愯
@@ -742,9 +926,9 @@
                 ert.setStartTime(logList.get(i).getCollectTime());
                 ert.setEndTime(logList.get(i + 1).getCollectTime());
                 ert.setDuration(DateUtils.differentSecond(ert.getStartTime(), ert.getEndTime()));
-                if (ert.getDuration() > 0) {
-                    erts.add(ert);
-                }
+//                if (ert.getDuration() > 0) {
+                erts.add(ert);
+//                }
             } else {
                 long count = differentSecond / 86400;
                 if (count % 86400 > 0) {

--
Gitblit v1.9.3