Merge remote-tracking branch 'origin/dev-wuhan-temp' into dev-wuhan-temp

tags/yfai-pcn-ext-v2.3
臧学普 7 months ago
commit f682deee4d

@ -2,7 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import io.swagger.annotations.ApiOperation;
@ -24,4 +24,7 @@ public interface IMesPartShippingGroupService {
@ApiOperation(value = "打印发运单数据")
List<MesShippingOrderManagement> doMesMesShippingOrderManagementPrint(MesShippingOrderManagement model, String userName);
@ApiOperation(value = "发运组明细")
MesPartShippingGroupDetail getMesPartShippingGroupDetail(String organizeCode, String shippingGroupCode, String partNo, String custPartNo);
}

@ -2,14 +2,12 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
/**
* BUSI
@ -88,18 +86,6 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文产出零件信息")
Boolean removeProductionPartContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPart> getPartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文零件数据信息", notes = "[JSON]Map<String, MesPart>")
Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap);
@ApiOperation(value = "删除上下文零件数据信息")
void removePartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文模具号")
MesEquipVariableCollectContext getMouldNoContext(StationRequestBean reqBean);

@ -1,13 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -107,6 +101,18 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "存储设备的装配件清单")
Boolean dispatchAssemblyNosortCfgContext(StationRequestBean reqBean, List<MesProductionAssemblyNosortContext> assemblyNosortCfgList);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPart> getPartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文零件数据信息", notes = "[JSON]Map<String, MesPart>")
Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap);
@ApiOperation(value = "删除上下文零件数据信息")
void removePartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取手动选择的腔数及工单信息上下文")
List<StationKvBean> getFunctionChooseCavityOrderContext(StationRequestBean reqBean);
@ -116,6 +122,15 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "删除手动选择的腔数及工单信息上下文")
void removeFunctionChooseCavityOrderContext(StationRequestBean reqBean);
@ApiOperation(value = "获取手动选择的腔数及零件信息上下文")
List<StationKvBean> getFunctionChooseCavityPartContext(StationRequestBean reqBean);
@ApiOperation(value = "保存选择/扫描/读取的腔数及零件信息上下文", notes = "[StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=零件编码, value=零件1;零件2;零件3, seq=2)]")
Boolean dispatchFunctionChooseCavityPartContext(StationRequestBean reqBean, List<StationKvBean> resultList);
@ApiOperation(value = "删除手动选择的腔数及零件信息上下文")
void removeFunctionChooseCavityPartContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文工位扫描监控信息")
MesScanMonitorContext dispatchScanMonitorContext(StationRequestBean reqBean, Boolean isSave);

@ -0,0 +1,23 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesShippingSnUnique;
import io.swagger.annotations.ApiOperation;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/28 15:09
* @Modify:
**/
public interface IMesShippingSnUniqueService {
@ApiOperation("查询发运唯一性")
MesShippingSnUnique getMesShippingSnUnique(String organizeCode, String productSn);
@ApiOperation("校验唯一性")
Boolean checkMesShippingSnUnique(String organizeCode, String productSn);
@ApiOperation("新增唯一性校验")
void insertMesShippingSnUnique(String organizeCode, String productSn,String shippingCode,String userName);
}

@ -25,6 +25,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -200,6 +201,7 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(model.getSn(), MesPcnExtConstWords.SN, packBean);
MesMaterialSn materialSnDb = materialSnRepository.getByProperty(packBean);
if(Objects.isNull(materialSnDb)) MesPcnException.throwMesBusiException("条码【%s】不存在", model.getSn());
MesCutUpdateRawLengthModel result = new MesCutUpdateRawLengthModel();
BeanUtils.copyProperties(materialSnDb, result);
return result;

@ -8,8 +8,10 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
@ -34,13 +36,17 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
@Autowired
private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository;
public List<MesPartShippingGroup> findAll( DdlPackBean packBean) {
List<MesPartShippingGroup> detailDeleteList = shippingGroupRepository.findByHqlWhere(packBean);
return detailDeleteList;
@Autowired
private MesPartShippingGroupDetailRepository mesPartShippingGroupDetailRepository;
public List<MesPartShippingGroup> findAll(DdlPackBean packBean) {
return shippingGroupRepository.findByHqlWhere(packBean);
}
@Override
public MesPartShippingGroup getMesPartShippingGroup(String organizeCode, String shippingGroupCode) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(shippingGroupCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(shippingGroupCode, "shippingGroupCode", packBean);
return shippingGroupRepository.getByProperty(packBean);
@ -78,4 +84,14 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
}
return pullingOrderInfos;
}
@Override
public MesPartShippingGroupDetail getMesPartShippingGroupDetail(String organizeCode, String shippingGroupCode, String partNo, String custPartNo) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(shippingGroupCode) || StringUtil.isEmpty(partNo) || StringUtil.isEmpty(custPartNo)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(shippingGroupCode, "shippingGroupCode", packBean);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", packBean);
return mesPartShippingGroupDetailRepository.getByProperty(packBean);
}
}

@ -195,8 +195,18 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
List<MesPullingOrderPartInfo> pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean);
if (!CollectionUtils.isEmpty(pullingOrderPartInfos)) {
pullingOrderInfo.setPartCount(pullingOrderPartInfos.size());
pullingOrderPartInfos.forEach(item->{
if(!StringUtil.isEmpty(item.getLocation()) && item.getLocation().contains(MesPcnExtConstWords.COMMA)){
item.setLocatAddr(item.getLocation().split(MesPcnExtConstWords.COMMA)[0]);
item.setLightAddr(item.getLocation().split(MesPcnExtConstWords.COMMA)[1]);
}
});
pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos);
}
pullingOrderInfo.setWorkOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):"");
pullingOrderInfo.setWorkOrderNo(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(MesPcnExtConstWords.ZERO,pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):"");
pullingOrderInfo.setCustOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getCustOrderNo())?pullingOrderInfo.getCustOrderNo().substring(pullingOrderInfo.getCustOrderNo().length() - MesPcnExtConstWords.FOUR):"");
pullingOrderInfo.setPartName("车型:"+pullingOrderInfo.getPartName());
pullingOrderInfo.setPrintTime(TimeTool.getNowTime(true));
pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());

@ -0,0 +1,53 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingSnUniqueService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesShippingSnUnique;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingSnUniqueRepository;
import groovy.util.logging.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/28 15:15
* @Modify:
**/
@Service
@Slf4j
public class MesShippingSnUniqueServiceImpl implements IMesShippingSnUniqueService {
@Autowired
private MesShippingSnUniqueRepository mesShippingSnUniqueRepository;
@Override
public MesShippingSnUnique getMesShippingSnUnique(String organizeCode, String productSn) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(productSn)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productSn, "productSn", packBean);
return mesShippingSnUniqueRepository.getByProperty(packBean);
}
@Override
public Boolean checkMesShippingSnUnique(String organizeCode, String productSn) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(productSn)) return false;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productSn, "productSn", packBean);
return mesShippingSnUniqueRepository.isExitByHql(packBean);
}
@Override
public void insertMesShippingSnUnique(String organizeCode, String productSn, String shippingCode,String userName) {
MesShippingSnUnique mesShippingSnUnique = new MesShippingSnUnique();
mesShippingSnUnique.setOrganizeCode(organizeCode);
mesShippingSnUnique.setProductSn(productSn);
mesShippingSnUnique.setShippingCode(shippingCode);
ConvertBean.serviceModelInitialize(mesShippingSnUnique,userName);
mesShippingSnUniqueRepository.insert(mesShippingSnUnique);
}
}

