Merge branch 'dev-wuhan' of http://git.estsh.com/I3-YF/i3plus-mes-pcn-yfai into dev-wuhan

tags/yfai-pcn-ext-v2.3
王杰 8 months ago
commit ebc7bcd0b4

@ -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.busi.*;
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;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
@ -17,6 +18,7 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -230,37 +232,33 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
List<MesWorkOrder> workOrderList = workOrderExtService.getWorkOrderList(reqBean.getOrganizeCode(), workOrderNoList);
if (CollectionUtils.isEmpty(workOrderList))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单信息无效!", cutWorkOrderNo));
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单信息无效!", cutWorkOrderNo));
for (MesWorkOrder workOrder : workOrderList) {
if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单信息工单状态[%s]!", cutWorkOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单信息工单状态[%s]!", cutWorkOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", cutWorkOrderNo, workOrder.getWorkOrderNo(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", cutWorkOrderNo, workOrder.getWorkOrderNo(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
}
//保存零件数据信息
//封装 上下文 产出零件信息
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());
// 裁片方案成品配置
List<MesCutSchemeFg> mesCutSchemeFgList = workOrderCutService.queryCutSchemeFgList(cutScheme.getCutCode(), reqBean.getOrganizeCode());
if (CollectionUtils.isEmpty(mesCutSchemeFgList))
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,裁片工单[%s]关联裁片方案[%s]无成品配置!", cutWorkOrderNo, cutScheme.getCutCode()));
List<String> fgPartNoList = mesCutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList());
List<String> worKOrderPartNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList());
worKOrderPartNoList.removeAll(fgPartNoList);
if (!CollectionUtils.isEmpty(worKOrderPartNoList))
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,零件号[%s]未在裁片方案[%s]成品配置信息中维护!", worKOrderPartNoList, cutScheme.getCutCode()));
// 校验裁片方案成品配置
if(!checkMesCutSchemeFgListValid(mesCutSchemeFgList, workOrderList, stepResult, cutWorkOrderNo, cutScheme.getCutCode()).isCompleted()) return stepResult;
// 最后一个工位 封装 包装条码打印所需参数
if (workCell.getIsEndWorkCell() != null && workCell.getIsEndWorkCell() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
List<MesWorkOrderCutDetailModel> workOrderCutDetailModelList = new ArrayList<>();
Map<String, MesPartContext> partDataExtContext = productionDispatchContextStepService.getPartDataExtContext(reqBean);
for (MesCutSchemeFg mesCutSchemeFg : mesCutSchemeFgList) {
@ -272,24 +270,33 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
if (mesPackingDefine == null)
return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode()));
MesWorkOrderCutDetailModel workOrderCutDetailModel = new MesWorkOrderCutDetailModel();
BeanUtils.copyProperties(mesCutSchemeFg, workOrderCutDetailModel);
MesCustomerPart customerPart = customerPartService.getMesCustomerPartByPartNo(mesCutSchemeFg.getPartNo(), mesPackingDefine.getCustCode(), reqBean.getOrganizeCode());
MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo());
mesPartContext.setCopies(cutScheme.getCopies());
mesPartContext.setCopies(mesPackingDefine.getPrintCopies());
mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
mesPartContext.setPrinter(mesPackingDefine.getPrinter());
mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate());
mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
workOrderCutDetailModel.setCopies(mesPackingDefine.getPrintCopies());
workOrderCutDetailModel.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
workOrderCutDetailModel.setPrinter(mesPackingDefine.getPrinter());
workOrderCutDetailModel.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext);
workOrderCutDetailModelList.add(workOrderCutDetailModel);
}
productionDispatchContextStepService.dispatchPartDataContext(reqBean, partDataExtContext);
}
productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, workOrderCutDetailModelList);
Map<String, MesWorkOrderCutDetail> workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(MesWorkOrderCutDetail::getWorkOrderNo, Function.identity(), (x, y) -> y));
}
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(reqBean.getOrganizeCode(), cutWorkOrderNo);
@ -300,8 +307,32 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
productionPsOutContextList.add(new MesProductionPsOutContext().copy(o));
});
//封装产出零件信息
workOrderList.stream().filter(o -> null != o).forEach( o -> {
return stepResult;
}
private StepResult checkMesCutSchemeFgListValid(List<MesCutSchemeFg> mesCutSchemeFgList, List<MesWorkOrder> workOrderList, StepResult stepResult, String cutWorkOrderNo, String cutCode) {
if (CollectionUtils.isEmpty(mesCutSchemeFgList))
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,裁片工单[%s]关联裁片方案[%s]无成品配置!", cutWorkOrderNo, cutCode));
List<String> fgPartNoList = mesCutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList());
List<String> worKOrderPartNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList());
worKOrderPartNoList.removeAll(fgPartNoList);
if (!CollectionUtils.isEmpty(worKOrderPartNoList))
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,零件号[%s]未在裁片方案[%s]成品配置信息中维护!", worKOrderPartNoList, cutCode));
stepResult.setCompleted(true);
return stepResult;
}
private static void packProductionPartContextList(MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPartContext> productionPartContextList, MesCutScheme cutScheme, List<MesWorkOrderCutDetail> mesWorkOrderCutDetailList, List<MesWorkOrder> workOrderList) {
Map<String, MesWorkOrderCutDetail> workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(MesWorkOrderCutDetail::getWorkOrderNo, Function.identity(), (x, y) -> y));
workOrderList.stream().filter(o -> null != o).forEach(o -> {
MesProductionPartContext productionPartContext = new MesProductionPartContext()
.copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo()).getQty(), equipVariableCollectContextList.get(0).getMessageSource())
.isCheck(productionProcessContext.getWorkCell());
@ -309,9 +340,6 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
productionPartContext.setCutCode(cutScheme.getCutCode());
productionPartContextList.add(productionPartContext);
});
return stepResult;
}

