Merge branch 'dev-wuhan' into dev-wuhan-temp

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

@ -18,6 +18,9 @@ public interface IMesProdOrgExtService {
@ApiOperation(value = "根据生产线代码,工位代码查询工位信息")
MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode);
@ApiOperation(value = "根据生产线代码查询工位信息")
List<MesWorkCell> getWorkCellList(String organizeCode, String workCenterCode);
@ApiOperation(value = "根据子生产线代码,子工位代码,关系类型查询主子工位关系信息")
MesWorkCellExtendCfg getWorkCellExtendCfg(String organizeCode, String workCenterCodeBak, String workCellCodeBak, Integer extendType);

@ -3,13 +3,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
import cn.estsh.i3plus.pojo.mes.bean.MesAssemblyNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import cn.estsh.i3plus.pojo.mes.bean.*;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
public interface IMesAssemblyExtService {
@ -17,7 +15,7 @@ public interface IMesAssemblyExtService {
List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 [前道所有装配件]")
List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext);
List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap);
@ApiOperation(value = "【排序线】获取生产工单装配件清单")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext);

@ -2,9 +2,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
public interface IMesProdRuleCfgExtService {
@ -24,7 +26,7 @@ public interface IMesProdRuleCfgExtService {
MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext);
@ApiOperation(value = "【排序线】获取产品加工规则 [前道所有装配件]")
MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext);
MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap);
@ApiOperation(value = "【非排序线】获取产品加工规则 【根据PID获取】")
MesProdRuleNosortCfg getProdRuleNosortCfg(String organizeCode, Long id);

@ -7,6 +7,7 @@ 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.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -133,4 +134,7 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取生产线类型")
Integer getCenterType(StationRequestBean reqBean);
@ApiOperation(value = "获取生产线下的工位集合")
Map<String, MesWorkCell> dispatchWorkCellMap(StationRequestBean reqBean);
}

@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
@ -59,6 +60,10 @@ public class MesCutRawErrorProofingController {
@ApiOperation(value = "查询条码长度")
public ResultBean queryLengthByScanSn(MesCutRawErrorProofingModel model) {
try {
ValidatorBean.checkNotNull(model.getSn(), "查询条码不能为空");
ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂代码不能为空");
return ResultBean.success("查询成功").setResultObject(cutRawErrorProofingService.queryLengthBySn(model));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);

@ -117,10 +117,10 @@ public class MesProduceSnPrintController {
}
@PostMapping("/mes-work-order-cut/find")
@ApiOperation(value = "裁片工单查询")
@ApiOperation(value = "裁片工单打印查询")
public ResultBean findMesWorkOrderCut(MesWorkOrderCut workOrderCut) {
try {
ValidatorBean.checkNotNull(workOrderCut.getWorkCenterCode(), "产线代码不能为空");
ValidatorBean.checkNotNull(workOrderCut.getWorkCenterCodeQuery(), "产线代码不能为空");
ValidatorBean.checkNotNull(workOrderCut.getOrganizeCode(), "工厂代码不能为空");
ValidatorBean.checkNotNull(workOrderCut.getModifyUser(), "操作人不能为空");

@ -121,7 +121,7 @@ public class MesPullingOrderInfoController {
throw new ImppBusiException("拉动单明细状态不为未送料状态!");
}
MesPullingOrderPartInfo pullingOrderInfo = mesPullingOrderInfoService.doMesPullingOrderInfoJisScan(info, AuthUtil.getSessionUser().getUserName());
return ResultBean.success("拉动单打印成功")
return ResultBean.success("JIS物料拉动校验条码成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultObject(pullingOrderInfo);
} catch (ImppBusiException e) {
@ -134,9 +134,16 @@ public class MesPullingOrderInfoController {
@ApiOperation(value = "JIS物料拉动-送料按钮")
public ResultBean doMesPullingOrderInfoSend(@RequestBody List<MesPullingOrderPartInfo> infoList) {
try {
for (MesPullingOrderPartInfo partInfo : infoList) {
if (MesExtEnumUtil.PULL_ORDER_PART_STATUS.SENTED.getValue()==partInfo.getStatus()) {
throw new ImppBusiException("JIS物料拉动状态不为未送料状态");
}
if (MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode()==partInfo.getColor()) {
throw new ImppBusiException("JIS物料拉动需要扫描条码校验");
}
}
List<MesPullingOrderPartInfo> pullingOrderInfos = mesPullingOrderInfoService.doMesPullingOrderInfoSend(infoList, AuthUtil.getSessionUser().getUserName());
return ResultBean.success("拉动单打印成功")
return ResultBean.success("拉动单送料成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultList(pullingOrderInfos);
} catch (ImppBusiException e) {

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellExtendCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
@ -13,11 +14,13 @@ 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;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
@Slf4j
@ -56,6 +59,17 @@ public class MesProdOrgExtService implements IMesProdOrgExtService {
}
@Override
public List<MesWorkCell> getWorkCellList(String organizeCode, String workCenterCode) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode)) return null;
List<MesWorkCell> workCellList = workCellRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode});
if (!CollectionUtils.isEmpty(workCellList))
workCellList = workCellList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkCell::getWorkCellCode))), ArrayList::new));
return workCellList;
}
@Override
public MesWorkCellExtendCfg getWorkCellExtendCfg(String organizeCode, String workCenterCodeBak, String workCellCodeBak, Integer extendType) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCodeBak) || StringUtils.isEmpty(workCellCodeBak) || StringUtils.isEmpty(extendType)) return null;
return workCellExtendCfgRepository.getByProperty(

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
@ -43,6 +44,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private MesFileRepository fileRepository;
//【排序线】获取生产工单装配件绑定记录
@ -64,14 +68,14 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap)));
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey())));
return productionAssemblySortContextList;
}
//【排序线】获取生产工单装配件绑定记录 [前道所有装配件]
//【排序线】获取生产工单装配件绑定记录 [前道所有装配件,无爆炸图与音频文件逻辑]
@Override
public List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext) {
public List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap) {
if (null == prodRuleContext) return null;
@ -92,7 +96,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o, getProductionAssembly(productionAssemblyMap, o.getId()))));
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getWorkCell(workCellMap, o.getWorkCellCode())).foreignKey(prodRuleContext.getForeignKey())));
return productionAssemblySortContextList;
}
@ -167,7 +171,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
//遍历装配件规则, 实例化装配件清单对象, 判断是否配置可复用
assemblyNosortCfgList.forEach(o -> productionAssemblyNosortContextList.add(
new MesProductionAssemblyNosortContext().copy(prodRuleContext, o, getRepeatAssemblySn(prodRuleContext.getOrganizeCode(), prodRuleContext.getWorkCenterCode(), prodRuleContext.getWorkCellCode(), o)).fileUrl(fileMap))
new MesProductionAssemblyNosortContext().copy(prodRuleContext, o, getRepeatAssemblySn(prodRuleContext.getOrganizeCode(), prodRuleContext.getWorkCenterCode(), prodRuleContext.getWorkCellCode(), o)).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()))
);
return productionAssemblyNosortContextList;
@ -280,4 +284,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
return CollectionUtils.isEmpty(productionAssemblyMap) ? null : productionAssemblyMap.get(id).get(0);
}
//获取工位
private MesWorkCell getWorkCell(Map<String, MesWorkCell> workCellMap, String workCellCode) {
return CollectionUtils.isEmpty(workCellMap) ? null : workCellMap.get(workCellCode);
}
}