@ -94,6 +94,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
@Autowired
private IMesEmergencyLocationService mesEmergencyLocationService;
@Autowired
private IMesShippingSnUniqueService mesShippingSnUniqueService;
@Override
public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) {
//校验发运单
@ -423,7 +426,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderManagementDetailPackBean);
List<MesShippingOrderManagementDetail> orderManagementDetailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderManagementDetailPackBean);
List<MesShippingOrderManagementDetail> detailList = model.getDetailList();
Map<Long, List<MesShippingOrderManagementDetail>> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getCustInfoSeq));
Map<Long, List<MesShippingOrderManagementDetail>> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getId));
List<MesProduceSn> produceSnList = new ArrayList<>();
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
@ -433,7 +436,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if (Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "custSn", packBean);
} else {
List<MesShippingOrderManagementDetail> mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getCustInfoSeq());
List<MesShippingOrderManagementDetail> mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getId());
MesShippingOrderManagementDetail managementDetail = mesShippingOrderManagementDetails.get(0);
detail.setRemark(managementDetail.getRemark());
detail.setStatus(managementDetail.getStatus());
@ -450,6 +453,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(produceSn, userInfo);
produceSnList.add(produceSn);
} else {
//记录唯一性校验表
mesShippingSnUniqueService.insertMesShippingSnUnique(organizeCode, detail.getBarcode(), orderManagement.getShippingCode(), userInfo);
}
//更新工单
if(!StringUtils.isEmpty(detail.getVisualOrderNo())){

@ -831,7 +831,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
List<String> centerList = Arrays.asList(workCenterCodes.split(","));
DdlPreparedPack.getInPack(centerList, "workCenterCode", ddlPackBean);
}*/
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"modifyDatetime"}, ddlPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"modifyDatetime"}, ddlPackBean);
String numStr = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_NUM");
int num = StringUtils.isEmpty(numStr) ? 50 : Integer.valueOf(numStr);
@ -863,7 +863,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
List<String> centerList = Arrays.asList(workCenterCodes.split(","));
DdlPreparedPack.getNotInPack(centerList, "workCenterCode", ddlPackBean);
}
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"modifyDatetime"}, ddlPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"modifyDatetime"}, ddlPackBean);
String numStr = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_NUM");
int num = StringUtils.isEmpty(numStr) ? 50 : Integer.valueOf(numStr);

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.strategy;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.IMesShippingScanStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
@ -13,7 +12,9 @@ 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.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
@ -23,6 +24,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepos
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import groovy.util.logging.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -61,7 +63,12 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
@Autowired
private IMesConfigService mesConfigService;
@Override
@Autowired
private IMesPartShippingGroupService mesPartShippingGroupService;
@Autowired
private IMesShippingSnUniqueService mesShippingSnUniqueService;
public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) {
//校验条码
MesProduceSn produceSn = checkSn(model);
@ -130,6 +137,7 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
produceSn.setSerialNumber(model.getSn());
produceSn.setProductSn(model.getSn());
produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo());
produceSn.setOrganizeCode(model.getOrganizeCode());
}
return produceSn;
}
@ -150,15 +158,20 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model) {
//外部解析条码长度卡控
String cfgValue = mesConfigService.getCfgValue(model.getOrganizeCode(), MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH);
if (Integer.parseInt(cfgValue) < model.getSn().length())
if (Integer.parseInt(cfgValue) < model.getSn().length()) {
MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位请检查数据", model.getSn(), cfgValue);
List<MesShippingOrderManagementDetail> detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList());
}
//唯一性校验
if (mesShippingSnUniqueService.checkMesShippingSnUnique(model.getOrganizeCode(),model.getSn())) {
throw new ImppBusiException(String.format("【%s】条码唯一性校验数据已存在请检查数据", model.getSn()));
}
List<MesShippingOrderManagementDetail> detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList());
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null;
for (MesShippingOrderManagementDetail managementDetail : detailList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean);
DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean);
if (mesCustomerPartRepository.isExitByHql(packBean)) {
if (checkMesPartShippingGroupDetailRule(model, managementDetail) && mesCustomerPartRepository.isExitByHql(packBean)) {
mesShippingOrderManagementDetail = managementDetail;
break;
}
@ -199,6 +212,9 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(produceSn, userInfo);
produceSnExtService.update(produceSn);
}else{
//记录唯一性校验表
mesShippingSnUniqueService.insertMesShippingSnUnique(orderManagement.getOrganizeCode(),detail.getBarcode(),orderManagement.getShippingCode(),userInfo);
}
}
}
@ -214,4 +230,9 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
shippingOrderManagementDetailRepository.update(item);
}
private Boolean checkMesPartShippingGroupDetailRule(MesSortShippingCheckModel model, MesShippingOrderManagementDetail managementDetail) {
MesPartShippingGroupDetail mesPartShippingGroupDetail = mesPartShippingGroupService.getMesPartShippingGroupDetail(model.getOrganizeCode(), model.getMesPartShippingGroup().getShippingGroupCode(), managementDetail.getPartNo(), managementDetail.getCustPartNo());
return !Objects.isNull(mesPartShippingGroupDetail) && !StringUtil.isEmpty(mesPartShippingGroupDetail.getSnRule()) && ((Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(model.getOrganizeCode(), model.getSn(), mesPartShippingGroupDetail.getSnRule(), mesPartShippingGroupDetail.getSnRule()).get(MesPcnExtConstWords.RESULT));
}
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesWorkCellScanMonitorLogDao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
@ -9,6 +10,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.swslog.ISwsWriteDbLogService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWcEquipment;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -32,6 +34,9 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic
private IMesEquipmentExtService equipmentExtService;
@Autowired
private IMesProdOrgExtService prodOrgExtService;
@Autowired
private IMesWorkCellScanMonitorLogDao workCellScanMonitorLogDao;
private final static Map<String, List<String>> cellMsg2RepeatMap = new ConcurrentHashMap();
@ -46,11 +51,7 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic
if (null == scanMonitorContext) scanMonitorContext = new MesScanMonitorContext();
if (StringUtils.isEmpty(scanMonitorContext.getEquipmentCode())) {
MesWcEquipment wcEquipment = equipmentExtService.getWcEquipment(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode());
scanMonitorContext.setEquipmentCode(null != wcEquipment ? wcEquipment.getEquipmentCode() : null);
scanMonitorContext.setEquipmentName(null != wcEquipment ? wcEquipment.getEquipmentName() : null);
}
restoreBasicInfo(resultBean, scanMonitorContext);
if (null == scanMonitorContext)
log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExtService --- 上下文当前不存在工位扫描监控信息 --- {}", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), resultBean.toWriteDbString());
@ -59,6 +60,17 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic
}
@Override
public void doRestoreDbLog(StationResultBean resultBean) {
if (StringUtils.isEmpty(resultBean.getScanInfo()) || CollectionUtils.isEmpty(resultBean.getResultList())) return;
List<MesProductionPsOutContext> productionPsOutContextList = resultBean.getResultList();
workCellScanMonitorLogDao.updateWorkCellScanMonitorLog(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getUserInfo(), Long.valueOf(resultBean.getScanInfo()), productionPsOutContextList);
}
private Boolean checkRepeat(StationResultBean resultBean, MesScanMonitorContext scanMonitorContext) {
initCellMsg2RepeatMap(resultBean);
@ -113,15 +125,22 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic
return message;
}
@Override
public void doRestoreDbLog(StationResultBean resultBean) {
if (StringUtils.isEmpty(resultBean.getScanInfo()) || CollectionUtils.isEmpty(resultBean.getResultList())) return;
List<MesProductionPsOutContext> productionPsOutContextList = resultBean.getResultList();
workCellScanMonitorLogDao.updateWorkCellScanMonitorLog(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getUserInfo(), Long.valueOf(resultBean.getScanInfo()), productionPsOutContextList);
private void restoreBasicInfo(StationResultBean resultBean, MesScanMonitorContext scanMonitorContext) {
MesWcEquipment wcEquipment = null;
if (StringUtils.isEmpty(scanMonitorContext.getEquipmentCode())) {
wcEquipment = equipmentExtService.getWcEquipment(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode());
scanMonitorContext.setEquipmentCode(null != wcEquipment ? wcEquipment.getEquipmentCode() : null);
scanMonitorContext.setEquipmentName(null != wcEquipment ? wcEquipment.getEquipmentName() : null);
}
if (StringUtils.isEmpty(resultBean.getAreaCode())) {
if (!StringUtils.isEmpty(scanMonitorContext.getAreaCode())) resultBean.areaCode(scanMonitorContext.getAreaCode());
else if (null != wcEquipment && !StringUtils.isEmpty(wcEquipment.getAreaCode())) resultBean.areaCode(wcEquipment.getAreaCode());
else {
MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode());
if (null != workCenter) resultBean.areaCode(workCenter.getAreaCode());
}
}
}
}

