diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackageContainerSnServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackageContainerSnServiceImpl.java index 74c5147..c1b58c5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackageContainerSnServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackageContainerSnServiceImpl.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesContainerPartsModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesContainerSnBindModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -67,40 +68,34 @@ public class MesPackageContainerSnServiceImpl implements IMesPackageContainerSnS * @return */ public MesContainerSnBindModel packageContain(String organizeCode,String userName, String containSn, String sn) { - MesContainerSnBindModel mesContainerSnBindModel = MesContainerSnBindModel.builder().build(); - try { - // 是否是容器包容器 - boolean isContainerToContainer = false; - // 获取容器条码 并判断是否是容器与容器绑定 - MesContainerSn mesContainerSn = getMesContainerSnAndValidate(organizeCode, containSn); - MesContainerSn produceSn = getMesContainerSnAndValidate(organizeCode, sn); - if (produceSn != null) { - isContainerToContainer = true; - } - // 如果是容器套容器 - if (isContainerToContainer) { - mesContainerSnBindModel = containerToContainer(organizeCode,userName, mesContainerSn, produceSn); - } - }catch (ImppBusiException e) { - + MesContainerSn produceSn = getMesContainerSnAndValidate(organizeCode, sn); + if (produceSn == null) { + return null; } - return mesContainerSnBindModel; + // 获取容器条码 并判断是否是容器与容器绑定 + MesContainerSn mesContainerSn = getMesContainerSnAndValidate(organizeCode, containSn); + return containerToContainer(organizeCode,userName, mesContainerSn, produceSn); } - private List getMesContainerSnParts(String organizeCode, String containSn) { - - - List mesContainerSnParts = getMesContainerSnPart(organizeCode, containSn); - + private List getMesContainerSnParts(String organizeCode, MesContainerSn containerSn) { + Set partNoSet = new HashSet<>(); + List mesContainerSnParts = getMesContainerSnPart(organizeCode, containerSn.getContainerSn()); + if (!CollectionUtils.isEmpty(mesContainerSnParts)) { + for (MesContainerSnPart mesContainerSnPart : mesContainerSnParts) { + if (StringUtils.isEmpty(mesContainerSnPart.getPartNo())) { + continue; + } + partNoSet.add(mesContainerSnPart.getPartNo()); + } + } - List mesContainerTypeParts = new ArrayList<>(); - if (CollectionUtils.isEmpty(mesContainerSnParts)) { - mesContainerSnParts = new ArrayList<>(); - mesContainerTypeParts = getMesContainerTypePart(organizeCode, containSn); - if (CollectionUtils.isEmpty(mesContainerTypeParts)) { - MesPcnException.throwBusiException("扫描的容器条码:%s,对应容器零件类型关系不存在", containSn); - } + List mesContainerTypeParts = getMesContainerTypePart(organizeCode, containerSn.getContainerTypeCode()); + if (!CollectionUtils.isEmpty(mesContainerTypeParts)) { for (MesContainerTypePart mesContainerTypePart : mesContainerTypeParts) { + if (partNoSet.contains(mesContainerTypePart.getPartNo())) { + continue; + } + MesContainerSnPart mesContainerSnPart = new MesContainerSnPart(); mesContainerSnPart.setMatchType(mesContainerTypePart.getMatchType()); mesContainerSnPart.setContainerTypeCode(mesContainerTypePart.getContainerTypeCode()); @@ -109,81 +104,132 @@ public class MesPackageContainerSnServiceImpl implements IMesPackageContainerSnS mesContainerSnParts.add(mesContainerSnPart); } } + + if (CollectionUtils.isEmpty(mesContainerSnParts)) { + MesPcnException.throwBusiException("扫描的容器条码:%s,对应容器零件关系不存在", containerSn.getContainerSn()); + } return mesContainerSnParts; } - public MesContainerSnBindModel containerToContainer(String organizeCode, String userName, MesContainerSn masterContainerSn, MesContainerSn subContainerSn) { - - MesContainerSnBindModel model = MesContainerSnBindModel.builder().build(); + private List getContainerParts(String organizeCode, MesContainerSn containerSn) { + List result = new ArrayList<>(); + Set partNoSet = new HashSet<>(); + List snPartList = containerSnPartRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "containerTypeCode", "containerSn"}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), containerSn.getContainerTypeCode(), containerSn.getContainerSn()}); + if (!CollectionUtils.isEmpty(snPartList)) { + for (MesContainerSnPart snPart : snPartList) { + if (StringUtils.isEmpty(snPart.getPartNo())) { + continue; + } - try { - // 获取容器类型 - MesContainerType mesContainerType = getMesContainerType(organizeCode, masterContainerSn.getContainerSn(), masterContainerSn.getContainerTypeCode()); - if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesContainerType.getIsAllowRecursion())) { - MesPcnException.throwBusiException("扫描的容器条码:%s,不允许绑定容器", masterContainerSn.getContainerSn()); + partNoSet.add(snPart.getPartNo()); + MesContainerPartsModel model = MesContainerPartsModel.builder() + .partNo(snPart.getPartNo()) + .partName(snPart.getPartName()) + .matchType(snPart.getMatchType()) + .matchRule(snPart.getMatchRule()) + .qty(snPart.getQty()) + .build(); + result.add(model); } - // 判断子容器是否是已装箱状态 - MesContainerPackage masterContainerPackage = getMesContainerPackage(organizeCode, subContainerSn.getContainerSn()); + } - MesContainerPackage subContainerPackage = getMesContainerPackage(organizeCode, subContainerSn.getContainerSn()); - if (subContainerPackage == null || subContainerPackage.getPackageStatus() != 30) { - MesPcnException.throwBusiException("扫描的子容器条码:%s,不是已关箱状态", subContainerSn.getContainerSn()); - } - // 获取 容器类型与零件关系 - List masterContainerSnParts = getMesContainerSnParts(organizeCode, masterContainerSn.getContainerSn()); - List subContainerSnParts = getMesContainerSnParts(organizeCode, subContainerSn.getContainerSn()); - List subParts = subContainerSnParts.stream().map(MesContainerSnPart::getPartNo).collect(Collectors.toList()); - List masterParts = masterContainerSnParts.stream().map(MesContainerSnPart::getPartNo).collect(Collectors.toList()); - if (!masterParts.contains(subParts)) { - MesPcnException.throwBusiException("扫描的主容器条码:%s,与子容器条码不匹配,无法包装", subContainerSn.getContainerSn(),subContainerSn.getContainerSn()); - } - /** - * 验证标包 - * 1 查询子包装的上料明细 - * 2 查询总包装下面的最终条码上料明细 - * 3 校验标包是否满足 - */ - List masterPackageDetails = getMesContainerPackageDetail(organizeCode, subContainerSn.getContainerSn(), true); - - List subPackageDetails = getMesContainerPackageDetail(organizeCode, subContainerSn.getContainerSn(), false); - // 调用涛哥的根据条码对应标包验证。todo - MesAbstractContainerBindCheckQtyService checkQtyService = ContainerBindManager.INSTANCE.getCheckQtyService(MesExtEnumUtil.CONTAINER_TYPE_MIX_TYPE.getByValue(mesContainerType.getMixType())); - - - for (MesContainerPackageDetail subPackageDetail : subPackageDetails) { - MesContainerPartsModel containerPart = MesContainerPartsModel.builder() - .partNo(subPackageDetail.getPartNo()) - .build(); - MesContainerPartsModel containerPartTwo = MesContainerPartsModel.builder() - .partNo(subPackageDetail.getPartNo()) - .qty(subPackageDetail.getQty()) - .build(); + List partList = containerTypePartRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "containerTypeCode"}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), containerSn.getContainerTypeCode()}); + if (!CollectionUtils.isEmpty(partList)) { + for (MesContainerTypePart partPart : partList) { + if (StringUtils.isEmpty(partPart.getPartNo())) { + continue; + } - Map checkQtyResult = checkQtyService.doCheck(organizeCode, masterContainerPackage, masterPackageDetails, containerPart, Arrays.asList(containerPartTwo)); - if (checkQtyResult != null && Objects.equals(checkQtyResult.get(MesPcnExtConstWords.RESULT), false)) { - MesPcnException.throwMesBusiException(checkQtyResult.get(MesPcnExtConstWords.MESSAGE).toString()); + if (partNoSet.contains(partPart.getPartNo())) { + continue; } + MesContainerPartsModel model = MesContainerPartsModel.builder() + .partNo(partPart.getPartNo()) + .partName(partPart.getPartName()) + .matchType(partPart.getMatchType()) + .matchRule(partPart.getMatchRule()) + .qty(partPart.getQty()) + .build(); + result.add(model); } + } + return result; + } - if (masterContainerPackage == null) { - masterContainerPackage = createMesContainerPackage(userName, masterContainerSn); - } - MesContainerPackageDetail mesContainerPackageDetailBean = crreateMesContainerPackageDetail(userName, masterContainerSn, subContainerSn, masterContainerPackage); + public MesContainerSnBindModel containerToContainer(String organizeCode, String userName, MesContainerSn masterContainerSn, MesContainerSn subContainerSn) { + MesContainerSnBindModel model = MesContainerSnBindModel.builder().build(); - MesContainerPackageDetailBinding containerPackageDetailBinding = createContainerPackageDetailBinding(masterContainerPackage, mesContainerPackageDetailBean, MesExtEnumUtil.CONTAINER_RAW_SN_BINDING_STATUS.BINDING, userName); - subPackageDetails.add(mesContainerPackageDetailBean); + // 获取容器类型 + MesContainerType mesContainerType = getMesContainerType(organizeCode, masterContainerSn.getContainerSn(), masterContainerSn.getContainerTypeCode()); + if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesContainerType.getIsAllowRecursion())) { + MesPcnException.throwBusiException("扫描的容器条码:%s,不允许绑定容器", masterContainerSn.getContainerSn()); + } + // 判断子容器是否是已装箱状态 + MesContainerPackage masterContainerPackage = getMesContainerPackage(organizeCode, masterContainerSn.getContainerSn()); + if (masterContainerPackage == null) { + masterContainerPackage = createMesContainerPackage(userName, masterContainerSn); + } + if (Objects.equals(masterContainerPackage.getPackageStatus(), MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_20.getValue())) { + MesPcnException.throwMesBusiException("容器条码【%s】已关箱,不能再进行上料", masterContainerPackage.getContainerSn()); + } + + MesContainerPackage subContainerPackage = getMesContainerPackage(organizeCode, subContainerSn.getContainerSn()); + if (subContainerPackage == null || !Objects.equals(subContainerPackage.getPackageStatus(), MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_20.getValue())) { + MesPcnException.throwBusiException("扫描的子容器条码:%s,不是已关箱状态", subContainerSn.getContainerSn()); + } + // 获取 容器类型与零件关系 + List masterContainerParts = getContainerParts(organizeCode, masterContainerSn); + List subContainerSnParts = getContainerParts(organizeCode, subContainerSn); + List subParts = subContainerSnParts.stream().map(MesContainerPartsModel::getPartNo).collect(Collectors.toList()); + List masterParts = masterContainerParts.stream().map(MesContainerPartsModel::getPartNo).collect(Collectors.toList()); + for (String subPart : subParts) { + if (!masterParts.contains(subPart)) { + MesPcnException.throwBusiException("扫描的主容器条码:%s,与子容器条码不匹配,无法包装", subContainerSn.getContainerSn(),subContainerSn.getContainerSn()); + } + } + /** + * 验证标包 + * 1 查询子包装的上料明细 + * 2 查询总包装下面的最终条码上料明细 + * 3 校验标包是否满足 + */ + List masterPackageDetails = getMesContainerPackageDetail(organizeCode, masterContainerSn.getContainerSn(), false); + for (MesContainerPackageDetail masterPackageDetail : masterPackageDetails) { + if (Objects.equals(masterPackageDetail.getBarCode(), model.getBarCode())) { + MesPcnException.throwMesBusiException("容器条码【%s】与条码【%s】已绑定,请检查数据", masterContainerSn.getContainerSn(), model.getBarCode()); + } + } - model.setContainerPackage(masterContainerPackage); - model.setPackageDetails(subPackageDetails); - model.addPackageDetailBinding(containerPackageDetailBinding); + List subPackageDetails = getMesContainerPackageDetail(organizeCode, subContainerSn.getContainerSn(), true); + // 调用涛哥的根据条码对应标包验证。todo + MesAbstractContainerBindCheckQtyService checkQtyService = ContainerBindManager.INSTANCE.getCheckQtyService(MesExtEnumUtil.CONTAINER_TYPE_MIX_TYPE.getByValue(mesContainerType.getMixType())); - containerPackageRepository.save(masterContainerPackage); - containerPackageDetailRepository.save(mesContainerPackageDetailBean); - packageDetailBindingRepository.save(containerPackageDetailBinding); + for (MesContainerPackageDetail subPackageDetail : subPackageDetails) { + MesContainerPartsModel containerPart = MesContainerPartsModel.builder() + .partNo(subPackageDetail.getPartNo()) + .build(); - }catch (ImppBusiException e) { - log.error("系统异常", e.getErrorDetail()); + Map checkQtyResult = checkQtyService.doCheck(organizeCode, masterContainerPackage, subPackageDetails, containerPart, masterContainerParts); + if (checkQtyResult != null && Objects.equals(checkQtyResult.get(MesPcnExtConstWords.RESULT), false)) { + MesPcnException.throwMesBusiException(checkQtyResult.get(MesPcnExtConstWords.MESSAGE).toString()); + } } + MesContainerPackageDetail mesContainerPackageDetailBean = crreateMesContainerPackageDetail(userName, masterContainerSn, subContainerSn, masterContainerPackage); + masterPackageDetails.add(mesContainerPackageDetailBean); + + MesContainerPackageDetailBinding containerPackageDetailBinding = createContainerPackageDetailBinding(masterContainerPackage, mesContainerPackageDetailBean, MesExtEnumUtil.CONTAINER_RAW_SN_BINDING_STATUS.BINDING, userName); + + model.setContainerPackage(masterContainerPackage); + model.setPackageDetails(masterPackageDetails); + model.addPackageDetailBinding(containerPackageDetailBinding); + + containerPackageRepository.save(masterContainerPackage); + containerPackageDetailRepository.save(mesContainerPackageDetailBean); + packageDetailBindingRepository.save(containerPackageDetailBinding); return model; } @@ -192,21 +238,23 @@ public class MesPackageContainerSnServiceImpl implements IMesPackageContainerSnS // 新增上料表,和上料明细 masterContainerPackage = new MesContainerPackage(); masterContainerPackage.setId(snowflakeIdMaker.nextId()); + masterContainerPackage.setOrganizeCode(masterContainerSn.getOrganizeCode()); masterContainerPackage.setContainerSn(masterContainerSn.getContainerSn()); masterContainerPackage.setPackageStatus(10); - masterContainerPackage.setQty(1); + masterContainerPackage.setQty(0); ConvertBean.serviceModelInitialize(masterContainerPackage, userName); containerPackageRepository.save(masterContainerPackage); return masterContainerPackage; } private MesContainerPackageDetail crreateMesContainerPackageDetail(String userName, MesContainerSn masterContainerSn, MesContainerSn subContainerSn, MesContainerPackage masterContainerPackage) { - MesContainerPackageDetail mesContainerPackageDetailBean = new MesContainerPackageDetail(); - mesContainerPackageDetailBean.setContainerSn(masterContainerSn.getContainerSn()); - mesContainerPackageDetailBean.setPid(masterContainerPackage.getId()); - mesContainerPackageDetailBean.setBarCode(subContainerSn.getContainerSn()); - ConvertBean.serviceModelInitialize(mesContainerPackageDetailBean, userName); - return mesContainerPackageDetailBean; + MesContainerPackageDetail detail = new MesContainerPackageDetail(); + detail.setContainerSn(masterContainerSn.getContainerSn()); + detail.setPid(masterContainerPackage.getId()); + detail.setBarCode(subContainerSn.getContainerSn()); + detail.setLoadPartTime(TimeTool.getNowTime(true)); + ConvertBean.serviceModelInitialize(detail, userName); + return detail; } @@ -227,9 +275,7 @@ public class MesPackageContainerSnServiceImpl implements IMesPackageContainerSnS private MesContainerSn getMesContainerSnAndValidate(String organizeCode, String sn) { // 判断条码是否存在 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(sn, "containerSn", ddlPackBean); - List mesContainerSns = mesContainerSnRepository.findByHqlWhere(ddlPackBean); if (CollectionUtils.isEmpty(mesContainerSns)) { MesPcnException.throwBusiException("扫描的容器条码:%s,不存在", sn); @@ -280,11 +326,11 @@ public class MesPackageContainerSnServiceImpl implements IMesPackageContainerSnS return mesContainerTypes; } - private List getMesContainerTypePart(String organizeCode, String sn) { + private List getMesContainerTypePart(String organizeCode, String containerTypeCode) { // 判断条码是否存在 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(sn, "containerSn", ddlPackBean); + DdlPreparedPack.getStringEqualPack(containerTypeCode, "containerTypeCode", ddlPackBean); List mesContainerTypeParts = containerTypePartRepository.findByHqlWhere(ddlPackBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java index 69fbf7c..4d2ff0a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java @@ -26,10 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; @Service @@ -80,13 +77,25 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService return packageDetails; } + private int getContainerPackageDetailCount(MesContainerSnBindModel model, MesContainerSn containerSn) { + return containerPackageDetailRDao.findByPropertyCount( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "containerSn"}, + new Object[]{model.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), containerSn.getContainerSn()}); + } + private List getContainerParts(String organizeCode, String containerTypeCode, String containerSn) { List result = new ArrayList<>(); + Set partNoSet = new HashSet<>(); List snPartList = containerSnPartRDao.findByProperty( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "containerTypeCode", "containerSn"}, new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), containerTypeCode, containerSn}); if (!CollectionUtils.isEmpty(snPartList)) { for (MesContainerSnPart snPart : snPartList) { + if (StringUtils.isEmpty(snPart.getPartNo())) { + continue; + } + + partNoSet.add(snPart.getPartNo()); MesContainerPartsModel model = MesContainerPartsModel.builder() .partNo(snPart.getPartNo()) .partName(snPart.getPartName()) @@ -96,21 +105,28 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService .build(); result.add(model); } - } else { - List partList = containerTypePartRDao.findByProperty( - new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "containerTypeCode"}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), containerTypeCode}); - if (!CollectionUtils.isEmpty(partList)) { - for (MesContainerTypePart partPart : partList) { - MesContainerPartsModel model = MesContainerPartsModel.builder() - .partNo(partPart.getPartNo()) - .partName(partPart.getPartName()) - .matchType(partPart.getMatchType()) - .matchRule(partPart.getMatchRule()) - .qty(partPart.getQty()) - .build(); - result.add(model); + } + + List partList = containerTypePartRDao.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "containerTypeCode"}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), containerTypeCode}); + if (!CollectionUtils.isEmpty(partList)) { + for (MesContainerTypePart partPart : partList) { + if (StringUtils.isEmpty(partPart.getPartNo())) { + continue; } + + if (partNoSet.contains(partPart.getPartNo())) { + continue; + } + MesContainerPartsModel model = MesContainerPartsModel.builder() + .partNo(partPart.getPartNo()) + .partName(partPart.getPartName()) + .matchType(partPart.getMatchType()) + .matchRule(partPart.getMatchRule()) + .qty(partPart.getQty()) + .build(); + result.add(model); } } return result; @@ -197,6 +213,11 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService return model; } + private boolean isEmptyBindSn(String organizeCode, String containerSn) { + return !containerPackageDetailRDao.isExitByProperty(new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "containerSn"}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), containerSn}); + } + @Override public MesContainerSnBindModel doScanContainer(MesContainerSnBindModel model) { //校验容器条码 @@ -208,15 +229,16 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService MesPcnException.throwMesBusiException("容器类型代码【%s】信息不存在,请检查容器类型主数据", containerSn.getContainerTypeCode()); } + model.setBindIsChoosePart(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); if (Objects.equals(containerType.getBindIsChoosePart(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())) { List partsModelList = getContainerParts(model.getOrganizeCode(), containerType.getContainerTypeCode(), containerSn.getContainerSn()); if (CollectionUtils.isEmpty(partsModelList)) { MesPcnException.throwMesBusiException("容器条码【%s】或容器类型代码【%s】未维护与容器关系,请检查数据", containerSn.getContainerSn(), containerType.getContainerTypeCode()); } - model.setContainerParts(partsModelList); - model.setBindIsChoosePart(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - } else { - model.setBindIsChoosePart(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (partsModelList.size() > 1 && isEmptyBindSn(model.getOrganizeCode(), model.getContainerSn())) { + model.setContainerParts(partsModelList); + model.setBindIsChoosePart(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } } MesContainerPackage containerPackage = containerPackageRDao.getByProperty( @@ -246,8 +268,10 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService if (containerType.getMixType() == null) { MesPcnException.throwMesBusiException("容器类型代码【%s】未配置混包类型,请检查容器类型主数据", containerSn.getContainerTypeCode()); } -// ResultBean containerResult = packageContainerSnService.packageContain(model.getOrganizeCode(), model.getUserName(), model.getContainerSn(), model.getBarCode()); -// if (containerResult ) + MesContainerSnBindModel containerResult = packageContainerSnService.packageContain(model.getOrganizeCode(), model.getUserName(), model.getContainerSn(), model.getBarCode()); + if (containerResult != null) { + return containerResult; + } List packageDetails; MesContainerPackage containerPackage = containerPackageRDao.getByProperty( @@ -294,6 +318,8 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService model.setContainerPackage(containerPackage); model.setPackageDetails(packageDetails); model.addPackageDetailBinding(binding); + model.setScanPartNo(containerPart.getPartNo()); + model.setScanPartName(containerPart.getPartName()); saveContainerPackage(model); return model; } @@ -356,31 +382,21 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService if (containerPackage == null) { MesPcnException.throwMesBusiException("容器条码【%s】未生成容器条码上料主表,请检查数据", containerSn.getContainerSn()); } - List packageDetails = getContainerPackageDetail(model, containerSn); - if (CollectionUtils.isEmpty(packageDetails)) { - MesPcnException.throwMesBusiException("容器条码【%s】不包含上料明细数据,请检查数据", containerSn.getContainerSn()); - } - List deleteDetailIds = new ArrayList<>(); - Map detailMap = packageDetails.stream().collect(Collectors.toMap(MesContainerPackageDetail::getBarCode, item -> item)); for (MesContainerPackageDetail detail : model.getPackageDetails()) { - MesContainerPackageDetail dbDetail = detailMap.get(detail.getBarCode()); - if (null == dbDetail) { - MesPcnException.throwMesBusiException("容器条码【%s】未与条码【%s】进行绑定,请检查数据", containerSn.getContainerSn(), detail.getBarCode()); - } - MesContainerPackageDetailBinding binding = createContainerPackageDetailBinding(containerPackage, dbDetail, MesExtEnumUtil.CONTAINER_RAW_SN_BINDING_STATUS.UN_BINDING, model.getUserName()); + MesContainerPackageDetailBinding binding = createContainerPackageDetailBinding(containerPackage, detail, MesExtEnumUtil.CONTAINER_RAW_SN_BINDING_STATUS.UN_BINDING, model.getUserName()); detailBindingRDao.insert(binding); - deleteDetailIds.add(dbDetail.getId()); - detailMap.remove(dbDetail.getBarCode()); + deleteDetailIds.add(detail.getId()); } containerPackageDetailRDao.deleteWeaklyByIds(deleteDetailIds.toArray(new Long[0]), model.getUserName()); + containerPackage.setQty(getContainerPackageDetailCount(model, containerSn)); containerPackage.setPackageStatus(MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_30.getValue()); ConvertBean.serviceModelUpdate(containerPackage, model.getUserName()); containerPackageRDao.update(containerPackage); - model.setPackageDetails(new ArrayList<>(detailMap.values())); + model.setPackageDetails(getContainerPackageDetail(model, containerSn)); return model; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesContainerSnBindModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesContainerSnBindModel.java index 7e57566..3f3e9c3 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesContainerSnBindModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesContainerSnBindModel.java @@ -30,19 +30,25 @@ public class MesContainerSnBindModel { @ApiParam("是否启用记忆") private Integer isEnableMemory; - @ApiParam("容器条码") + @ApiParam("扫描的容器条码") private String containerSn; - @ApiParam("条码") + @ApiParam("扫描的零件/子容器条码") private String barCode; - @ApiParam("选择的零件编码") + @ApiParam("自选零件号") private String partNo; @ApiParam("绑定是否选零件号") private Integer bindIsChoosePart; - @ApiParam("容器与零件关系") + @ApiParam("最新扫描的零件号") + private String scanPartNo; + + @ApiParam("最新扫描的零件名称") + private String scanPartName; + + @ApiParam("容器与零件关系,可用于自选零件展示") private List containerParts; @ApiParam("包装信息主表")