@ -216,7 +216,7 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer
if (materialSnDb == null) MesPcnException.throwMesBusiException("条码【%s】不存在", model.getSn());
if (model.getSubLength() == null) MesPcnException.throwMesBusiException("条码【%s】为填减去长度", model.getSn());
if (model.getSubLength() == null) MesPcnException.throwMesBusiException("条码【%s】未输入减去长度", model.getSn());
if (materialSnDb.getSurplusLength() < model.getSubLength()) MesPcnException.throwMesBusiException("条码【%s】减去长度【%s】大于剩余长度【%s】", model.getSn(), materialSnDb.getSurplusLength(), model.getSubLength());

@ -8,6 +8,7 @@ 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.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.repository.MesProdRuleNoSortCfgRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -18,6 +19,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
@ -115,8 +117,8 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService {
//【排序线】获取产品加工规则 [前道所有装配件]
@Override
public MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext) {
return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortPreCraftContextList(prodRuleContext));
public MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap) {
return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortPreCraftContextList(prodRuleContext, workCellMap));
}

@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateSt
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
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.model.MesWorkOrderCutPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.INumberRulePackAttributeStrategyService;
@ -27,6 +28,7 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import cn.hutool.core.bean.BeanUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -36,6 +38,7 @@ import org.springframework.util.StringUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
@ -98,6 +101,21 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
@Autowired
private MesLabelTemplateParamRepository labelTemplateParamRepository;
@Autowired
private MesCutSchemeFgRepository cutSchemeFgRepository;
@Autowired
private MesCutSchemeMaterialRepository cutSchemeMaterialRepository;
@Autowired
private MesCutSchemeEquipmentRepository cutSchemeEquipmentRepository;
@Autowired
private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository;
@Autowired
private IMesPrintedSnLogRepository printedSnLogRepository;
// 仅查询
public static final Integer CUT_QUERY_MODE_BY_QUERY = 1;
// 打印
@ -261,7 +279,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
pager.setCurrentPage(1);
pager.setPageSize(30);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderCut.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workOrderCut.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getInPackList(Arrays.asList(workOrderCut.getWorkCenterCodeQuery().split(MesPcnExtConstWords.COMMA)), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getIsNull(MesPcnExtConstWords.REMARK, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), MesPcnExtConstWords.PRINT_STATUS, packBean);
List<MesWorkOrderCut> workOrderCutList = workOrderCutRepository.findByHqlWherePage(packBean, pager);
@ -271,15 +289,29 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
// model 为空时,该情况为异常情况,mode由前端返回,不会为空,该情况下返回数据为空
if (workOrderCut.getMode() != null && workOrderCut.getMode().equals(CUT_QUERY_MODE_BY_QUERY)) {
workOrderCutList.forEach(o -> o.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(o.getWorkOrderStatus())));
return workOrderCutList;
} else if (workOrderCut.getMode() != null) {
List<String> cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList());
// 根据 裁片方案代码 获取裁片方案设备
List<MesCutScheme> mesCutSchemeList = workOrderCutService.queryCutSchemeList(cutCodeList, workOrderCut.getOrganizeCode());
// 根据 裁片方案代码 获取裁片方案设备
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut, cutCodeList);
// 根据 裁片方案代码 对 裁片方案信息 分组
Map<String, MesCutScheme> cutSchemeMapByCutCode = mesCutSchemeList.stream().collect(Collectors.toMap(MesCutScheme::getCutCode, Function.identity(), (x, y) -> y));
// 根据 裁片方案代码 对 裁片方案成品信息 分组
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList);
// 根据 裁片方案代码 对 裁片方案原材料信息 分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = getCutSchemeMaterialMapByCutCode(cutCodeList);
// 根据 裁片方案代码 对 裁片设备信息 分组
Map<String, List<MesCutSchemeEquipment>> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? new HashMap<>() : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode));
// 根据pid对 设备参数 分组
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = getCutSchemeEquipmentDetailMapByPid(workOrderCut.getOrganizeCode(), cutSchemeEquipmentList);
List<MesWorkOrderCut> workOrderCutShowList = new ArrayList<>();
for (MesWorkOrderCut workOrderCutDb : workOrderCutList) {
@ -290,8 +322,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
//模板信息丢失抛出异常
if (labelTemplate == null) {
workOrderCutDb.setRemark(String.format("请检查裁片方案,裁片方案[%s]模板代码[%s]无效!", cutScheme.getCutCode(), cutScheme.getTemplateCode()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
@ -301,20 +333,20 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
//模板信息丢失抛出异常
if (methodCode == null) {
workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
mesProduceSnPrintModel.setSourceData(workOrderCutList);
mesProduceSnPrintModel.setSourceData(Stream.of(packMesWorkOrderCutPrintModel(cutSchemeMapByCutCode, cutSchemeFgMapByCutCode, cutSchemeMaterialMapByCutCode, cutSchemeEquipmentMapByCutCode, cutSchemeEquipmentDetailMapByPid, workOrderCutDb, cutScheme)).collect(Collectors.toList()));
mesProduceSnPrintModel.setPrinter(cutScheme.getPrinter());
MesProduceSnPrintModel printModel = null;
MesProduceSnPrintModel snPrintModel = null;
try {
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
printModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false);
snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false);
} catch (BeansException e) {
workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类[%s]执行异常,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
@ -322,17 +354,98 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
continue;
}
workOrderCutDb.setPrintContent(printModel.getPrintContextList());
workOrderCutDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
workOrderCutDb.setPrintTime(TimeTool.getNowTime(true));
workOrderCutDb.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutRepository.save(workOrderCutDb);
workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList());
workOrderCutShowList.add(workOrderCutDb);
MesPrintedSnLog printedSnLog = new MesPrintedSnLog();
printedSnLog.setOrganizeCode(workOrderCut.getOrganizeCode());
printedSnLog.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo());
printedSnLog.setBarcode(workOrderCut.getCutWorkOrderNo());
ConvertBean.serviceModelInitialize(printedSnLog, workOrderCut.getModifyUser());
printedSnLogRepository.save(printedSnLog);
}
return workOrderCutList;
return workOrderCutShowList;
}
return workOrderCutList;
return new ArrayList<>();
}
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(MesWorkOrderCut workOrderCut, List<String> cutCodeList) {
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut.getOrganizeCode(), cutCodeList);
// 过滤出只需要打印的裁片方案设备
cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList());
return cutSchemeEquipmentList;
}
private static MesWorkOrderCutPrintModel packMesWorkOrderCutPrintModel(Map<String, MesCutScheme> cutSchemeMapByCutCode, Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode, Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode, Map<String, List<MesCutSchemeEquipment>> cutSchemeEquipmentMapByCutCode, Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid, MesWorkOrderCut workOrderCutDb, MesCutScheme cutScheme) {
MesWorkOrderCutPrintModel printModel = new MesWorkOrderCutPrintModel();
BeanUtils.copyProperties(workOrderCutDb, printModel);
printModel.setCutScheme(cutSchemeMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeFgList(cutSchemeFgMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeMaterialList(cutSchemeMaterialMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeEquipmentList(cutSchemeEquipmentMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeEquipmentDetailMapByPid(cutSchemeEquipmentDetailMapByPid);
return printModel;
}
private List<MesCutSchemeEquipmentDetail> getMesCutSchemeEquipmentDetails(String organizeCode, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
if (!CollectionUtils.isEmpty(cutSchemeEquipmentList)) {
List<Long> idList = cutSchemeEquipmentList.stream().map(MesCutSchemeEquipment::getId).collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.PID, packBean);
return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean);
}
return null;
}
private Map<Long, List<MesCutSchemeEquipmentDetail>> getCutSchemeEquipmentDetailMapByPid(String organizeCode, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(organizeCode, cutSchemeEquipmentList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
return cutSchemeEquipmentDetailMapByPid;
}
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(String organizeCode, List<String> cutCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
List<MesCutSchemeEquipment> cutSchemeEquipmentList = cutSchemeEquipmentRepository.findByHqlWhere(packBean);
return cutSchemeEquipmentList;
}
private List<MesCutSchemeMaterial> getMesCutSchemeMaterials(List<String> cutCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
List<MesCutSchemeMaterial> cutSchemeMaterialList = cutSchemeMaterialRepository.findByHqlWhere(packBean);
return cutSchemeMaterialList;
}
private Map<String, List<MesCutSchemeMaterial>> getCutSchemeMaterialMapByCutCode(List<String> cutCodeList) {
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList);
//根据裁片方案代码对裁片方案原材料分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
return cutSchemeMaterialMapByCutCode;
}
private List<MesCutSchemeFg> getMesCutSchemeFgs(List<String> cutCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
List<MesCutSchemeFg> cutSchemeFgList = cutSchemeFgRepository.findByHqlWhere(packBean);
return cutSchemeFgList;
}
private Map<String, List<MesCutSchemeFg>> getCutSchemeFgMapByCutCode(List<String> cutCodeList) {
List<MesCutSchemeFg> cutSchemeFgList = getMesCutSchemeFgs(cutCodeList);
//根据裁片方案代码对裁片方案成品明细分组
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode));
return cutSchemeFgMapByCutCode;
}
private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) {

@ -181,14 +181,12 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
if (!StringUtil.isEmpty(bean.getPullCode())) {
DdlPreparedPack.getInPackList(Arrays.asList(bean.getPullCode().split(",")), "pullCode", packBean);
}
if (!StringUtil.isEmpty(bean.getWorkCenterCode())) {
DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkCenterCode().split(",")), "workCenterCode", packBean);
}
//查询拉动单主表是JIS拉动且拉动状态为10
String append = packBean.getWhereAppend() +
" AND EXISTS (select 1 from MesPullingOrderInfo po where po.pullingOrderNo = model.pullingOrderNo and po.pullOrderType=20 and po.pullOrderStatus =10 " ;
packBean.setWhereAppend(append+ " )");
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"status", "createDatetime"}, packBean);
" AND EXISTS (select 1 from MesPullingOrderInfo po where po.pullingOrderNo = model.pullingOrderNo" +
" and po.pullOrderType=20 and po.workCenterCode ='" + bean.getWorkCenterCode() + "' ";
packBean.setWhereAppend(append + " )");
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"status", "pullingOrderNo"}, packBean);
pager = PagerHelper.getPager(pager, mesPullingOrderPartInfoRepository.findByHqlWhereCount(packBean));
@ -205,13 +203,11 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
MesPartPullDetail mesPartPullDetail = pullCodePartMap.get(partInfo.getPullCode() + "=" + partInfo.getPartNo()).get(0);
partInfo.setScanValidationType(StringUtil.isEmpty(mesPartPullDetail.getScanValidationType()) ? 10 : mesPartPullDetail.getScanValidationType());
partInfo.setRuleValidation(StringUtil.isEmpty(mesPartPullDetail.getRuleValidation()) ? "" : mesPartPullDetail.getRuleValidation());
if (partInfo.getScanValidationType() == 10) {
if (mesPartPullDetail.getScanValidationType() == MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.UN_VALIDATE.getValue()) {
partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode());
} else {
}else if (partInfo.getColor()==MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()){
partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode());
}
}else {
partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode());
}
}
}
@ -226,40 +222,41 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
if (!StringUtil.isEmpty(partInfo)) {
//查拉动单明细对应的拉动组规则
DdlPackBean packBeanDetail = DdlPackBean.getDdlPackBean(partInfo.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(partInfo.getPullCode(), "pullCode", packBeanDetail);
DdlPreparedPack.getStringEqualPack(partInfo.getPullCode(), "pullCode", packBeanDetail);
DdlPreparedPack.getStringEqualPack(partInfo.getPartNo(), "partNo", packBeanDetail);
MesPartPullDetail mesPartPullDetail = mesPartPullDetailRDao.getByProperty(packBeanDetail);
if (StringUtil.isEmpty(mesPartPullDetail)){
MesPcnException.throwMesBusiException("工单【%s】拉动组数据为空", mesPullingOrderInfo.getWorkOrderNo());
}
MesPartPullDetail mesPartPullDetail = mesPartPullDetailRDao.getByProperty(packBeanDetail);
if (StringUtil.isEmpty(mesPartPullDetail)) {
MesPcnException.throwMesBusiException("工单【%s】拉动组数据为空", mesPullingOrderInfo.getWorkOrderNo());
}
//校验规则
if (checkRule(mesPullingOrderInfo,mesPartPullDetail)){
if (checkRule(mesPullingOrderInfo, mesPartPullDetail)) {
//校验成功修改颜色为黄色2
partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.YELLOW.getCode());
ConvertBean.serviceModelUpdate(partInfo, userName);
mesPullingOrderPartInfoRepository.update(partInfo);
}else {
} else {
MesPcnException.throwMesBusiException("工单拉动组明细【%s】数据为空", mesPullingOrderInfo.getWorkOrderNo());
}
}else {
} else {
MesPcnException.throwMesBusiException("工单拉动组明细【%s】数据为空", mesPullingOrderInfo.getWorkOrderNo());
}
return partInfo;
}
private boolean checkRule(MesPullingOrderPartInfo mesPullingOrderInfo, MesPartPullDetail mesPartPullDetail) {
String rule=mesPartPullDetail.getRuleValidation();
if (mesPullingOrderInfo.getScanValidationType()==MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.HOMEMADE_VALIDATE.getValue()){
String rule = mesPartPullDetail.getRuleValidation();
if (mesPullingOrderInfo.getScanValidationType() == MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.HOMEMADE_VALIDATE.getValue()) {
List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesPullingOrderInfo.getOrganizeCode(), mesPullingOrderInfo.getProductSn());
return mesPartPullDetail.getPullPartNo().equals(produceSnList.get(0).getPartNo());
}else if (mesPullingOrderInfo.getScanValidationType()==MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.COOPERATION_VALIDATE.getValue()){
} else if (mesPullingOrderInfo.getScanValidationType() == MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.COOPERATION_VALIDATE.getValue()) {
return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass()))
.matchNumberRule(mesPullingOrderInfo.getOrganizeCode(), mesPullingOrderInfo.getProductSn(), rule, rule)
.get(MesPcnExtConstWords.RESULT);
}else {
} else {
return true;
}
}
@Override
public List<MesPullingOrderPartInfo> doMesPullingOrderInfoSend(List<MesPullingOrderPartInfo> infoList, String userName) {
List<MesPullingOrderPartInfo> result = new ArrayList<>();

@ -2,10 +2,10 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
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.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
@ -53,58 +53,38 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, MesNumberRule numberRule , StepResult stepResult, StationRequestBean reqBean, Boolean isStep) {
List<MesWorkOrderCut> workOrderCutList = (List<MesWorkOrderCut>)model.getSourceData();
List<MesWorkOrderCutPrintModel> workOrderCutPrintModelList = (List<MesWorkOrderCutPrintModel>)model.getSourceData();
List<Map<String, Object>> printDataMapList = new ArrayList<>();
// 裁片方案代码集合
List<String> cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList());
for (MesWorkOrderCutPrintModel workOrderCutPrintModel : workOrderCutPrintModelList) {
List<MesCutSchemeFg> mesCutSchemeFgList = workOrderCutPrintModel.getCutSchemeFgList();
List<MesCutSchemeMaterial> mesCutSchemeMaterialList = workOrderCutPrintModel.getCutSchemeMaterialList();
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = workOrderCutPrintModel.getCutSchemeEquipmentDetailMapByPid();
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList);
//根据裁片方案代码对裁片方案原材料分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(model, cutCodeList);
cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList());
// 根据裁片方案代码对裁片设备信息分组
Map<String, List<MesCutSchemeEquipment>> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? null : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode));
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
for (MesWorkOrderCut workOrderCut : workOrderCutList) {
List<MesCutSchemeFg> mesCutSchemeFgList = cutSchemeFgMapByCutCode.get(workOrderCut.getCutCode());
List<MesCutSchemeMaterial> mesCutSchemeMaterialList = cutSchemeMaterialMapByCutCode.get(workOrderCut.getCutCode());
MesCutSchemeMaterial cutSchemeMaterial = CollectionUtils.isEmpty(mesCutSchemeMaterialList) ? null : mesCutSchemeMaterialList.stream().findFirst().get();
MesCutSchemeMaterial cutSchemeMaterial = mesCutSchemeMaterialList.get(0);
List<MesCutSchemeEquipment> cutSchemeEquipmentListByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentMapByCutCode) ? null : cutSchemeEquipmentMapByCutCode.get(workOrderCut.getCutCode());
List<MesCutSchemeEquipment> cutSchemeEquipmentListByCutCode = workOrderCutPrintModel.getCutSchemeEquipmentList();
if (!CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode)) cutSchemeEquipmentListByCutCode.sort(Comparator.comparing(MesCutSchemeEquipment::getSeq));
Map<String, Object> resultMap = new HashMap<>();
resultMap.put(MesPcnExtConstWords.CUT_WORK_ORDER_NO, workOrderCut.getCutWorkOrderNo());
resultMap.put(MesPcnExtConstWords.CUT_NAME, workOrderCut.getCutName());
resultMap.put(MesPcnExtConstWords.CUT_WORK_ORDER_NO, workOrderCutPrintModel.getCutWorkOrderNo());
resultMap.put(MesPcnExtConstWords.CUT_NAME, workOrderCutPrintModel.getCutName());
// 原材料零件号
resultMap.put(MesPcnExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo());
resultMap.put(MesPcnExtConstWords.RAW_PART_NO, cutSchemeMaterial == null ? "" : cutSchemeMaterial.getPartNo());
// 拉料信息 START
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LENGTH, getValByDouble(cutSchemeMaterial.getPullingMaterialLength()));
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber()));
resultMap.put(MesPcnExtConstWords.PER_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPerLayerNumber()));
resultMap.put(MesPcnExtConstWords.MATERIAL_DOSAGE, getValByDouble(cutSchemeMaterial.getMaterialDosage()));
resultMap.put(MesPcnExtConstWords.USING_LENGTH, getValByDouble(cutSchemeMaterial.getUsingLength()));
resultMap.put(MesPcnExtConstWords.LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getLayerNumber()));
resultMap.put(MesPcnExtConstWords.TENSION_PARAM, getValByDouble(cutSchemeMaterial.getTensionParam()));
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LENGTH, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPullingMaterialLength()));
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber()));
resultMap.put(MesPcnExtConstWords.PER_LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPerLayerNumber()));
resultMap.put(MesPcnExtConstWords.MATERIAL_DOSAGE, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getMaterialDosage()));
resultMap.put(MesPcnExtConstWords.USING_LENGTH, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getUsingLength()));
resultMap.put(MesPcnExtConstWords.LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getLayerNumber()));
resultMap.put(MesPcnExtConstWords.TENSION_PARAM, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getTensionParam()));
resultMap.put(MesPcnExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-M-d H:mm:ss"));
// 拉料信息 END
@ -150,6 +130,24 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic
return model;
}
private boolean checkCutSchemeMaterialIsNull(MesCutSchemeMaterial cutSchemeMaterial) {
return cutSchemeMaterial == null ? true : false;
}
private Map<Long, List<MesCutSchemeEquipmentDetail>> getCutSchemeEquipmentDetailMapByPid(MesProduceSnPrintModel model, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
return cutSchemeEquipmentDetailMapByPid;
}
private Map<String, List<MesCutSchemeMaterial>> getCutSchemeMaterialMapByCutCode(List<String> cutCodeList) {
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList);
//根据裁片方案代码对裁片方案原材料分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
return cutSchemeMaterialMapByCutCode;
}
private String getValByDouble(Double val) {
return val == null ? "" : val.toString();
}

