芜湖发运增加唯一性校验

tags/yfai-pcn-ext-v2.3
jun 7 months ago
parent 393461a03e
commit 61c351f458

@ -2,7 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import io.swagger.annotations.ApiOperation;
@ -24,4 +24,7 @@ public interface IMesPartShippingGroupService {
@ApiOperation(value = "打印发运单数据")
List<MesShippingOrderManagement> doMesMesShippingOrderManagementPrint(MesShippingOrderManagement model, String userName);
@ApiOperation(value = "发运组明细")
MesPartShippingGroupDetail getMesPartShippingGroupDetail(String organizeCode, String shippingGroupCode, String partNo, String custPartNo);
}

@ -0,0 +1,23 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesShippingSnUnique;
import io.swagger.annotations.ApiOperation;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/28 15:09
* @Modify:
**/
public interface IMesShippingSnUniqueService {
@ApiOperation("查询发运唯一性")
MesShippingSnUnique getMesShippingSnUnique(String organizeCode, String productSn);
@ApiOperation("校验唯一性")
Boolean checkMesShippingSnUnique(String organizeCode, String productSn);
@ApiOperation("新增唯一性校验")
void insertMesShippingSnUnique(String organizeCode, String productSn,String shippingCode,String userName);
}

@ -8,8 +8,10 @@ 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.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
@ -34,13 +36,17 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
@Autowired
private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository;
public List<MesPartShippingGroup> findAll( DdlPackBean packBean) {
List<MesPartShippingGroup> detailDeleteList = shippingGroupRepository.findByHqlWhere(packBean);
return detailDeleteList;
@Autowired
private MesPartShippingGroupDetailRepository mesPartShippingGroupDetailRepository;
public List<MesPartShippingGroup> findAll(DdlPackBean packBean) {
return shippingGroupRepository.findByHqlWhere(packBean);
}
@Override
public MesPartShippingGroup getMesPartShippingGroup(String organizeCode, String shippingGroupCode) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(shippingGroupCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(shippingGroupCode, "shippingGroupCode", packBean);
return shippingGroupRepository.getByProperty(packBean);
@ -78,4 +84,14 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
}
return pullingOrderInfos;
}
@Override
public MesPartShippingGroupDetail getMesPartShippingGroupDetail(String organizeCode, String shippingGroupCode, String partNo, String custPartNo) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(shippingGroupCode) || StringUtil.isEmpty(partNo) || StringUtil.isEmpty(custPartNo)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(shippingGroupCode, "shippingGroupCode", packBean);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", packBean);
return mesPartShippingGroupDetailRepository.getByProperty(packBean);
}
}

@ -0,0 +1,53 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingSnUniqueService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesShippingSnUnique;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingSnUniqueRepository;
import groovy.util.logging.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/28 15:15
* @Modify:
**/
@Service
@Slf4j
public class MesShippingSnUniqueServiceImpl implements IMesShippingSnUniqueService {
@Autowired
private MesShippingSnUniqueRepository mesShippingSnUniqueRepository;
@Override
public MesShippingSnUnique getMesShippingSnUnique(String organizeCode, String productSn) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(productSn)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productSn, "productSn", packBean);
return mesShippingSnUniqueRepository.getByProperty(packBean);
}
@Override
public Boolean checkMesShippingSnUnique(String organizeCode, String productSn) {
if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(productSn)) return false;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productSn, "productSn", packBean);
return mesShippingSnUniqueRepository.isExitByHql(packBean);
}
@Override
public void insertMesShippingSnUnique(String organizeCode, String productSn, String shippingCode,String userName) {
MesShippingSnUnique mesShippingSnUnique = new MesShippingSnUnique();
mesShippingSnUnique.setOrganizeCode(organizeCode);
mesShippingSnUnique.setProductSn(productSn);
mesShippingSnUnique.setShippingCode(shippingCode);
ConvertBean.serviceModelInitialize(mesShippingSnUnique,userName);
mesShippingSnUniqueRepository.insert(mesShippingSnUnique);
}
}