@ -0,0 +1,39 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.INumberRulePackAttributeStrategyService;
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Map;
import java.util.Objects;
/**
* @Description : MES-
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/28 16:47
* @Modify:
**/
@Component
public class CustCodeWhqrNumberRuleStrategyService implements INumberRulePackAttributeStrategyService {
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Override
public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) {
Map<String, Object> dataMap = genSerialNoModel.getDataMap();
MesCustomerPart customerPart = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesCustomerPart.class.getSimpleName())) ?
(MesCustomerPart)dataMap.get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(genSerialNoModel.getOrganizeCode(), genSerialNoModel.getPartNo());
if (Objects.isNull(customerPart)) {
MesPcnException.throwMesBusiException("请检查客户零件信息,零件[%s]客户零件关系未维护", genSerialNoModel.getPartNo());
}
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
return genSerialNoModel;
}
}

@ -73,7 +73,7 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe
// 客户订单号
resultMap.put(MesPcnExtConstWords.CUST_ORDER_NO, workOrder.getCustOrderNo());
// 客户零件号
resultMap.put(MesPcnExtConstWords.CUST_PART_NO, workOrder.getPartNo());
resultMap.put(MesPcnExtConstWords.CUST_PART_NO, workOrder.getCustPartNo());
// 客户条码
resultMap.put(MesPcnExtConstWords.SN, workOrder.getCustSn());
// 车型名称

@ -0,0 +1,137 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPrintedSnLogService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintDataModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.util.DateUtil;
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.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart;
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.MesNumberRuleRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Objects;
/**
* @Description : MES-
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/25 19:59
* @Modify:
**/
@Component
@Slf4j
public class CustCodeWhqrPrintStrategy implements IPrintTemplateStrategyService {
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private IMesPartService mesPartService;
@Autowired
private IMesPrintedSnLogService mesPrintedSnLogService;
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Autowired
private MesNumberRuleRepository numberRuleRepository;
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep) {
String organizeCode = mesProduceSnPrintModel.getOrganizeCode();
//物料信息
MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode);
MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) && !CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName())) ? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(organizeCode, mesProduceSnPrintModel.getPartNo());
numberRule = !Objects.isNull(numberRule) ? numberRule : getMesNumberRule(mesPart);
String supplierCode = !Objects.isNull(numberRule) && !StringUtil.isEmpty(numberRule.getSpiltRule()) ? numberRule.getSpiltRule().split(MesPcnExtConstWords.COMMA)[2] : "";
if (!isStep) {
if (!Objects.isNull(customerPart)) {
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
}
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart, supplierCode);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);
mesProduceSnPrintModel.getMesProduceSnList().add(produceSn);
//保存打印记录
mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel));
}
} else {
MesProduceSn mesProduceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0);
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, customerPart, supplierCode);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);
//保存打印记录
mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel));
}
return mesProduceSnPrintModel;
}
private MesNumberRule getMesNumberRule(MesPart mesPart) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPart.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPart.getCustMatchRule(), MesPcnExtConstWords.RULE_CODE, packBean);
return numberRuleRepository.getByProperty(packBean);
}
private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName, Double qty) {
MesProduceSn mesProduceSn = new MesProduceSn();
mesProduceSn.setSerialNumber(snowflakeIdMaker.nextId() + "");
mesProduceSn.setProductSn(sn);
mesProduceSn.setCustSn(sn);
mesProduceSn.setPartNo(mesPart.getPartNo());
mesProduceSn.setPartName(mesPart.getPartName());
mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate());
mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate());
mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate());
mesProduceSn.setQty(qty);
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue());
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
mesProduceSn.setLotNo(TimeTool.getToday());
mesProduceSn.setPrintCount(MesPcnExtConstWords.ONE);
mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
mesProduceSn.setOrganizeCode(mesPart.getOrganizeCode());
ConvertBean.serviceModelInitialize(mesProduceSn, userName);
return mesProduceSn;
}
private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, MesCustomerPart customerPart, String supplierCode) {
MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel();
mesProduceSnPrintDataModel.setPartNo(produceSn.getPartNo());
mesProduceSnPrintDataModel.setPartName(produceSn.getPartName());
if (!Objects.isNull(customerPart)) {
mesProduceSnPrintDataModel.setCustPartNo(customerPart.getCustPartNo());
}
mesProduceSnPrintDataModel.setBarcode(produceSn.getProductSn());
mesProduceSnPrintDataModel.setPrintDate(TimeTool.getNowTime(true));
mesProduceSnPrintDataModel.setUserName(produceSn.getCreateUser());
mesProduceSnPrintDataModel.setSupplierCode(supplierCode);
mesProduceSnPrintDataModel.setProductDate(TimeTool.parseStringFormat(produceSn.getLotNo(), DateUtil.SHORT_FORMAT, "yyyyMMdd"));
return mesProduceSnPrintDataModel;
}
}

@ -62,8 +62,8 @@ public class MesFunctionChooseCavityPartService extends BaseSwsService implement
return false;
}
//保存手动选择的腔数及工单信息上下文
productionProcessContextStepService.dispatchFunctionChooseCavityOrderContext(reqBean, resultList);
//保存手动选择的腔数及零件信息上下文
productionProcessContextStepService.dispatchFunctionChooseCavityPartContext(reqBean, resultList);
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()),
String.format("生产线[%s]工位[%s]%s成功,请等待验证!提交信息[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()),

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesAssemblySaveSortStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;

@ -1,9 +1,9 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesAssemblySaveSortStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
@ -50,9 +50,6 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
@Autowired
private IFsmCommonService fsmCommonService;
@Autowired
public IMesAssemblyExtService assemblyExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -2,15 +2,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -58,7 +57,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
private IMesMouldMultiCavityService mouldMultiCavityService;
@Autowired
private IPartService partService;
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Override
public void title(StationRequestBean reqBean) {
@ -172,10 +171,10 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
productionCustomContextStepService.sendStepContextMessage(reqBean, firstMouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//验证一模多腔信息
List<MesProductionPartContext> productionPartContextList = getProductionPartList(reqBean, resultBean, productionProcessContext, cellEquipContext, firstMouldNo, true);
List<MesProductionPartContext> productionPartContextList = getProductionPartList(reqBean, resultBean, cellEquipContext, firstMouldNo, true);
//保存零件数据信息
savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, false);
savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, false, false);
//保存设备当前一轮工序的头道模具号,产出零件(一模多腔)信息
productionDispatchContextStepService.dispatchFirstMouldNoContext(reqBean, equipVariableCollectContextList.get(0));
@ -190,76 +189,47 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
}
public List<MesProductionPartContext> getProductionPartList(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, String mouldNo, Boolean isFirstMouldNo) {
//从上下文中取出产出零件(一模多腔)信息集合
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息
if (!checkCachedProductionPartValid(productionPartContextList, cellEquipContext.getEquipmentCode(), mouldNo)) productionPartContextList = mouldMultiCavityService.getProductionPartList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), mouldNo);
//配置错误 抛出异常
if (CollectionUtils.isEmpty(productionPartContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog().scanInfo(mouldNo), String.format("当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!", cellEquipContext.getEquipmentName(), isFirstMouldNo ? "头道" : MesPcnExtConstWords.EMPTY, mouldNo));
return productionPartContextList;
}
//验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配
private Boolean checkCachedProductionPartValid(List<MesProductionPartContext> productionPartContextList, String equipmentCode, String firstMouldNo) {
return (!CollectionUtils.isEmpty(productionPartContextList) && productionPartContextList.get(0).getEquipmentCode().equals(equipmentCode) && productionPartContextList.get(0).getMouldNo().equals(firstMouldNo)) ? true : false;
}
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<MesProductionPartContext> productionPartContextList, Boolean isBackError) {
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError);
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, Boolean isFirstMouldNo) {
List<List<StationKvBean>> dataList = new ArrayList<>();
AtomicReference<Integer> index = new AtomicReference<>(0);
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()),
new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", index.updateAndGet(v -> v + 1) + "/" + productionPartContextList.size())));
return dataList;
}
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<String> partNoList, Boolean isBackError) {
if (CollectionUtils.isEmpty(partNoList)) return stepResult;
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
if (!CollectionUtils.isEmpty(partDataMap) && !CollectionUtils.isEmpty(partNoList) && partDataMap.keySet().containsAll(partNoList) && partNoList.containsAll(partDataMap.keySet())) return stepResult.obj(partDataMap);
//根据物料编码集合查询物料信息
Map<String, MesPart> finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
//保存零件数据信息
public void savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isFilter) {
//保存零件数据信息
partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, false, false);
}
//零件信息缺失 抛出异常
List<String> filterList = CollectionUtils.isEmpty(finalPartDataMap) ? null : partNoList.stream().filter(o -> (null != o && !finalPartDataMap.containsKey(o))).collect(Collectors.toList());
//验证一模多腔信息
public List<MesProductionPartContext> getProductionPartList(StationRequestBean reqBean, StationResultBean resultBean, MesCellEquipContext cellEquipContext, String mouldNo, Boolean isFirstMouldNo) {
//保存上下文零件数据信息
if (!CollectionUtils.isEmpty(finalPartDataMap) && CollectionUtils.isEmpty(filterList))
return stepResult.isCompleted(productionDispatchContextStepService.dispatchPartDataContext(reqBean, finalPartDataMap)).obj(finalPartDataMap).msg(!stepResult.isCompleted() ? "零件数据信息保存上下文操作执行失败,请重试!" : null);
//从上下文中取出产出零件(一模多腔)信息集合
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//验证错误 根据isBackError判断是否抛出异常
stepResult.isCompleted(false).msg(String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString()));
//验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息
if (!checkCachedProductionPartValid(productionPartContextList, cellEquipContext.getEquipmentCode(), mouldNo)) productionPartContextList = mouldMultiCavityService.getProductionPartList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), mouldNo);
if (!isBackError) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.getMsg());
//配置错误 抛出异常
if (CollectionUtils.isEmpty(productionPartContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog().scanInfo(mouldNo), String.format("当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!", cellEquipContext.getEquipmentName(), isFirstMouldNo ? "头道" : MesPcnExtConstWords.EMPTY, mouldNo));
return stepResult;
return productionPartContextList;
}
//更新展示组件MODULE_CONTENT内容
public void doCacheMoudleContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, Boolean isFirstMouldNo) {
//存储展示组件MODULE_CONTENT内容
productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList, isFirstMouldNo));
}
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, Boolean isFirstMouldNo) {
List<List<StationKvBean>> dataList = new ArrayList<>();
AtomicReference<Integer> index = new AtomicReference<>(0);
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()),
new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", index.updateAndGet(v -> v + 1) + "/" + productionPartContextList.size())));
return dataList;
}
}

