package com.qianwen.mdc.collect.service; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.google.common.collect.Sets; import com.qianwen.mdc.collect.cache.TimeSliceCache; import com.qianwen.mdc.collect.cache.WorkstationCache; import com.qianwen.mdc.collect.constants.CommonConstant; import com.qianwen.mdc.collect.domain.TelemetryData; import com.qianwen.mdc.collect.domain.TelemetryDataItem; import com.qianwen.mdc.collect.dto.CacheBuildDTO; import com.qianwen.mdc.collect.dto.CalendarShiftTimeSlicesDTO; import com.qianwen.mdc.collect.dto.PackedTelemetryData; import com.qianwen.mdc.collect.handler.PackedTelemetryDataHandlerSelector; import com.qianwen.mdc.collect.handler.TelemetryDataHandler; import com.qianwen.mdc.collect.utils.LocalDateTimeUtils; import com.qianwen.mdc.collect.vo.FactoryDataVO; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; /** * 工厂数据获取 */ @Service public class FactoryDataService { private static final Logger log = LoggerFactory.getLogger(FactoryDataService.class); private static final Map PROCESS_PARAM_MAP = new HashMap<>(); @Autowired private WorkstationCache workstationCache; @Autowired private TimeSliceCache timeSliceCache; /** * 填充生产日历code,以及factoryyear * * @param pdata */ public FactoryDataVO getFactoryData(long workstationId,long dataCollectTime) { //原来在TelemetryPropertyWrapper.packWorkstationCalendarInfo中完成 FactoryDataVO result = new FactoryDataVO(); Date collectTime = new Date(dataCollectTime); String calendarCode = workstationCache.getWorkstationCalendarCodeForDate(workstationId, DateUtil.formatDate(DateUtil.date(collectTime))); if (ObjectUtil.isNotEmpty(calendarCode)) { result.setCalendarCode(calendarCode); } else { //telemetryData.setCalendarCode("#default#"); result.setCalendarCode("#default#"); } // TelemetryPropertyWrapper中packWorkstationCalendarInfo //------------start boolean isDefaultCalendar = true; if (!"#default#".equals(result.getCalendarCode())) { CalendarShiftTimeSlicesDTO calendarShiftTimeSlicesDTO = timeSliceCache.getTimeSliceShift(result.getCalendarCode(), collectTime);//从redis中获得日历的时间切片 if (ObjectUtil.isEmpty(calendarShiftTimeSlicesDTO)) {//如果没有时间切片,则使用TimeSliceCache.build(cacheBuildDTO);构建 LocalDate targetDate = Instant.ofEpochMilli(dataCollectTime).atZone(ZoneOffset.systemDefault()).toLocalDate(); CacheBuildDTO cacheBuildDTO = CacheBuildDTO.builder().tenantIds(Sets.newHashSet(new String[]{"000000"})).calendarCode(calendarCode).targetDate(targetDate).build(); timeSliceCache.build(cacheBuildDTO); calendarShiftTimeSlicesDTO = timeSliceCache.getTimeSliceShift(result.getCalendarCode(), collectTime); } if (ObjectUtil.isNotEmpty(calendarShiftTimeSlicesDTO)) { result.setShiftIndex(calendarShiftTimeSlicesDTO.getShiftIndex()); result.setShiftTimeType(Integer.valueOf(calendarShiftTimeSlicesDTO.getShiftTimeType())); result.setFactoryDate(Integer.valueOf(calendarShiftTimeSlicesDTO.getFactoryDate().replaceAll("-", ""))); result.setFactoryWeek(calendarShiftTimeSlicesDTO.getFactoryWeek()); result.setFactoryMonth(calendarShiftTimeSlicesDTO.getFactoryMonth()); result.setFactoryYear(calendarShiftTimeSlicesDTO.getFactoryYear()); isDefaultCalendar = false; } } //无日历切片,使用采集时间填充factoryYear,month,date,week几个属性 if (isDefaultCalendar) { log.info("无日历切片"); LocalDate localDate = Instant.ofEpochMilli(dataCollectTime).atZone(ZoneOffset.systemDefault()).toLocalDate(); result.setFactoryDate(Integer.valueOf(DatePattern.PURE_DATE_FORMAT.format(collectTime))); result.setFactoryYear(DateUtil.year(collectTime)); result.setFactoryWeek(LocalDateTimeUtils.getWeek(localDate)); result.setFactoryMonth(DateUtil.month(collectTime) + 1); result.setShiftIndex(CommonConstant.DEFAULT_SHIFT_INDEX); result.setShiftTimeType(CommonConstant.DEFAULT_SHIFT_TYPE); } return result; } }