@ -0,0 +1,131 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRule;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.repository.IMesPartPackageRuleDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.IMesPartPackageRuleRepository;
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.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
/**
* @Description : (VKM)
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/20 16:54
* @Modify:
**/
@Slf4j
@Service
public class MesNumberRuleMatchVkmService implements IMesNumberRuleMatchDispatchService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesPartPackageRuleRepository mesPartPackageRuleRepository;
@Autowired
private IMesPartPackageRuleDetailRepository mesPartPackageRuleDetailRepository;
@Override
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) {
// 校验正则表达式
Map<String, Object> result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(organizeCode, sn, params);
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) {
return result;
}
//当前装配件清单信息
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(new StationRequestBean(organizeCode, context.getWorkCenterCode(), context.getWorkCellCode()));
if (CollectionUtils.isEmpty(prodRuleContextList)) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "当前不存在非排序加工规则数据,请重置工序!");
return result;
}
//获取加工规则
Optional<MesProdRuleContext> contextOptional = prodRuleContextList.stream().filter(t -> Objects.equals(t.getForeignKey(), context.getForeignKey())).findFirst();
if (!contextOptional.isPresent()) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "当前不存在非排序加工规则数据,请重置工序!");
return result;
}
//装配件清单
List<MesProductionAssemblyNosortContext> assemblyNosortContextList = contextOptional.get().getNosortAssemblyDataContext();
if (CollectionUtils.isEmpty(assemblyNosortContextList)) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "当前不存在已装配的数据!");
return result;
}
//装配件条码字段的长度等于60(固定)为VKM包条码
Optional<MesProductionAssemblyNosortContext> assemblyNosortContext = assemblyNosortContextList.stream().filter(t -> MesPcnExtConstWords.SIXTY == t.getAssemblySn().length()).findFirst();
if (!assemblyNosortContext.isPresent()) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "不存在主零件!");
return result;
}
//通用包装组零件规则
MesPartPackageRule mesPartPackageRule = getMesPartPackageRule(organizeCode, assemblyNosortContext.get().getAssemblyPartNo());
if (Objects.isNull(mesPartPackageRule)) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "通用包装组零件规则不存在!");
return result;
}
//通用包装组零件规则明细
if (!isExitMesPartPackageRuleDetail(organizeCode, context.getAssemblyPartNo(), mesPartPackageRule.getId())) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "通用包装组零件规则明细不存在!");
return result;
}
//获取大包装流水最后十四位数(固定)
String seq = assemblyNosortContext.get().getAssemblySn().substring(assemblyNosortContext.get().getAssemblySn().length() - MesPcnExtConstWords.FOURTEEN);
//如果seq(22810138101376)的前四位(固定)与当前扫描的装配件条码的(26502271 8211001000000X 654406818 2123198103002281)后4位一致则代表匹配成功否则失败则提示:"流水号不一致"
if (!sn.endsWith(seq.substring(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.FOUR))) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "流水号不一致!");
return result;
}
return result;
}
private MesPartPackageRule getMesPartPackageRule(String organizeCode, String assemblyPartNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(assemblyPartNo)) {
return null;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(assemblyPartNo, MesPcnExtConstWords.PACKAGE_PART_NO, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PACKAGE_RULE_TYPE.PACKAGE_RULE_TYPE_10.getValue(), MesPcnExtConstWords.RULE_TYPE, packBean);
return mesPartPackageRuleRepository.getByProperty(packBean);
}
private boolean isExitMesPartPackageRuleDetail(String organizeCode, String assemblyPartNo, long id) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(assemblyPartNo)) {
return false;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(id, MesPcnExtConstWords.PID, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PACKAGE_RULE_MATCH_TYPE.PACKAGE_RULE_MATCH_TYPE_10.getValue(), MesPcnExtConstWords.MATCH_TYPE, packBean);
DdlPreparedPack.getStringEqualPack(assemblyPartNo, MesPcnExtConstWords.PART_NO, packBean);
return mesPartPackageRuleDetailRepository.isExitByHql(packBean);
}
}