@ -1,6 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -48,9 +47,6 @@ public class MesMouldNoReadStepService extends BaseStepService {
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IMesMouldMultiCavityService mouldMultiCavityService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
@Override
@ -183,18 +179,18 @@ public class MesMouldNoReadStepService extends BaseStepService {
stepResult.obj(equipVariableCollectContextList.get(0));
//存在模具号读一模多腔配置[工步参数]
if (!StringUtils.isEmpty(isReadMultiCavityCfg)) doHandleFirstMouldNo(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo);
if (!StringUtils.isEmpty(isReadMultiCavityCfg)) doHandleFirstMouldNo(reqBean, resultBean, stepResult, cellEquipContext, mouldNo);
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).scanInfo(mouldNo), stepResult, String.format("当前已读取到设备[%s]模具号信息[%s]!", cellEquipContext.getEquipmentName(), mouldNo));
}
private void doHandleFirstMouldNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, String mouldNo) {
private void doHandleFirstMouldNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext, String mouldNo) {
//磨具号当头道模具号的使用
List<MesProductionPartContext> productionPartContextList = firstMouldNoReadStepService.getProductionPartList(reqBean, resultBean, productionProcessContext, cellEquipContext, mouldNo, false);
List<MesProductionPartContext> productionPartContextList = firstMouldNoReadStepService.getProductionPartList(reqBean, resultBean, cellEquipContext, mouldNo, false);
//保存零件数据信息
firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, false);
firstMouldNoReadStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, false, false);
//保存设备当前一轮工序的产出零件(一模多腔)信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);