@ -74,9 +74,6 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//从上下文中取出设备对象
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
@ -94,8 +91,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
Integer initSize = prodRuleContextList.size();
//封装非排序加工规则
doHandleProdRuleData(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext,
prodRuleContextList, productionPartContextList);
if (!doHandleProdRuleData(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext,
prodRuleContextList, productionPartContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//匹配失败需要清除本次扫描/读取信息
//if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList))
@ -135,15 +132,23 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
//加工规则的数据已与产出零件的数量一致
//if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return stepResult;
log.info("doHandleProdRuleDataByProductionPart --- productionPartContextList --- outPartNoList:{}", productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList()));
log.info("doHandleProdRuleDataByProductionPart --- productionPartContextList:{}", productionPartContextList);
//拿到当前最大的foreignKey
Optional<MesProductionPartContext> maxForeignKeyOptional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPartContext::getForeignKey));
Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO;
log.info("doHandleProdRuleDataByProductionPart --- foreignKey:{}", foreignKey);
//搜集未匹配规则的产出零件
List<String> outPartNoList = productionPartContextList.stream()
.filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo())))
.map(MesProductionPartContext::getPartNo).collect(Collectors.toList());
log.info("doHandleProdRuleDataByProductionPart --- outPartNoList:{}", foreignKey);
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
return doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, productionProcessContext,
cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey);
@ -172,6 +177,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
for (MesProductionPartContext productionPartContext : productionPartContextList) {
log.info("doHandleProdRuleDataByProductionPartAndEmptyProductSn --- 是否找加工规则:{}", null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey()));
//foreignKey有值代表已经匹配过产品加工规则
if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;

@ -74,6 +74,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
// 最后一个工位才生成箱条码
if (workCell.getIsEndWorkCell() != null && workCell.getIsEndWorkCell() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
// 从上下文中取出成品列表
List<MesWorkOrderCutDetailModel> workOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean);
if (CollectionUtils.isEmpty(workOrderCutFgDataContextList))
@ -137,6 +138,8 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
BeanUtils.copyProperties(workOrderCutDetailModel, newWorkOrderCutDetailModel);
newWorkOrderCutDetailModel.setQty(qty);
newWorkOrderCutDetailModel.setCreateDatetime(cutPackage.getCreateDatetime());
newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter());
newWorkOrderCutDetailModel.setCopies(mesPartContext.getCopies());
workOrderCutPackages.add(cutPackage);
newWorkOrderCutFgDataContextList.add(newWorkOrderCutDetailModel);

@ -219,19 +219,6 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
}
private void insertWorkOrderCutPackage(StationRequestBean reqBean, StationResultBean resultBean) {
List<MesWorkOrderCutDetailModel> workOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean);
if (CollectionUtils.isEmpty(workOrderCutFgDataContextList))
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "缺失裁片工单箱条码配置信息!");
for (MesWorkOrderCutDetailModel workOrderCutDetailModel : workOrderCutFgDataContextList) {
}
}
private void saveProductionAssembly(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
MesCellEquipContext cellEquipContext, MesProdRuleContext mesProdRuleContext,
MesProductionPsOutContext productionPsOutContext) {

@ -56,6 +56,12 @@ public class MesWorkOrderCutDetailModel {
@ApiParam("打印份数")
private Integer copies;
@ApiParam("打印机")
private String printer;
@ApiParam("标签模板")
private String labelTemplate;
// 包装条码打印所需属性 END
}

Loading…
Cancel
Save