|
|
|
@ -24,10 +24,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.StringJoiner;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -92,12 +89,7 @@ public class JxSnProcessingCollectProductDataStepService extends BaseStepService
|
|
|
|
|
|
|
|
|
|
String[] plcCodeArr = checkPlcCodeIsValid(reqBean, resultBean, plcCodes, key);
|
|
|
|
|
|
|
|
|
|
String plcCodeListStr = plcExtService.getCachedData(key, MesPcnExtConstWords.PLC_CODE_UC);
|
|
|
|
|
List<String> plcCodeList = !StringUtils.isEmpty(plcCodeListStr) ? JSONObject.parseArray(plcCodeListStr, String.class) : doHandlePlcCodeList(reqBean, resultBean, key);
|
|
|
|
|
|
|
|
|
|
List<String> plcCodeList2Cfg = checkObjectCfgIsValid(reqBean, resultBean, plcCodeList, key);
|
|
|
|
|
|
|
|
|
|
doHandlePlcCodeList(reqBean, key, plcCodeListStr, plcCodeList, plcCodeList2Cfg);
|
|
|
|
|
List<String> plcCodeList2Cell = doPlcCodeList2Cell(reqBean, resultBean, plcCodeArr, key);
|
|
|
|
|
|
|
|
|
|
String curExecWorkOrderNo = getCurExecWorkOrderNo(reqBean, resultBean);
|
|
|
|
|
|
|
|
|
@ -108,7 +100,7 @@ public class JxSnProcessingCollectProductDataStepService extends BaseStepService
|
|
|
|
|
.location(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())
|
|
|
|
|
.order(orderModel.getOrderNo(), orderModel.getPartNo(), orderModel.getPartNameRdd())
|
|
|
|
|
.sn(reqBean.getSerialNumber(), reqBean.getProductSn()).manageCode(reqBean.getTray())
|
|
|
|
|
.plcCode2Flag(plcCodeArr[0], plcCodeArr[1]).plcCode2DataList(plcCodeList)
|
|
|
|
|
.plcCode2Flag(plcCodeArr[0], plcCodeArr[1]).plcCode2DataList(plcCodeList2Cell)
|
|
|
|
|
.timeOut(reqBean.getWcpcMap().get(MesPcnExtConstWords.TIME_OUT_CFG)));
|
|
|
|
|
|
|
|
|
|
((ISxThirdPartyPlcCollectDataJobService) SpringContextsUtil.getBean(MesPcnExtConstWords.SX_TPPC_SUFFIX + MesPcnExtConstWords.PRODUCT_DATA + MesPcnExtConstWords.SERVICE_SUFFIX)).doThirdPartyPlcCollectData(paramMap);
|
|
|
|
@ -117,6 +109,28 @@ public class JxSnProcessingCollectProductDataStepService extends BaseStepService
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<String> doPlcCodeList2Cell(StationRequestBean reqBean, StationResultBean resultBean, String[] plcCodeArr, String key) {
|
|
|
|
|
String plcCodeList2CellStr = plcExtService.getCachedData(key, MesPcnExtConstWords.PLC_CODE_UC);
|
|
|
|
|
String objectCfgListStr = plcExtService.getCachedData(key, MesPcnExtConstWords.OBJECT_CODE_UC);
|
|
|
|
|
|
|
|
|
|
List<String> plcCodeList2Cell = !StringUtils.isEmpty(plcCodeList2CellStr) ? JSONObject.parseArray(plcCodeList2CellStr, String.class) : null;
|
|
|
|
|
if (!CollectionUtils.isEmpty(plcCodeList2Cell)) plcCodeList2Cell.removeAll(Arrays.asList(plcCodeArr));
|
|
|
|
|
|
|
|
|
|
List<MesObjectCfg> objectCfgList = !StringUtils.isEmpty(objectCfgListStr) ? JSONObject.parseArray(objectCfgListStr, MesObjectCfg.class) : null;
|
|
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(plcCodeList2Cell) && !CollectionUtils.isEmpty(objectCfgList) && checkObjectCfgIsValid(reqBean, resultBean, plcCodeList2Cell, objectCfgList, false)) return plcCodeList2Cell;
|
|
|
|
|
|
|
|
|
|
plcCodeList2Cell = doHandlePlcCodeList2Cell(reqBean, resultBean, plcCodeArr, key);
|
|
|
|
|
objectCfgList = getObjectCfgDbList(reqBean, resultBean, plcCodeList2Cell);
|
|
|
|
|
|
|
|
|
|
checkObjectCfgIsValid(reqBean, resultBean, plcCodeList2Cell, objectCfgList, true);
|
|
|
|
|
|
|
|
|
|
plcExtService.doCacheData(reqBean.getOrganizeCode(), key, MesPcnExtConstWords.PLC_CODE_UC, JSONObject.toJSONString(plcCodeList2Cell));
|
|
|
|
|
plcExtService.doCacheData(reqBean.getOrganizeCode(), key, MesPcnExtConstWords.OBJECT_CODE_UC, JSONObject.toJSONString(objectCfgList));
|
|
|
|
|
|
|
|
|
|
return plcCodeList2Cell;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String[] checkPlcCodeIsValid(StationRequestBean reqBean, StationResultBean resultBean, String plcCodes, String key) {
|
|
|
|
|
String[] plcCodeArr = plcCodes.split(MesPcnExtConstWords.COMMA);
|
|
|
|
|
if (plcCodeArr.length != 2) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("生产线[%s]工位[%s]工位参数[%s]维护的PLC代码[%s]无效!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), MesPcnExtConstWords.PLC_CODE_UC, plcCodes));
|
|
|
|
@ -130,36 +144,30 @@ public class JxSnProcessingCollectProductDataStepService extends BaseStepService
|
|
|
|
|
return plcCodeArr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<String> doHandlePlcCodeList(StationRequestBean reqBean, StationResultBean resultBean, String key) {
|
|
|
|
|
private List<String> doHandlePlcCodeList2Cell(StationRequestBean reqBean, StationResultBean resultBean, String[] plcCodeArr, String key) {
|
|
|
|
|
List<MesPlc> plcList = plcExtService.getPlcDbList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
|
|
|
|
|
plcList = CollectionUtils.isEmpty(plcList) ? null : plcList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getChannel()) && !StringUtils.isEmpty(o.getDevice()) && !StringUtils.isEmpty(o.getTagAddress()))).collect(Collectors.toList());
|
|
|
|
|
if (!CollectionUtils.isEmpty(plcList)) plcList.removeAll(Arrays.asList(plcCodeArr));
|
|
|
|
|
if (CollectionUtils.isEmpty(plcList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("生产线[%s]工位[%s]未配置有效的数据位PLC信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
|
|
|
|
plcList.forEach(o -> plcExtService.doCacheData(reqBean.getOrganizeCode(), key, o.getPlcCode(), JSONObject.toJSONString(o)));
|
|
|
|
|
return plcList.stream().filter(o -> null != o).map(MesPlc::getPlcCode).collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doHandlePlcCodeList(StationRequestBean reqBean, String key, String plcCodeListStr, List<String> plcCodeList, List<String> plcCodeList2Cfg) {
|
|
|
|
|
if (!StringUtils.isEmpty(plcCodeListStr) && (plcCodeList.containsAll(plcCodeList2Cfg) && plcCodeList2Cfg.containsAll(plcCodeList))) return;
|
|
|
|
|
plcExtService.doCacheData(reqBean.getOrganizeCode(), key, MesPcnExtConstWords.PLC_CODE_UC, JSONObject.toJSONString(plcCodeList2Cfg));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<String> checkObjectCfgIsValid(StationRequestBean reqBean, StationResultBean resultBean, List<String> plcCodeList, String key) {
|
|
|
|
|
String value = plcExtService.getCachedData(key, MesPcnExtConstWords.OBJECT_CODE_UC);
|
|
|
|
|
List<MesObjectCfg> objectCfgList = !StringUtils.isEmpty(value) ? JSONObject.parseArray(value, MesObjectCfg.class) : getObjectCfgDbList(reqBean, resultBean, plcCodeList);
|
|
|
|
|
|
|
|
|
|
List<String> plcCodeList2ObjectCfg = CollectionUtils.isEmpty(objectCfgList) ? null : objectCfgList.stream().filter(o -> null != o).map(MesObjectCfg::getPlcCode).collect(Collectors.toList());
|
|
|
|
|
plcCodeList2ObjectCfg = CollectionUtils.isEmpty(plcCodeList2ObjectCfg) ? null : plcCodeList2ObjectCfg.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(plcCodeList2ObjectCfg)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("生产线[%s]工位[%s]配置的数据位PLC信息未关联有效的对象结构信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(value)) plcExtService.doCacheData(reqBean.getOrganizeCode(), key, MesPcnExtConstWords.OBJECT_CODE_UC, JSONObject.toJSONString(objectCfgList));
|
|
|
|
|
|
|
|
|
|
List<String> plcCodeList2Cfg = objectCfgList.stream().filter(o -> null != o).map(MesObjectCfg::getPlcCode).collect(Collectors.toList());
|
|
|
|
|
return plcCodeList2Cfg.stream().filter(o -> null != o).distinct().collect(Collectors.toList());
|
|
|
|
|
private Boolean checkObjectCfgIsValid(StationRequestBean reqBean, StationResultBean resultBean, List<String> plcCodeList2Cell, List<MesObjectCfg> objectCfgList, Boolean flag) {
|
|
|
|
|
for (MesObjectCfg objectCfg : objectCfgList) {
|
|
|
|
|
if (null == objectCfg) continue;
|
|
|
|
|
List<String> plcCodeList = Arrays.asList(objectCfg.getPlcCode().split(MesPcnExtConstWords.COMMA));
|
|
|
|
|
List<String> filterList = plcCodeList2Cell.stream().filter(o -> (!StringUtils.isEmpty(o) && plcCodeList.contains(o))).collect(Collectors.toList());
|
|
|
|
|
if (!flag && (CollectionUtils.isEmpty(filterList) || filterList.size() != 1)) return false;
|
|
|
|
|
if (flag && filterList.size() != 1)
|
|
|
|
|
execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("生产线[%s]工位[%s]配置的数据位PLC代码集合%s,检查对象结构信息ID[%s]对应的PLC代码集合[%s],一条对象结构信息只能关联工位的一个数据位PLC代码!",
|
|
|
|
|
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), plcCodeList2Cell.toString(), objectCfg.getId(), objectCfg.getPlcCode()));
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesObjectCfg> getObjectCfgDbList(StationRequestBean reqBean, StationResultBean resultBean, List<String> plcCodeList) {
|
|
|
|
|
List<MesObjectCfg> objectCfgList = plcExtService.getObjectCfgDbList(reqBean.getOrganizeCode(), plcCodeList);
|
|
|
|
|
private List<MesObjectCfg> getObjectCfgDbList(StationRequestBean reqBean, StationResultBean resultBean, List<String> plcCodeList2Cell) {
|
|
|
|
|
List<MesObjectCfg> objectCfgList = plcExtService.getObjectCfgDbList(reqBean.getOrganizeCode(), plcCodeList2Cell);
|
|
|
|
|
if (CollectionUtils.isEmpty(objectCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("生产线[%s]工位[%s]配置的数据位PLC信息未维护有效的对象结构信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
|
|
|
|
return objectCfgList;
|
|
|
|
|
}
|
|
|
|
|