@ -1,7 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -15,7 +13,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@ -31,12 +28,6 @@ import java.util.stream.Collectors;
@Service("mesProdCraftRouteCheckNosortStepService")
public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCheckStepService {
@Autowired
private IMesProductionRecordService productionRecordService;
@Autowired
private IMesAssemblyExtService assemblyExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -1,7 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -14,7 +12,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@ -30,12 +27,6 @@ import java.util.stream.Collectors;
@Service("mesProdCraftRouteCheckSortStepService")
public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteCheckStepService {
@Autowired
private IMesProductionRecordService productionRecordService;
@Autowired
private IMesAssemblyExtService assemblyExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -1,7 +1,9 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
@ -39,6 +41,12 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService {
public IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
public IMesProductionRecordService productionRecordService;
@Autowired
public IMesAssemblyExtService assemblyExtService;
@Autowired
private IFsmRouteDataService fsmRouteDataService;
@Override

@ -1,8 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -16,7 +13,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@ -32,15 +28,6 @@ import java.util.stream.Collectors;
@Service("mesProductSeqCheckCustOrderNoStepService")
public class MesProductSeqCheckCustOrderNoStepService extends MesProductSeqCheckStepService {
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Autowired
private IMesAssemblyExtService assemblyExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -1,8 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -16,7 +13,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@ -33,15 +29,6 @@ import java.util.stream.Collectors;
@Service("mesProductSeqCheckNosortStepService")
public class MesProductSeqCheckNosortStepService extends MesProductSeqCheckStepService {
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Autowired
private IMesAssemblyExtService assemblyExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -1,8 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -16,7 +13,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@ -35,15 +31,6 @@ import java.util.stream.Collectors;
@Service("mesProductSeqCheckSortStepService")
public class MesProductSeqCheckSortStepService extends MesProductSeqCheckStepService {
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Autowired
private IMesAssemblyExtService assemblyExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
@ -34,6 +33,15 @@ public class MesProductSeqCheckStepService extends BaseStepService {
@Autowired
public IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
public IMesWorkOrderExtService workOrderExtService;
@Autowired
public IMesProduceSnExtService produceSnExtService;
@Autowired
public IMesAssemblyExtService assemblyExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
@ -56,7 +57,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Autowired
private ISyncFuncService syncFuncService;
@ -116,7 +117,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
//获取上下文零件数据信息
List<String> partNoList = (prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getOutPartNo()))).map(MesProdRuleContext::getOutPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false);
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false, false);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();
@ -125,12 +126,12 @@ public class MesProductSnGenerateStepService extends BaseStepService {
Map<Integer, MesProductionPartContext> ppMap = CollectionUtils.isEmpty(productionPartContextList) ? null : productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o));
Map<Integer, MesProductionPsInContext> psMap = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsInContext::getForeignKey, o -> o));
Map<String, MesPart> partMap = (Map<String, MesPart>) stepResult.getObj();
Map<String, MesPart> partDataMap = (Map<String, MesPart>) stepResult.getObj();
//循环生成零件条码,并写入产出零件
List<MesProductionPsOutContext> productionPsOutContextList = new ArrayList<>();
prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getOutPartNo()))).forEach(o -> {
MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, workCell, o, ppMap, psMap, partMap, prodShiftContext, productResult);
MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, workCell, o, ppMap, psMap, partDataMap, prodShiftContext, productResult);
if (null != productionPsOutContext) productionPsOutContextList.add(productionPsOutContext);
});
@ -143,14 +144,14 @@ public class MesProductSnGenerateStepService extends BaseStepService {
//生成零件条码
private MesProductionPsOutContext insertProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCell workCell, MesProdRuleContext prodRuleContext,
Map<Integer, MesProductionPartContext> ppMap, Map<Integer, MesProductionPsInContext> psMap, Map<String, MesPart> partMap, MesProdShiftContext prodShiftContext, String productResult) {
Map<Integer, MesProductionPartContext> ppMap, Map<Integer, MesProductionPsInContext> psMap, Map<String, MesPart> partDataMap, MesProdShiftContext prodShiftContext, String productResult) {
//产出零件数据信息
MesProductionPartContext productionPartContext = !CollectionUtils.isEmpty(ppMap) ? ppMap.get(prodRuleContext.getForeignKey()) : null;
//进料零件条码
MesProductionPsInContext productionPsInContext = !CollectionUtils.isEmpty(psMap) ? psMap.get(prodRuleContext.getForeignKey()) : null;
//零件信息
MesPart part = partMap.get(prodRuleContext.getOutPartNo());
MesPart part = partDataMap.get(prodRuleContext.getOutPartNo());
//加工规则中进料零件与产出零件是否一致
Boolean isSamePart = isSamePart(productionPsInContext, productionPartContext);

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
@ -44,6 +45,9 @@ import java.util.stream.Collectors;
public class MesProductSnPrintSortStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
@ -94,7 +98,7 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
Map<String, MesWorkOrder> workOrderMap = getMesWorkOrderMap(reqBean, productionPartContextList);
// 获取零件信息上下文
Map<String, MesPart> partDataContext = productionDispatchContextStepService.getPartDataContext(reqBean);
Map<String, MesPart> partDataContext = productionProcessContextStepService.getPartDataContext(reqBean);
List<MesPrintedSnLog> snLogList = new ArrayList<>();

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
@ -51,7 +52,7 @@ public class MesProductSnSaveStepService extends BaseStepService {
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@ -87,7 +88,7 @@ public class MesProductSnSaveStepService extends BaseStepService {
//获取上下文零件数据信息
List<String> partNoList = (productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsOutContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false);
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false, false);
//获取上下文加工结果
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);

@ -1,18 +1,16 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -28,7 +26,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@ -52,13 +49,13 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IPartService partService;
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Override
public void title(StationRequestBean reqBean) {
@ -98,8 +95,8 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在产出零件号跟产出零件信息
if (productionDispatchContextStepService.checkProductionPartNoIsExistContext(reqBean) && productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean)) return stepResult;
//当前工序已存在产出零件信息
if (productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean)) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -168,75 +165,41 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}
//根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态
equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipmentLogIdMap());
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()),
String.format("读取到设备[%s]产出零件号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//发送工步内容
String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//获取产出零件信息 获取零件信息
List<MesProductionPartContext> productionPartContextList = getProductionPartContext(reqBean, resultBean, productionProcessContext, equipVariableCollectContextList);
//更新展示组件MODULE_CONTENT内容
doCacheMoudleContext(reqBean, productionPartContextList);
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).scanInfo(scanInfo), stepResult, String.format("当前已读取到设备[%s]产出零件号[%s]!", cellEquipContext.getEquipmentName(), scanInfo));
}
private List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
//从读取信息中搜集零件编码并去重
List<String> partNoList = (equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
if (CollectionUtils.isEmpty(partDataMap) || (!partDataMap.keySet().containsAll(partNoList) || !partNoList.containsAll(partDataMap.keySet()))) partDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
List<String> readList = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
List<String> partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
//零件信息缺失 抛出异常
List<MesProductionPartContext> productionPartContextList = getProductionPartContext(reqBean, resultBean, partNoList, partDataMap, equipVariableCollectContextList);
//保存设备当前一轮工序的产出零件号,产出零件信息,零件信息
productionDispatchContextStepService.dispatchProductionPartNoContext(reqBean, equipVariableCollectContextList);
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
productionDispatchContextStepService.dispatchPartDataContext(reqBean, partDataMap);
return productionPartContextList;
}
if (!partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false).isCompleted()) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(),
String.format("当前未读取到设备[%s]有效的产出零件号,%s持续监听中...%s", cellEquipContext.getEquipmentName(), stepResult.getMsg(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,
stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的产出零件号,%s持续监听中...", cellEquipContext.getEquipmentName(), stepResult.getMsg())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}
private List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, List<String> partNoList, Map<String, MesPart> partDataMap, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
List<String> filterList = CollectionUtils.isEmpty(partDataMap) ? null : partNoList.stream().filter(o -> (null != o && !partDataMap.containsKey(o))).collect(Collectors.toList());
Map<String, MesPart> partDataMap = (Map<String, MesPart>) stepResult.getObj();
//验证错误 抛出异常
if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(partDataMap) ? partNoList.toString() : filterList.toString()));
//根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态
equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipmentLogIdMap());
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), o.getEquipVariableValue(), partDataMap.get(o.getEquipVariableValue()).getPartName())));
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()),
String.format("读取到设备[%s]产出零件号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
return productionPartContextList;
//获取产出零件信息信息
List<MesProductionPartContext> productionPartContextList = partDataMapSaveStepService.getProductionPartContext(reqBean, productionProcessContext, new ArrayList<>(), partDataMap, readList);
}
//保存设备当前一轮工序的产出零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
private void doCacheMoudleContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
//存储展示组件MODULE_CONTENT内容
productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList));
}
productionDispatchContextStepService.dispatchModuleContentContext(reqBean, partDataMapSaveStepService.getModuleContextData2PartNo(reqBean, productionPartContextList));
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).scanInfo(scanInfo), stepResult, String.format("当前已读取到设备[%s]产出零件号[%s]!", cellEquipContext.getEquipmentName(), scanInfo));
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
List<List<StationKvBean>> dataList = new ArrayList<>();
AtomicReference<Integer> index = new AtomicReference<>(0);
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()),
new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", index.updateAndGet(v -> v + 1) + "/" + productionPartContextList.size())));
return dataList;
}
}

