forked from I3-YF/i3plus-mes-pcn-yfai
工位扫描日志 增加策略
parent
fd2cf6d695
commit
cadf719f0a
@ -0,0 +1,158 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.swslog.ISwsWriteDbLogService;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellScanMonitorLog;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellScanMonitorLogRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesWorkCellScanMonitorLogExt2Service implements ISwsWriteDbLogService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private MesWorkCellScanMonitorLogRepository workCellScanMonitorLogRepository;
|
||||
|
||||
private final static Map<String, List<String>> cellMsg2RepeatMap = new ConcurrentHashMap();
|
||||
|
||||
@Override
|
||||
public void doWriteDbLog(StationResultBean resultBean) {
|
||||
|
||||
//获取上下文工位扫描监控信息
|
||||
MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.getScanMonitorContext(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode());
|
||||
|
||||
if (checkRepeat(resultBean, scanMonitorContext)) return;
|
||||
|
||||
MesWorkCellScanMonitorLog workCellScanMonitorLog = new MesWorkCellScanMonitorLog();
|
||||
|
||||
if (null != scanMonitorContext) BeanUtils.copyProperties(scanMonitorContext, workCellScanMonitorLog);
|
||||
else log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExt2Service --- 上下文当前不存在工位扫描监控信息 --- {}", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), resultBean.toWriteDbString());
|
||||
|
||||
BeanUtils.copyProperties(resultBean, workCellScanMonitorLog);
|
||||
|
||||
workCellScanMonitorLog.setMessageType(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_MESSAGE_TYPE.codeOfValue(resultBean.getDataType()));
|
||||
|
||||
workCellScanMonitorLog.setOrgWorkCode(new StringJoiner(MesPcnExtConstWords.E_UNDERLINE).add(workCellScanMonitorLog.getOrganizeCode()).add(workCellScanMonitorLog.getWorkCenterCode()).toString());
|
||||
|
||||
ConvertBean.serviceModelInitialize(workCellScanMonitorLog, resultBean.getUserInfo());
|
||||
|
||||
//存在开模ID的记录延迟同步
|
||||
if (!StringUtils.isEmpty(workCellScanMonitorLog.getMouldRecordId())) {
|
||||
workCellScanMonitorLog.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
workCellScanMonitorLog.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue());
|
||||
} else {
|
||||
workCellScanMonitorLog.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
||||
workCellScanMonitorLog.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue());
|
||||
}
|
||||
|
||||
workCellScanMonitorLogRepository.insert(workCellScanMonitorLog);
|
||||
|
||||
}
|
||||
|
||||
private Boolean checkRepeat(StationResultBean resultBean, MesScanMonitorContext scanMonitorContext) {
|
||||
|
||||
initCellMsg2RepeatMap(resultBean);
|
||||
|
||||
Long mouldRecordId = null != scanMonitorContext ? scanMonitorContext.getMouldRecordId() : null;
|
||||
String mouldRecordIdStr = !StringUtils.isEmpty(mouldRecordId) ? mouldRecordId.toString() : MesPcnExtConstWords.EMPTY;
|
||||
|
||||
if (!cellMsg2RepeatMap.get(resultBean.getClientInfo()).get(0).equals(mouldRecordIdStr)) {
|
||||
cellMsg2RepeatMap.get(resultBean.getClientInfo()).clear();
|
||||
cellMsg2RepeatMap.get(resultBean.getClientInfo()).add(0, mouldRecordIdStr);
|
||||
|
||||
//补偿数据
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
|
||||
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue(), MesPcnExtConstWords.DEAL_STATUS, packBean);
|
||||
if (!StringUtils.isEmpty(mouldRecordId)) DdlPreparedPack.getNumNOEqualPack(mouldRecordId, MesPcnExtConstWords.MOULD_RECORD_ID, packBean);
|
||||
int count = workCellScanMonitorLogRepository.updateByPropertiesNoSync(
|
||||
new String[]{MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.DEAL_STATUS},
|
||||
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue()},
|
||||
packBean);
|
||||
|
||||
log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExt2Service --- 补偿同步条数:{} ---", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), count);
|
||||
|
||||
}
|
||||
|
||||
if (resultBean.getIsCheckRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return false;
|
||||
|
||||
synchronized ((resultBean.getClientInfo() + this.getClass().getSimpleName()).intern()) {
|
||||
|
||||
if (cellMsg2RepeatMap.get(resultBean.getClientInfo()).contains(resultBean.getMessage())) return true;
|
||||
|
||||
cellMsg2RepeatMap.get(resultBean.getClientInfo()).add(resultBean.getMessage());
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initCellMsg2RepeatMap(StationResultBean resultBean) {
|
||||
|
||||
cellMsg2RepeatMap.computeIfAbsent(resultBean.getClientInfo(), o -> {
|
||||
|
||||
List<String> list = new CopyOnWriteArrayList<>();
|
||||
|
||||
list.add(0, MesPcnExtConstWords.EMPTY);
|
||||
|
||||
return list;
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRestoreDbLog(StationResultBean resultBean) {
|
||||
|
||||
if (StringUtils.isEmpty(resultBean.getScanInfo()) || CollectionUtils.isEmpty(resultBean.getResultList())) return;
|
||||
|
||||
List<MesProductionPsOutContext> productionPsOutContextList = resultBean.getResultList();
|
||||
|
||||
String workOrderNo = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesProductionPsOutContext::getWorkOrderNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
String serialNumber = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSerialNumber()))).map(MesProductionPsOutContext::getSerialNumber).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
String productSn = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProductSn()))).map(MesProductionPsOutContext::getProductSn).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
String custSn = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCustSn()))).map(MesProductionPsOutContext::getCustSn).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
String partNo = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsOutContext::getPartNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
String partName = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartName()))).map(MesProductionPsOutContext::getPartName).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
|
||||
DdlPreparedPack.getNumEqualPack(Long.valueOf(resultBean.getScanInfo()), MesPcnExtConstWords.MOULD_RECORD_ID, packBean);
|
||||
|
||||
workCellScanMonitorLogRepository.updateByProperties(
|
||||
new String[]{MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.SERIAL_NUMBER, MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.CUST_SN,
|
||||
MesPcnExtConstWords.PART_NO, MesPcnExtConstWords.PART_NAME, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.DEAL_STATUS},
|
||||
new Object[]{workOrderNo, serialNumber, productSn, custSn,
|
||||
partNo, partName, TimeTool.getNowTime(true), resultBean.getUserInfo(), MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue()},
|
||||
packBean);
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue