diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index 7dae7ba..784d343 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -39,6 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import rx.internal.util.LinkedArrayList; import javax.persistence.EntityManager; import java.util.*; @@ -122,9 +123,11 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements List foreignKeyList = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getIsPackage()) && o.getIsPackage().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).map(MesProdRuleContext::getForeignKey).collect(Collectors.toList()); //搜集数据关联键集合对应的[合格状态]的产出条码,根据零件号分组 - Map> productSnMap2Part = productionPsOutContextList.stream() + /**Map> productSnMap2Part = productionPsOutContextList.stream() .filter(o -> (null != o && o.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) == 0 && foreignKeyList.contains(o.getForeignKey()))) - .collect(Collectors.groupingBy(MesProductionPsOutContext::getPartNo, Collectors.mapping(MesProductionPsOutContext::getProductSn, Collectors.toList()))); + .collect(Collectors.groupingBy(MesProductionPsOutContext::getPartNo, Collectors.mapping(MesProductionPsOutContext::getProductSn, Collectors.toList())));**/ + Map> productSnMap2Part = new HashMap<>(); + productionPsOutContextList.forEach(o -> productSnMap2Part.computeIfAbsent(o.getPartNo(), k -> new LinkedList<>()).addAll(generateVirtualPs(o.getQty(), o.getProductSn()))); //获取包装规则信息 Map packageRuleContextMap = productionProcessContextStepService.getPackageRuleContext(reqBean); @@ -134,7 +137,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements Map packageDataContextMap = productionCustomContextStepService.getPackageDataContext(reqBean); //不同的零件号分别打包处理 - for (Map.Entry> entry : productSnMap2Part.entrySet()) { + for (Map.Entry> entry : productSnMap2Part.entrySet()) { if (null == entry) continue; @@ -297,7 +300,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //生成包装及明细, 根据标包数量判断是否执行打印 [递归] @Override public List doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, - List packageDataContextList, List productSnList, Boolean isAsyn) { + List packageDataContextList, LinkedList productSnList, Boolean isAsyn) { //缓存的包装条码明细数量 Integer cachedQty = CollectionUtils.isEmpty(packageDataContextList) ? MesPcnExtConstWords.ZERO : packageDataContextList.size(); @@ -307,9 +310,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements if (needQty < 0) needQty = MesPcnExtConstWords.ZERO; //当前满足标包的差额条码 - List productSnList2Cur = null; + LinkedList productSnList2Cur = null; //除去当前满足标包的差额条码后的剩余条码 - List productSnList2Remain = null; + LinkedList productSnList2Remain = null; //当前零件剩余未打包条码 如果小于等于 当前满足标包的差额数量, 则直接将 未打包条码赋给当前满足标包的差额条码, 否则 截取条码 if (productSnList.size() <= needQty) { @@ -320,8 +323,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements productSnList2Remain = productSnList; } else { //根据需要的个数进行截取条码 - productSnList2Cur = productSnList.subList(0, needQty); - productSnList2Remain = productSnList.subList(needQty, productSnList.size()); + productSnList2Cur = (LinkedList) productSnList.subList(0, needQty); + productSnList2Remain = (LinkedList) productSnList.subList(needQty, productSnList.size()); } } @@ -454,46 +457,49 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据 private List insertPackageDetailAndBackUnSealedResultList(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext, - MesPackage packageDb, List productSnList2Cur, Boolean isSealed) { + MesPackage packageDb, LinkedList productSnList2Cur, Boolean isSealed) { //当前未满包的包装条码明细数据 List resultList = null; if (CollectionUtils.isEmpty(productSnList2Cur)) return resultList; //包装条码明细ID Long detailId = null; - //遍历当前满足标包的差额条码 - for (String productSn : productSnList2Cur) { - if (StringUtils.isEmpty(productSn)) continue; + //遍历当前满足标包的差额条码, 这边根据条码分组(因为可能存在重复条码[适配弹框输入的工单数量]) + Map productSnMap = productSnList2Cur.stream().collect(Collectors.groupingBy(o -> o, Collectors.summingInt(o -> 1))); + for (Map.Entry entry : productSnMap.entrySet()) { + if (null == entry) continue; //判断统计方式,是否生成包装明细信息 if (packageRuleContext.getGenerateType().compareTo(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE_DETAIL.getValue()) == 0) { - detailId = insertMesPackageDetail(reqBean, packageDb, productSn); + detailId = insertMesPackageDetail(reqBean, packageDb, entry.getKey(), entry.getValue()); } //判断不满包则 赋值给 当前未满包的包装条码明细数据resultList if (!isSealed) { if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); - MesPackageDataContext packageDataContext = new MesPackageDataContext(); - BeanUtils.copyProperties(packageRuleContext, packageDataContext); - packageDataContext.setPackageId(packageDb.getId()); - packageDataContext.setDetailId(detailId); - packageDataContext.setPackageNo(packageDb.getPackageNo()); - packageDataContext.setQty(new Double(1)); - packageDataContext.setSerialNumber(productSn); - packageDataContext.setCreateDatetime(packageDb.getCreateDatetime()); - packageDataContext.setModifyDatetime(TimeTool.getNowTime(true)); - resultList.add(packageDataContext); + for (Integer i = 0; i < entry.getValue(); i++) { + MesPackageDataContext packageDataContext = new MesPackageDataContext(); + BeanUtils.copyProperties(packageRuleContext, packageDataContext); + packageDataContext.setPackageId(packageDb.getId()); + packageDataContext.setDetailId(detailId); + packageDataContext.setPackageNo(packageDb.getPackageNo()); + packageDataContext.setQty(new Double(1)); + packageDataContext.setSerialNumber(entry.getKey()); + packageDataContext.setCreateDatetime(packageDb.getCreateDatetime()); + packageDataContext.setModifyDatetime(TimeTool.getNowTime(true)); + resultList.add(packageDataContext); + } } } return resultList; } //生成包装明细信息 - private Long insertMesPackageDetail(StationRequestBean reqBean, MesPackage packageDb, String productSn) { + private Long insertMesPackageDetail(StationRequestBean reqBean, MesPackage packageDb, String productSn, Integer qty) { MesPackageDetail packageDetailDb = new MesPackageDetail(); packageDetailDb.setPackageNo(packageDb.getPackageNo()); packageDetailDb.setPartNo(packageDb.getPartNo()); packageDetailDb.setPartName(packageDb.getPartName()); packageDetailDb.setSerialNumber(productSn); packageDetailDb.setProductSn(productSn); - packageDetailDb.setQty(new Double(1)); + packageDetailDb.setQty(new Double(qty)); packageDetailDb.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); packageDetailDb.setFid(UUID.randomUUID().toString()); packageDetailDb.setOrganizeCode(reqBean.getOrganizeCode()); @@ -698,12 +704,21 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码 @Override - public List generateVirtualPs(Double qty) { - List virtualPsList = new ArrayList<>(); + public LinkedList generateVirtualPs(Double qty) { + LinkedList virtualPsList = new LinkedList<>(); for (int i = 0; i < qty.intValue(); i ++) { virtualPsList.add(String.valueOf(i)); } return virtualPsList; } + @Override + public LinkedList generateVirtualPs(Double qty, String productSn) { + LinkedList virtualPsList = new LinkedList<>(); + for (int i = 0; i < qty.intValue(); i ++) { + virtualPsList.add(productSn); + } + return virtualPsList; + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java index 24e9c58..8093814 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java @@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.util.LinkedList; import java.util.List; public interface IMesPackageNoGenerateStepService { @@ -42,13 +43,16 @@ public interface IMesPackageNoGenerateStepService { @ApiOperation(value = "生成包装及明细, 根据标包数量判断是否执行打印") List doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, - List packageDataContextList, List productSnList, Boolean isAsyn); + List packageDataContextList, LinkedList productSnList, Boolean isAsyn); @ApiOperation(value = "进行打印") MesProduceSnPrintModel doPrintPackageNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List packageList, Boolean isAsyn); @ApiOperation(value = "生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码") - List generateVirtualPs(Double qty); + LinkedList generateVirtualPs(Double qty); + + @ApiOperation(value = "生成一样的虚拟条码, 适配弹框输入工单数量") + LinkedList generateVirtualPs(Double qty, String productSn); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java index c7c6658..a0ae1bc 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java @@ -92,6 +92,9 @@ public class MesProdRuleContext implements Serializable { @ApiParam(name = "是否包装") private Integer isPackage; + @ApiParam(name = "是否打印包装条码") + private Integer isPrintPackage; + @ApiParam(name = "成品站点") private String partLocation; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java index 9731f5d..673adf7 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java @@ -8,6 +8,8 @@ import lombok.Data; import org.springframework.beans.BeanUtils; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; /** * 生产过程上下文对象-零件条码(非排序产出零件条码)