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.<WorkstationWcsFeedbackDetail>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.<WorkstationState>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.<WorkstationState>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.<WorkstationState>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.<WorkstationState>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<WorkstationWcsFeedback> wcsFeedbackList = this.feedbackMapper.selectList(Wrappers.<WorkstationWcsFeedback>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;
|
}
|
}
|