@ -3,12 +3,15 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -23,6 +26,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -42,6 +46,9 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Override
public StepResult guide(StationRequestBean reqBean) {
@ -58,9 +65,6 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//扫描信息置空
String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo());
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
@ -70,68 +74,99 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//扫描信息置空
String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo());
//如果没有扫描信息, 取手选工单信息, 封装扫/读信息:加工单信息
List<MesEquipVariableCollectContext> equipVariableCollectContextList;
//优先验证扫描加工单
if (!StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanWorkOrderNoContext(reqBean, stepResult, scanInfo);
//选择加工单
else equipVariableCollectContextList = doHandleScanWorkOrderNoContext(reqBean, stepResult, workCenter);
//获取手动选择的腔数及零件信息上下文
List<StationKvBean> chooseCavityPart = productionProcessContextStepService.getFunctionChooseCavityPartContext(reqBean);
//扫描信息为空
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描加工单!");
if (CollectionUtils.isEmpty(chooseCavityPart) && StringUtils.isEmpty(scanInfo)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描产成零件!");
//保存上下文扫/读信息:加工单
productionDispatchContextStepService.dispatchScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
List<MesProductionPartContext> productionPartContextList = null;
List<String> readList;
List<String> partNoList;
String cellMessageSorce = null;
String suffix = null;
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, stepResult.getMsg());
if (!CollectionUtils.isEmpty(chooseCavityPart)) {
}
//工位信息来源
cellMessageSorce = chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).findFirst().get().getValue();
//封装扫/读信息:加工单信息 (扫描)
private List<MesEquipVariableCollectContext> doHandleScanWorkOrderNoContext(StationRequestBean reqBean, StepResult stepResult, String scanInfo) {
//搜集读取的产成零件编码
readList = new ArrayList<>(Arrays.asList(chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.PART_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON)));
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
//发送工步内容
scanInfo = chooseCavityPart.stream().filter(o -> (null != o && !o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).map(o -> o.getName() + MesPcnExtConstWords.SQUARE_BRACKETS_L + o.getValue() + MesPcnExtConstWords.SQUARE_BRACKETS_R).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.getByValue(Integer.valueOf(cellMessageSorce)));
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()));
//零件编码去重
partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
//验证零件编码有效性
if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false);
stepResult.msg(String.format("当前扫描信息加工单[%s]!", scanInfo));
//验证失败,删除手动选择的腔数及零件信息上下文
if (CollectionUtils.isEmpty(partNoList) || !stepResult.isCompleted()) productionProcessContextStepService.removeFunctionChooseCavityPartContext(reqBean);
else suffix = String.format("%s:%s", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(Integer.valueOf(cellMessageSorce)), scanInfo);
return equipVariableCollectContextList;
} else {
}
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
//获取上下文产成零件信息
productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//搜集上下文产成零件编码
readList = CollectionUtils.isEmpty(productionPartContextList) ? new ArrayList<>() : productionPartContextList.stream().filter(o -> !StringUtils.isEmpty(o)).map(MesProductionPartContext::getPartNo).collect(Collectors.toList());
//合并当前扫描的零件编码
readList.add(scanInfo);
//零件编码去重
partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
//验证零件编码有效性
if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, true);
if (stepResult.isCompleted()) suffix = String.format("%s:%s[%s]", MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getDescription(), !scanInfo.equals(productionProcessContext.getFinishCode()) ? "零件编码" : "空腔嘛", scanInfo);
//封装扫/读信息:加工单信息 (选择)
private List<MesEquipVariableCollectContext> doHandleScanWorkOrderNoContext(StationRequestBean reqBean, StepResult stepResult, MesWorkCenter workCenter) {
}
//排序线不支持选择加工单
if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) != 0) return null;
//验证失败
if (!stepResult.isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//获取手动选择的腔数及工单信息上下文, 扫描的加工单也会存入其中
List<StationKvBean> chooseCavityOrder = productionProcessContextStepService.getFunctionChooseCavityOrderContext(reqBean);
//封装产出零件信息信息
productionPartContextList = partDataMapSaveStepService.getProductionPartContext(reqBean, productionProcessContext, new ArrayList<>(), (Map<String, MesPart>) stepResult.getObj(), readList);
if (CollectionUtils.isEmpty(chooseCavityOrder)) return null;
//验证是否全部为空腔
if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前产成零件信息全部为空腔,已清除当前的空腔数据!");
String cellMessageSorce = chooseCavityOrder.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).findFirst().get().getValue();
String isConsume = chooseCavityOrder.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.CRAFT_JUMP_CODE))).findFirst().get().getValue();
List<String> chooseList = new ArrayList<>(Arrays.asList(chooseCavityOrder.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.WORK_ORDER_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON)));
//保存设备当前一轮工序的产出零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
chooseList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o ->
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), o, Integer.valueOf(cellMessageSorce)).isConsume(Integer.valueOf(isConsume))));
//扫描模式下判断当前是否满足设备腔数
if (CollectionUtils.isEmpty(chooseCavityPart)) {
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
if (cellEquipContext.getCavity().compareTo(productionPartContextList.size()) > 0) return stepDynamicsCompleteAndSendMsgReturn(
reqBean, resultBean.writeDbLog().scanInfo(scanInfo),
stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
String.format("当前%s验证成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", suffix, cellEquipContext.getCavity(), cellEquipContext.getCavity() - productionPartContextList.size()));
}
//发送工步内容
String scanInfo = chooseCavityOrder.stream().filter(o -> (null != o && !o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).map(o -> o.getName() + MesPcnExtConstWords.SQUARE_BRACKETS_L + o.getValue() + MesPcnExtConstWords.SQUARE_BRACKETS_R).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.getByValue(Integer.valueOf(cellMessageSorce)));
//存储展示组件MODULE_CONTENT内容
productionDispatchContextStepService.dispatchModuleContentContext(reqBean, partDataMapSaveStepService.getModuleContextData2PartNo(reqBean, productionPartContextList));
stepResult.msg(String.format("当前%s%s!", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(Integer.valueOf(cellMessageSorce)), scanInfo));
//缓存产成零件编码到上下文得基础信息中, 下次开模即可无须再次选择或者扫描产成零件编码
if (CollectionUtils.isEmpty(chooseCavityPart) || !cellMessageSorce.equals(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValueStr())) {
productionProcessContextStepService.dispatchFunctionChooseCavityPartContext(reqBean, StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", String.valueOf(productionPartContextList.size())),
new StationKvBean(MesPcnExtConstWords.CELL_MESSAGE_SOURCE, "工位信息来源", MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValueStr()),
new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", productionPartContextList.stream().filter(o -> null != o).map(MesProductionPartContext::getPartNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)))));
}
return equipVariableCollectContextList;
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(scanInfo), stepResult, String.format("当前%s验证成功!", suffix));
}

