常熟站点绑定功能

uat-temp-nht-2506120000-jialiao
jason 1 month ago
parent 7acf815e9b
commit 6fdba66cfb

@ -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);
}

@ -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);
}

@ -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;
}
}

@ -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<MesContainerPackageDetail> bottomPackageDetails) {
List<MesContainerPackageDetail> 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<MesContainerPackageDetail> bottomPackageDetails = new ArrayList<>();
getBottomPackageDetails(organizeCode, topContainerSn, bottomPackageDetails);
if (CollectionUtils.isEmpty(bottomPackageDetails)) {
return;
}
final Set<String> 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<MesContainerPackageDetail> 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);

@ -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;
}
}

@ -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<String> elements) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(elements);
StringJoiner joiner = new StringJoiner(delimiter);
for (String cs: elements) {
joiner.add("'" + cs + "'");
}
return joiner.toString();
}
}
Loading…
Cancel
Save