Lius
2023-12-26 63880904ec802b461089d7a7d0f36db7f0ca881d
mdc报警分析bug修复,加工工件算法更新
已修改9个文件
331 ■■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcProcessCount.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentWorklineMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentWorklineMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentWorkLineService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentWorkLineServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/ProcessCountServiceImpl.java 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcProcessCount.java
@@ -12,7 +12,6 @@
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * @author Lius
@@ -49,24 +48,6 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "日期")
    private String theDate;
    /**
     * 开始时间
     */
    @Excel(name = "开始时间", width = 20, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "开始时间")
    private Date startTime;
    /**
     * 结束时间
     */
    @Excel(name = "结束时间", width = 20, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "结束时间")
    private Date endTime;
    /**
     * 时长
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentWorklineMapper.java
@@ -43,4 +43,7 @@
    @InterceptorIgnore(tenantLine = "1")
    List<EquipmentMachingDto> getEquipProgramNum(@Param("tableName") String saveTableName, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
    @InterceptorIgnore(tenantLine = "1")
    List<MdcEquipmentDto> findProductCountStartTime(@Param("tableName") String saveTableName, @Param("productCount") String productCount);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentWorklineMapper.xml
@@ -7,10 +7,14 @@
    </select>
    <select id="findRunningData" resultType="java.util.Map">
        select [${tableName}].* from [${tableName}] where CollectTime between #{ startTime } AND #{ endTime } order by CollectTime  asc
        select [${tableName}].* from [${tableName}] where ProductCount &lt;&gt; '' AND CollectTime between #{ startTime } AND #{ endTime }  order by CollectTime  asc
    </select>
    <select id="getEquipProgramNum" resultType="org.jeecg.modules.mdc.dto.EquipmentMachingDto">
        select Programnumber,CollectTime from [${tableName}] where CollectTime &gt; #{startTime} and CollectTime &lt;= #{endTime} and Programnumber is not null
    </select>
    <select id="findProductCountStartTime" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentDto">
        SELECT TOP 1 [${tableName}].* FROM [${tableName}] WHERE ProductCount = #{ productCount } ORDER BY CollectTime ASC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml
@@ -152,6 +152,7 @@
        <where>
            AND t1.status = '22'
            AND t1.alarm = #{ vo.alarmCode }
            AND (t1.start_time &lt;= #{ endDate } AND t1.end_time &gt;= #{ startDate })
            <if test="vo.equipmentIdList != null and vo.equipmentIdList.size() > 0 ">
                AND t1.equipment_id IN
                <foreach collection="vo.equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentWorkLineService.java
@@ -41,4 +41,12 @@
     * @return
     */
    List<EquipmentMachingDto> getEquipProgramNum(String drivetype, String equipmentid, Date startTime, Date endTime);
    /**
     * 查询法拉克设备加工工件开始时间
     * @param saveTableName
     * @param productCount
     * @return
     */
    MdcEquipmentDto findProductCountStartTime(String saveTableName, String productCount);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentWorkLineServiceImpl.java
