Merge branch 'dev-temp-caslte-241218-44247' into dev-temp-workorder-report

tags/yfai-pcn-ext-v2.5
王杰 5 months ago
commit f95fbce203

@ -11,6 +11,8 @@ import java.util.List;
import java.util.Map;
public interface IMesProduceSnExtService {
@ApiOperation(value = "装箱防错获取正常的条码")
MesProduceSn getProduceSnForBox(String produceSn ,String PartNo,String organizeCode);
@ApiOperation(value = "根据零件条码查询零件条码信息")
List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList);

@ -121,7 +121,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
if (StringUtils.isEmpty(packingDefine.getSplitChar())) {
MesPcnException.throwMesBusiException("箱类别代号[%s]分隔符不能为空,请检查数据!", packingDefine.getPackCode());
}
String[] split = mesPackageDetail.getPackageNo().split("\\\\" + packingDefine.getSplitChar());
String[] split = mesPackageDetail.getPackageNo().split("\\" + packingDefine.getSplitChar());
//获取序列号
checkSerial(packingDefine, split);
//工厂校验
@ -147,7 +147,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码,请检查数据!");
}
//校验条码规则
MesPart mesPart = getMesPart(mesPackageDetail, mesPackage, packingDefine);
MesPart mesPart = getMesPartNew(mesPackageDetail, mesPackage, packingDefine);
//包装规格明细
MesPackageDetail saveMesPackageDetail = getPackageDetail(mesPackageDetail, mesPart);
if (mesPackageDetail.getIsMemoryBoolean()) {
@ -232,7 +232,9 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
//校验是否重复扫描
List<MesPackageDetail> mesPackageDetails = getMesPackageDetailList(mesPackageDetail);
//校验条码是否符合规则
MesPart mesPart = getMesPart(mesPackageDetail, mesPackageDb, null);
//获取包装定义
MesPackingDefine packingDefine = getMesPackingDefine(mesPackageDetail);
MesPart mesPart = getMesPartNew(mesPackageDetail, mesPackageDb, packingDefine);
boolean exist = false;
for (MesPackageDetail packageDetail : mesPackageDetails) {
//替换条码是否已经存在
@ -288,6 +290,15 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
return getPart(mesPackageDetail.getOrganizeCode(), partNo);
}
private MesPart getMesPartNew(MesPackageDetail mesPackageDetail, MesPackage mesPackage, MesPackingDefine packingDefine) {
//校验是否重复扫描
checkSerialNumber(mesPackageDetail);
//校验条码信息
String partNo = checkSnNew(mesPackageDetail, packingDefine, mesPackage);
//物料信息
return getPart(mesPackageDetail.getOrganizeCode(), partNo);
}
private void checkSerialNumber(MesPackageDetail mesPackageDetail) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), MesPcnExtConstWords.SERIAL_NUMBER, ddlPackBean);
@ -306,6 +317,17 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
return defineDetails;
}
private List<MesPackingDefineDetails> getMesPackingDefineDetailsNew(String organizeCode, String packCode,String partNo) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(packCode, "packCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
List<MesPackingDefineDetails> defineDetails = mesPackingDefineDetailsRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(defineDetails)) {
MesPcnException.throwMesBusiException("箱类别代号【%s】包装定义明细未维护请检查数据", packCode);
}
return defineDetails;
}
private void unboxing(MesPackage mesPackage, String userName, MesPackage mesPackageDb) {
//更新包装表
mesPackageDb.setQty(0d);
@ -455,6 +477,100 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
return partNo;
}
/**
* 2024/12/19 10:50 by castle fix bug 44247
*
* 1.
* 2. &
*
* 2.1
*
* 2.2.1 ---
*
* 2.2.2 ( qcStatus=10 15 snStatus = 10 20)
*
* 2.2
*
*
* @param mesPackageDetail
* @param packingDefine
* @param mesPackage
* @return
*/
private String checkSnNew(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine,MesPackage mesPackage ) {
String partNo = mesPackage.getPartNo();
//1.查询包装明细是否包含此零件
List<MesPackingDefineDetails> defineDetails = getMesPackingDefineDetailsNew(mesPackageDetail.getOrganizeCode(), mesPackage.getPackageSn(), partNo);
if (defineDetails.isEmpty()) {
MesPcnException.throwMesBusiException("箱类别代号【%s】零件号【%s】未维护请检查数据", mesPackage.getPackageSn(), partNo);
}
MesPackingDefineDetails mesPackingDefineDetails = defineDetails.get(0);
if (StringUtils.isEmpty(mesPackingDefineDetails.getPackageBarcodeRule())){
//是自制件
MesProduceSn produceSn = mesProduceSnExtService.getProduceSnForBox(mesPackageDetail.getSerialNumber(), partNo, mesPackageDetail.getOrganizeCode());
if (produceSn == null){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】在条码表不存在请检查数据", mesPackage.getPackageSn(), partNo);
}
//QC 检查
if (produceSn.getQcStatus() == MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,QC可疑状态不能包装此零件", mesPackage.getPackageSn(), partNo);
}
if (produceSn.getQcStatus() == MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,QC为报废状态不能包装此零件", mesPackage.getPackageSn(), partNo);
}
//SN 条码状态
if (produceSn.getSnStatus() == MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,条码状态为未知,不能包装此零件!", mesPackage.getPackageSn(), partNo);
}
if (produceSn.getSnStatus() == MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,条码状态为加工中,不能包装此零件!", mesPackage.getPackageSn(), partNo);
}
if (produceSn.getSnStatus() == MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,条码状态为已拆解,不能包装此零件!", mesPackage.getPackageSn(), partNo);
}
if (produceSn.getSnStatus() == MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,条码状态为已装配,不能包装此零件!", mesPackage.getPackageSn(), partNo);
}
if (produceSn.getSnStatus() == MesExtEnumUtil.PRODUCE_SN_STATUS.CHECKED.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,条码状态为已校验,不能包装此零件!", mesPackage.getPackageSn(), partNo);
}
if (produceSn.getSnStatus() == MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,条码状态为已发运,不能包装此零件!", mesPackage.getPackageSn(), partNo);
}
if (produceSn.getSnStatus() == MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_DISASSEMBLY.getValue()){
MesPcnException.throwMesBusiException("扫描条码【%s】零件号【%s】,条码状态为已总成拆解,不能包装此零件!", mesPackage.getPackageSn(), partNo);
}
}else{
//外协件
String packageBarcodeRule = mesPackingDefineDetails.getPackageBarcodeRule().replace("*", "");
boolean checkResult = mesPackageDetail.getSerialNumber().contains(packageBarcodeRule);
if (!checkResult){
MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据请检查数据", mesPackageDetail.getSerialNumber());
}
}
//工艺校验
if(!Objects.isNull(packingDefine) && !Objects.isNull(packingDefine.getCheckCraftFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packingDefine.getCheckCraftFlag()){
//查询加工记录
List<MesProductionRecord> productionRecordList = mesProductionRecordService.findProductionRecordList(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getSerialNumber());
if(CollectionUtils.isEmpty(productionRecordList)){
MesPcnException.throwMesBusiException("条码【%s】校验装箱防错对应工艺失败加工记录信息不存在请检查数据", mesPackageDetail.getSerialNumber());
}
if(StringUtils.isEmpty(packingDefine.getCraft())){
MesPcnException.throwMesBusiException("条码【%s】校验装箱防错对应工艺为空请检查数据", mesPackageDetail.getSerialNumber());
}
//校验条码是否经过该工艺
Optional<MesProductionRecord> productionRecordOptional = productionRecordList.stream().filter(t -> !StringUtils.isEmpty(t.getCraftCode()) && packingDefine.getCraft().equals(t.getCraftCode())).findFirst();
if(!productionRecordOptional.isPresent()){
MesPcnException.throwMesBusiException("条码【%s】校验装箱防错对应工艺【%s】失败请检查数据", mesPackageDetail.getSerialNumber(),packingDefine.getCraft());
}
}
return partNo;
}
private String getPartNo(MesPackageDetail mesPackageDetail, MesPackage mesPackage, List<MesPackingDefineDetails> defineDetails) {
String packageBarcodeRule;
String partNo = null;

@ -35,6 +35,15 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
@Autowired
private MesQueueOrderRepository queueOrderRepository;
@Override
public MesProduceSn getProduceSnForBox(String produceSn, String partNo,String organizeCode) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(produceSn,"productSn",ddlPackBean);
DdlPreparedPack.getStringEqualPack(partNo,"partNo",ddlPackBean);
List<MesProduceSn> produceSnList = produceSnRepository.findByHqlWhere(ddlPackBean);
return produceSnList.isEmpty() ? null : produceSnList.get(0);
}
//根据零件条码查询零件条码信息
@Override
public List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList) {

Loading…
Cancel
Save