Lius
2023-12-07 4337640b7ab86136baed2fd6aa959e4828a75cea
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
@@ -18,6 +18,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -71,6 +72,24 @@
        }
        if (!result.isEmpty()) {
            this.saveBatch(result);
        }
    }
    /**
     * 查询主轴运行时间
     *
     * @param equipmentId
     * @param validDate
     * @return
     */
    @Override
    public BigDecimal findSpindleRunDuration(String equipmentId, String validDate) {
        validDate = validDate.replaceAll("-", "");
        BigDecimal duration = this.baseMapper.findSpindleRunDuration(equipmentId, validDate);
        if (duration != null && duration.compareTo(BigDecimal.ZERO) != 0) {
            return duration.divide(new BigDecimal("60"), 0, RoundingMode.HALF_UP);
        } else {
            return new BigDecimal("0");
        }
    }
@@ -173,10 +192,10 @@
            MdcEquipmentStatisticalShiftInfo shiftInfo = mdcRateEquipment(equipmentid, dates.getStartDate(), dates.getEndDate());
            return shiftInfo;
        } else {
            if (repairList.size() == 1 ) {
            if (repairList.size() == 1) {
                long start = repairList.get(0).getStartTime().getTime();
                long end = repairList.get(0).getEndTime().getTime();
                if ( start > dates.getStart() && end < dates.getEnd() ) {
                if (start > dates.getStart() && end < dates.getEnd()) {
                    MdcDateVo d1 = new MdcDateVo();
                    d1.setStartTime(dates.getStartDate());
                    d1.setEndTime(repairList.get(0).getStartTime());
@@ -185,7 +204,7 @@
                    d2.setStartTime(repairList.get(0).getEndTime());
                    d2.setEndTime(dates.getEndDate());
                    dateList.add(d2);
                } else  if (start == dates.getStart() && end < dates.getEnd()){
                } else if (start == dates.getStart() && end < dates.getEnd()) {
                    MdcDateVo d2 = new MdcDateVo();
                    d2.setStartTime(repairList.get(0).getEndTime());
                    d2.setEndTime(dates.getEndDate());
@@ -208,11 +227,11 @@
                }
            } else {
                long s = dates.getStartDate().getTime();
                for (int i = 0 ; i < repairList.size(); i ++) {
                for (int i = 0; i < repairList.size(); i++) {
                    long start = repairList.get(i).getStartTime().getTime();
                    long end = repairList.get(i).getEndTime().getTime();
                    if (start > s ) {
                    if (start > s) {
                        MdcDateVo d = new MdcDateVo();
                        d.setStartTime(dates.getStartDate());
                        d.setEndTime(repairList.get(i).getStartTime());
@@ -223,8 +242,8 @@
                    } else if (start == s) {
                        dates.setStartDate(repairList.get(i).getEndTime());
                    }
                    if(i == repairList.size() -1 ) {
                        if(dates.getStartDate().getTime() >= end) {
                    if (i == repairList.size() - 1) {
                        if (dates.getStartDate().getTime() >= end) {
                            MdcDateVo d = new MdcDateVo();
                            d.setStartTime(repairList.get(i).getEndTime());
                            d.setEndTime(dates.getEndDate());
@@ -259,7 +278,7 @@
        if (runningSections == null || runningSections.isEmpty()) {
            runningSections = mdcEquipmentRunningSectionService.listRunningSectionFromLog(equipmentid, startDate.getTime(), endDate.getTime());
        }
        if(runningSections == null || runningSections.isEmpty()) {
        if (runningSections == null || runningSections.isEmpty()) {
            runningSections = new ArrayList<>();
        }
        List<MdcEquipmentRunningSection> sectionErrors = mdcEquipmentRunningSectionService.listEquipmentRunningSectionError(equipmentid, startDate.getTime(), endDate.getTime());
@@ -299,7 +318,7 @@
        /*故障时间  errs => 关机数据 + 报警数据 */
        BigDecimal faultLong = new BigDecimal("0");
        faultLong =  faultLongInfo(errs);
        faultLong = faultLongInfo(errs);
        //报警数据
        List<MdcEquipmentRunningSection> alarms = errs.stream().filter(section -> section.getStatus() == 22).collect(Collectors.toList());
@@ -381,75 +400,75 @@
            //TODO
            return null;
        }
        Long  startMdc =  mdcDate.getStartTime().getTime();
        Long  endMdc =  mdcDate.getEndTime().getTime();
        Long startMdc = mdcDate.getStartTime().getTime();
        Long endMdc = mdcDate.getEndTime().getTime();
        if (sRun != null && !sRun.isEmpty()) {
            for (int i = 0 ; i < sRun.size() ; i ++) {
            for (int i = 0; i < sRun.size(); i++) {
                Long start = sRun.get(i).getStartTime().getTime();
                Long end =  sRun.get(i).getEndTime().getTime();
                if (startMdc <= start ) {
                    sRun.get(i).setStartTime( sRun.get(i).getStartTime());
                Long end = sRun.get(i).getEndTime().getTime();
                if (startMdc <= start) {
                    sRun.get(i).setStartTime(sRun.get(i).getStartTime());
                } else {
                    sRun.get(i).setStartTime(mdcDate.getStartTime());
                }
                if (endMdc >= end) {
                    sRun.get(i).setEndTime( sRun.get(i).getEndTime());
                    sRun.get(i).setEndTime(sRun.get(i).getEndTime());
                } else {
                    sRun.get(i).setEndTime(mdcDate.getEndTime());
                }
                Long sen = DateUtils.differentSecond( sRun.get(i).getStartTime(),
                Long sen = DateUtils.differentSecond(sRun.get(i).getStartTime(),
                        sRun.get(i).getEndTime());
                if (sen <= 0) {
                    sRun.remove(i);
                    i--;
                } else {
                    sRun.get(i).setDuration(sen);
                    sRun.get(i).setStartLong( sRun.get(i).getStartTime().getTime());
                    sRun.get(i).setEndLong( sRun.get(i).getEndTime().getTime());
                    sRun.get(i).setStartLong(sRun.get(i).getStartTime().getTime());
                    sRun.get(i).setEndLong(sRun.get(i).getEndTime().getTime());
                }
            }
        }
        //部分数据是维修  1、运行状态下报警情况
        List<MdcEquipmentRunningSection> faultRun = new ArrayList<>();
        //制度时间段内报警数据
        if (errors != null && !errors.isEmpty() ) {
            for (int i = 0 ; i < errors.size() ; i ++) {
        if (errors != null && !errors.isEmpty()) {
            for (int i = 0; i < errors.size(); i++) {
                Long start = errors.get(i).getStartTime().getTime();
                Long end =  errors.get(i).getEndTime().getTime();
                if (startMdc <= start ) {
                    errors.get(i).setStartTime( errors.get(i).getStartTime());
                Long end = errors.get(i).getEndTime().getTime();
                if (startMdc <= start) {
                    errors.get(i).setStartTime(errors.get(i).getStartTime());
                } else {
                    errors.get(i).setStartTime(mdcDate.getStartTime());
                }
                if (endMdc >= end) {
                    errors.get(i).setEndTime( errors.get(i).getEndTime());
                    errors.get(i).setEndTime(errors.get(i).getEndTime());
                } else {
                    errors.get(i).setEndTime(mdcDate.getEndTime());
                }
                Long sen = DateUtils.differentSecond( errors.get(i).getStartTime(),
                Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(),
                        errors.get(i).getEndTime());
                if (sen <= 0) {
                    errors.remove(i);
                    i--;
                } else {
                    errors.get(i).setDuration(sen);
                    errors.get(i).setStartLong( errors.get(i).getStartTime().getTime());
                    errors.get(i).setEndLong( errors.get(i).getEndTime().getTime());
                    errors.get(i).setStartLong(errors.get(i).getStartTime().getTime());
                    errors.get(i).setEndLong(errors.get(i).getEndTime().getTime());
                }
            }
            //把运行中存在的报警剔除掉
            for (MdcEquipmentRunningSection se : sRun) {
                long runStart = se.getStartTime().getTime();
                long runEnd =  se.getEndTime().getTime();
                long runEnd = se.getEndTime().getTime();
                if (se.getStatus() == 3) {
                    if (errors != null && !errors.isEmpty() ) {
                    if (errors != null && !errors.isEmpty()) {
                        //处理报警数据
                        for (int i = 0 ; i < errors.size(); i ++ ) {
                        for (int i = 0; i < errors.size(); i++) {
                            long errStart = errors.get(i).getStartTime().getTime();
                            long errEnd = errors.get(i).getEndTime().getTime();
                            // 报警开始 小于 运行开始  报警结束 小于运行结束 报警结束 大于 运行开始
                            if ( errStart  < runStart && errEnd <= runEnd && errEnd >  runStart ) {
                            if (errStart < runStart && errEnd <= runEnd && errEnd > runStart) {
                                errors.get(i).setEndTime(se.getStartTime());
                                Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(),
                                        errors.get(i).getEndTime());
@@ -458,7 +477,7 @@
                                errors.get(i).setEndLong(errors.get(i).getEndTime().getTime());
                            }
                            // 报警开始 大于 运行开始 , 报警开始 小于 运行结束 ,报警结束 大于 运行结束
                            else if (errStart >=  runStart && errStart < runEnd &&  errEnd > runEnd ) {
                            else if (errStart >= runStart && errStart < runEnd && errEnd > runEnd) {
                                errors.get(i).setStartTime(se.getEndTime());
                                Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(),
                                        errors.get(i).getEndTime());
@@ -468,13 +487,13 @@
                            }
                            // 报警开始 大于 运行开始 , 报警开始 小于 运行结束 ,报警结束 大于 运行开始,报警结束 小于  运行结束
                            else if (errStart >= runStart && errStart < runEnd &&
                                    errEnd > runStart && errEnd <= runEnd ){
                                    errEnd > runStart && errEnd <= runEnd) {
                                errors.remove(i);
                                i--;
                            }
                            //如果超出范围
                            else if (errStart <= runStart && errStart < runEnd &&
                                    errEnd > runStart && errEnd >= runEnd ) {
                                    errEnd > runStart && errEnd >= runEnd) {
                                MdcEquipmentRunningSection errOne = new MdcEquipmentRunningSection();
                                errOne.setEndTime(errors.get(i).getEndTime());
@@ -498,9 +517,9 @@
                                errOne.setEndLong(errOne.getEndTime().getTime());
                                if (sen <= 0) {
                                    errors.remove(i);
                                    errors.add(i,errOne);
                                    errors.add(i, errOne);
                                } else {
                                    errors.add(i+1,errOne);
                                    errors.add(i + 1, errOne);
                                    i++;
                                }
                            } else {