From f84d9e69907cb678150eaa6393fd74cf042fcca4 Mon Sep 17 00:00:00 2001 From: zenglf <18502938215@163.com> Date: 星期四, 28 九月 2023 14:39:03 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into develop --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java | 717 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 717 insertions(+), 0 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java new file mode 100644 index 0000000..ac902e9 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java @@ -0,0 +1,717 @@ +package org.jeecg.modules.mdc.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang.StringUtils; +import org.jeecg.modules.mdc.entity.Equipment; +import org.jeecg.modules.mdc.entity.MdcEquipmentRepair; +import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection; +import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; +import org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalShiftInfoMapper; +import org.jeecg.modules.mdc.service.*; +import org.jeecg.modules.mdc.util.DateUtils; +import org.jeecg.modules.mdc.vo.MdcDateVo; +import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo; +import org.jeecg.modules.mdc.vo.MdcShiftDateVo; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 璁惧鍗曟棩鐝杩愯鏁版嵁琛� + * @author: LiuS + * @create: 2023-07-24 11:19 + */ +@Service +public class MdcEquipmentStatisticalShiftInfoServiceImpl extends ServiceImpl<MdcEquipmentStatisticalShiftInfoMapper, MdcEquipmentStatisticalShiftInfo> implements IMdcEquipmentStatisticalShiftInfoService { + + @Resource + private IEquipmentService equipmentService; + + @Resource + private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; + + @Resource + private IMdcDeviceCalendarService mdcDeviceCalendarService; + + @Resource + private IMdcEquipmentRepairService mdcEquipmentRepairService; + + /** + * 璁$畻璁惧鍗曟棩鐝杩愯鏁版嵁 + * + * @param dateTime + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public void runningAllEquipmentShiftStatisticalProcess(String dateTime) { + if (StringUtils.isNotBlank(dateTime)) { + try { + Date initDate = DateUtils.toDate(dateTime, "yyyyMMdd"); + if (initDate != null) { + this.remove(new LambdaQueryWrapper<MdcEquipmentStatisticalShiftInfo>().eq(MdcEquipmentStatisticalShiftInfo::getTheDate, dateTime)); + } + } catch (Exception e) { + log.error("鍙傛暟鏍煎紡涓嶅", e); + } + } + List<Equipment> equipmentList = equipmentService.list(); + List<MdcEquipmentStatisticalShiftInfo> result = new ArrayList<>(); + for (Equipment equipment : equipmentList) { + List<MdcEquipmentStatisticalShiftInfo> equipmentStatisticalShiftInfoList = equipmentShiftStatisticalProcess(equipment, dateTime); + if (equipmentStatisticalShiftInfoList != null && !equipmentStatisticalShiftInfoList.isEmpty()) { + result.addAll(equipmentStatisticalShiftInfoList); + } + } + if (!result.isEmpty()) { + this.saveBatch(result); + } + } + + @Transactional(readOnly = true) + List<MdcEquipmentStatisticalShiftInfo> equipmentShiftStatisticalProcess(Equipment equipment, String dateTime) { + Date initDate = null; + //鍙栨渶鍚庣殑缁熻鏁版嵁 + if (StringUtils.isBlank(dateTime)) { + MdcEquipmentStatisticalShiftInfo nearestDate = this.baseMapper.getMaxStaticsData(equipment.getEquipmentid()); + if (nearestDate != null) { + initDate = DateUtils.toDate(nearestDate.getTheDate(), "yyyyMMdd"); + initDate = DateUtils.plusTime(initDate, 1); + } else { + //鍒濇鍙栧�� 鍙栨渶鏃╂椂闂� + MdcEquipmentRunningSection equipmentRunningSection = mdcEquipmentRunningSectionService.getFirstData(equipment.getEquipmentid()); + if (equipmentRunningSection != null) { + initDate = equipmentRunningSection.getStartTime(); + } + } + } else { + try { + initDate = DateUtils.toDate(dateTime, "yyyyMMdd"); + initDate = DateUtils.plusTime(initDate, 0); + } catch (Exception e) { + log.error("鍙傛暟鏍煎紡涓嶅", null); + return null; + } + } + if (initDate == null) { + return null; + } + Date endDate = DateUtils.plusTime(DateUtils.getNow(), 0); + if (!DateUtils.less(initDate, endDate)) { + return Collections.emptyList(); + } + //鑾峰彇涓や釜鏃堕棿娈电殑宸� + List<String> stringDates = DateUtils.getDatesStringList2(initDate, DateUtils.plusTime(endDate, -1)); + if (stringDates.isEmpty()) { + return Collections.emptyList(); + } + //鏌ヨ鐝埗鐝淇℃伅 + Map<String, List<MdcDeviceCalendarVo>> listMap = this.mdcDeviceCalendarMap(equipment.getEquipmentid(), stringDates); + if (listMap.isEmpty()) { + listMap = new HashMap<>(); + } + List<MdcEquipmentStatisticalShiftInfo> 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; + } + //鍚堝苟 + MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo = new MdcEquipmentStatisticalShiftInfo(); + equipmentStatisticalShiftInfo.setEquipmentId(equipment.getEquipmentid()); + //澶勭悊鏃堕棿 + Date date = DateUtils.strToDate(stringDate, DateUtils.STRDATE); + equipmentStatisticalShiftInfo.setTheDate(DateUtils.format(date, DateUtils.STRDATE)); + equipmentStatisticalShiftInfo.setShiftId(mdcDeviceCalendarVo.getShiftId()); + equipmentStatisticalShiftInfo.setShiftSubId(mdcDeviceCalendarVo.getShiftSubId()); + equipmentStatisticalShiftInfo.setCreateTime(new Date()); + for (MdcShiftDateVo dates : datesListByMdcDeviceCalendarVo) { + //澶勭悊鏁版嵁 + MdcEquipmentStatisticalShiftInfo shiftInfo = this.selectRunningEquipment(dates, equipment.getEquipmentid()); + equipmentStatisticalShiftInfo.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong().add(shiftInfo.getWaitLong())); + equipmentStatisticalShiftInfo.setProcessLong(equipmentStatisticalShiftInfo.getProcessLong().add(shiftInfo.getProcessLong())); + equipmentStatisticalShiftInfo.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong().add(shiftInfo.getCloseLong())); + equipmentStatisticalShiftInfo.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong().add(shiftInfo.getOpenLong())); + equipmentStatisticalShiftInfo.setErrorLong(equipmentStatisticalShiftInfo.getErrorLong().add(shiftInfo.getErrorLong())); + equipmentStatisticalShiftInfo.setTotalLong(equipmentStatisticalShiftInfo.getTotalLong().add(shiftInfo.getTotalLong())); + } + resultList.add(equipmentStatisticalShiftInfo); + } + } + } + return resultList; + } + + /** + * 鏌ヨ鏌愪竴澶╂煇涓彮娆$殑鏁版嵁 + * + * @param dates + * @param equipmentid + * @return + */ + private MdcEquipmentStatisticalShiftInfo selectRunningEquipment(MdcShiftDateVo dates, String equipmentid) { + if (dates == null || StringUtils.isBlank(equipmentid)) { + return null; + } + //鏌ヨ鏄惁闇�瑕佺淮淇殑璁惧 + List<MdcEquipmentRepair> repairs = mdcEquipmentRepairService.mdcRepairListDate(equipmentid, dates.getStartDate(), dates.getEndDate()); + //鍒跺害鏃堕棿娈靛唴鐨勪紤鐝拰缁翠慨鏃堕棿娈电瓫閫� + List<MdcEquipmentRepair> repairList = this.findSubRepairs(repairs, dates); + List<MdcDateVo> dateList = new ArrayList<>(); + if (repairList == null || repairList.isEmpty()) { + //鍒跺害鏃堕棿娈靛唴娌℃湁缁翠慨鍜屼紤鐝椂闂存 + MdcEquipmentStatisticalShiftInfo shiftInfo = mdcRateEquipment(equipmentid, dates.getStartDate(), dates.getEndDate()); + return shiftInfo; + } else { + 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() ) { + MdcDateVo d1 = new MdcDateVo(); + d1.setStartTime(dates.getStartDate()); + d1.setEndTime(repairList.get(0).getStartTime()); + dateList.add(d1); + MdcDateVo d2 = new MdcDateVo(); + d2.setStartTime(repairList.get(0).getEndTime()); + d2.setEndTime(dates.getEndDate()); + dateList.add(d2); + } else if (start == dates.getStart() && end < dates.getEnd()){ + MdcDateVo d2 = new MdcDateVo(); + d2.setStartTime(repairList.get(0).getEndTime()); + d2.setEndTime(dates.getEndDate()); + dateList.add(d2); + } else if (start > dates.getStart() && end == dates.getEnd()) { + MdcDateVo d1 = new MdcDateVo(); + d1.setStartTime(dates.getStartDate()); + d1.setEndTime(repairList.get(0).getStartTime()); + dateList.add(d1); + } else { + //浼戠彮 + MdcEquipmentStatisticalShiftInfo vo = new MdcEquipmentStatisticalShiftInfo(); + vo.setTotalLong(BigDecimal.ZERO); + vo.setErrorLong(BigDecimal.ZERO); + vo.setProcessLong(BigDecimal.ZERO); + vo.setWaitLong(BigDecimal.ZERO); + vo.setCloseLong(BigDecimal.ZERO); + vo.setOpenLong(BigDecimal.ZERO); + return vo; + } + } else { + long s = dates.getStartDate().getTime(); + 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 ) { + MdcDateVo d = new MdcDateVo(); + d.setStartTime(dates.getStartDate()); + d.setEndTime(repairList.get(i).getStartTime()); + if (d.getEndTime().getTime() != d.getStartTime().getTime()) { + dateList.add(d); + } + dates.setStartDate(repairList.get(i).getEndTime()); + } else if (start == s) { + dates.setStartDate(repairList.get(i).getEndTime()); + } + if(i == repairList.size() -1 ) { + if(dates.getStartDate().getTime() >= end) { + MdcDateVo d = new MdcDateVo(); + d.setStartTime(repairList.get(i).getEndTime()); + d.setEndTime(dates.getEndDate()); + if (d.getEndTime().getTime() != d.getStartTime().getTime()) { + dateList.add(d); + } + } + } + } + } + } + MdcEquipmentStatisticalShiftInfo shiftInfo = new MdcEquipmentStatisticalShiftInfo(); + for (MdcDateVo date : dateList) { + MdcEquipmentStatisticalShiftInfo v = mdcRateEquipment(equipmentid, date.getStartTime(), date.getEndTime()); + shiftInfo.setTotalLong(v.getTotalLong().add(shiftInfo.getTotalLong())); + shiftInfo.setOpenLong(v.getOpenLong().add(shiftInfo.getOpenLong())); + shiftInfo.setCloseLong(v.getCloseLong().add(shiftInfo.getCloseLong())); + shiftInfo.setWaitLong(v.getWaitLong().add(shiftInfo.getWaitLong())); + shiftInfo.setProcessLong(v.getProcessLong().add(shiftInfo.getProcessLong())); + shiftInfo.setErrorLong(v.getErrorLong().add(shiftInfo.getErrorLong())); + } + return shiftInfo; + } + + private MdcEquipmentStatisticalShiftInfo mdcRateEquipment(String equipmentid, Date startDate, Date endDate) { + MdcDateVo date = new MdcDateVo(); + date.setStartTime(startDate); + date.setEndTime(endDate); + List<MdcEquipmentRunningSection> runningSections = new ArrayList<>(); + runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSectionRun(equipmentid, startDate.getTime(), endDate.getTime()); + //鏌ヨ濡傛灉鏃犳暟鎹渶瑕� EquipmentLog 瑙f瀽 + if (runningSections == null || runningSections.isEmpty()) { + runningSections = mdcEquipmentRunningSectionService.listRunningSectionFromLog(equipmentid, startDate.getTime(), endDate.getTime()); + } + if(runningSections == null || runningSections.isEmpty()) { + runningSections = new ArrayList<>(); + } + List<MdcEquipmentRunningSection> sectionErrors = mdcEquipmentRunningSectionService.listEquipmentRunningSectionError(equipmentid, startDate.getTime(), endDate.getTime()); + + // 鎺掗櫎鍩虹閰嶇疆鎶ヨ鍙凤紙鍩虹閰嶇疆鎶ヨ鍙风殑涓嶇畻鎶ヨ锛� + //sectionErrors = filterSectionErrors(equipmentId, sectionErrors); + MdcEquipmentStatisticalShiftInfo shiftInfo = new MdcEquipmentStatisticalShiftInfo(); + BigDecimal totalLongRairs = new BigDecimal("0"); + List<MdcEquipmentRunningSection> sectionList = findStatsEquipment(null, runningSections, date, sectionErrors); + if (sectionList == null || sectionList.isEmpty()) { + shiftInfo.setEquipmentId(equipmentid); + return shiftInfo; + } + List<MdcEquipmentRunningSection> runs = new ArrayList<>(); + List<MdcEquipmentRunningSection> errs = new ArrayList<>(); + for (MdcEquipmentRunningSection section : sectionList) { + if (section.getStatus() == 22 || section.getStatus() == 0) { + errs.add(section); + } + if (section.getStatus() == 3) { + runs.add(section); + } + } + // 鍙婃�诲伐鏃� => 鏈夋晥鏃堕暱鍑� + BigDecimal totalLong = new BigDecimal(DateUtils.getSeconds(startDate, endDate)).subtract(totalLongRairs); + // 璁$畻鍔犲伐 + BigDecimal processLong = new BigDecimal("0"); + if (runs != null && !runs.isEmpty()) { + processLong = processLongInfo(runs); + } + // 鍏虫満鏁版嵁 + List<MdcEquipmentRunningSection> closes = errs.stream().filter(section -> section.getStatus() != 22).collect(Collectors.toList()); + + // 鍏虫満鏃堕暱 + BigDecimal closeLong = new BigDecimal("0"); + closeLong = closeLong(closes); + + /*鏁呴殰鏃堕棿 errs => 鍏虫満鏁版嵁 + 鎶ヨ鏁版嵁 */ + BigDecimal faultLong = new BigDecimal("0"); + faultLong = faultLongInfo(errs); + + //鎶ヨ鏁版嵁 + List<MdcEquipmentRunningSection> alarms = errs.stream().filter(section -> section.getStatus() == 22).collect(Collectors.toList()); + + //鎶ヨ鏃堕暱 + BigDecimal alarmLong = new BigDecimal("0"); + alarmLong = alarmLong(alarms); + + //寰呮満鏃堕暱 => 鏈夋晥鏃堕暱 - 杩愯鏃堕暱 - 鎶ヨ鏃堕暱 + BigDecimal waitLong = totalLong.subtract(processLong).subtract(alarmLong); + if (waitLong.compareTo(BigDecimal.ZERO) < 0) { + waitLong = new BigDecimal("0"); + } + + // 寮�鏈烘椂闀� => 鏈夋晥鏃堕暱 - 鍏虫満鏃堕暱 + BigDecimal openLong = totalLong.subtract(closeLong); + if (openLong.compareTo(BigDecimal.ZERO) < 0) { + openLong = new BigDecimal("0"); + } + + shiftInfo.setProcessLong(processLong); + shiftInfo.setTotalLong(totalLong); + shiftInfo.setWaitLong(waitLong); + shiftInfo.setErrorLong(alarmLong); + shiftInfo.setCloseLong(closeLong); + shiftInfo.setOpenLong(openLong); + return shiftInfo; + } + + /** + * 缁熻鍏虫満鏃堕暱 + */ + private BigDecimal closeLong(List<MdcEquipmentRunningSection> closes) { + BigDecimal closeLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection alarm : closes) { + closeLong = closeLong.add(new BigDecimal(alarm.getDuration())); + } + return closeLong; + } + + /** + * 缁熻鎶ヨ鏃堕暱 + */ + private BigDecimal alarmLong(List<MdcEquipmentRunningSection> alarms) { + BigDecimal alarmLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection alarm : alarms) { + alarmLong = alarmLong.add(new BigDecimal(alarm.getDuration())); + } + return alarmLong; + } + + /** + * 缁熻鏁呴殰鏃堕暱 + */ + private BigDecimal faultLongInfo(List<MdcEquipmentRunningSection> errs) { + BigDecimal faultLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection e : errs) { + faultLong = faultLong.add(new BigDecimal(e.getDuration())); + } + return faultLong; + } + + /** + * 缁熻鍔犲伐鏃堕暱 + */ + private BigDecimal processLongInfo(List<MdcEquipmentRunningSection> runs) { + BigDecimal processLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection se : runs) { + if (se.getStatus() == 3) { + processLong = processLong.add(new BigDecimal(se.getDuration())); + } + } + return processLong; + } + + private List<MdcEquipmentRunningSection> findStatsEquipment(List<MdcEquipmentRepair> repairs, List<MdcEquipmentRunningSection> sRun, MdcDateVo mdcDate, List<MdcEquipmentRunningSection> errors) { + if (sRun == null || sRun.isEmpty()) { + //鏃犳暟鎹鐞� + //TODO + return null; + } + Long startMdc = mdcDate.getStartTime().getTime(); + Long endMdc = mdcDate.getEndTime().getTime(); + if (sRun != null && !sRun.isEmpty()) { + 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()); + } else { + sRun.get(i).setStartTime(mdcDate.getStartTime()); + } + if (endMdc >= end) { + sRun.get(i).setEndTime( sRun.get(i).getEndTime()); + } else { + sRun.get(i).setEndTime(mdcDate.getEndTime()); + } + 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()); + } + } + } + //閮ㄥ垎鏁版嵁鏄淮淇� 1銆佽繍琛岀姸鎬佷笅鎶ヨ鎯呭喌 + List<MdcEquipmentRunningSection> faultRun = new ArrayList<>(); + //鍒跺害鏃堕棿娈靛唴鎶ヨ鏁版嵁 + 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()); + } else { + errors.get(i).setStartTime(mdcDate.getStartTime()); + } + if (endMdc >= end) { + errors.get(i).setEndTime( errors.get(i).getEndTime()); + } else { + errors.get(i).setEndTime(mdcDate.getEndTime()); + } + 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()); + } + } + + //鎶婅繍琛屼腑瀛樺湪鐨勬姤璀﹀墧闄ゆ帀 + for (MdcEquipmentRunningSection se : sRun) { + long runStart = se.getStartTime().getTime(); + long runEnd = se.getEndTime().getTime(); + if (se.getStatus() == 3) { + if (errors != null && !errors.isEmpty() ) { + //澶勭悊鎶ヨ鏁版嵁 + 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 ) { + errors.get(i).setEndTime(se.getStartTime()); + Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(), + errors.get(i).getEndTime()); + errors.get(i).setDuration(sen); + errors.get(i).setStartLong(errors.get(i).getStartTime().getTime()); + errors.get(i).setEndLong(errors.get(i).getEndTime().getTime()); + } + // 鎶ヨ寮�濮� 澶т簬 杩愯寮�濮� 锛� 鎶ヨ寮�濮� 灏忎簬 杩愯缁撴潫 锛屾姤璀︾粨鏉� 澶т簬 杩愯缁撴潫 + 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()); + errors.get(i).setDuration(sen); + errors.get(i).setStartLong(errors.get(i).getStartTime().getTime()); + errors.get(i).setEndLong(errors.get(i).getEndTime().getTime()); + } + // 鎶ヨ寮�濮� 澶т簬 杩愯寮�濮� 锛� 鎶ヨ寮�濮� 灏忎簬 杩愯缁撴潫 锛屾姤璀︾粨鏉� 澶т簬 杩愯寮�濮嬶紝鎶ヨ缁撴潫 灏忎簬 杩愯缁撴潫 + else if (errStart >= runStart && errStart < runEnd && + errEnd > runStart && errEnd <= runEnd ){ + errors.remove(i); + i--; + } + //濡傛灉瓒呭嚭鑼冨洿 + else if (errStart <= runStart && errStart < runEnd && + errEnd > runStart && errEnd >= runEnd ) { + MdcEquipmentRunningSection errOne = new MdcEquipmentRunningSection(); + errOne.setEndTime(errors.get(i).getEndTime()); + + errors.get(i).setStartTime(errors.get(i).getStartTime()); + errors.get(i).setEndTime(se.getStartTime()); + Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(), + errors.get(i).getEndTime()); + // + + //TODO + errOne.setStatus(22); + errOne.setEquipmentId(errors.get(i).getEquipmentId()); + errOne.setStartTime(se.getEndTime()); + errors.get(i).setDuration(sen); + errors.get(i).setStartLong(errors.get(i).getStartTime().getTime()); + errors.get(i).setEndLong(errors.get(i).getEndTime().getTime()); + + Long one = DateUtils.differentSecond(errOne.getStartTime(), errOne.getEndTime()); + errOne.setDuration(one); + errOne.setStartLong(errOne.getStartTime().getTime()); + errOne.setEndLong(errOne.getEndTime().getTime()); + if (sen <= 0) { + errors.remove(i); + errors.add(i,errOne); + } else { + errors.add(i+1,errOne); + i++; + } + } else { + continue; + } + } + } + } + } + } + //澶勭悊鎶ヨ鏁版嵁 + List<MdcEquipmentRunningSection> sectionList = new ArrayList<>(); + if (sRun != null && !sRun.isEmpty()) { + for (MdcEquipmentRunningSection se : sRun) { + sectionList.add(se); + } + } + //鎶ヨ鍓旈櫎杩愯鎶ヨ + if (errors != null && !errors.isEmpty()) { + sectionList.addAll(errors); + } + //鍏虫満澶勭悊涓烘晠闅滄姤璀� + if (faultRun != null && !faultRun.isEmpty()) { + sectionList.addAll(faultRun); + } + return sectionList; + } + + private List<MdcEquipmentRepair> findSubRepairs(List<MdcEquipmentRepair> repairs, MdcShiftDateVo dates) { + if (repairs == null || repairs.isEmpty() || dates == null) { + return null; + } + for (MdcEquipmentRepair repair : repairs) { + //璋冩暣 + Date start = null; + Date end = null; + long dStart = dates.getStartDate().getTime(); + long dEnd = dates.getEndDate().getTime(); + long rStart = repair.getStartTime().getTime(); + long rEnd = repair.getEndTime().getTime(); + + if (rStart <= dStart && rEnd >= dStart && rEnd <= dEnd) { + start = dates.getStartDate(); + end = repair.getEndTime(); + } else if (rStart >= dStart && rEnd <= dEnd) { + start = repair.getStartTime(); + end = repair.getEndTime(); + } else if (rStart >= dStart && rStart <= dEnd && rEnd >= dEnd) { + start = repair.getStartTime(); + end = dates.getEndDate(); + } else if (rStart <= dStart && rEnd >= dEnd) { + start = dates.getStartDate(); + end = dates.getEndDate(); + } + repair.setStartTime(start); + repair.setEndTime(end); + //澶勭悊寮傚父鏁版嵁 + if (start == null || end == null) { + repair.setSecondLong(0); + } else { + try { + repair.setSecondLong(DateUtils.getSeconds(start, end)); + } catch (Exception e) { + repair.setSecondLong(0); + } + + } + + } + for (int i = 0; i < repairs.size(); i++) { + if (repairs.get(i).getStartTime() == null || repairs.get(i).getEndTime() == null || repairs.get(i).getSecondLong() == 0) { + repairs.remove(i); + i--; + } + } + return repairs; + } + + /** + * 鏃堕棿闂澶勭悊 濡傛灉褰撳ぉ鏈�鏈熬鏃堕棿澶т簬褰撳墠鏃堕棿 杩斿洖0 + * + * @param temp + * @return + */ + 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 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); + } + 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); + } + } catch (ParseException e) { + e.printStackTrace(); + } + return result; + } + + /** + * 璁惧鐝杞崲 + * + * @param equipmentid + * @param stringDates + * @return + */ + private Map<String, List<MdcDeviceCalendarVo>> mdcDeviceCalendarMap(String equipmentid, List<String> stringDates) { + List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = mdcDeviceCalendarService.listByEquipmentAndDate(equipmentid, stringDates); + if (mdcDeviceCalendarVos.isEmpty()) { + return null; + } + Map<String, List<MdcDeviceCalendarVo>> map = new HashMap<>(); + for (MdcDeviceCalendarVo mdcDeviceCalendarVo : mdcDeviceCalendarVos) { + List<MdcDeviceCalendarVo> mdcDeviceCalendarVos1; + if (map.containsKey(mdcDeviceCalendarVo.getEffectiveDate())) { + mdcDeviceCalendarVos1 = map.get(mdcDeviceCalendarVo.getEffectiveDate()); + } else { + mdcDeviceCalendarVos1 = new ArrayList<>(); + } + mdcDeviceCalendarVos1.add(mdcDeviceCalendarVo); + map.put(mdcDeviceCalendarVo.getEffectiveDate(), mdcDeviceCalendarVos1); + } + return map; + } + + private long getLongDate(Date effectiveDate, String startDateStr, String isDaySpan) { + String[] startDateArray = startDateStr.split(":"); + Calendar cal = Calendar.getInstance(); + cal.setTime(effectiveDate); + cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startDateArray[0])); + cal.set(Calendar.MINUTE, Integer.parseInt(startDateArray[1])); + cal.set(Calendar.SECOND, Integer.parseInt(startDateArray[2])); + if ("true".equals(isDaySpan)) { + cal.add(Calendar.DAY_OF_YEAR, 1); + } + return cal.getTime().getTime(); + } +} -- Gitblit v1.9.3