Lius
2024-05-09 efc5dece153d8e51f9e18e136a35558c4ae8a894
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.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.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
/**
@@ -52,8 +53,8 @@
    @Transactional(rollbackFor = {Exception.class})
    public void runningProcessCount() {
        // 获取所有设备
        //List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2240074"));
        List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list();
        //List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198"));
        List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getDriveType, "FANUC"));
        List<MdcProcessCount> result = new ArrayList<>();
        for (MdcEquipment mdcEquipment : mdcEquipmentList) {
            List<MdcProcessCount> mdcProcessCountList = processCount(mdcEquipment);
@@ -76,7 +77,7 @@
     * @return
     */
    @Override
    public IPage<MdcProcessCountDto> pageList(String userId, Page<MdcProcessCountDto> page, MdcProcessCountVo mdcProcessCountVo, HttpServletRequest req) {
    public List<MdcProcessCountDto> pageList(String userId, MdcProcessCountVo mdcProcessCountVo, HttpServletRequest req) {
        List<String> equipmentIds = new ArrayList<>();
        if (StringUtils.isNotEmpty(mdcProcessCountVo.getParentId()) && StringUtils.isEmpty(mdcProcessCountVo.getEquipmentId())) {
            if ("2".equals(mdcProcessCountVo.getTypeTree())) {
@@ -106,24 +107,32 @@
        if (mdcProcessCountVo.getMdcSectionIds() == null || mdcProcessCountVo.getMdcSectionIds().isEmpty()) {
            return null;
        }
        return this.baseMapper.pageList(page, mdcProcessCountVo);
        return this.baseMapper.pageList(mdcProcessCountVo);
    }
    @Transactional(readOnly = true)
    @Override
    public BigDecimal findDuration(String equipmentId, String validDate) {
        BigDecimal result = this.baseMapper.findDuration(equipmentId, validDate.replaceAll("-", ""));
        return result == null ? BigDecimal.ZERO : result;
    }
    @Override
    public BigDecimal findCount(String equipmentId, String validDate) {
        BigDecimal result = this.baseMapper.findCount(equipmentId, validDate.replaceAll("-", ""));
        return result == null ? BigDecimal.ZERO : result;
    }
    List<MdcProcessCount> processCount(MdcEquipment mdcEquipment) {
        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);
        } else {
            //初次取值 取最早时间
            MdcDeviceCalendar mdcDeviceCalendar = mdcDeviceCalendarService.getFirstData(mdcEquipment.getEquipmentId());
            if (mdcDeviceCalendar != null) {
                initDate = DateUtils.toDate(mdcDeviceCalendar.getEffectiveDate(), DateUtils.STRDATE);
            }
            //初次取值 取当前时间往前推一个月时间
//            MdcDeviceCalendar mdcDeviceCalendar = mdcDeviceCalendarService.getFirstData(mdcEquipment.getEquipmentId());
            initDate = DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE);
        }
        if (initDate == null) {
            return null;
@@ -140,206 +149,152 @@
        // 获取设备班次信息
        Map<String, List<MdcDeviceCalendarVo>> listMap = this.mdcDeviceCalendarMap(mdcEquipment.getEquipmentId(), stringDates);
        if (listMap == null || listMap.isEmpty()) {
            listMap = new HashMap<>();
            return null;
        }
        List<MdcProcessCount> resultList = new ArrayList<>();
        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<String> productCountList = new ArrayList<>();
                try {
                    productCountList = equipmentWorkLineService.findRunningData(mdcEquipment.getSaveTableName(), mdcDateVo.getStartTime(), mdcDateVo.getEndTime());
                } catch (Exception e) {
                    continue;
                }
                            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;
                                }
                                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());
                                    }
                                }
                if (productCountList == null || productCountList.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);
                            if (mdcEquipmentDto == null) {
                                continue;
                            }
                            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 (String productCount : productCountList) {
                    MdcEquipmentDto mdcEquipmentDtoFirst = equipmentWorkLineService.findProductCountStartTime(mdcEquipment.getSaveTableName(), productCount, mdcDateVo.getStartTime(), mdcDateVo.getEndTime());
                    if (mdcEquipmentDtoFirst == null) {
                        continue;
                    }
                    Date start = mdcEquipmentDtoFirst.getCollectTime();
                    MdcEquipmentDto mdcEquipmentDtoLast = equipmentWorkLineService.findProductCountEndTime(mdcEquipment.getSaveTableName(), productCount, mdcDateVo.getStartTime(), mdcDateVo.getEndTime());
                    if (mdcEquipmentDtoLast == null) {
                        continue;
                    }
                    Date end = mdcEquipmentDtoLast.getCollectTime();
                    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);
                            }
                        } else {
                            if (equipmentRunningSectionList.get(0).getEndTime().after(end)) {
                                equipmentRunningSectionList.get(0).setEndTime(end);
                            }
                        }
                        //计算加工时长
                        long duration = this.handleProcessDuration(equipmentRunningSectionList);
                        if (duration != 0 && duration < 100000) {
                            MdcProcessCount mdcProcessCount = new MdcProcessCount();
                            mdcProcessCount.setEquipmentId(mdcEquipment.getEquipmentId());
                            mdcProcessCount.setEquipmentName(mdcEquipment.getEquipmentName());
                            if (StringUtils.isBlank(mdcEquipmentDtoFirst.getSequencenumber())) {
                                mdcProcessCount.setSequenceNumber(mdcEquipmentDtoLast.getSequencenumber());
                            } else {
                                mdcProcessCount.setSequenceNumber(mdcEquipmentDtoFirst.getSequencenumber());
                            }
                            mdcProcessCount.setDuration(duration);
                            mdcProcessCount.setTheDate(stringDate);
                            resultList.add(mdcProcessCount);
                        }
                    }
                }
            }
        }
        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;
    }
    private Map<String, List<MdcDeviceCalendarVo>> mdcDeviceCalendarMap(String equipmentId, List<String> stringDates) {
        List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = mdcDeviceCalendarService.listByEquipmentAndDate(equipmentId, stringDates);
        if (mdcDeviceCalendarVos.isEmpty()) {
        if (mdcDeviceCalendarVos == null || mdcDeviceCalendarVos.isEmpty()) {
            return null;
        }
        Map<String, List<MdcDeviceCalendarVo>> map = new HashMap<>();