@ -1,26 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
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.IMesWorkOrderCutService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.repository.MesCutSchemeFgRepository;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -30,17 +24,13 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description :
* @Description :
**/
@Service
@Slf4j
public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implements IFsmModuleFunctionService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
public class MesFunctionDialogCutOrderPrintService extends BaseSwsService implements IFsmModuleFunctionService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@ -80,7 +70,7 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem
}
@Override
public Object stepDialogDispatch(StationRequestBean reqBean) {
public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) {
List<MesWorkOrderCutDetailModel> mesWorkOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean);
@ -107,7 +97,6 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem
}
// 成品列表为空则表示不需要弹框
return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? null :mesWorkOrderCutFgDataContextList;
return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? dialogBean.unDialog() : dialogBean.obj(mesWorkOrderCutFgDataContextList);
}
}

@ -0,0 +1,42 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
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.List;
import java.util.stream.Collectors;
/**
* @Description :
**/
@Service
@Slf4j
public class MesFunctionDialogElectronicInspectionService extends BaseSwsService implements IFsmModuleFunctionService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) {
List<MesProductionPsInContext> productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean);
// 如果当前存在进料条码列表则返回条码集合
if (!CollectionUtils.isEmpty(productionPsInContext)) {
List<String> snList = productionPsInContext.stream().filter(o -> !StringUtils.isEmpty(o.getProductSn())).map(MesProductionPsInContext::getProductSn).distinct().collect(Collectors.toList());
// 条码列表为空则表示不需要弹框
if (CollectionUtils.isEmpty(snList)) return dialogBean.unDialog();
else return dialogBean.asyn().obj(snList);
} else return dialogBean.unDialog();
}
}