@@ -55,6 +55,16 @@
        return equipmentWorkLineMapper.getEquipProgramNum(drivetype + "_" + equipmentid, startTime, endTime);
    }
    @Override
    public MdcEquipmentDto findProductCountStartTime(String saveTableName, String productCount) {
        try {
            List<MdcEquipmentDto> macingDataList = equipmentWorkLineMapper.findProductCountStartTime(saveTableName, productCount);
            return !macingDataList.isEmpty() ? macingDataList.get(0) : null;
        } catch (Exception e) {
            return null;
        }
    }
    private List<EquipmentMachingDto> convertData(List<Map<String, Object>> list) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        List<EquipmentMachingDto> dto = new ArrayList<>();
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -656,7 +656,7 @@
        //整合加工和待机时间小于n秒的数据
        erts = mergeLessMinTimeRecords(erts, null);
        List<MdcEquipmentRunningSection> running = mergeRunningTrace(erts);
        if (running != null || !running.isEmpty()) {
        if (running != null && !running.isEmpty()) {
            this.ergodicTrim(running);
        }
        return running;
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
@@ -132,7 +132,7 @@
        }
        //查询班制班次信息
        Map<String, List<MdcDeviceCalendarVo>> listMap = this.mdcDeviceCalendarMap(equipment.getEquipmentid(), stringDates);
        if (listMap.isEmpty()) {
        if (listMap == null || listMap.isEmpty()) {
            listMap = new HashMap<>();
        }
        List<MdcEquipmentStatisticalShiftInfo> resultList = new ArrayList<>();
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/ProcessCountServiceImpl.java
@@ -1,26 +1,27 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
import org.jeecg.modules.mdc.dto.MdcProcessCountDto;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.entity.MdcDeviceCalendar;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
import org.jeecg.modules.mdc.entity.MdcProcessCount;
import org.jeecg.modules.mdc.mapper.MdcProcessCountMapper;
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.MdcDateVo;
import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo;
import org.jeecg.modules.mdc.vo.MdcProcessCountVo;
import org.jeecg.modules.mdc.vo.MdcShiftDateVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -52,13 +53,15 @@
    @Transactional(rollbackFor = {Exception.class})
    public void runningProcessCount() {
        // 获取所有设备
        //List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2240074"));
        //List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198"));
        List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list();
        List<MdcProcessCount> result = new ArrayList<>();
        for (MdcEquipment mdcEquipment : mdcEquipmentList) {
            List<MdcProcessCount> mdcProcessCountList = processCount(mdcEquipment);
            if (mdcProcessCountList != null && !mdcProcessCountList.isEmpty()) {
                result.addAll(mdcProcessCountList);
            if ("FANUC".equals(mdcEquipment.getDriveType())) {
                List<MdcProcessCount> mdcProcessCountList = processCount(mdcEquipment);
                if (mdcProcessCountList != null && !mdcProcessCountList.isEmpty()) {
                    result.addAll(mdcProcessCountList);
                }
            }
        }
        if (!result.isEmpty()) {
@@ -114,7 +117,6 @@
        Date initDate = null;
        //取最后的统计数据
        MdcProcessCount lastData = this.baseMapper.getLastData(mdcEquipment.getEquipmentId());
        Boolean flag = true;
        if (lastData != null) {
            initDate = DateUtils.toDate(lastData.getTheDate(), DateUtils.STRDATE);
            initDate = DateUtils.plusTime(initDate, 1);
@@ -146,84 +148,62 @@
        for (String stringDate : stringDates) {
            if (listMap.containsKey(stringDate)) {
                List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = listMap.get(stringDate);
                for (MdcDeviceCalendarVo mdcDeviceCalendarVo : mdcDeviceCalendarVos) {
                    // 处理班制班次时间
                    List<MdcShiftDateVo> datesListByMdcDeviceCalendarVo = this.getDatesListByMdcDeviceCalendarVo(mdcDeviceCalendarVo);
                    if (datesListByMdcDeviceCalendarVo == null || datesListByMdcDeviceCalendarVo.isEmpty()) {
                        break;
                    }
                    for (MdcShiftDateVo mdcShiftDateVo : datesListByMdcDeviceCalendarVo) {
                        Date startDate = null;
                        //处理数据
                        //List<MdcProcessCount> result = new ArrayList<>();
                        // 查询班次内设备运行状态时间段
                        List<MdcEquipmentRunningSection> equipmentRunningSectionList = mdcEquipmentRunningSectionService.selectRunningData(mdcEquipment.getEquipmentId(), mdcShiftDateVo.getStartDate(), mdcShiftDateVo.getEndDate());
                        if (equipmentRunningSectionList != null && !equipmentRunningSectionList.isEmpty()) {
                            // 时间修正
                            equipmentRunningSectionList.get(0).setStartTime(mdcShiftDateVo.getStartDate());
                            if (equipmentRunningSectionList.size() > 1) {
                                equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).setEndTime(mdcShiftDateVo.getEndDate());
                            } else {
                                equipmentRunningSectionList.get(0).setEndTime(mdcShiftDateVo.getEndDate());
                            }
                            if (!"FANUC".equals(mdcEquipment.getDriveType())) {
                                MdcEquipmentOverFlag equipmentOverFlag = mdcEquipmentOverFlagService.getOne(new LambdaQueryWrapper<MdcEquipmentOverFlag>().eq(MdcEquipmentOverFlag::getDriveType, mdcEquipment.getDriveType()));
                                if (equipmentOverFlag == null) {
                                    return null;
                                }
                            }
                // 处理班制班次时间
                MdcDateVo mdcDateVo = this.handleDeviceCalendar(mdcDeviceCalendarVos);
                // 查找设备单表运行数据
                List<Map<String, Object>> mdcEquipmentDtoList = equipmentWorkLineService.findRunningData(mdcEquipment.getSaveTableName(), mdcDateVo.getStartTime(), mdcDateVo.getEndTime());
                if (mdcEquipmentDtoList == null || mdcEquipmentDtoList.isEmpty()) {
                    continue;
                }
                Map<String, Object> firstMap = new HashMap<>(mdcEquipmentDtoList.get(0));
                Map<String, Object> mdcEquipmentDtoMap = mdcEquipmentDtoList.get(0);
                for (int i = 1; i < mdcEquipmentDtoList.size(); i++) {
                    String productCount1 = mdcEquipmentDtoList.get(i).get("ProductCount").toString();
                    if (!mdcEquipmentDtoMap.get("ProductCount").equals(productCount1)) {
                        Date start;
                        Date end;
                        String sequenceNumber;
                        if (firstMap.get("ProductCount").toString().equals(mdcEquipmentDtoList.get(i - 1).get("ProductCount").toString())) {
                            //结束时间
                            end = DateUtils.toDate(mdcEquipmentDtoList.get(i - 1).get("CollectTime").toString(), DateUtils.STR_DATE_TIME);
                            //根据productCount值查询开始时间
                            String productCount = mdcEquipmentDtoList.get(i - 1).get("ProductCount").toString();
                            MdcEquipmentDto mdcEquipmentDto = equipmentWorkLineService.findProductCountStartTime(mdcEquipment.getSaveTableName(), productCount);
                            start = mdcEquipmentDto.getCollectTime();
                            //程序号
                            sequenceNumber = mdcEquipmentDtoList.get(i - 1).get("Sequencenumber").toString();
                        } else {
                            start = DateUtils.toDate(mdcEquipmentDtoMap.get("CollectTime").toString(), DateUtils.STR_DATE_TIME);
                            end = DateUtils.toDate(mdcEquipmentDtoList.get(i - 1).get("CollectTime").toString(), DateUtils.STR_DATE_TIME);
                            sequenceNumber = mdcEquipmentDtoList.get(i - 1).get("Sequencenumber").toString();
                        }
                        mdcEquipmentDtoMap.put("ProductCount", mdcEquipmentDtoList.get(i).get("ProductCount").toString());
                        mdcEquipmentDtoMap.put("CollectTime", mdcEquipmentDtoList.get(i).get("CollectTime").toString());
                            for (int j = 0; j < equipmentRunningSectionList.size(); j++) {
                                MdcEquipmentRunningSection mdcEquipmentRunningSection = equipmentRunningSectionList.get(j);
                                // 查找设备单表运行数据
                                List<Map<String, Object>> mdcEquipmentDtoList = equipmentWorkLineService.findRunningData(mdcEquipment.getSaveTableName(), mdcEquipmentRunningSection.getStartTime(), mdcEquipmentRunningSection.getEndTime());
                                if (mdcEquipmentDtoList == null || mdcEquipmentDtoList.isEmpty()) {
                                    continue;
                        List<MdcEquipmentRunningSection> equipmentRunningSectionList = mdcEquipmentRunningSectionService.selectRunningData(mdcEquipment.getEquipmentId(), start, end);
                        if (equipmentRunningSectionList != null && !equipmentRunningSectionList.isEmpty()) {
                            //时间修正
                            if (equipmentRunningSectionList.get(0).getStartTime().before(start)) {
                                equipmentRunningSectionList.get(0).setStartTime(start);
                            }
                            if (equipmentRunningSectionList.size() > 1) {
                                if (equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).getEndTime().after(end)) {
                                    equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).setEndTime(end);
                                }
                                MdcProcessCount mdcProcessCount = new MdcProcessCount();
                                mdcProcessCount.setEquipmentId(mdcEquipment.getEquipmentId());
                                mdcProcessCount.setEquipmentName(mdcEquipment.getEquipmentName());
                                mdcProcessCount.setTheDate(mdcShiftDateVo.getDay());
                                if (lastData != null && flag) {
                                    mdcProcessCount.setStartTime(lastData.getEndTime());
                                    startDate = mdcProcessCount.getStartTime();
                                    flag = false;
                                } else if (startDate == null) {
                                    mdcProcessCount.setStartTime(mdcEquipmentRunningSection.getStartTime());
                                    startDate = mdcProcessCount.getStartTime();
                                } else {
                                    mdcProcessCount.setStartTime(startDate);
                                }
                                if ("FANUC".equals(mdcEquipment.getDriveType())) {
                                    try {
                                        // 法兰克设备根据ProductCount字段判断
                                        String productCount = mdcEquipmentDtoList.get(0).get("ProductCount").toString();
                                        for (int i = 0; i < mdcEquipmentDtoList.size(); i++) {
                                            if (!productCount.equals(mdcEquipmentDtoList.get(i).get("ProductCount").toString())) {
                                                productCount = mdcEquipmentDtoList.get(i).get("ProductCount").toString();
                                                if (mdcEquipmentDtoList.get(i - 1).get("CollectTime") != null) {
                                                    mdcProcessCount.setEndTime(DateUtils.toDate(mdcEquipmentDtoList.get(i - 1).get("CollectTime").toString(), DateUtils.STR_DATE_TIME));
                                                    mdcProcessCount.setDuration(TimeFieldUtils.duration(mdcProcessCount.getStartTime(), mdcProcessCount.getEndTime()));
                                                    mdcProcessCount.setSequenceNumber(mdcEquipmentDtoList.get(i - 1).get("Sequencenumber").toString());
                                                    resultList.add(mdcProcessCount);
                                                    if (TimeFieldUtils.duration(mdcProcessCount.getEndTime(), mdcEquipmentRunningSection.getEndTime()) > 60) {
                                                        //mdcProcessCount.setStartTime(mdcProcessCount.getEndTime());
                                                        startDate = mdcProcessCount.getEndTime();
                                                    } else if (j + 1 < equipmentRunningSectionList.size()) {
                                                        //mdcProcessCount.setStartTime(equipmentRunningSectionList.get(j + 1).getStartTime());
                                                        startDate = equipmentRunningSectionList.get(j + 1).getStartTime();
                                                    } else {
                                                        startDate = null;
                                                    }
                                                }
                                            }
                                        }
                                    } catch (Exception e) {
                                        log.error("计算加工工件算法失败!设备编号:" + mdcEquipment.getEquipmentId(), e);
                                        //System.out.println("计算加工工件算法失败!设备编号:" + mdcEquipment.getEquipmentId());
                                    }
                            } else {
                                if (equipmentRunningSectionList.get(0).getEndTime().after(end)) {
                                    equipmentRunningSectionList.get(0).setEndTime(end);
                                }
                            }
                            //计算加工时长
                            long duration = this.handleProcessDuration(equipmentRunningSectionList);
                            MdcProcessCount mdcProcessCount = new MdcProcessCount();
                            mdcProcessCount.setEquipmentId(mdcEquipment.getEquipmentId());
                            mdcProcessCount.setEquipmentName(mdcEquipment.getEquipmentName());
                            mdcProcessCount.setSequenceNumber(sequenceNumber);
                            mdcProcessCount.setDuration(duration);
                            mdcProcessCount.setTheDate(stringDate);
                            resultList.add(mdcProcessCount);
                        }
                    }
                }
@@ -232,107 +212,47 @@
        return resultList;
    }
    /**
     * 计算加工工件时长
     * @param equipmentRunningSectionList
     * @return
     */
    private long handleProcessDuration(List<MdcEquipmentRunningSection> equipmentRunningSectionList) {
        long result = 0;
        for (MdcEquipmentRunningSection mdcEquipmentRunningSection : equipmentRunningSectionList) {
            result += TimeFieldUtils.duration(mdcEquipmentRunningSection.getStartTime(), mdcEquipmentRunningSection.getEndTime());
        }
        return result;
    }
    private List<MdcShiftDateVo> getDatesListByMdcDeviceCalendarVo(MdcDeviceCalendarVo temp) {
        List<MdcShiftDateVo> result = new ArrayList<>();
        String startDateStr = temp.getStartDate();
        String endDateStr = temp.getEndDate();
        String sleepStartDateStr = temp.getSleepStartDate();
        String sleepEndDateStr = temp.getSleepEndDate();
        String effectiveDateStr = temp.getEffectiveDate();
        String overtimeStartTime = temp.getOvertimeStartTime();
        String overtimeEndTime = temp.getOvertimeEndTime();
        String eff = DateUtils.format(DateUtils.toDate(effectiveDateStr, DateUtils.STRDATE), DateUtils.STR_DATE);
        try {
            Date effectiveDate = new SimpleDateFormat("yyyyMMdd").parse(effectiveDateStr);
            long startDate = getLongDate(effectiveDate, startDateStr, "false");
            long endDate = getLongDate(effectiveDate, endDateStr, temp.getIsDaySpan());
            //处理最后的时间问题 是否超过当前时间 如果超过不列入计算 BUG
            Date endTime = null;
            if ("true".equals(temp.getIsDaySpan())) {
                Date day = DateUtils.toDate(effectiveDateStr, DateUtils.STRDATE);
                day = DateUtils.plusTime(day, 1);
                String dayTime = DateUtils.format(day, DateUtils.STR_DATE);
                endTime = DateUtils.toDate(dayTime + " " + temp.getEndDate(), DateUtils.STR_DATE_TIME_SMALL);
            } else {
                Date day = DateUtils.toDate(effectiveDateStr, DateUtils.STRDATE);
                String dayTime = DateUtils.format(day, DateUtils.STR_DATE);
                endTime = DateUtils.toDate(dayTime + " " + temp.getEndDate(), DateUtils.STR_DATE_TIME_SMALL);
    private MdcDateVo handleDeviceCalendar(List<MdcDeviceCalendarVo> mdcDeviceCalendarVos) {
        MdcDateVo result = new MdcDateVo();
        List<Date> dateList = new ArrayList<>();
        for (MdcDeviceCalendarVo mdcDeviceCalendarVo : mdcDeviceCalendarVos) {
            String startDateStr = mdcDeviceCalendarVo.getStartDate();
            String endDateStr = mdcDeviceCalendarVo.getEndDate();
            String overtimeEndTime = mdcDeviceCalendarVo.getOvertimeEndTime();
            String effectiveDateStr = DateUtils.format(DateUtils.toDate(mdcDeviceCalendarVo.getEffectiveDate(), DateUtils.STRDATE), DateUtils.STR_DATE);
            Date start = DateUtils.getFormatDate(effectiveDateStr + " " + startDateStr, DateUtils.STR_DATE_TIME_SMALL);
            dateList.add(start);
            Date end = DateUtils.getFormatDate(effectiveDateStr + " " + endDateStr, DateUtils.STR_DATE_TIME_SMALL);
            if ("true".equals(mdcDeviceCalendarVo.getIsDaySpan())) {
                end = DateUtils.addDays(end, 1);
            }
            if (endTime.getTime() > DateUtils.getNow().getTime()) {
                return null;
            }
            if (StringUtils.isNotEmpty(sleepStartDateStr)) {
                long sleepStartDate = getLongDate(effectiveDate, sleepStartDateStr, "false");
                long sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, "false");
                Date start1 = DateUtils.getFormatDate(eff + " " + startDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date end1 = DateUtils.getFormatDate(eff + " " + sleepStartDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date start2 = DateUtils.getFormatDate(eff + " " + sleepEndDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date end2 = DateUtils.getFormatDate(eff + " " + endDateStr, DateUtils.STR_DATE_TIME_SMALL);
                if ("true".equals(temp.getIsDaySpan())) {
                    //跨天 判断班次开始时间和结束时间是否跨天
                    if (startDateStr.compareTo(endDateStr) < 0) {
                        //班次开始时间和结束时间都跨天
                        startDate = getLongDate(effectiveDate, startDateStr, temp.getIsDaySpan());
                        start1 = DateUtils.addDays(start1, 1);
                        end2 = DateUtils.addDays(end2, 1);
                        //班次开始时间和结束时间都跨天 休息开始时间和结束时间也一定跨天
                        sleepStartDate = getLongDate(effectiveDate, sleepStartDateStr, temp.getIsDaySpan());
                        end1 = DateUtils.addDays(end1, 1);
                        sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, temp.getIsDaySpan());
                        start2 = DateUtils.addDays(start2, 1);
                    } else {
                        //班次开始时间不跨天, 结束时间跨天
                        end2 = DateUtils.addDays(end2, 1);
                        //判断休息开始时间是否跨天
                        if (startDateStr.compareTo(sleepStartDateStr) > 0) {
                            //开始休息时间跨天, 结束休息时间也一定跨天
                            sleepStartDate = getLongDate(effectiveDate, sleepStartDateStr, temp.getIsDaySpan());
                            end1 = DateUtils.addDays(end1, 1);
                            sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, temp.getIsDaySpan());
                            start2 = DateUtils.addDays(start2, 1);
                        } else {
                            //休息开始时间不跨天, 判断休息结束时间是否跨天
                            if (sleepStartDateStr.compareTo(sleepEndDateStr) > 0) {
                                //休息结束时间跨天
                                sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, temp.getIsDaySpan());
                                start2 = DateUtils.addDays(start2, 1);
                            }
                        }
                    }
                }
                MdcShiftDateVo dates1 = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), startDate, sleepStartDate, effectiveDateStr, endTime, start1, end1);
                result.add(dates1);
                MdcShiftDateVo dates2 = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), sleepEndDate, endDate, effectiveDateStr, endTime, start2, end2);
                result.add(dates2);
            } else {
                /*获取班次的开始时间结束时间*/
                Date start = DateUtils.getFormatDate(eff + " " + startDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date end = DateUtils.getFormatDate(eff + " " + endDateStr, DateUtils.STR_DATE_TIME_SMALL);
                if ("true".equals(temp.getIsDaySpan())) {
                    if (startDateStr.compareTo(endDateStr) < 0) {
                        startDate = getLongDate(effectiveDate, startDateStr, temp.getIsDaySpan());
                        start = DateUtils.addDays(start, 1);
                    }
                    end = DateUtils.addDays(end, 1);
                }
                MdcShiftDateVo dates = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), startDate, endDate, effectiveDateStr, endTime, start, end);
                result.add(dates);
            }
            dateList.add(end);
            // 处理加班时间
            if (StringUtils.isNotEmpty(overtimeStartTime)) {
                Date start = DateUtils.getFormatDate(eff + " " + overtimeStartTime, DateUtils.STR_DATE_TIME_SMALL);
                Date end = DateUtils.getFormatDate(eff + " " + overtimeEndTime, DateUtils.STR_DATE_TIME_SMALL);
                if ("true".equals(temp.getIsDaySpan())) {
                    start = DateUtils.addDays(start, 1);
                    end = DateUtils.addDays(end, 1);
            if (StringUtils.isNotEmpty(overtimeEndTime)) {
                Date overtimeEnd = DateUtils.getFormatDate(effectiveDateStr + " " + overtimeEndTime, DateUtils.STR_DATE_TIME_SMALL);
                if ("true".equals(mdcDeviceCalendarVo.getIsDaySpan())) {
                    overtimeEnd = DateUtils.addDays(overtimeEnd, 1);
                }
                MdcShiftDateVo dates = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), startDate, endDate, effectiveDateStr, endTime, start, end);
                result.add(dates);
                dateList.add(overtimeEnd);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (!dateList.isEmpty()) {
            dateList.sort(Date::compareTo);
            result.setStartTime(dateList.get(0));
            result.setEndTime(dateList.get(dateList.size() - 1));
        }
        return result;
    }