常熟上料功能

uat-temp-nht-2506120000-jialiao
jason 1 month ago
parent 49cee1361f
commit 411af468eb

@ -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<MesContainerSnPart> getMesContainerSnParts(String organizeCode, String containSn) {
List<MesContainerSnPart> mesContainerSnParts = getMesContainerSnPart(organizeCode, containSn);
private List<MesContainerSnPart> getMesContainerSnParts(String organizeCode, MesContainerSn containerSn) {
Set<String> partNoSet = new HashSet<>();
List<MesContainerSnPart> mesContainerSnParts = getMesContainerSnPart(organizeCode, containerSn.getContainerSn());
if (!CollectionUtils.isEmpty(mesContainerSnParts)) {
for (MesContainerSnPart mesContainerSnPart : mesContainerSnParts) {
if (StringUtils.isEmpty(mesContainerSnPart.getPartNo())) {
continue;
}
partNoSet.add(mesContainerSnPart.getPartNo());
}
}
List<MesContainerTypePart> mesContainerTypeParts = new ArrayList<>();
if (CollectionUtils.isEmpty(mesContainerSnParts)) {
mesContainerSnParts = new ArrayList<>();
mesContainerTypeParts = getMesContainerTypePart(organizeCode, containSn);
if (CollectionUtils.isEmpty(mesContainerTypeParts)) {
MesPcnException.throwBusiException("扫描的容器条码:%s,对应容器零件类型关系不存在", containSn);
}
List<MesContainerTypePart> 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<MesContainerPartsModel> getContainerParts(String organizeCode, MesContainerSn containerSn) {
List<MesContainerPartsModel> result = new ArrayList<>();
Set<String> partNoSet = new HashSet<>();
List<MesContainerSnPart> 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<MesContainerSnPart> masterContainerSnParts = getMesContainerSnParts(organizeCode, masterContainerSn.getContainerSn());
List<MesContainerSnPart> subContainerSnParts = getMesContainerSnParts(organizeCode, subContainerSn.getContainerSn());
List<String> subParts = subContainerSnParts.stream().map(MesContainerSnPart::getPartNo).collect(Collectors.toList());
List<String> masterParts = masterContainerSnParts.stream().map(MesContainerSnPart::getPartNo).collect(Collectors.toList());
if (!masterParts.contains(subParts)) {
MesPcnException.throwBusiException("扫描的主容器条码:%s,与子容器条码不匹配,无法包装", subContainerSn.getContainerSn(),subContainerSn.getContainerSn());
}
/**
*
* 1
* 2
* 3
*/
List<MesContainerPackageDetail> masterPackageDetails = getMesContainerPackageDetail(organizeCode, subContainerSn.getContainerSn(), true);
List<MesContainerPackageDetail> 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<MesContainerTypePart> 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<String, Object> 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<MesContainerPartsModel> masterContainerParts = getContainerParts(organizeCode, masterContainerSn);
List<MesContainerPartsModel> subContainerSnParts = getContainerParts(organizeCode, subContainerSn);
List<String> subParts = subContainerSnParts.stream().map(MesContainerPartsModel::getPartNo).collect(Collectors.toList());
List<String> 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<MesContainerPackageDetail> 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<MesContainerPackageDetail> 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<String, Object> 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<MesContainerSn> 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<MesContainerTypePart> getMesContainerTypePart(String organizeCode, String sn) {
private List<MesContainerTypePart> getMesContainerTypePart(String organizeCode, String containerTypeCode) {
// 判断条码是否存在
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(sn, "containerSn", ddlPackBean);
DdlPreparedPack.getStringEqualPack(containerTypeCode, "containerTypeCode", ddlPackBean);
List<MesContainerTypePart> mesContainerTypeParts = containerTypePartRepository.findByHqlWhere(ddlPackBean);

@ -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<MesContainerPartsModel> getContainerParts(String organizeCode, String containerTypeCode, String containerSn) {
List<MesContainerPartsModel> result = new ArrayList<>();
Set<String> partNoSet = new HashSet<>();
List<MesContainerSnPart> 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<MesContainerTypePart> 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<MesContainerTypePart> 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<MesContainerPartsModel> 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<MesContainerPackageDetail> 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<MesContainerPackageDetail> packageDetails = getContainerPackageDetail(model, containerSn);
if (CollectionUtils.isEmpty(packageDetails)) {
MesPcnException.throwMesBusiException("容器条码【%s】不包含上料明细数据请检查数据", containerSn.getContainerSn());
}
List<Long> deleteDetailIds = new ArrayList<>();
Map<String, MesContainerPackageDetail> 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;
}

@ -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<MesContainerPartsModel> containerParts;
@ApiParam("包装信息主表")

Loading…
Cancel
Save