@ -84,7 +84,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
//验证是否存在待绑定数据
Boolean IsNeedScanAssembly = checkIsNeedScanAssembly(prodRuleContextList);
Boolean isNeedScanAssembly = checkIsNeedScanAssembly(prodRuleContextList);
Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
//根据产出零件或者腔数拿到需要的加工规则数量, 优先使用产出零件数量
@ -96,10 +96,10 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
}
//没有待绑定数据, 验证当前是否满足腔数 没有进料主条码代码当前加工规则已经全部加载, 有的话需要判断是否全部扫完 没有扫完需要返回false继续扫描主条码
if (!IsNeedScanAssembly || !hasUnBindAssembly) {
if (!isNeedScanAssembly || !hasUnBindAssembly) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
(CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, !IsNeedScanAssembly ? "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!" : "当前加工规则对应的装配件扫描项均匹配完毕!");
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, !isNeedScanAssembly ? "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!" : "当前加工规则对应的装配件扫描项均匹配完毕!");
}
//获取上下文生产扫/读信息:装配件条码
@ -113,17 +113,19 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
Boolean isSkip = checkIsSkip(productionProcessContext, equipVariableCollectContextList);
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
Boolean result = doHandleMatchAssembly(reqBean, resultBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip);
Boolean result = doHandleMatchAssembly(reqBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip);
//验证是否存在待绑定数据
hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
//搜集装配件条码
String suffix = MesPcnExtConstWords.EMPTY;
String assemblySn = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString();
//匹配成功 【result=true 代表单次扫描匹配成功; hasUnBindAssembly=false 代表浑腔模式全部匹配成功】
if (result || !hasUnBindAssembly) {
productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList);
assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList);
suffix = isSkip ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn);
}
//全部匹配完毕,存在进料且进料数量满足腔数的时候直接调用 生成零件条码工步
@ -133,12 +135,12 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
if (!hasUnBindAssembly) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult,
(CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", isSkip ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn)));
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", suffix));
}
//单次匹配成功
if (result) return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn),
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, isSkip ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn));
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix);
//匹配失败验证是否重置装配件扫描项
MesWorkCell workCell = productionProcessContext.getWorkCell();
@ -221,7 +223,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
}
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Boolean isSkip) {
private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StepResult stepResult, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Boolean isSkip) {
//遍历产品加工规则
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
@ -250,16 +252,15 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//装配件跳过, 必须顺序扫描才生效
if (isSkip && !StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
//匹配成功
equipVariableCollectContext.isConsume();
flag = true;
//装配件清单该数据标记跳过
productionAssemblyNosortContext.assemblySkip();
//匹配成功
equipVariableCollectContext.isConsume();
stepResult.msg(String.format("装配件跳过码验证成功,已跳过当前装配项!"));
flag = true;
break LOOP;
}

@ -0,0 +1,336 @@
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.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.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
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 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;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesAssemblyMatchSortStepService")
public class MesAssemblyMatchSortStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService;
@Autowired
private MesAssemblyShowNosortStepService assemblyShowNosortStepService;
@Autowired
private IMesProductionRecordService productionRecordService;
@Autowired
private IMesTimeEfficientCfgMatchService timeEfficientCfgMatchService;
@Autowired
private IFsmCommonService fsmCommonService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!");
//从上下文中取出生产线对象
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//获取上下文产出零件数据信息集合
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//获取上下文进料零件条码信息集合
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
//判断是否存在装配件清单
if (!checkIsNeedScanAssembly(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!");
//验证是否存在待绑定数据
Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
if (!hasUnBindAssembly) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则对应的装配件扫描项均匹配完毕!");
//获取上下文生产扫/读信息:装配件条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), "当前不存在装配件条码!");
//删除上下文扫/读信息:装配件条码
productionDispatchContextStepService.removeScanAssemblySnContext(reqBean);
//验证当前是否属于装配件跳过码
Boolean isSkip = checkIsSkip(productionProcessContext, equipVariableCollectContextList);
//验证当前是否属于装配件整腔跳过码
Boolean isCavitySkip = checkIsCavitySkip(productionProcessContext, equipVariableCollectContextList);
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
Boolean result = doHandleMatchAssembly(reqBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip, isCavitySkip);
//验证是否存在待绑定数据
hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
//搜集装配件条码
String suffix = MesPcnExtConstWords.EMPTY;
String assemblySn = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString();
//匹配成功 【result=true 代表单次扫描匹配成功; hasUnBindAssembly=false 代表浑腔模式全部匹配成功】
if (result || !hasUnBindAssembly) {
productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList);
assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList);
suffix = (isSkip || isCavitySkip) ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn);
}
//验证是否存在待绑定数据
if (!hasUnBindAssembly) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", suffix));
//单次匹配成功
if (result) return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn),
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix);
stepResult.msg(String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn),
String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), stepResult.getMsg());
}
private List<MesProdRuleContext> resetAssembly(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList) {
//是否支持混腔扫描[工位参数]
String cavityNosortCfg = getCavityNosortCfg(reqBean);
prodRuleContextList.forEach(o -> {
if (!StringUtils.isEmpty(o.getAssemblyDataJson())) {
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = o.getNosortAssemblyDataContext();
if (!StringUtils.isEmpty(cavityNosortCfg) || hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) {
productionAssemblyNosortContextList.forEach(i -> { if (i.getIsResetScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) i.assemblyStatusReset(); });
o.assemblyDataJson(productionAssemblyNosortContextList);
}
}
});
return prodRuleContextList;
}
//是否支持混腔扫描[工位参数]
private String getCavityNosortCfg(StationRequestBean reqBean) {
String cavityNosortCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_NOSORT_CFG);
return (!StringUtils.isEmpty(cavityNosortCfg) && cavityNosortCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? cavityNosortCfg : null;
}
//验证当前是否属于装配件跳过码
private Boolean checkIsSkip(MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
if (equipVariableCollectContextList.size() > 1) return false;
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) != 0) return false;
if (!equipVariableCollectContextList.get(0).getEquipVariableValue().equals(productionProcessContext.getAssemblySkipCode())) return false;
return true;
}
//验证当前是否属于装配件整腔跳过码
private Boolean checkIsCavitySkip(MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
if (equipVariableCollectContextList.size() > 1) return false;
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) != 0) return false;
if (!equipVariableCollectContextList.get(0).getEquipVariableValue().equals(productionProcessContext.getAssemblyCavitySkipCode())) return false;
return true;
}
//判断是否存在装配件清单
private Boolean checkIsNeedScanAssembly(List<MesProdRuleContext> prodRuleContextList) {
Optional<MesProdRuleContext> optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst();
return (null == optional || !optional.isPresent()) ? false : true;
}
//验证是否存在待绑定数据
private Boolean hasUnBindAssembly(List<MesProdRuleContext> prodRuleContextList) {
Boolean hasUnBindAssembly = false;
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext();
if (!hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) continue;
hasUnBindAssembly = true;
break;
}
return hasUnBindAssembly;
}
private Boolean hasUnBindAssemblyOptional(List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList) {
Optional<MesProductionAssemblyNosortContext> optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst();
return (null == optional || !optional.isPresent()) ? false : true;
}
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StepResult stepResult, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Boolean isSkip, Boolean isCavitySkip) {
//遍历产品加工规则
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
//没有装配件的条件
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
//获取非排序装配件清单
List<MesProductionAssemblySortContext> productionAssemblySortContextList = prodRuleContext.getSortAssemblyDataContext();
Boolean flag = false;
//遍历装配件清单
LOOP:
for (MesProductionAssemblySortContext productionAssemblySortContext : productionAssemblySortContextList) {
//已装配
if (null == productionAssemblySortContext || productionAssemblySortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) continue;
//遍历装配件条码
for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextList) {
//已被消费
if (null == equipVariableCollectContext || equipVariableCollectContext.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue;
//装配件跳过, 必须顺序扫描才生效
if (isSkip && !StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
//装配件清单该数据标记跳过
productionAssemblySortContext.assemblySkip();
//匹配成功
equipVariableCollectContext.isConsume();
stepResult.msg(String.format("装配件跳过码验证成功,已跳过当前装配项!"));
flag = true;
break LOOP;
}
//装配件整腔跳过
if (isCavitySkip) {
//装配件清单该数据标记跳过
productionAssemblySortContext.assemblySkip();
//判断当腔是否还存在待装配的数据
Optional<MesProductionAssemblySortContext> optional = productionAssemblySortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst();
if (null == optional || !optional.isPresent()) {
//匹配成功 [整腔全部跳过后标记]
equipVariableCollectContext.isConsume();
stepResult.msg(String.format("装配件整腔跳过码验证成功,已跳过当腔装配项!"));
flag = true;
}
break LOOP;
}
//匹配规则
Map<String, Object> result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext);
//匹配失败
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) {
String msg = (String) result.get(MesPcnExtConstWords.MESSAGE);
stepResult.obj(String.format("%s%s", StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj(), StringUtils.isEmpty(msg) ? MesPcnExtConstWords.EMPTY : msg));
continue;
}
MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA);
//前道防错
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode())));
continue;
}
}
//时效性验证
if (!StringUtils.isEmpty(filter.getProductSnId())) {
result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE10.getValue());
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), result.get(MesPcnExtConstWords.MESSAGE)));
continue;
}
}
//匹配成功
equipVariableCollectContext.isConsume();
flag = true;
//装配件清单该数据标记已装配 (如果是自制件赋值productSnId)
productionAssemblySortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId());
break;
}
//是否验证顺序装配
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0 &&
isCheckBindSeq(prodRuleContext, productionAssemblySortContext) && productionAssemblySortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0) break;
}
//存在匹配成功的数据
if (flag) prodRuleContext.assemblyDataJson(productionAssemblySortContextList);
if (flag && equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0 && equipVariableCollectContextList.size() == 1) return true;
}
return false;
}
private Boolean isCheckBindSeq(MesProdRuleContext prodRuleContext, MesProductionAssemblySortContext productionAssemblySortContext) {
if (!StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true;
if (!StringUtils.isEmpty(productionAssemblySortContext.getIsSeqScan()) && productionAssemblySortContext.getIsSeqScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true;
return false;
}
}

@ -314,9 +314,6 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件携带产出零件
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, outPartNoList);
//TODO 提示优化 直接根除产出零件去查询,判断产出零件对应的加工规则是不是仅仅维护了一个
//List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNos(outPartNoList));
//根据产出零件分组数据
Map<String, List<MesProdRuleNosortCfg>> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList);

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
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.util.PojoAttrUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -12,6 +13,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -28,10 +30,11 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS
}
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
Map<String, MesWorkCell> workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean);
//不携带工位工序条件
MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext);
return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap);
}
//装配件清单列表标题

