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<Integer, String> 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;
|
}
|
|
}
|