@ -1,6 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
@ -36,14 +35,8 @@ import java.util.stream.Collectors;
public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepService {
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private IFsmCommonService fsmCommonService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -112,10 +105,10 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer
if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList);
//验证是否全部为空腔
if (checkIsAllFinishCode(reqBean, productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!");
if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!");
//保存零件数据信息
if (!firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//保存上下文产出零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
@ -229,8 +222,8 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer
List<List<StationKvBean>> dataList = new ArrayList<>();
List<MesProductionPartContext> orderList = filterProductionPartContext(productionPartContextList, true);
List<MesProductionPartContext> finishCodeList = filterProductionPartContext(productionPartContextList, false);
List<MesProductionPartContext> orderList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, true);
List<MesProductionPartContext> finishCodeList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, false);
AtomicReference<Integer> index = new AtomicReference<>(0);

@ -1,9 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
@ -17,7 +15,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@ -34,15 +31,6 @@ import java.util.stream.Collectors;
@Service("mesWorkOrderCheckSortStepService")
public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepService {
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private IFsmCommonService fsmCommonService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -125,13 +113,13 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
}
//验证是否全部为空腔
if (checkIsAllFinishCode(reqBean, productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!");
if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!");
//验证是否存在相同的零件生产组的加工单, 存在则清除已缓存的数据
if (checkPartProdGroupCodeIsExistRepeat(reqBean, productionPartContextList, cachedProductionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "不支持生产相同的零件生产组的加工单,已清除当前的加工单数据!");
//保存零件数据信息
if (!firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//保存上下文产出零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
@ -245,8 +233,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
List<List<StationKvBean>> dataList = new ArrayList<>();
List<MesProductionPartContext> orderList = filterProductionPartContext(productionPartContextList, true);
List<MesProductionPartContext> finishCodeList = filterProductionPartContext(productionPartContextList, false);
List<MesProductionPartContext> orderList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, true);
List<MesProductionPartContext> finishCodeList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, false);
AtomicReference<Integer> index = new AtomicReference<>(0);

@ -2,12 +2,13 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -17,8 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
@ -34,6 +33,12 @@ public class MesWorkOrderCheckStepService extends BaseStepService {
@Autowired
public IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
public MesPartDataMapSaveStepService partDataMapSaveStepService;
@Autowired
public IMesWorkOrderExtService workOrderExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -60,17 +65,4 @@ public class MesWorkOrderCheckStepService extends BaseStepService {
return true;
}
//根据是否空腔搜集数据
public List<MesProductionPartContext> filterProductionPartContext(List<MesProductionPartContext> productionPartContextList, Boolean flag) {
return flag ? productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList()) :
productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).collect(Collectors.toList());
}
//验证是否全部为空腔
public Boolean checkIsAllFinishCode(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (null != optional && optional.isPresent()) return false;
return true;
}
}

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPackingDefineService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -45,13 +46,13 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Autowired
private IMesWorkOrderCutService workOrderCutService;
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
private IMesWorkOrderCutService workOrderCutService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@ -93,29 +94,6 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
MesWorkCell workCell = productionProcessContext.getWorkCell();
////获取上下文产出零件信息
//List<MesProductionPartContext> cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
////获取工单对应的条码数据信息
//List<MesProductionPsInContext> cachedProductionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
//验证扫描信息是否属于工艺强过码
//Boolean isCraftJumpCode = matchCraftJumpCode(productionProcessContext, equipVariableCollectContextList);
//
////验证是否支持跳过
//Boolean isAllowJump = checkIsAllowJump(cachedProductionPartContextList, cachedProductionPsInContextList);
////当前不允许跳过
//if (isCraftJumpCode && !isAllowJump)
// return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).
// scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()), stepResult, String.format("当前扫描信息工艺强过码[%s],当前没有可以跳过的裁片工单信息!", equipVariableCollectContextList.get(0).getEquipVariableValue()));
//
////允许跳过,先更新数据
//if (isCraftJumpCode && isAllowJump) {
// updateProductionPartAndPsInContextList(reqBean, cachedProductionPartContextList, cachedProductionPsInContextList, equipVariableCollectContextList.get(0).getEquipVariableValue());
// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).
// scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()), stepResult, String.format("当前扫描信息工艺强过码[%s]!", equipVariableCollectContextList.get(0).getEquipVariableValue()));
//}
//验证工单的有效性
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
@ -125,9 +103,6 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
equipVariableCollectContextList, productionPartContextList, productionPsInContextList,
productionPsOutContextList, workCell).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
////保存零件数据信息
//if (!firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//保存上下文零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
//保存上下文产出零件信息
@ -156,22 +131,12 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
}
//public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<MesProductionPartContext> productionPartContextList, Boolean isBackError) {
//
// //从一模多腔信息中搜集零件编码并去重
// List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
//
// return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError);
//
//}
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
List<List<StationKvBean>> dataList = new ArrayList<>();
List<MesProductionPartContext> orderList = filterProductionPartContext(productionPartContextList, true);
//List<MesProductionPartContext> finishCodeList = filterProductionPartContext(productionPartContextList, false);
AtomicReference<Integer> index = new AtomicReference<>(0);
@ -188,10 +153,6 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(index.updateAndGet(v -> v + 1))).add(String.valueOf(cavityQty)).toString())));
}
//if (!CollectionUtils.isEmpty(finishCodeList)) {
// StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size())));
//}
return dataList;
}
@ -254,7 +215,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
packProductionPartContextList(productionProcessContext, equipVariableCollectContextList, productionPartContextList, cutScheme, mesWorkOrderCutDetailList, workOrderList);
//保存 上下文 零件数据信息
if (!firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true, false).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
// 裁片方案成品配置
List<MesCutSchemeFg> mesCutSchemeFgList = workOrderCutService.queryCutSchemeFgList(cutScheme.getCutCode(), reqBean.getOrganizeCode());
@ -267,7 +228,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
List<MesWorkOrderCutDetailModel> workOrderCutDetailModelList = new ArrayList<>();
Map<String, MesPartContext> partDataExtContext = productionDispatchContextStepService.getPartDataExtContext(reqBean);
Map<String, MesPartContext> partDataExtContext = productionProcessContextStepService.getPartDataExtContext(reqBean);
for (MesCutSchemeFg mesCutSchemeFg : mesCutSchemeFgList) {
if (StringUtils.isEmpty(mesCutSchemeFg.getPackageSnRuleCode()))
@ -310,7 +271,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
}
productionDispatchContextStepService.dispatchPartDataContext(reqBean, partDataExtContext);
productionProcessContextStepService.dispatchPartDataContext(reqBean, partDataExtContext);
productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, workOrderCutDetailModelList);
@ -357,7 +318,6 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
MesProductionPartContext productionPartContext = new MesProductionPartContext()
.copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo()).getQty(), workOrderCutDetailMap.get(o.getWorkOrderNo()).getCutWorkOrderNo(), equipVariableCollectContextList.get(0).getMessageSource())
.isCheck(productionProcessContext.getWorkCell());
//if (equipVariableCollectContextList.get(0).getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) productionPartContext.checkSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
productionPartContext.setCutCode(cutScheme.getCutCode());
productionPartContextList.add(productionPartContext);
});

@ -70,7 +70,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
// 获取产成零件信息
Map<String, MesPartContext> partDataContext = productionDispatchContextStepService.getPartDataExtContext(reqBean);
Map<String, MesPartContext> partDataContext = productionProcessContextStepService.getPartDataExtContext(reqBean);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();

@ -115,7 +115,7 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
Map<String, MesProdRuleContext> prodRuleContextMapByOutPartNo = prodRuleContextList.stream().collect(Collectors.toMap(MesProdRuleContext::getOutPartNo, Function.identity(), (x, y) -> y));
// 获取产成零件信息
Map<String, MesPart> partDataContext = productionDispatchContextStepService.getPartDataContext(reqBean);
Map<String, MesPart> partDataContext = productionProcessContextStepService.getPartDataContext(reqBean);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();