@ -103,7 +103,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(productionProcessContext.getWorkCell().getIsSeqScan())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext);
}

@ -7,6 +7,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionServic
import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -59,26 +60,27 @@ public class MesCustomDialogStepService extends BaseStepService {
if (StringUtils.isEmpty(customPageName)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("弹框会话工步未配置工步参数[%s]!", MesPcnExtConstWords.CUSTOM_PAGE_NAME));
//获取工步弹框需要渲染的数据
Object stepDialogContext = fsmModuleFunctionService.stepDialogDispatch(reqBean, customPageName);
//获取工步弹框需要渲染的数据; 无须渲染动态数据时无须重写stepDialogDispatch方法且接口方法已默认返回true可以直接弹框
StationCustomDialogBean scdBean = fsmModuleFunctionService.stepDialogDispatch(reqBean, new StationCustomDialogBean(customPageName));
//没有数据返回NULL则默认不需要弹框, 无须渲染动态数据时无须重写stepDialogDispatch方法且接口方法已默认返回true可以直接弹框
if (null == stepDialogContext) return stepResult;
//当前不需要弹框
if (null == scdBean || !scdBean.getIsDialog()) return stepResult;
if (!(stepDialogContext instanceof Boolean))
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- stepDialogContext:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(stepDialogContext));
//发送弹框数据
this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM_DIALOG.getValue()).customPageName(customPageName).resultObj(stepDialogContext));
if (null != scdBean.getObj())
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- StationCustomDialogBean={}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(scdBean));
//清除剩余扫描队列
shippingDispatchService.clearScanQueue(reqBean);
//结束线程
stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!");
//发送弹框数据
this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM_DIALOG.getValue()).customPageName(customPageName).resultObj(scdBean.getObj()));
//弹框业务同步处理
if (!scdBean.getIsAsyn()) stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!");
return stepResult;
//弹框业务异步处理
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "弹框会话开启!");
}

@ -280,10 +280,10 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
if (mesPackingDefine == null)
return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPrinter()))
if (StringUtils.isEmpty(cutScheme.getPackageSnPrinter()) && StringUtils.isEmpty(mesPackingDefine.getPrinter()))
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印机!", mesPackingDefine.getPackCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPrintTemplate()))
if (StringUtils.isEmpty(cutScheme.getPackageLabelTemplateCode()) && StringUtils.isEmpty(mesPackingDefine.getPrintTemplate()))
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印模板!", mesPackingDefine.getPackCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPackageBarcodeRule()))
@ -303,8 +303,8 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo());
mesPartContext.setCopies(mesPackingDefine.getPrintCopies() == null ? 1 : mesPackingDefine.getPrintCopies());
mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
mesPartContext.setPrinter(mesPackingDefine.getPrinter());
mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate());
mesPartContext.setPrinter(StringUtils.isEmpty(cutScheme.getPackageSnPrinter()) ? mesPackingDefine.getPrinter() : cutScheme.getPackageSnPrinter());
mesPartContext.setLabelTemplate(StringUtils.isEmpty(cutScheme.getPackageLabelTemplateCode()) ? mesPackingDefine.getPakcageTemplate() : cutScheme.getPackageLabelTemplateCode());
mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext);

