|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackage;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageService;
|
|
|
|
@ -15,23 +16,18 @@ import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.util.StringUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPartSap;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingDetailRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ValidatorBean;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -147,12 +143,12 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
|
|
|
|
|
|
|
|
|
|
private MesRecyclablePackageBinding doScanPackageSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
|
|
|
|
|
//校验包装
|
|
|
|
|
MesRecyclablePackage mesRecyclablePackage = mesRecyclablePackageService.checkMesRecyclablePackage(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
|
|
|
|
|
mesRecyclablePackageService.checkMesRecyclablePackage(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
|
|
|
|
|
//绑定主表信息
|
|
|
|
|
MesRecyclablePackageBinding mesRecyclablePackageBinding = getMesRecyclablePackageBindingByPackageSn(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
|
|
|
|
|
if (Objects.isNull(mesRecyclablePackageBinding)) {
|
|
|
|
|
//保存包装
|
|
|
|
|
mesRecyclablePackageBinding = insertMesRecyclablePackageBinding(mesRecyclablePackageBindingModel, mesRecyclablePackage.getPackageTypeCode());
|
|
|
|
|
mesRecyclablePackageBinding = insertMesRecyclablePackageBinding(mesRecyclablePackageBindingModel);
|
|
|
|
|
}
|
|
|
|
|
return mesRecyclablePackageBinding;
|
|
|
|
|
}
|
|
|
|
@ -166,14 +162,18 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
|
|
|
|
|
}
|
|
|
|
|
//校验零件条码是否扫描
|
|
|
|
|
checkIsScan(mesRecyclablePackageBindingModel);
|
|
|
|
|
//查询包条码信息
|
|
|
|
|
MesRecyclablePackage mesRecyclablePackage = mesRecyclablePackageService.checkMesRecyclablePackage(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
|
|
|
|
|
//查询包装零件
|
|
|
|
|
List<MesRecyclablePackagePart> packagePartList = mesRecyclablePackageService.checkMesRecyclablePackagePart(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackage.getPackageTypeCode());
|
|
|
|
|
//条码信息
|
|
|
|
|
MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel);
|
|
|
|
|
MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel,packagePartList);
|
|
|
|
|
//记录绑定明细
|
|
|
|
|
insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn);
|
|
|
|
|
//更新数量
|
|
|
|
|
mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId()));
|
|
|
|
|
//自动关箱
|
|
|
|
|
if (getRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackageBinding.getPackageTypeCode(), mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) {
|
|
|
|
|
if (getMesRecyclablePackagePart(mesRecyclablePackage, packagePartList, mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) {
|
|
|
|
|
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue());
|
|
|
|
|
}
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
|
|
|
|
@ -181,6 +181,14 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
|
|
|
|
|
return mesRecyclablePackageBinding;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackage mesRecyclablePackage, List<MesRecyclablePackagePart> packagePartList, String partNo) {
|
|
|
|
|
Optional<MesRecyclablePackagePart> packagePart = packagePartList.stream().filter(t -> t.getPartNo().equals(partNo)).findFirst();
|
|
|
|
|
if(!packagePart.isPresent()){
|
|
|
|
|
MesPcnException.throwMesBusiException("回用包装类型【%s】零件【%s】数据不存在", mesRecyclablePackage.getPackageTypeCode(), partNo);
|
|
|
|
|
}
|
|
|
|
|
return packagePart.get();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkIsScan(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
|
|
|
|
|
List<MesRecyclablePackageBindingDetail> detailByProductSn = findMesRecyclablePackageBindingDetailByProductSn(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn());
|
|
|
|
|
if (!CollectionUtils.isEmpty(detailByProductSn)) {
|
|
|
|
@ -188,21 +196,40 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
|
|
|
|
|
private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,List<MesRecyclablePackagePart> mesRecyclablePackagePartList) {
|
|
|
|
|
List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn());
|
|
|
|
|
if (CollectionUtils.isEmpty(produceSnList)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("条码【%s】信息不存在", mesRecyclablePackageBindingModel.getProductSn());
|
|
|
|
|
//外协件校验
|
|
|
|
|
MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList);
|
|
|
|
|
if(Objects.isNull(mesRecyclablePackagePart)){
|
|
|
|
|
MesPcnException.throwMesBusiException("条码【%s】不存在", mesRecyclablePackageBindingModel.getProductSn());
|
|
|
|
|
}
|
|
|
|
|
//封装数据
|
|
|
|
|
MesPartSap mesPartSapByPartNo = mesPartService.getMesPartSapByPartNo(mesRecyclablePackagePart.getPartNo(), mesRecyclablePackageBindingModel.getOrganizeCode());
|
|
|
|
|
MesProduceSn mesProduceSn = new MesProduceSn();
|
|
|
|
|
mesProduceSn.setPartNo(mesRecyclablePackagePart.getPartNo());
|
|
|
|
|
mesProduceSn.setPartName(mesPartSapByPartNo.getPartName());
|
|
|
|
|
mesProduceSn.setProductSn(mesRecyclablePackageBindingModel.getProductSn());
|
|
|
|
|
return mesProduceSn;
|
|
|
|
|
}
|
|
|
|
|
return produceSnList.stream().sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()).iterator().next();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesRecyclablePackagePart getRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, String packageTypeCode, String partNo) {
|
|
|
|
|
MesPartSap mesPartSapByPartNo = mesPartService.getMesPartSapByPartNo(partNo, mesRecyclablePackageBindingModel.getOrganizeCode());
|
|
|
|
|
MesRecyclablePackagePart recyclablePackagePart = mesRecyclablePackageService.getMesRecyclablePackagePartByPackageTypeCodeAndPartNo(mesRecyclablePackageBindingModel.getOrganizeCode(), packageTypeCode, mesPartSapByPartNo.getPartNo());
|
|
|
|
|
if (Objects.isNull(recyclablePackagePart)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("条码【%s】找不到对应的零件", mesRecyclablePackageBindingModel.getProductSn());
|
|
|
|
|
private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List<MesRecyclablePackagePart> mesRecyclablePackagePartList) {
|
|
|
|
|
//外协件
|
|
|
|
|
MesRecyclablePackagePart checkPassRecyclablePackagePart = null;
|
|
|
|
|
for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) {
|
|
|
|
|
// 校验正则表达式
|
|
|
|
|
if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) {
|
|
|
|
|
checkPassRecyclablePackagePart = mesRecyclablePackagePart;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return recyclablePackagePart;
|
|
|
|
|
return checkPassRecyclablePackagePart;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean checkRule(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,String rule) {
|
|
|
|
|
return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn(), rule, rule).get(MesPcnExtConstWords.RESULT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) {
|
|
|
|
@ -215,16 +242,17 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
|
|
|
|
|
mesRecyclablePackageBindingDetail.setQty(MesPcnExtConstWords.ONE);
|
|
|
|
|
mesRecyclablePackageBindingDetail.setStatus(MesPcnExtConstWords.ZERO);
|
|
|
|
|
mesRecyclablePackageBindingDetail.setLotNumber(mesProduceSn.getLotNo());
|
|
|
|
|
mesRecyclablePackageBindingDetail.setSubType(Objects.isNull(mesProduceSn.getId()) ? MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_20.getValue() : MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_10.getValue());
|
|
|
|
|
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingDetail, userName);
|
|
|
|
|
mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, String packageTypeCode) {
|
|
|
|
|
private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
|
|
|
|
|
MesRecyclablePackageBinding mesRecyclablePackageBinding = new MesRecyclablePackageBinding();
|
|
|
|
|
mesRecyclablePackageBinding.setOrganizeCode(mesRecyclablePackageBindingModel.getOrganizeCode());
|
|
|
|
|
mesRecyclablePackageBinding.setPackageSn(mesRecyclablePackageBindingModel.getPackageSn());
|
|
|
|
|
mesRecyclablePackageBinding.setHangerPackageSn(mesRecyclablePackageBindingModel.getPackageSn());
|
|
|
|
|
mesRecyclablePackageBinding.setPackageTypeCode(packageTypeCode);
|
|
|
|
|
mesRecyclablePackageBinding.setTypeCode("10");
|
|
|
|
|
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.UNCLOSED.getValue());
|
|
|
|
|
mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO);
|
|
|
|
|
mesRecyclablePackageBinding.setFid(UUID.randomUUID().toString());
|
|
|
|
|