料包绑定增加外协件逻辑

tags/yfai-pcn-ext-v2.3
jun 8 months ago
parent 59fc125885
commit d883d077fd

@ -25,10 +25,16 @@ public interface IMesRecyclablePackageService {
@ApiOperation("查询回收包装零件")
List<MesRecyclablePackagePart> findMesRecyclablePackagePartByPackageTypeCode(String organizeCode, String packageTypeCode);
@ApiOperation("校验回收包装零件")
List<MesRecyclablePackagePart> checkMesRecyclablePackagePart(String organizeCode, String packageTypeCode);
@ApiOperation("查询回收包装零件")
MesRecyclablePackagePart getMesRecyclablePackagePartByPackageTypeCodeAndPartNo(String organizeCode, String packageTypeCode, String partNo);
@ApiOperation("查询回收包装类型")
MesRecyclablePackageType getMesRecyclablePackageTypeByPackageTypeCode(String organizeCode, String packageTypeCode);
@ApiOperation("校验回收包装类型")
MesRecyclablePackageType checkMesRecyclablePackageType(String organizeCode, String packageTypeCode);
}

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

@ -14,6 +14,7 @@ import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackag
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.List;
import java.util.Objects;
@ -69,6 +70,15 @@ public class MesRecyclablePackageServiceImpl implements IMesRecyclablePackageSer
}
@Override
public List<MesRecyclablePackagePart> checkMesRecyclablePackagePart(String organizeCode, String packageTypeCode) {
List<MesRecyclablePackagePart> mesRecyclablePackagePartList = this.findMesRecyclablePackagePartByPackageTypeCode(organizeCode, packageTypeCode);
if (CollectionUtils.isEmpty(mesRecyclablePackagePartList)) {
MesPcnException.throwMesBusiException("回用包类型【%s】包装零件信息不存在", packageTypeCode);
}
return mesRecyclablePackagePartList;
}
@Override
public MesRecyclablePackagePart getMesRecyclablePackagePartByPackageTypeCodeAndPartNo(String organizeCode, String packageTypeCode, String partNo) {
if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(packageTypeCode) || StringUtil.isEmptyAndNull(partNo)) {
return null;
@ -88,4 +98,13 @@ public class MesRecyclablePackageServiceImpl implements IMesRecyclablePackageSer
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_TYPE_CODE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageTypeCode});
}
@Override
public MesRecyclablePackageType checkMesRecyclablePackageType(String organizeCode, String packageTypeCode) {
MesRecyclablePackageType recyclablePackageType = this.getMesRecyclablePackageTypeByPackageTypeCode(organizeCode, packageTypeCode);
if (Objects.isNull(recyclablePackageType)) {
MesPcnException.throwMesBusiException("回用包类型【%s】信息不存在", packageTypeCode);
}
return recyclablePackageType;
}
}

Loading…
Cancel
Save