package com.qianwen.mdc.collect.service.feedback; import java.util.List; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qianwen.core.tool.utils.Func; import com.qianwen.core.tool.utils.SpringUtil; import com.qianwen.mdc.collect.cache.WorkstationCache; import com.qianwen.mdc.collect.dto.CalendarShiftInfoDTO; import com.qianwen.mdc.collect.entity.iotdb.DeviceState; import com.qianwen.mdc.collect.entity.mgr.GlobalWcsOfRps; import com.qianwen.mdc.collect.entity.mgr.WorkstationWcsFeedback; import com.qianwen.mdc.collect.entity.mgr.WorkstationWcsFeedbackDetail; import com.qianwen.mdc.collect.enums.FeedbackDetailStatusEnum; import com.qianwen.mdc.collect.enums.FeedbackProcessStatusEnum; import com.qianwen.mdc.collect.enums.FeedbackTimePointEnum; import com.qianwen.mdc.collect.mapper.mgr.WorkstationWcsFeedbackDetailMapper; import com.qianwen.mdc.collect.mapper.mgr.WorkstationWcsFeedbackMapper; import com.qianwen.mdc.collect.mapper.iotdb.DeviceStateMapper; import com.qianwen.mdc.collect.service.WorkstationService; public class ImmediateFeedbackAnalyseResultBuilder { private ImmediateFeedbackAnalyseResult result = new ImmediateFeedbackAnalyseResult(); WorkstationWcsFeedbackMapper feedbackMapper = SpringUtil.getBean(WorkstationWcsFeedbackMapper.class); WorkstationWcsFeedbackDetailMapper feedbackDetailMapper = SpringUtil.getBean(WorkstationWcsFeedbackDetailMapper.class); public static ImmediateFeedbackAnalyseResultBuilder get() { return new ImmediateFeedbackAnalyseResultBuilder(); } public ImmediateFeedbackAnalyseResultBuilder buildBaseInfo(WorkstationWcsFeedback feedback) { if (Func.isEmpty(feedback.getEndTime())) { long detailCount = this.feedbackDetailMapper.selectCount(Wrappers.lambdaQuery() .eq(WorkstationWcsFeedbackDetail::getFeedbackId, feedback.getId())).longValue(); if (detailCount > 0) { this.result.setNeedProcess(false); } else { this.result.getEffectiveStateList().add(wrapperImmediateFeedbackStartTimePoint(feedback)); } } else { this.result.setResetState(true); this.result.setResetStartTime(feedback.getStartTime()); this.result.getEffectiveStateList().add(wrapperImmediateFeedbackStartTimePoint(feedback)); this.result.getEffectiveStateList().add(wrapperImmediateFeedbackEndTimePoint(feedback)); } return this; } public ImmediateFeedbackAnalyseResultBuilder buildFeedbackDetail(WorkstationWcsFeedback feedback) { if (this.result.getNeedProcess().booleanValue()) { WorkstationWcsFeedbackDetail feedbackDetail = new WorkstationWcsFeedbackDetail(); feedbackDetail.setWorkstationId(feedback.getWorkstationId()); feedbackDetail.setFeedbackId(feedback.getId()); feedbackDetail.setStartTime(feedback.getStartTime()); feedbackDetail.setEndTime(feedback.getEndTime()); feedbackDetail.setCancel(0); feedbackDetail.setStatus(FeedbackDetailStatusEnum.BE_EFFECTIVE.getValue()); feedbackDetail.setWcs(feedback.getWcs()); this.result.setFeedbackDetail(feedbackDetail); } return this; } private DeviceState wrapperImmediateFeedbackEndTimePoint(WorkstationWcsFeedback feedback) { DeviceState workstationState = new DeviceState(); workstationState.setTime(Long.valueOf(feedback.getEndTime().getTime())); workstationState.setWorkstationId(feedback.getWorkstationId()); workstationState.setWcs(Integer.valueOf(feedback.getWcs())); workstationState.setIsSync(false); workstationState.setFeedbackId(feedback.getId()); workstationState.setValueCollect(Integer.valueOf(feedback.getWcs())); workstationState.setIsFixPoint(false); workstationState.setFeedbackPointType(FeedbackTimePointEnum.END_POINT.getValue()); workstationState.setIsDeleted(false); DeviceStateMapper stateMapper = SpringUtil.getBean(DeviceStateMapper.class); /* DeviceState suitableWorkstationState = (WorkstationState)stateMapper.selectOne(Wrappers.lambdaQuery() .eq(WorkstationState::getWorkstationId, feedback.getWorkstationId()) .eq(WorkstationState::getTs, Long.valueOf(feedback.getEndTime().getTime()))); */ DeviceState suitableWorkstationState = stateMapper.getByWorkstationIdAndTime(feedback.getWorkstationId(), feedback.getEndTime().getTime()); if (Func.isNotEmpty(suitableWorkstationState)) { workstationState.setIsFixPoint(true); workstationState.setFactoryDate(suitableWorkstationState.getFactoryDate()); workstationState.setFactoryMonth(suitableWorkstationState.getFactoryMonth()); workstationState.setFactoryWeek(suitableWorkstationState.getFactoryWeek()); workstationState.setFactoryYear(suitableWorkstationState.getFactoryYear()); workstationState.setIsFixPoint(suitableWorkstationState.getIsFixPoint()); workstationState.setShiftIndex(suitableWorkstationState.getShiftIndex()); workstationState.setShiftTimeType(suitableWorkstationState.getShiftTimeType()); workstationState.setCalendarCode(suitableWorkstationState.getCalendarCode()); } else { /* WorkstationState resultTimePoint = stateMapper.getLastWorkstationState(Wrappers.lambdaQuery() .eq(WorkstationState::getWorkstationId, feedback.getWorkstationId()) .le(WorkstationState::getTs, Long.valueOf(feedback.getEndTime().getTime())) .isNotNull(WorkstationState::getShiftIndex) .ne(WorkstationState::getIsDeleted, Boolean.TRUE)); */ DeviceState resultTimePoint = stateMapper.getLastByWorkstationIdAndLeTimeAndShiftIndexNotNull(feedback.getWorkstationId(), feedback.getEndTime().getTime()); if (Func.isNotEmpty(resultTimePoint)) { workstationState.setFactoryYear(resultTimePoint.getFactoryYear()); workstationState.setFactoryMonth(resultTimePoint.getFactoryMonth()); workstationState.setFactoryWeek(resultTimePoint.getFactoryWeek()); workstationState.setFactoryDate(resultTimePoint.getFactoryDate()); workstationState.setShiftIndex(resultTimePoint.getShiftIndex()); workstationState.setShiftTimeType(resultTimePoint.getShiftTimeType()); workstationState.setCalendarCode(resultTimePoint.getCalendarCode()); } else { WorkstationService workstationService = SpringUtil.getBean(WorkstationService.class); CalendarShiftInfoDTO calendarShiftInfo = workstationService.getCalendarShiftInfoForWorkstation(feedback.getWorkstationId(), feedback .getEndTime()); workstationState.setFactoryYear(calendarShiftInfo.getFactoryYear()); workstationState.setCalendarCode(calendarShiftInfo.getCode()); workstationState.setFactoryDate(Integer.valueOf(calendarShiftInfo.getFactoryDate())); workstationState.setFactoryWeek(calendarShiftInfo.getFactoryWeek()); workstationState.setFactoryMonth(calendarShiftInfo.getFactoryMonth()); workstationState.setShiftTimeType(calendarShiftInfo.getShiftTimeType()); workstationState.setShiftIndex(calendarShiftInfo.getShiftIndex()); } } return workstationState; } private DeviceState wrapperImmediateFeedbackStartTimePoint(WorkstationWcsFeedback feedback) { DeviceState workstationState = new DeviceState(); workstationState.setWorkstationId(feedback.getWorkstationId()); workstationState.setWcs(Integer.valueOf(feedback.getWcs())); workstationState.setIsSync(false); workstationState.setFeedbackId(feedback.getId()); workstationState.setValueCollect(Integer.valueOf(feedback.getWcs())); workstationState.setIsFixPoint(false); workstationState.setTime(feedback.getStartTime().getTime()); workstationState.setIsDeleted(false); DeviceStateMapper stateMapper = SpringUtil.getBean(DeviceStateMapper.class); /* DeviceState suitableWorkstationState = stateMapper.selectOne(Wrappers.lambdaQuery() .eq(WorkstationState::getWorkstationId, feedback.getWorkstationId()) .eq(WorkstationState::getIsFixPoint, Boolean.TRUE) .eq(WorkstationState::getTs, Long.valueOf(feedback.getStartTime().getTime()))); */ DeviceState suitableWorkstationState = stateMapper.getFixPointByWorkstationIdAndTime(feedback.getWorkstationId(), feedback.getStartTime().getTime()); if (Func.isNotEmpty(suitableWorkstationState)) { workstationState.setIsFixPoint(true); workstationState.setFactoryDate(suitableWorkstationState.getFactoryDate()); workstationState.setFactoryMonth(suitableWorkstationState.getFactoryMonth()); workstationState.setFactoryWeek(suitableWorkstationState.getFactoryWeek()); workstationState.setFactoryYear(suitableWorkstationState.getFactoryYear()); workstationState.setIsFixPoint(suitableWorkstationState.getIsFixPoint()); workstationState.setShiftTimeType(suitableWorkstationState.getShiftTimeType()); workstationState.setCalendarCode(suitableWorkstationState.getCalendarCode()); } /* DeviceState resultTimePoint = stateMapper.getLastWorkstationState(Wrappers.lambdaQuery() .eq(WorkstationState::getWorkstationId, feedback.getWorkstationId()) .le(WorkstationState::getTs, Long.valueOf(feedback.getStartTime().getTime())) .isNotNull(WorkstationState::getShiftIndex) .ne(WorkstationState::getIsDeleted, Boolean.TRUE)); */ DeviceState resultTimePoint = stateMapper.getLastByWorkstationIdAndLeTimeAndShiftIndexNotNull(feedback.getWorkstationId(), feedback.getStartTime().getTime()); if (Func.isNotEmpty(resultTimePoint)) { workstationState.setFactoryYear(resultTimePoint.getFactoryYear()); workstationState.setFactoryMonth(resultTimePoint.getFactoryMonth()); workstationState.setFactoryWeek(resultTimePoint.getFactoryWeek()); workstationState.setFactoryDate(resultTimePoint.getFactoryDate()); workstationState.setShiftIndex(resultTimePoint.getShiftIndex()); workstationState.setShiftTimeType(resultTimePoint.getShiftTimeType()); workstationState.setCalendarCode(resultTimePoint.getCalendarCode()); } else { WorkstationService workstationService = SpringUtil.getBean(WorkstationService.class); CalendarShiftInfoDTO calendarShiftInfo = workstationService.getCalendarShiftInfoForWorkstation(feedback.getWorkstationId(), feedback .getStartTime()); workstationState.setFactoryYear(calendarShiftInfo.getFactoryYear()); workstationState.setCalendarCode(calendarShiftInfo.getCode()); workstationState.setFactoryDate(Integer.valueOf(calendarShiftInfo.getFactoryDate())); workstationState.setFactoryWeek(calendarShiftInfo.getFactoryWeek()); workstationState.setFactoryMonth(calendarShiftInfo.getFactoryMonth()); workstationState.setShiftTimeType(calendarShiftInfo.getShiftTimeType()); workstationState.setShiftIndex(calendarShiftInfo.getShiftIndex()); } if (checkFeedbackStartTimeIsCrossPoint(feedback)) { workstationState.setFeedbackPointType(FeedbackTimePointEnum.CROSS_POINT.getValue()); } else { workstationState.setFeedbackPointType(FeedbackTimePointEnum.START_POINT.getValue()); } WorkstationCache workstationCache = SpringUtil.getBean(WorkstationCache.class); //GlobalWcsOfRps setting = WorkstationCache.getWorkstationWcsSetting(feedback.getWorkstationId(), feedback.getWcs()); GlobalWcsOfRps setting = workstationCache.getWorkstationWcsSetting(feedback.getWorkstationId(), feedback.getWcs()); workstationState.setRps(setting.getRps()); workstationState.setIsPlan(setting.getIsPlan()); return workstationState; } private boolean checkFeedbackStartTimeIsCrossPoint(WorkstationWcsFeedback feedback) { boolean result = false; List wcsFeedbackList = this.feedbackMapper.selectList(Wrappers.lambdaQuery() .eq(WorkstationWcsFeedback::getWorkstationId, feedback.getWorkstationId()) .lt(WorkstationWcsFeedback::getFeedbackTime, feedback.getFeedbackTime()) .eq(WorkstationWcsFeedback::getStatus, FeedbackProcessStatusEnum.COMPLETED.getValue()) .orderByDesc(WorkstationWcsFeedback::getFeedbackTime)); if (Func.isNotEmpty(wcsFeedbackList)) return (((WorkstationWcsFeedback)wcsFeedbackList.get(0)).getEndTime().getTime() == feedback.getStartTime().getTime()); return result; } public ImmediateFeedbackAnalyseResult analyse() { return this.result; } }