package com.qianwen.smartman.modules.report.service.impl; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.google.common.collect.Lists; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.qianwen.smartman.common.constant.DateConstant; import com.qianwen.core.tool.utils.BeanUtil; import com.qianwen.core.tool.utils.DateUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.modules.cps.dto.ShiftInfoDTO; import com.qianwen.smartman.modules.cps.mapper.CalendarMapper; import com.qianwen.smartman.modules.cps.mapper.WorkstationMapper; import com.qianwen.smartman.modules.cps.service.IShiftDetailService; import com.qianwen.smartman.modules.mdc.enums.OpenTypeEnums; import com.qianwen.smartman.modules.mdc.enums.StatisticalMethodEnum; import com.qianwen.smartman.modules.mdc.mapper.SuperAlarmMapper; import com.qianwen.smartman.modules.mdc.utils.FilterOffUtils; import com.qianwen.smartman.modules.report.dto.WorkstationDataDTO; import com.qianwen.smartman.modules.report.dto.WorkstationShiftDTO; import com.qianwen.smartman.modules.report.service.IWorkstationAlarmService; import com.qianwen.smartman.modules.report.utils.CommonUtil; import com.qianwen.smartman.modules.report.utils.DateCycleUtil; import com.qianwen.smartman.modules.report.utils.ResultUtil; import com.qianwen.smartman.modules.report.vo.DrillWorkstationAlarmByShiftSelectVO; import com.qianwen.smartman.modules.report.vo.DrillWorkstationAlarmByShiftVO; import com.qianwen.smartman.modules.report.vo.DrillWorkstationAlarmByTimeSelectVO; import com.qianwen.smartman.modules.report.vo.DrillWorkstationAlarmByTimeVO; import com.qianwen.smartman.modules.report.vo.WorkstaionAlarmByShiftReportVO; import com.qianwen.smartman.modules.report.vo.WorkstaionAlarmByTimeReportVO; import com.qianwen.smartman.modules.report.vo.WorkstationAlarmByShiftSelectVO; import com.qianwen.smartman.modules.report.vo.WorkstationAlarmByTimeSelectVO; import org.springframework.stereotype.Service; @Service /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/report/service/impl/WorkstationAlarmServiceImpl.class */ public class WorkstationAlarmServiceImpl implements IWorkstationAlarmService { private static final Logger log = LoggerFactory.getLogger(WorkstationAlarmServiceImpl.class); private final SuperAlarmMapper superAlarmMapper; private final WorkstationMapper workstationMapper; private final IShiftDetailService shiftDetailService; private final CalendarMapper calendarMapper; private static final String TIME_CONDITION = "showDate"; public WorkstationAlarmServiceImpl(final SuperAlarmMapper superAlarmMapper, final WorkstationMapper workstationMapper, final IShiftDetailService shiftDetailService, final CalendarMapper calendarMapper) { this.superAlarmMapper = superAlarmMapper; this.workstationMapper = workstationMapper; this.shiftDetailService = shiftDetailService; this.calendarMapper = calendarMapper; } @Override // org.springblade.modules.report.service.IWorkstationAlarmService public JSONObject alarmReportByTime(WorkstationAlarmByTimeSelectVO workstationAlarmByTimeSelectVO) { workstationAlarmByTimeSelectVO.setShowDate_begin(DateCycleUtil.setTimeCondition(TIME_CONDITION, Boolean.TRUE)); workstationAlarmByTimeSelectVO.setShowDate_end(DateCycleUtil.setTimeCondition(TIME_CONDITION, Boolean.FALSE)); JSONObject jsonObject = new JSONObject(); IPage workstationVOPage = this.workstationMapper.getWorkstationData(CommonUtil.getIPage(WorkstationDataDTO.class, workstationAlarmByTimeSelectVO.getPageSize(), workstationAlarmByTimeSelectVO.getPageNo(), this.workstationMapper), workstationAlarmByTimeSelectVO.getWorkstationKeyword(), workstationAlarmByTimeSelectVO.getWorkstationIds()); List voPageRecords = workstationVOPage.getRecords(); if (Func.isEmpty(voPageRecords)) { jsonObject.put("data", (Object) null); jsonObject.put("total", Long.valueOf(workstationVOPage.getPages())); jsonObject.put("count", Long.valueOf(workstationVOPage.getTotal())); return jsonObject; } CommonUtil.fillWorkStationGroup(workstationVOPage); List workstationIds = (List) voPageRecords.stream().map((v0) -> { return v0.getWorkstationId(); }).collect(Collectors.toList()); StatisticalMethodEnum anEnum = StatisticalMethodEnum.of(workstationAlarmByTimeSelectVO.getDateCycle()); String beginTime = DateCycleUtil.getDateByDateCycle(workstationAlarmByTimeSelectVO.getShowDate_begin(), anEnum, true); String endTime = DateCycleUtil.getDateByDateCycle(workstationAlarmByTimeSelectVO.getShowDate_end(), anEnum, false); List fillList = DateCycleUtil.fillDateCol(workstationAlarmByTimeSelectVO.getShowDate_begin(), workstationAlarmByTimeSelectVO.getShowDate_end(), anEnum); List reportData = getData(this.superAlarmMapper.alarmReportByTime(workstationIds, beginTime, endTime)); List result = new ArrayList<>(); fillList.forEach(dateCol -> { voPageRecords.forEach(workstation -> { WorkstaionAlarmByTimeReportVO resultVO = new WorkstaionAlarmByTimeReportVO(); BeanUtil.copyProperties(workstation, resultVO); resultVO.setShowDate(dateCol); resultVO.setAlarmCount(0); resultVO.setAlarmCountSum(0); result.add(resultVO); }); }); Map voMap = (Map) result.parallelStream().collect(Collectors.toMap(c -> { return c.getWorkstationId() + c.getShowDate(); }, o -> { return o; })); Map wsCount = (Map) reportData.parallelStream().collect(Collectors.groupingBy((v0) -> { return v0.getWorkstationId(); }, Collectors.reducing(0, e -> { return 1; }, (v0, v1) -> { return Integer.sum(v0, v1); }))); Map> workstationOutMap = (Map) reportData.parallelStream().collect(Collectors.groupingBy((v0) -> { return v0.getWorkstationId(); })); workstationOutMap.forEach((workstationId, outputList) -> { Map countMap = (Map) outputList.parallelStream().collect(Collectors.groupingBy(groupKey(anEnum), Collectors.reducing(0, e2 -> { return 1; }, (v0, v1) -> { return Integer.sum(v0, v1); }))); countMap.forEach((k, v) -> { WorkstaionAlarmByTimeReportVO vo = (WorkstaionAlarmByTimeReportVO) voMap.get(workstationId + k); if (!Objects.isNull(vo)) { vo.setAlarmCount(v); } }); }); if (Func.isNotEmpty(result) && Func.isNotEmpty(wsCount)) { result.forEach(o2 -> { if (wsCount.containsKey(o2.getWorkstationId())) { o2.setAlarmCountSum((Integer) wsCount.get(o2.getWorkstationId())); } }); } jsonObject.put("data", result); jsonObject.put("total", Long.valueOf(workstationVOPage.getPages())); jsonObject.put("count", Long.valueOf(workstationVOPage.getTotal())); return jsonObject; } @Override // org.springblade.modules.report.service.IWorkstationAlarmService public JSONObject drillAlarmReportByTime(DrillWorkstationAlarmByTimeSelectVO drillWorkstationAlarmByTimeSelectVO) { StatisticalMethodEnum anEnum; String parseBeginTime; String parseEndTime; List DrillWorkstationAlarmByTimeVO; String dateColStr = drillWorkstationAlarmByTimeSelectVO.getCurrentDate(); if (dateColStr.length() == 10) { anEnum = StatisticalMethodEnum.DAY; parseBeginTime = dateColStr; parseEndTime = dateColStr; } else if (dateColStr.contains("周")) { anEnum = StatisticalMethodEnum.WEEK; int year = Integer.valueOf(dateColStr.substring(0, dateColStr.indexOf("-"))).intValue(); int weekNo = Integer.valueOf(dateColStr.substring(dateColStr.indexOf("第") + 1, dateColStr.indexOf("周"))).intValue(); parseBeginTime = DateCycleUtil.getStartDayOfWeekNo(year, weekNo); parseEndTime = DateCycleUtil.getEndDayOfWeekNo(year, weekNo); } else { anEnum = StatisticalMethodEnum.MONTH; String[] dateColSplit = dateColStr.split("-"); parseBeginTime = DateCycleUtil.getFirstDayOfMonth(Integer.valueOf(dateColSplit[0]).intValue(), Integer.valueOf(dateColSplit[1]).intValue()); parseEndTime = DateCycleUtil.getEndDayOfMonth(Integer.valueOf(dateColSplit[0]).intValue(), Integer.valueOf(dateColSplit[1]).intValue()); } String beginTime = DateCycleUtil.getDateByDateCycle(parseBeginTime, anEnum, true); String endTime = DateCycleUtil.getDateByDateCycle(parseEndTime, anEnum, false); try { boolean filterType = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); Long count = this.superAlarmMapper.drillCountAlarmReport(drillWorkstationAlarmByTimeSelectVO.getWorkstationId(), beginTime, endTime, Boolean.valueOf(filterType), Boolean.valueOf(filterShift)); if (Func.isEmpty(count)) { return ResultUtil.dataToJsonObject(null, 0L, drillWorkstationAlarmByTimeSelectVO.getPageSize()); } Boolean isPrintAll = (Boolean) CommonUtil.getRequestParameter(CommonUtil.PRINT_ALL_KEY, Boolean.class); if (!Objects.isNull(isPrintAll) && isPrintAll.booleanValue()) { boolean filterType2 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift2 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); DrillWorkstationAlarmByTimeVO = this.superAlarmMapper.drillAlarmReportByTime(null, null, drillWorkstationAlarmByTimeSelectVO.getWorkstationId(), beginTime, endTime, Boolean.valueOf(filterType2), Boolean.valueOf(filterShift2)); } else { boolean filterType3 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift3 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); DrillWorkstationAlarmByTimeVO = this.superAlarmMapper.drillAlarmReportByTime(drillWorkstationAlarmByTimeSelectVO.getPageNo(), drillWorkstationAlarmByTimeSelectVO.getPageSize(), drillWorkstationAlarmByTimeSelectVO.getWorkstationId(), beginTime, endTime, Boolean.valueOf(filterType3), Boolean.valueOf(filterShift3)); } DrillWorkstationAlarmByTimeVO.forEach(o -> { o.setShowDate(DateUtil.format(DateUtil.parse(String.valueOf(o.getFactoryDate()), "yyyyMMdd"), DateConstant.PATTERN_DATE)); }); return ResultUtil.dataToJsonObject(DrillWorkstationAlarmByTimeVO, count, drillWorkstationAlarmByTimeSelectVO.getPageSize()); } catch (Exception e) { log.error("查询工位报警子表数量异常,异常信息为:", e); return ResultUtil.dataToJsonObject(null, 0L, drillWorkstationAlarmByTimeSelectVO.getPageSize()); } } @Override // org.springblade.modules.report.service.IWorkstationAlarmService public JSONObject alarmReportByShift(WorkstationAlarmByShiftSelectVO workstationAlarmByTimeSelectVO) { IPage workstationVOPage; workstationAlarmByTimeSelectVO.setShowDate_begin(DateCycleUtil.setTimeCondition(TIME_CONDITION, Boolean.TRUE)); workstationAlarmByTimeSelectVO.setShowDate_end(DateCycleUtil.setTimeCondition(TIME_CONDITION, Boolean.FALSE)); JSONObject jsonObject = new JSONObject(); StatisticalMethodEnum anEnum = StatisticalMethodEnum.DAY; List fillDateCol = DateCycleUtil.fillDateCol(workstationAlarmByTimeSelectVO.getShowDate_begin(), workstationAlarmByTimeSelectVO.getShowDate_end(), anEnum); IPage workstationVOPage2 = CommonUtil.getIPage(WorkstationDataDTO.class, workstationAlarmByTimeSelectVO.getPageSize(), workstationAlarmByTimeSelectVO.getPageNo(), this.workstationMapper); if (Func.isEmpty(workstationAlarmByTimeSelectVO.getShiftIndexName())) { workstationVOPage = this.workstationMapper.getWorkstationData(workstationVOPage2, workstationAlarmByTimeSelectVO.getWorkstationKeyword(), workstationAlarmByTimeSelectVO.getWorkstationIds()); } else { workstationVOPage = this.workstationMapper.getWorkstationDataWithIndexName(workstationVOPage2, workstationAlarmByTimeSelectVO.getWorkstationKeyword(), workstationAlarmByTimeSelectVO.getShiftIndexName(), workstationAlarmByTimeSelectVO.getShowDate_begin(), workstationAlarmByTimeSelectVO.getShowDate_end(), workstationAlarmByTimeSelectVO.getWorkstationIds()); } if (Func.isEmpty(workstationVOPage.getRecords())) { jsonObject.put("data", (Object) null); jsonObject.put("total", Long.valueOf(workstationVOPage.getPages())); jsonObject.put("count", Long.valueOf(workstationVOPage.getTotal())); return jsonObject; } CommonUtil.fillWorkStationGroup(workstationVOPage); List workstationData = workstationVOPage.getRecords(); List ids = (List) workstationData.parallelStream().map((v0) -> { return v0.getWorkstationId(); }).collect(Collectors.toList()); List shiftInfoDtoList = this.calendarMapper.listShiftInfo(ids, LocalDate.parse(workstationAlarmByTimeSelectVO.getShowDate_begin()), LocalDate.parse(workstationAlarmByTimeSelectVO.getShowDate_end())); List workstationShifts = CommonUtil.dataMerge(workstationData, shiftInfoDtoList); List filter = (List) workstationShifts.parallelStream().filter(CommonUtil.conditionFilter(workstationAlarmByTimeSelectVO.getShiftIndexName(), workstationAlarmByTimeSelectVO.getShiftIndex())).collect(Collectors.toList()); List result = new ArrayList<>(); fillDateCol.forEach(f -> { filter.forEach(shift -> { WorkstaionAlarmByShiftReportVO resultVO = new WorkstaionAlarmByShiftReportVO(); BeanUtil.copyProperties(shift, resultVO); resultVO.setShowDate(f); resultVO.setAlarmCount(0); resultVO.setAlarmCountSum(0); result.add(resultVO); }); }); String beginTime = DateCycleUtil.getDateByDateCycle(workstationAlarmByTimeSelectVO.getShowDate_begin(), anEnum, Boolean.TRUE); String endTime = DateCycleUtil.getDateByDateCycle(workstationAlarmByTimeSelectVO.getShowDate_end(), anEnum, Boolean.FALSE); boolean filterType = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); List voList = this.superAlarmMapper.alarmReportByShift(ids, beginTime, endTime, Boolean.valueOf(filterType), Boolean.valueOf(filterShift)); Map wsCount = (Map) voList.parallelStream().collect(Collectors.groupingBy(o -> { return o.getWorkstationId() + "-" + o.getShiftIndex(); }, Collectors.reducing(0, e -> { return 1; }, (v0, v1) -> { return Integer.sum(v0, v1); }))); Map> workstationOutMap = (Map) voList.parallelStream().collect(Collectors.groupingBy(s -> { return s.getWorkstationId() + "-" + s.getShiftIndex(); })); Map voMap = (Map) result.parallelStream().collect(LinkedHashMap::new, (map, c) -> { WorkstaionAlarmByShiftReportVO workstaionAlarmByShiftReportVO = (WorkstaionAlarmByShiftReportVO) map.put(c.getWorkstationId() + "-" + c.getShiftIndex() + "-" + c.getShowDate(), c); }, (v0, v1) -> { v0.putAll(v1); }); workstationOutMap.forEach((key, vos) -> { Map countMap = (Map) vos.parallelStream().collect(Collectors.groupingBy(o2 -> { return LocalDate.parse(String.valueOf(o2.getFactoryDate()), DateTimeFormatter.ofPattern("yyyyMMdd")).toString(); }, Collectors.reducing(0, e2 -> { return 1; }, (v0, v1) -> { return Integer.sum(v0, v1); }))); countMap.forEach((k, v) -> { WorkstaionAlarmByShiftReportVO vo = (WorkstaionAlarmByShiftReportVO) voMap.get(key + "-" + k); if (!Objects.isNull(vo)) { vo.setAlarmCount(v); } }); }); if (Func.isNotEmpty(result) && Func.isNotEmpty(wsCount)) { voMap.values().forEach(o2 -> { if (wsCount.containsKey(o2.getWorkstationId() + "-" + o2.getShiftIndex())) { o2.setAlarmCountSum((Integer) wsCount.get(o2.getWorkstationId() + "-" + o2.getShiftIndex())); } }); } return ResultUtil.dataToJsonObject(voMap.values(), Long.valueOf(workstationVOPage.getTotal()), workstationAlarmByTimeSelectVO.getPageSize()); } @Override // org.springblade.modules.report.service.IWorkstationAlarmService public JSONObject drillAlarmReportByShift(DrillWorkstationAlarmByShiftSelectVO drillWorkstationAlarmByShiftSelectVO) { List drillWorkstationAlarmByTimeVO; String beginTime = DateCycleUtil.getDateByDateCycle(drillWorkstationAlarmByShiftSelectVO.getCurrentDate(), StatisticalMethodEnum.DAY, true); String shift = StatisticalMethodEnum.SHIFT.getMode(); try { boolean filterType = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); Long count = this.superAlarmMapper.drillCountAlarmReport(drillWorkstationAlarmByShiftSelectVO.getWorkstationId(), beginTime, beginTime, Boolean.valueOf(filterType), Boolean.valueOf(filterShift)); if (Func.isEmpty(count)) { return ResultUtil.dataToJsonObject(null, 0L, drillWorkstationAlarmByShiftSelectVO.getPageSize()); } Boolean isPrintAll = (Boolean) CommonUtil.getRequestParameter(CommonUtil.PRINT_ALL_KEY, Boolean.class); if (!Objects.isNull(isPrintAll) && isPrintAll.booleanValue()) { boolean filterType2 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift2 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); drillWorkstationAlarmByTimeVO = this.superAlarmMapper.drillAlarmReportByShift(null, null, drillWorkstationAlarmByShiftSelectVO.getWorkstationId(), beginTime, beginTime, Boolean.valueOf(filterType2), Boolean.valueOf(filterShift2)); } else { boolean filterType3 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift3 = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); drillWorkstationAlarmByTimeVO = this.superAlarmMapper.drillAlarmReportByShift(drillWorkstationAlarmByShiftSelectVO.getPageNo(), drillWorkstationAlarmByShiftSelectVO.getPageSize(), drillWorkstationAlarmByShiftSelectVO.getWorkstationId(), beginTime, beginTime, Boolean.valueOf(filterType3), Boolean.valueOf(filterShift3)); } LocalDate currentDate = LocalDate.parse(drillWorkstationAlarmByShiftSelectVO.getCurrentDate(), DateTimeFormatter.ofPattern(DateConstant.PATTERN_DATE)); List shiftInfoDtoList = this.shiftDetailService.getShiftInfoDtoList(Lists.newArrayList(new Long[]{drillWorkstationAlarmByShiftSelectVO.getWorkstationId()}), currentDate, currentDate); Map shiftMap = (Map) shiftInfoDtoList.stream().collect(Collectors.toMap((v0) -> { return v0.getShiftIndex(); }, (v0) -> { return v0.getIndexName(); })); drillWorkstationAlarmByTimeVO.forEach(o -> { o.setShiftIndexName(shift + o.getShiftIndex()); if (shiftMap.containsKey(o.getShiftIndex())) { o.setShiftName((String) shiftMap.get(o.getShiftIndex())); } else { o.setShiftName(o.getShiftIndexName()); } }); return ResultUtil.dataToJsonObject(drillWorkstationAlarmByTimeVO, count, drillWorkstationAlarmByShiftSelectVO.getPageSize()); } catch (Exception e) { log.error("查询工位报警子表数量异常,异常信息为:", e); return ResultUtil.dataToJsonObject(null, 0L, drillWorkstationAlarmByShiftSelectVO.getPageSize()); } } private Function groupKey(StatisticalMethodEnum statisticalMethodEnum) { switch (statisticalMethodEnum) { case DAY: return output -> { return DateCycleUtil.getDateCycle(statisticalMethodEnum, String.valueOf(output.getFactoryDate())); }; case WEEK: return output2 -> { return DateCycleUtil.getDateCycle(statisticalMethodEnum, String.valueOf(output2.getFactoryWeek())); }; case MONTH: return output3 -> { return DateCycleUtil.getDateCycle(statisticalMethodEnum, String.valueOf(output3.getFactoryMonth())); }; default: return output4 -> { return DateCycleUtil.getDateCycle(statisticalMethodEnum, String.valueOf(output4.getWorkstationId())); }; } } private List getData(List data) { boolean filterType = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_TYPE, OpenTypeEnums.ALARM_ANALYSIS); boolean filterShift = FilterOffUtils.whetherToFilter(OpenTypeEnums.PARAM_KEY_SHIFT, OpenTypeEnums.ALARM_ANALYSIS); if (!filterType && !filterShift) { return data; } return (List) data.stream().filter(item -> { return (filterType && item.getShiftTimeType().equals(2)) ? false : true; }).filter(item2 -> { return !filterShift || item2.getShiftIndex().intValue() > 0; }).collect(Collectors.toList()); } }