@ -17,16 +17,16 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut;
import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog;
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 cn.estsh.i3plus.pojo.mes.repository.IMesPrintedSnLogRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -60,6 +60,9 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
@Autowired
private MesWorkOrderCutRepository workOrderCutRepository;
@Autowired
private IMesPrintedSnLogRepository snLogRepository;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -71,10 +74,6 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
*
*/
//Map.Entry<String, MesPartContext> entry = partDataExtContext.entrySet().stream().findFirst().get();
//
//String labelTemplateCode = entry.getValue().getLabelTemplate();
List<Map<String, Object>> resultMap = new ArrayList<>();
Map<String, List<MesWorkOrderCutDetailModel>> workOrderCutDetailModelMapByPartNo = workOrderCutFgDataContext.stream().collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getPrinter()).add(o.getLabelTemplate()).toString()));
@ -94,15 +93,14 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
List<String> partNoList = workOrderCutDetailModelList.stream().map(MesWorkOrderCutDetailModel::getPartNo).distinct().collect(Collectors.toList());
//模板信息丢失抛出异常
if (labelTemplate == null) {
if (labelTemplate == null)
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查包装定义信息,零件号%s对应模板代码[%s]无效!", partNoList, model.getLabelTemplate()));
}
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (StringUtils.isEmpty(methodCode))
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", partNoList, labelTemplate.getTemplateCode()));
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的方法类为空,请配置!", partNoList, labelTemplate.getTemplateCode()));
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
@ -124,6 +122,22 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS},
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.FALSE, MesExtEnumUtil.CUT_ORDER_STATUS.PRINTED.getValue()});
List<MesPrintedSnLog> snLogList = new ArrayList<>();
workOrderCutFgDataContext.stream().forEach(o -> {
MesPrintedSnLog printedSnLog = new MesPrintedSnLog();
printedSnLog.setWorkOrderNo(o.getWorkOrderNo());
printedSnLog.setBarcode(o.getPackageNo());
printedSnLog.setPartNo(o.getPartNo());
printedSnLog.setPartName(o.getPartName());
printedSnLog.setCustPartNo(o.getCustPartNo());
printedSnLog.setProductDate(o.getLotNo());
printedSnLog.setOrganizeCode(reqBean.getOrganizeCode());
ConvertBean.serviceModelInitialize(printedSnLog, reqBean.getUserInfo());
snLogList.add(printedSnLog);
});
snLogRepository.saveAll(snLogList);
// 裁片方案代码
// 根据裁片方案代码查询裁片方案成品配置
//返回打印标识 给前端

@ -160,7 +160,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
newWorkOrderCutDetailModel.setCopies(mesPartContext.getCopies());
newWorkOrderCutDetailModel.setPackageSnRule(mesPartContext.getPackageSnRule());
newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter());
newWorkOrderCutDetailModel.setCustPartNo(mesPartContext == null ? "" : mesPartContext.getCustPartNo());
newWorkOrderCutDetailModel.setCustPartNo(mesPartContext.getCustPartNo());
newWorkOrderCutDetailModel.setLabelTemplate(mesPartContext.getLabelTemplate());
newWorkOrderCutDetailModel.setOrganizeCode(mesPartContext.getOrganizeCode());

@ -19,6 +19,7 @@ import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -52,7 +53,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString()); }
private String getContextKey(StationRequestBean reqBean) {
return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString());
}
private String getContextKey(String organizeCode, String workCenterCode, String workCellCode) {
return new StringJoiner(MesPcnExtConstWords.COLON).add(organizeCode).add(workCenterCode).add(workCellCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString();
}
//清除上下文中的所有基础数据
@Override
@ -110,7 +117,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
if (isCheckProcess && (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode()))) processContext(reqBean, productionProcessContext);
//生产过程上下文对象赋值生产过程控制全局密码
if (StringUtils.isEmpty(productionProcessContext.getFinishCode()) || StringUtils.isEmpty(productionProcessContext.getCraftJumpCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblySkipCode())) productionPwdContext(reqBean, productionProcessContext);
if (StringUtils.isEmpty(productionProcessContext.getFinishCode()) || StringUtils.isEmpty(productionProcessContext.getCraftJumpCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblySkipCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblyCavitySkipCode())) productionPwdContext(reqBean, productionProcessContext);
return productionProcessContext;
@ -147,7 +154,8 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
Map<String, List<MesConfig>> cfgKeyMap = CollectionUtils.isEmpty(configList) ? null : configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgKey()))).collect(Collectors.groupingBy(MesConfig::getCfgKey));
return productionProcessContext.finishCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CAVITY_FINISH_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CAVITY_FINISH_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CAVITY_FINISH_CODE)
.craftJumpCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CRAFT_JUMP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CRAFT_JUMP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CRAFT_JUMP_CODE)
.assemblySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_SKIP_CODE);
.assemblySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)
.assemblyCavitySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE);
}
//验证组织模型有效性
@ -450,16 +458,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
return !StringUtils.isEmpty(scanMonitorContextJson) ? JSONObject.parseObject(scanMonitorContextJson, MesScanMonitorContext.class) : null;
}
//获取上下文工位扫描监控信息的开模记录ID
@Override
public String getScanMonitorContextMouldRecordId(StationRequestBean reqBean) {
MesScanMonitorContext scanMonitorContext = getScanMonitorContext(reqBean);
return (null != scanMonitorContext && !StringUtils.isEmpty(scanMonitorContext.getMouldRecordId())) ? scanMonitorContext.getMouldRecordId().toString() : null;
}
private String getContextKey(String organizeCode, String workCenterCode, String workCellCode) {
return new StringJoiner(MesPcnExtConstWords.COLON).add(organizeCode).add(workCenterCode).add(workCellCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString();
}
//获取上下文工位扫描监控信息
@Override
public MesScanMonitorContext getScanMonitorContext(String organizeCode, String workCenterCode, String workCellCode) {
@ -473,6 +478,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_MONITOR_CONTEXT);
}
//获取生产线类型
@Override
public Integer getCenterType(StationRequestBean reqBean) {
if (!StringUtils.isEmpty(reqBean.getCenterType())) return reqBean.getCenterType();
@ -483,4 +489,17 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
reqBean.setCenterType(productionProcessContext.getWorkCenter().getCenterType());
return reqBean.getCenterType();
}
//获取生产线下的工位集合
@Override
public Map<String, MesWorkCell> dispatchWorkCellMap(StationRequestBean reqBean) {
String workCellMapJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_CELL_MAP_CONTEXT);
if (!StringUtils.isEmpty(workCellMapJson)) return JSONObject.parseObject(workCellMapJson, new TypeReference<Map<String, MesWorkCell>>() {});
List<MesWorkCell> workCellList = prodOrgExtService.getWorkCellList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
Map<String, MesWorkCell> workCellMap = CollectionUtils.isEmpty(workCellList) ? null : workCellList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkCell::getWorkCellCode, o -> o));
if (!CollectionUtils.isEmpty(workCellList)) dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_CELL_MAP_CONTEXT, JSONObject.toJSONString(workCellMap));
return workCellMap;
}
}