@ -6,7 +6,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -18,7 +17,6 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
/**
@ -194,33 +192,6 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
return true;
}
//获取上下文零件数据信息
@Override
public Map<String, MesPart> getPartDataContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : null;
}
//获取上下文零件数据信息
@Override
public Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPartContext>>() {}) : null;
}
//保存上下文零件数据信息 [JSON]Map<String, MesPart>
@Override
public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap) {
if (CollectionUtils.isEmpty(partDataMap)) return false;
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT, JSONObject.toJSONString(partDataMap));
}
//删除上下文零件数据信息
@Override
public void removePartDataContext(StationRequestBean reqBean) {
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
}
//获取上下文模具号
@Override
public MesEquipVariableCollectContext getMouldNoContext(StationRequestBean reqBean) {

@ -3,10 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
@ -392,6 +389,33 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_NOSORT_CFG_CONTEXT, JSONObject.toJSONString(assemblyNosortCfgList));
}
//获取上下文零件数据信息
@Override
public Map<String, MesPart> getPartDataContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : null;
}
//获取上下文零件数据信息
@Override
public Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPartContext>>() {}) : null;
}
//保存上下文零件数据信息 [JSON]Map<String, MesPart>
@Override
public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap) {
if (CollectionUtils.isEmpty(partDataMap)) return false;
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT, JSONObject.toJSONString(partDataMap));
}
//删除上下文零件数据信息
@Override
public void removePartDataContext(StationRequestBean reqBean) {
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
}
//获取手动选择的腔数及工单信息上下文
@Override
public List<StationKvBean> getFunctionChooseCavityOrderContext(StationRequestBean reqBean) {
@ -412,6 +436,25 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER);
}
//获取手动选择的腔数及零件信息上下文
@Override
public List<StationKvBean> getFunctionChooseCavityPartContext(StationRequestBean reqBean) {
String chooseCavityPartJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_PART);
return !StringUtils.isEmpty(chooseCavityPartJson) ? JSONObject.parseArray(chooseCavityPartJson, StationKvBean.class) : null;
}
//保存选择/扫描/读取的腔数及零件信息上下文 腔数=工单个数 数据格式: [StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=partNo, name=零件编码, value=零件1;零件2;零件3, seq=2)]
@Override
public Boolean dispatchFunctionChooseCavityPartContext(StationRequestBean reqBean, List<StationKvBean> resultList) {
if (CollectionUtils.isEmpty(resultList)) return false;
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_PART, JSONObject.toJSONString(resultList));
}
//删除手动选择的腔数及工单信息上下文
@Override
public void removeFunctionChooseCavityPartContext(StationRequestBean reqBean) {
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_PART);
}
//获取上下文工位扫描监控信息, 没有就重新封装工位扫描监控信息, 同时处理基础上下文信息 【其他地方调用 isSave 必须传 true 】
@Override

@ -3,12 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
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.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.process.BaseProcessMonitorService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.swslog.ISwsWriteDbLogService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import org.springframework.beans.factory.annotation.Autowired;
@ -28,20 +23,13 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IFsmCommonService fsmCommonService;
@Autowired
private ISwsWriteDbLogService writeDbLogService;
//工序开始
@Override
public Boolean doProcessStart(StationRequestBean requestBean) {
//保存上下文工位扫描监控信息
productionProcessContextStepService.dispatchScanMonitorContext(requestBean);
//清除工步客制化区域数据【装配件清单】
this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue()));
return true;
//父类清除工步客制化区域数据【装配件清单】
return super.doProcessStart(requestBean);
}
//工序结束
@ -54,9 +42,8 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
}
//清除上下文中的所有业务数据
productionDispatchContextStepService.flushProductionDispatchContext(requestBean);
//发送工序完成音
this.sendMessage(requestBean, new StationResultBean().resultObj(MesPcnExtConstWords.PROCESS_COMPLETE).busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.SOUND.getValue()));
return true;
//父类发送工序完成音
return super.doProcessComplete(requestBean);
}
//重置工序
@ -64,14 +51,14 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
public Boolean doJumpProcess(StationRequestBean requestBean) {
//清除上下文中的所有业务数据
productionDispatchContextStepService.flushProductionDispatchContext(requestBean);
return true;
return super.doJumpProcess(requestBean);
}
//客户端上线
@Override
public Boolean doOnLine(StationRequestBean requestBean) {
//删除当前工步集
fsmCommonService.flushCache(requestBean);
//父类删除当前工步集
super.doOnLine(requestBean);
//清除上下文中的所有业务数据
productionDispatchContextStepService.flushProductionDispatchContext(requestBean);
//清除上下文中的所有基础数据
@ -83,16 +70,16 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
//客户端下线
@Override
public Boolean doOffLine(StationRequestBean requestBean) { return true; }
public Boolean doOffLine(StationRequestBean requestBean) { return super.doOffLine(requestBean); }
//工位流程重置 【父类已经调用: 删除当前工步集; 清除工位工序流程; TASK_COMPLETE】
//工位流程重置 【父类调度方法已经调用: 删除当前工步集; 清除工位工序流程; TASK_COMPLETE】
@Override
public Boolean fsmReset(StationRequestBean requestBean) {
//清除上下文中的所有业务数据
productionDispatchContextStepService.flushProductionDispatchContext(requestBean);
//清除上下文中的所有基础数据
productionProcessContextStepService.flushProductionProcessContext(requestBean);
return true;
return super.fsmReset(requestBean);
}
}

@ -1,4 +1,4 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;

@ -0,0 +1,163 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
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.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesPartDataMapSaveStepService")
public class MesPartDataMapSaveStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IPartService partService;
//保存零件数据信息
public StepResult savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isFilter, Boolean isSave) {
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, isFilter, isSave);
}
//保存零件数据信息
public StepResult savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isFilter) {
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, isFilter, true);
}
//保存零件数据信息 【isBackError=false: 抛出异常】【isFilter=false: 重新查询所有零件true: 过滤之后查询未缓存的零件之后再进行合并前面已缓存过的零件】
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<String> partNoList, Boolean isBackError, Boolean isFilter) {
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, isFilter, true);
}
//保存零件数据信息 【isBackError=false: 抛出异常】【isFilter=false: 重新查询所有零件true: 过滤之后查询未缓存的零件之后再进行合并前面已缓存过的零件】
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<String> partNoList, Boolean isBackError, Boolean isFilter, Boolean isSave) {
if (CollectionUtils.isEmpty(partNoList)) {
stepResult.isCompleted(false).msg("获取零件信息失败,零件编码不存在!");
if (!isBackError) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.getMsg());
}
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionProcessContextStepService.getPartDataContext(reqBean);
//验证上下文中取出零件信息集合是否匹配当前搜集的零件编码
if (!CollectionUtils.isEmpty(partDataMap) && partDataMap.keySet().containsAll(partNoList)) return stepResult.obj(partDataMap);
//新零件MAP
Map<String, MesPart> finalPartDataMap;
if (!isFilter) {
//根据物料编码集合查询物料信息
finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
} else {
//已缓存的零件号
List<String> containPartNoList = CollectionUtils.isEmpty(partDataMap) ? null : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && partDataMap.containsKey(o))).collect(Collectors.toList());
//未缓存的零件号
List<String> unContainPartNoList = CollectionUtils.isEmpty(partDataMap) ? partNoList : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !partDataMap.containsKey(o))).collect(Collectors.toList());
//根据未缓存的零件号集合查询物料信息
finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), unContainPartNoList);
//合并零件号
if (!CollectionUtils.isEmpty(finalPartDataMap) && !CollectionUtils.isEmpty(containPartNoList)) containPartNoList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> finalPartDataMap.put(o, partDataMap.get(o)));
}
//零件信息缺失 抛出异常
List<String> filterList = CollectionUtils.isEmpty(finalPartDataMap) ? null : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !finalPartDataMap.containsKey(o))).collect(Collectors.toList());
//保存上下文零件数据信息
if (!CollectionUtils.isEmpty(finalPartDataMap) && CollectionUtils.isEmpty(filterList)) {
if (isSave) productionProcessContextStepService.dispatchPartDataContext(reqBean, finalPartDataMap);
return stepResult.obj(finalPartDataMap);
}
//验证错误 根据isBackError判断是否抛出异常
stepResult.isCompleted(false).msg(String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString()));
if (!isBackError) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.getMsg());
return stepResult;
}
//验证是否全部为空腔
public Boolean checkIsAllFinishCode(List<MesProductionPartContext> productionPartContextList) {
Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (null != optional && optional.isPresent()) return false;
return true;
}
//根据是否空腔搜集数据
public List<MesProductionPartContext> filterProductionPartContext(List<MesProductionPartContext> productionPartContextList, Boolean flag) {
return flag ? productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList()) :
productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).collect(Collectors.toList());
}
//获取产出零件信息信息
public List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
List<MesProductionPartContext> productionPartContextList, Map<String, MesPart> partDataMap, List<String> partNoList) {
partNoList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> productionPartContextList.add(getProductionPartContextByPartNo(reqBean, o, productionProcessContext, partDataMap)));
return productionPartContextList;
}
private MesProductionPartContext getProductionPartContextByPartNo(StationRequestBean reqBean, String partNo, MesProductionProcessContext productionProcessContext, Map<String, MesPart> partDataMap) {
if (!partNo.equals(productionProcessContext.getFinishCode())) return new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), partNo, partDataMap.get(partNo).getPartName());
return new MesProductionPartContext().isFinishCode();
}
//封装展示组件MODULE_CONTENT内容
public List<List<StationKvBean>> getModuleContextData2PartNo(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
List<List<StationKvBean>> dataList = new ArrayList<>();
List<MesProductionPartContext> orderList = filterProductionPartContext(productionPartContextList, true);
List<MesProductionPartContext> finishCodeList = filterProductionPartContext(productionPartContextList, false);
AtomicReference<Integer> index = new AtomicReference<>(0);
if (!CollectionUtils.isEmpty(orderList)) {
orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()),
new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(index.updateAndGet(v -> v + 1))).add(String.valueOf(productionPartContextList.size())).toString())));
}
if (!CollectionUtils.isEmpty(finishCodeList)) {
StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size())));
}
return dataList;
}
}

@ -51,7 +51,7 @@ public class MesProduceSnPrintDataModel {
@ApiParam("用户名")
private String userName;
@ApiParam("打印模板")
@ApiParam("打印时间")
private String printDate;
@ApiParam("打印数据")

@ -366,6 +366,8 @@ public class MesPcnExtConstWords {
public static final String FUNCTION_RESET_CELL_CONTEXT = "FUNCTION_RESET_CELL_CONTEXT";
// 工位参数按钮事件: 选择工单(先选腔数, 再选工单)
public static final String FUNCTION_CHOOSE_CAVITY_ORDER = "FUNCTION_CHOOSE_CAVITY_ORDER";
// 工位参数按钮事件: 选择产成零件(先选腔数, 再选零件)
public static final String FUNCTION_CHOOSE_CAVITY_PART = "FUNCTION_CHOOSE_CAVITY_PART";
// 工位参数按钮事件: 切换工位
public static final String FUNCTION_SWITCH_CELL = "FUNCTION_SWITCH_CELL";
// 工位参数按钮事件: 锁定
@ -380,9 +382,6 @@ public class MesPcnExtConstWords {
// 自定义触发事件: 产出零件
public static final String NEXT_TRIGGER_EVENT_PART_NO = "PART_NO";
// 工序完成
public static final String PROCESS_COMPLETE = "processComplete";
// 0
public static final String ZERO_STR = "0";
// 0

Loading…
Cancel
Save