From 6fdba66cfbb31635fc921fb90c2cba9a470c270f Mon Sep 17 00:00:00 2001 From: jason Date: Sun, 22 Jun 2025 21:20:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=B8=E7=86=9F=E7=AB=99=E7=82=B9=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesContainerSnService.java | 4 ++ .../mes/pcn/api/busi/IMesContainerSnService.java | 9 --- .../base/MesContainerSnServiceImpl.java | 21 ++++++ .../busi/MesContainerSnBindServiceImpl.java | 84 +++++++++++++++++++--- .../busi/MesContainerSnServiceImpl.java | 36 ---------- .../ext/mes/pcn/pojo/util/OverwriteStringJoin.java | 37 ++++++++++ 6 files changed, 138 insertions(+), 53 deletions(-) delete mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnServiceImpl.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/OverwriteStringJoin.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesContainerSnService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesContainerSnService.java index d0175d4..f430d94 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesContainerSnService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesContainerSnService.java @@ -17,4 +17,8 @@ public interface IMesContainerSnService { void checkContainerSnIsExist(String containerSn, String organizeCode); + MesContainerSn getContainerSn(String organizeCode, String containerSn); + + MesContainerSn checkContainerSn(String organizeCode, String containerSn); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnService.java deleted file mode 100644 index b7b9bf8..0000000 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnService.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.api.busi; - -import cn.estsh.i3plus.pojo.mes.bean.MesContainerSn; - -public interface IMesContainerSnService { - MesContainerSn getContainerSn(String organizeCode, String containerSn); - - MesContainerSn checkContainerSn(String organizeCode, String containerSn); -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesContainerSnServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesContainerSnServiceImpl.java index 071c37d..73103d9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesContainerSnServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesContainerSnServiceImpl.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesContainerSnService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; @@ -8,6 +10,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesContainerSn; import cn.estsh.i3plus.pojo.mes.repository.MesContainerSnRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -54,4 +57,22 @@ public class MesContainerSnServiceImpl implements IMesContainerSnService { } } + @Override + public MesContainerSn getContainerSn(String organizeCode, String containerSn) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(containerSn)) { + return null; + } + return mesContainerSnRepository.getByProperty( + 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 MesContainerSn checkContainerSn(String organizeCode, String containerSn) { + MesContainerSn mesContainerSn = getContainerSn(organizeCode, containerSn); + if (mesContainerSn == null) { + MesPcnException.throwMesBusiException("容器条码【%s】信息不存在", containerSn); + } + return mesContainerSn; + } } 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 4d2ff0a..8038115 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 @@ -1,7 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesContainerSnService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesContainerSnBindService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesContainerSnService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPackageContainerSnService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.MesNumberRuleMatchRegularExpressionService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.containerbind.ContainerBindManager; @@ -10,22 +10,23 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; 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.ext.mes.pcn.pojo.util.OverwriteStringJoin; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.platform.common.util.MesConstWords; 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.bean.recyclablepackage.MesRecyclablePackageBinding; import cn.estsh.i3plus.pojo.mes.repository.*; -import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.util.ResultBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import javax.persistence.EntityManager; +import javax.persistence.Query; import java.util.*; import java.util.stream.Collectors; @@ -51,6 +52,8 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService private MesNumberRuleMatchRegularExpressionService matchRegularService; @Autowired private IMesPackageContainerSnService packageContainerSnService; + @Autowired + private EntityManager entityManager; private MesContainerType getMesContainerType(String organizeCode, String containerTypeCode) { MesContainerType containerType = null; @@ -255,6 +258,69 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService return model; } + private String getTopContainerSn(String organizeCode, String containerSn) { + MesContainerPackageDetail packageDetail = containerPackageDetailRDao.getByProperty(new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_VALID, MesConstWords.IS_DELETED, "barCode"}, + new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), containerSn}); + if (packageDetail != null) { + return getTopContainerSn(organizeCode, packageDetail.getContainerSn()); + } + return containerSn; + } + + private Boolean getBottomPackageDetails(String organizeCode, String containerSn, List bottomPackageDetails) { + List packageDetailList = containerPackageDetailRDao.findByProperty(new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_VALID, MesConstWords.IS_DELETED, "containerSn"}, + new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), containerSn}); + if (CollectionUtils.isEmpty(packageDetailList)) { + return true; + } + for (MesContainerPackageDetail packageDetail : packageDetailList) { + if (getBottomPackageDetails(organizeCode, packageDetail.getBarCode(), bottomPackageDetails)) { + bottomPackageDetails.add(packageDetail); + } + } + + return false; + } + + private void checkContainerBarcode(String organizeCode, String barcode) { + MesContainerSn containerSn = containerSnService.getContainerSn(organizeCode, barcode); + if (containerSn == null) { + return; + } + + MesContainerPackage containerPackage = containerPackageRDao.getByProperty( + 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.getContainerSn()}); + if (containerPackage == null || !Objects.equals(containerPackage.getPackageStatus(),MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_20.getValue())) { + MesPcnException.throwMesBusiException("容器条码【%s】未关箱,不能进行上料操作!", containerSn.getContainerSn()); + } + + String topContainerSn = getTopContainerSn(organizeCode, containerSn.getContainerSn()); + List bottomPackageDetails = new ArrayList<>(); + getBottomPackageDetails(organizeCode, topContainerSn, bottomPackageDetails); + if (CollectionUtils.isEmpty(bottomPackageDetails)) { + return; + } + final Set containerSnSet = bottomPackageDetails.stream().map(MesContainerPackageDetail::getContainerSn).collect(Collectors.toSet()); + + StringBuilder hql = new StringBuilder(); + hql.append(" select count(DISTINCT mss.top_container_sn) from mes_container_sn_station mss where mss.organize_code=:organizeCode and mss.is_deleted=:isDeleted and mss.is_valid=:isValid"); + if (containerSnSet.size() == 1) { + hql.append(" and mss.container_sn = '").append(containerSnSet.iterator().next()).append("'"); + } else { + hql.append(" and mss.container_sn in (").append(OverwriteStringJoin.join(",", containerSnSet)).append(")"); + } + Query countQuery = entityManager.createNativeQuery(hql.toString()); + countQuery.setParameter("organizeCode", organizeCode) + .setParameter("isValid", CommonEnumUtil.VALID) + .setParameter("isDeleted", CommonEnumUtil.FALSE); + //本次查询满足条件的总数 + int count = countQuery.getResultList().size(); + if (count > 1) { + MesPcnException.throwMesBusiException("容器条码【%s】在多个站点进行过绑定!", containerSn.getContainerSn()); + } + } + @Override public MesContainerSnBindModel doScanBarcode(MesContainerSnBindModel model) { //校验容器条码 @@ -268,10 +334,6 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService if (containerType.getMixType() == null) { MesPcnException.throwMesBusiException("容器类型代码【%s】未配置混包类型,请检查容器类型主数据", containerSn.getContainerTypeCode()); } - 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 +356,12 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService } } + checkContainerBarcode(model.getOrganizeCode(), model.getBarCode()); + MesContainerSnBindModel containerResult = packageContainerSnService.packageContain(model.getOrganizeCode(), model.getUserName(), model.getContainerSn(), model.getBarCode()); + if (containerResult != null) { + return containerResult; + } + MesContainerPartsModel containerPart = checkProduceSn(model.getOrganizeCode(), containerSn, model.getBarCode(), model.getPartNo()); containerPart.setContainerType(containerType.getContainerType()); containerPart.setContainerPackage(containerPackage); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnServiceImpl.java deleted file mode 100644 index a152af3..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnServiceImpl.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesContainerSnService; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.util.StringUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesContainerSn; -import cn.estsh.i3plus.pojo.mes.repository.MesContainerSnRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class MesContainerSnServiceImpl implements IMesContainerSnService { - @Autowired - private MesContainerSnRepository containerSnRepository; - - @Override - public MesContainerSn getContainerSn(String organizeCode, String containerSn) { - if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(containerSn)) { - return null; - } - return containerSnRepository.getByProperty( - 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 MesContainerSn checkContainerSn(String organizeCode, String containerSn) { - MesContainerSn mesContainerSn = getContainerSn(organizeCode, containerSn); - if (mesContainerSn == null) { - MesPcnException.throwMesBusiException("容器条码【%s】信息不存在", containerSn); - } - return mesContainerSn; - } -} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/OverwriteStringJoin.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/OverwriteStringJoin.java new file mode 100644 index 0000000..2a4b30a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/OverwriteStringJoin.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.util; + + +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * @Description :OverwriteStringJoin + * @Reference : + * @Author : gsz + * @CreateDate : 2024-05-10 16:08 + * @Modify: + **/ +public class OverwriteStringJoin { + + public static String join(CharSequence delimiter, CharSequence... elements) { + Objects.requireNonNull(delimiter); + Objects.requireNonNull(elements); + StringJoiner joiner = new StringJoiner(delimiter); + for (CharSequence cs: elements) { + joiner.add("'" + cs + "'"); + } + return joiner.toString(); + } + public static String join(CharSequence delimiter, Collection elements) { + Objects.requireNonNull(delimiter); + Objects.requireNonNull(elements); + StringJoiner joiner = new StringJoiner(delimiter); + for (String cs: elements) { + joiner.add("'" + cs + "'"); + } + return joiner.toString(); + } + +}