@ -94,6 +94,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
@Autowired
private IMesEmergencyLocationService mesEmergencyLocationService;
@Autowired
private IMesShippingSnUniqueService mesShippingSnUniqueService;
@Override
public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) {
//校验发运单
@ -423,7 +426,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderManagementDetailPackBean);
List<MesShippingOrderManagementDetail> orderManagementDetailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderManagementDetailPackBean);
List<MesShippingOrderManagementDetail> detailList = model.getDetailList();
Map<Long, List<MesShippingOrderManagementDetail>> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getCustInfoSeq));
Map<Long, List<MesShippingOrderManagementDetail>> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getId));
List<MesProduceSn> produceSnList = new ArrayList<>();
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
@ -433,7 +436,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if (Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "custSn", packBean);
} else {
List<MesShippingOrderManagementDetail> mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getCustInfoSeq());
List<MesShippingOrderManagementDetail> mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getId());
MesShippingOrderManagementDetail managementDetail = mesShippingOrderManagementDetails.get(0);
detail.setRemark(managementDetail.getRemark());
detail.setStatus(managementDetail.getStatus());
@ -450,6 +453,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(produceSn, userInfo);
produceSnList.add(produceSn);
} else {
//记录唯一性校验表
mesShippingSnUniqueService.insertMesShippingSnUnique(organizeCode, detail.getBarcode(), orderManagement.getShippingCode(), userInfo);
}
//更新工单
if(!StringUtils.isEmpty(detail.getVisualOrderNo())){

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.strategy;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.IMesShippingScanStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
@ -13,7 +12,9 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool;
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.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
@ -23,6 +24,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepos
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import groovy.util.logging.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -61,7 +63,12 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
@Autowired
private IMesConfigService mesConfigService;
@Override
@Autowired
private IMesPartShippingGroupService mesPartShippingGroupService;
@Autowired
private IMesShippingSnUniqueService mesShippingSnUniqueService;
public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) {
//校验条码
MesProduceSn produceSn = checkSn(model);
@ -130,6 +137,7 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
produceSn.setSerialNumber(model.getSn());
produceSn.setProductSn(model.getSn());
produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo());
produceSn.setOrganizeCode(model.getOrganizeCode());
}
return produceSn;
}
@ -150,15 +158,20 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model) {
//外部解析条码长度卡控
String cfgValue = mesConfigService.getCfgValue(model.getOrganizeCode(), MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH);
if (Integer.parseInt(cfgValue) < model.getSn().length())
if (Integer.parseInt(cfgValue) < model.getSn().length()) {
MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位请检查数据", model.getSn(), cfgValue);
List<MesShippingOrderManagementDetail> detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList());
}
//唯一性校验
if (mesShippingSnUniqueService.checkMesShippingSnUnique(model.getOrganizeCode(),model.getSn())) {
throw new ImppBusiException(String.format("【%s】条码唯一性校验数据已存在请检查数据", model.getSn()));
}
List<MesShippingOrderManagementDetail> detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList());
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null;
for (MesShippingOrderManagementDetail managementDetail : detailList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean);
DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean);
if (mesCustomerPartRepository.isExitByHql(packBean)) {
if (checkMesPartShippingGroupDetailRule(model, managementDetail) && mesCustomerPartRepository.isExitByHql(packBean)) {
mesShippingOrderManagementDetail = managementDetail;
break;
}
@ -199,6 +212,9 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(produceSn, userInfo);
produceSnExtService.update(produceSn);
}else{
//记录唯一性校验表
mesShippingSnUniqueService.insertMesShippingSnUnique(orderManagement.getOrganizeCode(),detail.getBarcode(),orderManagement.getShippingCode(),userInfo);
}
}
}
@ -214,4 +230,9 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
shippingOrderManagementDetailRepository.update(item);
}
private Boolean checkMesPartShippingGroupDetailRule(MesSortShippingCheckModel model, MesShippingOrderManagementDetail managementDetail) {
MesPartShippingGroupDetail mesPartShippingGroupDetail = mesPartShippingGroupService.getMesPartShippingGroupDetail(model.getOrganizeCode(), model.getMesPartShippingGroup().getShippingGroupCode(), managementDetail.getPartNo(), managementDetail.getCustPartNo());
return !Objects.isNull(mesPartShippingGroupDetail) && !StringUtil.isEmpty(mesPartShippingGroupDetail.getSnRule()) && ((Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(model.getOrganizeCode(), model.getSn(), mesPartShippingGroupDetail.getSnRule(), mesPartShippingGroupDetail.getSnRule()).get(MesPcnExtConstWords.RESULT));
}
}

@ -0,0 +1,39 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.INumberRulePackAttributeStrategyService;
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Map;
import java.util.Objects;
/**
* @Description : MES-
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/28 16:47
* @Modify:
**/
@Component
public class CustCodeWhqrNumberRuleStrategyService implements INumberRulePackAttributeStrategyService {
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Override
public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) {
Map<String, Object> dataMap = genSerialNoModel.getDataMap();
MesCustomerPart customerPart = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesCustomerPart.class.getSimpleName())) ?
(MesCustomerPart)dataMap.get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(genSerialNoModel.getOrganizeCode(), genSerialNoModel.getPartNo());
if (Objects.isNull(customerPart)) {
MesPcnException.throwMesBusiException("请检查客户零件信息,零件[%s]客户零件关系未维护", genSerialNoModel.getPartNo());
}
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
return genSerialNoModel;
}
}
Loading…
Cancel
Save