吸塑打包适配

mes-uat-changshu0609-temp-wj-250616-xisu
王杰 4 weeks ago
parent dc36612fe9
commit a8ae77b8e3

@ -39,6 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import rx.internal.util.LinkedArrayList;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import java.util.*; import java.util.*;
@ -122,9 +123,11 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
List<Integer> 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()); List<Integer> 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<String, List<String>> productSnMap2Part = productionPsOutContextList.stream() /**Map<String, List<String>> productSnMap2Part = productionPsOutContextList.stream()
.filter(o -> (null != o && o.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) == 0 && foreignKeyList.contains(o.getForeignKey()))) .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<String, LinkedList<String>> productSnMap2Part = new HashMap<>();
productionPsOutContextList.forEach(o -> productSnMap2Part.computeIfAbsent(o.getPartNo(), k -> new LinkedList<>()).addAll(generateVirtualPs(o.getQty(), o.getProductSn())));
//获取包装规则信息 //获取包装规则信息
Map<String, MesPackageRuleContext> packageRuleContextMap = productionProcessContextStepService.getPackageRuleContext(reqBean); Map<String, MesPackageRuleContext> packageRuleContextMap = productionProcessContextStepService.getPackageRuleContext(reqBean);
@ -134,7 +137,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
Map<String, String> packageDataContextMap = productionCustomContextStepService.getPackageDataContext(reqBean); Map<String, String> packageDataContextMap = productionCustomContextStepService.getPackageDataContext(reqBean);
//不同的零件号分别打包处理 //不同的零件号分别打包处理
for (Map.Entry<String, List<String>> entry : productSnMap2Part.entrySet()) { for (Map.Entry<String, LinkedList<String>> entry : productSnMap2Part.entrySet()) {
if (null == entry) continue; if (null == entry) continue;
@ -297,7 +300,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
//生成包装及明细, 根据标包数量判断是否执行打印 [递归] //生成包装及明细, 根据标包数量判断是否执行打印 [递归]
@Override @Override
public List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, public List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
List<MesPackageDataContext> packageDataContextList, List<String> productSnList, Boolean isAsyn) { List<MesPackageDataContext> packageDataContextList, LinkedList<String> productSnList, Boolean isAsyn) {
//缓存的包装条码明细数量 //缓存的包装条码明细数量
Integer cachedQty = CollectionUtils.isEmpty(packageDataContextList) ? MesPcnExtConstWords.ZERO : packageDataContextList.size(); 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; if (needQty < 0) needQty = MesPcnExtConstWords.ZERO;
//当前满足标包的差额条码 //当前满足标包的差额条码
List<String> productSnList2Cur = null; LinkedList<String> productSnList2Cur = null;
//除去当前满足标包的差额条码后的剩余条码 //除去当前满足标包的差额条码后的剩余条码
List<String> productSnList2Remain = null; LinkedList<String> productSnList2Remain = null;
//当前零件剩余未打包条码 如果小于等于 当前满足标包的差额数量, 则直接将 未打包条码赋给当前满足标包的差额条码, 否则 截取条码 //当前零件剩余未打包条码 如果小于等于 当前满足标包的差额数量, 则直接将 未打包条码赋给当前满足标包的差额条码, 否则 截取条码
if (productSnList.size() <= needQty) { if (productSnList.size() <= needQty) {
@ -320,8 +323,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
productSnList2Remain = productSnList; productSnList2Remain = productSnList;
} else { } else {
//根据需要的个数进行截取条码 //根据需要的个数进行截取条码
productSnList2Cur = productSnList.subList(0, needQty); productSnList2Cur = (LinkedList<String>) productSnList.subList(0, needQty);
productSnList2Remain = productSnList.subList(needQty, productSnList.size()); productSnList2Remain = (LinkedList<String>) productSnList.subList(needQty, productSnList.size());
} }
} }
@ -454,46 +457,49 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
//判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据 //判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据
private List<MesPackageDataContext> insertPackageDetailAndBackUnSealedResultList(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext, private List<MesPackageDataContext> insertPackageDetailAndBackUnSealedResultList(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext,
MesPackage packageDb, List<String> productSnList2Cur, Boolean isSealed) { MesPackage packageDb, LinkedList<String> productSnList2Cur, Boolean isSealed) {
//当前未满包的包装条码明细数据 //当前未满包的包装条码明细数据
List<MesPackageDataContext> resultList = null; List<MesPackageDataContext> resultList = null;
if (CollectionUtils.isEmpty(productSnList2Cur)) return resultList; if (CollectionUtils.isEmpty(productSnList2Cur)) return resultList;
//包装条码明细ID //包装条码明细ID
Long detailId = null; Long detailId = null;
//遍历当前满足标包的差额条码 //遍历当前满足标包的差额条码, 这边根据条码分组(因为可能存在重复条码[适配弹框输入的工单数量])
for (String productSn : productSnList2Cur) { Map<String, Integer> productSnMap = productSnList2Cur.stream().collect(Collectors.groupingBy(o -> o, Collectors.summingInt(o -> 1)));
if (StringUtils.isEmpty(productSn)) continue; for (Map.Entry<String, Integer> entry : productSnMap.entrySet()) {
if (null == entry) continue;
//判断统计方式,是否生成包装明细信息 //判断统计方式,是否生成包装明细信息
if (packageRuleContext.getGenerateType().compareTo(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE_DETAIL.getValue()) == 0) { 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 //判断不满包则 赋值给 当前未满包的包装条码明细数据resultList
if (!isSealed) { if (!isSealed) {
if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>();
MesPackageDataContext packageDataContext = new MesPackageDataContext(); for (Integer i = 0; i < entry.getValue(); i++) {
BeanUtils.copyProperties(packageRuleContext, packageDataContext); MesPackageDataContext packageDataContext = new MesPackageDataContext();
packageDataContext.setPackageId(packageDb.getId()); BeanUtils.copyProperties(packageRuleContext, packageDataContext);
packageDataContext.setDetailId(detailId); packageDataContext.setPackageId(packageDb.getId());
packageDataContext.setPackageNo(packageDb.getPackageNo()); packageDataContext.setDetailId(detailId);
packageDataContext.setQty(new Double(1)); packageDataContext.setPackageNo(packageDb.getPackageNo());
packageDataContext.setSerialNumber(productSn); packageDataContext.setQty(new Double(1));
packageDataContext.setCreateDatetime(packageDb.getCreateDatetime()); packageDataContext.setSerialNumber(entry.getKey());
packageDataContext.setModifyDatetime(TimeTool.getNowTime(true)); packageDataContext.setCreateDatetime(packageDb.getCreateDatetime());
resultList.add(packageDataContext); packageDataContext.setModifyDatetime(TimeTool.getNowTime(true));
resultList.add(packageDataContext);
}
} }
} }
return resultList; 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(); MesPackageDetail packageDetailDb = new MesPackageDetail();
packageDetailDb.setPackageNo(packageDb.getPackageNo()); packageDetailDb.setPackageNo(packageDb.getPackageNo());
packageDetailDb.setPartNo(packageDb.getPartNo()); packageDetailDb.setPartNo(packageDb.getPartNo());
packageDetailDb.setPartName(packageDb.getPartName()); packageDetailDb.setPartName(packageDb.getPartName());
packageDetailDb.setSerialNumber(productSn); packageDetailDb.setSerialNumber(productSn);
packageDetailDb.setProductSn(productSn); packageDetailDb.setProductSn(productSn);
packageDetailDb.setQty(new Double(1)); packageDetailDb.setQty(new Double(qty));
packageDetailDb.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); packageDetailDb.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
packageDetailDb.setFid(UUID.randomUUID().toString()); packageDetailDb.setFid(UUID.randomUUID().toString());
packageDetailDb.setOrganizeCode(reqBean.getOrganizeCode()); packageDetailDb.setOrganizeCode(reqBean.getOrganizeCode());
@ -698,12 +704,21 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
//生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码 //生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码
@Override @Override
public List<String> generateVirtualPs(Double qty) { public LinkedList<String> generateVirtualPs(Double qty) {
List<String> virtualPsList = new ArrayList<>(); LinkedList<String> virtualPsList = new LinkedList<>();
for (int i = 0; i < qty.intValue(); i ++) { for (int i = 0; i < qty.intValue(); i ++) {
virtualPsList.add(String.valueOf(i)); virtualPsList.add(String.valueOf(i));
} }
return virtualPsList; return virtualPsList;
} }
@Override
public LinkedList<String> generateVirtualPs(Double qty, String productSn) {
LinkedList<String> virtualPsList = new LinkedList<>();
for (int i = 0; i < qty.intValue(); i ++) {
virtualPsList.add(productSn);
}
return virtualPsList;
}
} }

@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.LinkedList;
import java.util.List; import java.util.List;
public interface IMesPackageNoGenerateStepService { public interface IMesPackageNoGenerateStepService {
@ -42,13 +43,16 @@ public interface IMesPackageNoGenerateStepService {
@ApiOperation(value = "生成包装及明细, 根据标包数量判断是否执行打印") @ApiOperation(value = "生成包装及明细, 根据标包数量判断是否执行打印")
List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
List<MesPackageDataContext> packageDataContextList, List<String> productSnList, Boolean isAsyn); List<MesPackageDataContext> packageDataContextList, LinkedList<String> productSnList, Boolean isAsyn);
@ApiOperation(value = "进行打印") @ApiOperation(value = "进行打印")
MesProduceSnPrintModel doPrintPackageNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, MesProduceSnPrintModel doPrintPackageNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List<MesPackage> packageList, Boolean isAsyn); MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List<MesPackage> packageList, Boolean isAsyn);
@ApiOperation(value = "生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码") @ApiOperation(value = "生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码")
List<String> generateVirtualPs(Double qty); LinkedList<String> generateVirtualPs(Double qty);
@ApiOperation(value = "生成一样的虚拟条码, 适配弹框输入工单数量")
LinkedList<String> generateVirtualPs(Double qty, String productSn);
} }

@ -92,6 +92,9 @@ public class MesProdRuleContext implements Serializable {
@ApiParam(name = "是否包装") @ApiParam(name = "是否包装")
private Integer isPackage; private Integer isPackage;
@ApiParam(name = "是否打印包装条码")
private Integer isPrintPackage;
@ApiParam(name = "成品站点") @ApiParam(name = "成品站点")
private String partLocation; private String partLocation;

@ -8,6 +8,8 @@ import lombok.Data;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/** /**
* -() * -()

Loading…
Cancel
Save