@ -135,6 +135,13 @@ public class MesProdRuleContext implements Serializable {
return this;
}
//非排序无须使用工位的字段,直接使用非排序产品加工规则的字段;
//排序使用工位的字段, 如果是显示前道所有装配件场景下在装配件清单中单独标记各个工位的装配件是否需要顺序扫描
public MesProdRuleContext isCheckBindSeq(Integer isSeqScan) {
if (!StringUtils.isEmpty(isSeqScan)) this.isCheckBindSeq = isSeqScan;
return this;
}
public MesProdRuleContext workOrderNo(String workOrderNo) {
this.workOrderNo = workOrderNo;
return this;
@ -237,7 +244,7 @@ public class MesProdRuleContext implements Serializable {
//排序装配件清单
public List<MesProductionAssemblySortContext> getSortAssemblyDataContext() {
List<MesProductionAssemblySortContext> sortAssemblyList = !StringUtils.isEmpty(this.assemblyDataJson) ? JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblySortContext.class) : null;
return CollectionUtils.isEmpty(sortAssemblyList) ? null : sortAssemblyList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProductionAssemblySortContext::getRouteSeq)).collect(Collectors.toList());
return CollectionUtils.isEmpty(sortAssemblyList) ? null : sortAssemblyList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProductionAssemblySortContext::getProcessSeq).thenComparing(MesProductionAssemblySortContext::getRouteSeq)).collect(Collectors.toList());
}
}

@ -107,4 +107,7 @@ public class MesProductionAssemblyContext implements Serializable {
@ApiParam("工艺名称")
public String craftName;
@ApiParam(name = "数据关联键")
public Integer foreignKey;
}

@ -72,6 +72,11 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
return this;
}
public MesProductionAssemblyNosortContext foreignKey(Integer foreignKey) {
this.foreignKey = foreignKey;
return this;
}
public MesProductionAssemblyNosortContext assemblyStatus(String assemblySn) {
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
this.assemblySn = assemblySn;

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiParam;
@ -112,6 +113,9 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
@ApiParam(value = "装配件记录表创建人")
public String createUser;
@ApiParam(name = "是否顺序扫描")
private Integer isSeqScan;
public MesProductionAssemblySortContext() {}
public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly) {
@ -130,7 +134,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
return this;
}
public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly) {
public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly, MesWorkCell workCell) {
if (null != workOrderAssembly) {
BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS);
@ -143,6 +147,8 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
this.createUser = productionAssembly.getCreateUser();
}
if (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) this.isSeqScan = workCell.getIsSeqScan();
if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO;
if (StringUtils.isEmpty(this.processSeq)) this.processSeq = MesPcnExtConstWords.ZERO;
@ -155,16 +161,28 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
return this;
}
public MesProductionAssemblySortContext assemblyStatus() {
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
public MesProductionAssemblySortContext foreignKey(Integer foreignKey) {
this.foreignKey = foreignKey;
return this;
}
public MesProductionAssemblySortContext assemblySn(String assemblySn) {
public MesProductionAssemblySortContext assemblyStatus(String assemblySn) {
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
this.assemblySn = assemblySn;
return this;
}
public MesProductionAssemblySortContext assemblySkip() {
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_40.getValue();
this.isSkip = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return this;
}
public MesProductionAssemblySortContext productSnId(Long productSnId) {
this.productSnId = productSnId;
return this;
}
public MesProductionAssemblySortContext fileUrl(Map<Long, String> fileMap) {
if (CollectionUtils.isEmpty(fileMap)) return this;
if (!StringUtils.isEmpty(this.imageFileId)) this.imageFileUrl= fileMap.get(this.imageFileId);

@ -44,6 +44,9 @@ public class MesProductionProcessContext implements Serializable {
@ApiParam("装配件跳过码")
private String assemblySkipCode;
@ApiParam("装配件整腔跳过码")
private String assemblyCavitySkipCode;
@ApiParam("生产线信息([Json]MesWorkCenter)")
private String workCenterJson;
@ -133,6 +136,12 @@ public class MesProductionProcessContext implements Serializable {
return this.isNeedCache();
}
//上下文赋值装配件整腔跳过码
public MesProductionProcessContext assemblyCavitySkipCode(String assemblyCavitySkipCode) {
this.assemblyCavitySkipCode = assemblyCavitySkipCode;
return this.isNeedCache();
}
//---------------------- 生产线对象 ---------------------------------------

@ -0,0 +1,74 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.hibernate.annotations.ColumnDefault;
import javax.persistence.Column;
import javax.persistence.Transient;
import java.util.List;
import java.util.Map;
/**
* @Description : Model
* @Reference :
* @Author : xinwang.yi
* @CreateDate 2024/6/13 15:48
* @Modify:
**/
@Data
public class MesWorkOrderCutPrintModel {
@ApiParam("工厂代码")
private String organizeCode;
@ApiParam("裁片工单号")
private String cutWorkOrderNo;
@ApiParam("产线代码")
private String workCenterCode;
@ApiParam("裁片方案代码")
private String cutCode;
@ApiParam("裁片方案名称")
private String cutName;
@ApiParam("工单状态")
@AnnoOutputColumn(refClass = MesExtEnumUtil.CUT_ORDER_STATUS.class, refForeignKey = "value", value = "description")
private Integer workOrderStatus;
@ApiParam("打印状态")
@ColumnDefault("10")
@AnnoOutputColumn(refClass = MesExtEnumUtil.PRINT_STATUS.class, refForeignKey = "value", value = "description")
private Integer printStatus;
@Column(name = "PRINT_TIME")
@ApiParam("打印时间")
private String printTime;
@ApiParam("打印内容")
private List<Map<String, Object>> printContent;
@ApiParam("裁片方案")
private MesCutScheme cutScheme;
@ApiParam("裁片方案成品")
private List<MesCutSchemeFg> cutSchemeFgList;
@ApiParam("裁片方案原材料")
private List<MesCutSchemeMaterial> cutSchemeMaterialList;
@ApiParam("裁片方案设备")
private List<MesCutSchemeEquipment> cutSchemeEquipmentList;
@ApiParam("裁片方案设备参数")
private Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid;
@Transient
@ApiParam("查询模式1-仅仅查询2-查询并带打印模板修改打印状态")
private Integer mode;
}

@ -233,6 +233,8 @@ public class MesPcnExtConstWords {
public static final String CRAFT_JUMP_CODE = "CRAFT_JUMP_CODE";
// 装配件跳过码
public static final String ASSEMBLY_SKIP_CODE = "ASSEMBLY_SKIP_CODE";
// 装配件整腔跳过码
public static final String ASSEMBLY_CAVITY_SKIP_CODE = "ASSEMBLY_CAVITY_SKIP_CODE";
// 设备代码[工步参数]
public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE";
// 模具号读一模多腔配置[工步参数]
@ -309,6 +311,12 @@ public class MesPcnExtConstWords {
public static final Integer ONE = 1;
// 3
public static final Integer THREE = 3;
//4
public static final Integer FOUR = 4;
//14
public static final Integer FOURTEEN = 14;
//60
public static final Integer SIXTY = 60;
// 中括号
public static final String SQUARE_BRACKETS = "[]";
// &
@ -395,6 +403,8 @@ public class MesPcnExtConstWords {
public static final String MODULE_CONTENT_CONTEXT = "MODULE_CONTENT_CONTEXT";
// 上下文: 工位扫描监控信息
public static final String SCAN_MONITOR_CONTEXT = "SCAN_MONITOR_CONTEXT";
// 上下文: 工位集合
public static final String WORK_CELL_MAP_CONTEXT = "WORK_CELL_MAP_CONTEXT";
// 上下文: 加工结果
public static final String PRODUCT_RESULT_CONTEXT = "PRODUCT_RESULT_CONTEXT";
// 上下文: 就绪信号
@ -534,4 +544,8 @@ public class MesPcnExtConstWords {
public static final String PRINT_TIME = "printTime";
// 裁片名称
public static final String CUT_NAME = "cutName";
//包覆零件号
public static final String PACKAGE_PART_NO = "packagePartNo";
//规则类型
public static final String RULE_TYPE = "ruleType";
}

Loading…
Cancel
Save