|
|
@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesBoxingErrorProofingService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesBoxingErrorProofingService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
|
|
|
|
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.IMesProduceSnExtService;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
@ -26,10 +27,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -70,6 +68,9 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private IMesProduceSnExtService mesProduceSnExtService;
|
|
|
|
private IMesProduceSnExtService mesProduceSnExtService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private IMesProductionRecordService mesProductionRecordService;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public ListPager<MesPackageDetail> queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager) {
|
|
|
|
public ListPager<MesPackageDetail> queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager) {
|
|
|
|
|
|
|
|
|
|
|
@ -82,6 +83,8 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public MesPackage doScan(MesPackageDetail mesPackageDetail) {
|
|
|
|
public MesPackage doScan(MesPackageDetail mesPackageDetail) {
|
|
|
|
|
|
|
|
//获取包装定义
|
|
|
|
|
|
|
|
MesPackingDefine packingDefine = getMesPackingDefine(mesPackageDetail);
|
|
|
|
//扫描的是包装
|
|
|
|
//扫描的是包装
|
|
|
|
if (mesPackageDetail.getIsScanPackageBoolean()) {
|
|
|
|
if (mesPackageDetail.getIsScanPackageBoolean()) {
|
|
|
|
checkNotNull(mesPackageDetail);
|
|
|
|
checkNotNull(mesPackageDetail);
|
|
|
@ -92,8 +95,6 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
MesPart mesPart;
|
|
|
|
MesPart mesPart;
|
|
|
|
Double qty;
|
|
|
|
Double qty;
|
|
|
|
String packageOneCode = "";
|
|
|
|
String packageOneCode = "";
|
|
|
|
//获取包装定义
|
|
|
|
|
|
|
|
MesPackingDefine packingDefine = getMesPackingDefine(mesPackageDetail);
|
|
|
|
|
|
|
|
//WMS打印的条码信息
|
|
|
|
//WMS打印的条码信息
|
|
|
|
MesPackageSn mesPackageSn = getMesPackageSn(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getPackageNo());
|
|
|
|
MesPackageSn mesPackageSn = getMesPackageSn(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getPackageNo());
|
|
|
|
if(!Objects.isNull(mesPackageSn)){
|
|
|
|
if(!Objects.isNull(mesPackageSn)){
|
|
|
@ -103,7 +104,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
}else{
|
|
|
|
}else{
|
|
|
|
//解析获取信息保存
|
|
|
|
//解析获取信息保存
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getSplitChar())) {
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getSplitChar())) {
|
|
|
|
MesPcnException.throwMesBusiException("箱类别代号【%s】分隔符不能为空", packingDefine.getPackCode());
|
|
|
|
MesPcnException.throwMesBusiException("箱类别代号【%s】分隔符不能为空,请检查数据!", packingDefine.getPackCode());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
String[] split = mesPackageDetail.getPackageNo().split("\\" + packingDefine.getSplitChar());
|
|
|
|
String[] split = mesPackageDetail.getPackageNo().split("\\" + packingDefine.getSplitChar());
|
|
|
|
//获取序列号
|
|
|
|
//获取序列号
|
|
|
@ -122,16 +123,16 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
checkNotNull(mesPackageDetail);
|
|
|
|
checkNotNull(mesPackageDetail);
|
|
|
|
//校验过程条码是否存在
|
|
|
|
//校验过程条码是否存在
|
|
|
|
if (StringUtils.isEmpty(mesPackageDetail.getSerialNumber())) {
|
|
|
|
if (StringUtils.isEmpty(mesPackageDetail.getSerialNumber())) {
|
|
|
|
MesPcnException.throwMesBusiException("过程条码不允许为空");
|
|
|
|
MesPcnException.throwMesBusiException("过程条码不允许为空,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//校验包装条码信息
|
|
|
|
//校验包装条码信息
|
|
|
|
MesPackage mesPackage = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode());
|
|
|
|
MesPackage mesPackage = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode());
|
|
|
|
//校验是否已关闭
|
|
|
|
//校验是否已关闭
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码");
|
|
|
|
MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//校验条码规则
|
|
|
|
//校验条码规则
|
|
|
|
MesPart mesPart = getMesPart(mesPackageDetail, mesPackage);
|
|
|
|
MesPart mesPart = getMesPart(mesPackageDetail, mesPackage, packingDefine);
|
|
|
|
//包装规格明细
|
|
|
|
//包装规格明细
|
|
|
|
MesPackageDetail saveMesPackageDetail = getPackageDetail(mesPackageDetail, mesPart);
|
|
|
|
MesPackageDetail saveMesPackageDetail = getPackageDetail(mesPackageDetail, mesPart);
|
|
|
|
if (mesPackageDetail.getIsMemoryBoolean()) {
|
|
|
|
if (mesPackageDetail.getIsMemoryBoolean()) {
|
|
|
@ -152,7 +153,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
MesPackage mesPackage = getMesPackageAndCheck(packageDetail.getPackageNo(), packageDetail.getOrganizeCode());
|
|
|
|
MesPackage mesPackage = getMesPackageAndCheck(packageDetail.getPackageNo(), packageDetail.getOrganizeCode());
|
|
|
|
//校验是否已关闭
|
|
|
|
//校验是否已关闭
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码");
|
|
|
|
MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//去掉重复零件条码
|
|
|
|
//去掉重复零件条码
|
|
|
|
List<MesPackageDetail> saveMesPackageDetailList = new ArrayList<>();
|
|
|
|
List<MesPackageDetail> saveMesPackageDetailList = new ArrayList<>();
|
|
|
@ -171,26 +172,26 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
public ResultBean updateMesPackage(MesPackage mesPackage) {
|
|
|
|
public ResultBean updateMesPackage(MesPackage mesPackage) {
|
|
|
|
String userName = mesPackage.getModifyUser();
|
|
|
|
String userName = mesPackage.getModifyUser();
|
|
|
|
if (Objects.isNull(CommonEnumUtil.TRUE_OR_FALSE.valueOfDescription(mesPackage.getIsSealed()))) {
|
|
|
|
if (Objects.isNull(CommonEnumUtil.TRUE_OR_FALSE.valueOfDescription(mesPackage.getIsSealed()))) {
|
|
|
|
MesPcnException.throwMesBusiException("是否封箱不能为空");
|
|
|
|
MesPcnException.throwMesBusiException("是否封箱不能为空,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//查询包装条码信息
|
|
|
|
//查询包装条码信息
|
|
|
|
MesPackage mesPackageDb = getMesPackageAndCheck(mesPackage.getPackageNo(), mesPackage.getOrganizeCode());
|
|
|
|
MesPackage mesPackageDb = getMesPackageAndCheck(mesPackage.getPackageNo(), mesPackage.getOrganizeCode());
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】状态为已关箱,请勿重复操作", mesPackage.getPackageNo());
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】状态为已关箱,请勿重复操作,请检查数据!", mesPackage.getPackageNo());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//校验是否存在包装明细
|
|
|
|
//校验是否存在包装明细
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackage.getOrganizeCode());
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackage.getOrganizeCode());
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", ddlPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", ddlPackBean);
|
|
|
|
if (!mesPackageDetailRDao.isExitByHql(ddlPackBean)) {
|
|
|
|
if (!mesPackageDetailRDao.isExitByHql(ddlPackBean)) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】下不存在零件条码,不允许关箱", mesPackage.getPackageNo());
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】下不存在零件条码,不允许关箱,请检查数据!", mesPackage.getPackageNo());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//关箱
|
|
|
|
//关箱
|
|
|
|
updateMesPackage(mesPackageDb, mesPackage.getModifyUser(), 0d, true);
|
|
|
|
updateMesPackage(mesPackageDb, mesPackage.getModifyUser(), 0d, true);
|
|
|
|
return ResultBean.success("关箱成功");
|
|
|
|
return ResultBean.success("关箱成功");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】状态不为已关箱,不需要拆箱", mesPackage.getPackageNo());
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】状态不为已关箱,不需要拆箱,请检查数据!", mesPackage.getPackageNo());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//拆箱
|
|
|
|
//拆箱
|
|
|
|
unboxing(mesPackage, userName, mesPackageDb);
|
|
|
|
unboxing(mesPackage, userName, mesPackageDb);
|
|
|
@ -203,17 +204,17 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
//查询包装条码信息
|
|
|
|
//查询包装条码信息
|
|
|
|
MesPackage mesPackageDb = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode());
|
|
|
|
MesPackage mesPackageDb = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode());
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】不为已关箱状态,不允许操作替换条码", mesPackageDetail.getPackageNo());
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】不为已关箱状态,不允许操作替换条码,请检查数据!", mesPackageDetail.getPackageNo());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//校验是否重复扫描
|
|
|
|
//校验是否重复扫描
|
|
|
|
List<MesPackageDetail> mesPackageDetails = getMesPackageDetailList(mesPackageDetail);
|
|
|
|
List<MesPackageDetail> mesPackageDetails = getMesPackageDetailList(mesPackageDetail);
|
|
|
|
//校验条码是否符合规则
|
|
|
|
//校验条码是否符合规则
|
|
|
|
MesPart mesPart = getMesPart(mesPackageDetail, mesPackageDb);
|
|
|
|
MesPart mesPart = getMesPart(mesPackageDetail, mesPackageDb, null);
|
|
|
|
boolean exist = false;
|
|
|
|
boolean exist = false;
|
|
|
|
for (MesPackageDetail packageDetail : mesPackageDetails) {
|
|
|
|
for (MesPackageDetail packageDetail : mesPackageDetails) {
|
|
|
|
//替换条码是否已经存在
|
|
|
|
//替换条码是否已经存在
|
|
|
|
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getSerialNumber())) {
|
|
|
|
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getSerialNumber())) {
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】已存在存在", mesPackageDetail.getSerialNumber());
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】已存在存在,请检查数据!", mesPackageDetail.getSerialNumber());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//替换条码
|
|
|
|
//替换条码
|
|
|
|
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getOldSerialNumber())) {
|
|
|
|
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getOldSerialNumber())) {
|
|
|
@ -226,7 +227,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(!exist){
|
|
|
|
if(!exist){
|
|
|
|
MesPcnException.throwMesBusiException("原零件条码【%s】不存在", mesPackageDetail.getOldSerialNumber());
|
|
|
|
MesPcnException.throwMesBusiException("原零件条码【%s】不存在,请检查数据!", mesPackageDetail.getOldSerialNumber());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mesPackageDetailRDao.saveAll(mesPackageDetails);
|
|
|
|
mesPackageDetailRDao.saveAll(mesPackageDetails);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -238,7 +239,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
DdlPreparedPack.getInPackArray(serialNumberList, "serialNumber", ddlPackBean);
|
|
|
|
DdlPreparedPack.getInPackArray(serialNumberList, "serialNumber", ddlPackBean);
|
|
|
|
List<MesPackageDetail> mesPackageDetails = mesPackageDetailRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
List<MesPackageDetail> mesPackageDetails = mesPackageDetailRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
if (CollectionUtils.isEmpty(mesPackageDetails)) {
|
|
|
|
if (CollectionUtils.isEmpty(mesPackageDetails)) {
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】不存在", mesPackageDetail.getOldSerialNumber());
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】不存在,请检查数据!", mesPackageDetail.getOldSerialNumber());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return mesPackageDetails;
|
|
|
|
return mesPackageDetails;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -247,11 +248,11 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
public void unLock(String organizeCode, String pwd) {
|
|
|
|
public void unLock(String organizeCode, String pwd) {
|
|
|
|
String cfgValue = configService.getCfgValue(organizeCode, MesCommonConstant.BOXING_ERROR_PROOFING_PWD);
|
|
|
|
String cfgValue = configService.getCfgValue(organizeCode, MesCommonConstant.BOXING_ERROR_PROOFING_PWD);
|
|
|
|
if (!Objects.equals(cfgValue, pwd)) {
|
|
|
|
if (!Objects.equals(cfgValue, pwd)) {
|
|
|
|
MesPcnException.throwMesBusiException("解锁失败密码错误");
|
|
|
|
MesPcnException.throwMesBusiException("解锁失败密码错误,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackage mesPackage) {
|
|
|
|
private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackage mesPackage, MesPackingDefine packingDefine) {
|
|
|
|
//校验是否重复扫描
|
|
|
|
//校验是否重复扫描
|
|
|
|
checkSerialNumber(mesPackageDetail);
|
|
|
|
checkSerialNumber(mesPackageDetail);
|
|
|
|
//获取包装定义明细
|
|
|
|
//获取包装定义明细
|
|
|
@ -259,7 +260,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
//校验是否包含
|
|
|
|
//校验是否包含
|
|
|
|
String partNo = getPartNo(mesPackageDetail, mesPackage, defineDetails);
|
|
|
|
String partNo = getPartNo(mesPackageDetail, mesPackage, defineDetails);
|
|
|
|
//校验条码信息
|
|
|
|
//校验条码信息
|
|
|
|
checkSnStatus(mesPackageDetail);
|
|
|
|
checkSn(mesPackageDetail, packingDefine);
|
|
|
|
//物料信息
|
|
|
|
//物料信息
|
|
|
|
return getPart(mesPackageDetail.getOrganizeCode(), partNo);
|
|
|
|
return getPart(mesPackageDetail.getOrganizeCode(), partNo);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -269,7 +270,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), "serialNumber", ddlPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), "serialNumber", ddlPackBean);
|
|
|
|
if (mesPackageDetailRDao.isExitByHql(ddlPackBean)) {
|
|
|
|
if (mesPackageDetailRDao.isExitByHql(ddlPackBean)) {
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】已存在该箱,不允许重复扫描", mesPackageDetail.getSerialNumber());
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】已存在该箱,不允许重复扫描,请检查数据!", mesPackageDetail.getSerialNumber());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -278,7 +279,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
DdlPreparedPack.getStringEqualPack(packCode, "packCode", ddlPackBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(packCode, "packCode", ddlPackBean);
|
|
|
|
List<MesPackingDefineDetails> defineDetails = mesPackingDefineDetailsRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
List<MesPackingDefineDetails> defineDetails = mesPackingDefineDetailsRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
if (CollectionUtils.isEmpty(defineDetails)) {
|
|
|
|
if (CollectionUtils.isEmpty(defineDetails)) {
|
|
|
|
MesPcnException.throwMesBusiException("箱类别代号【%s】包装定义明细未维护", packCode);
|
|
|
|
MesPcnException.throwMesBusiException("箱类别代号【%s】包装定义明细未维护,请检查数据!", packCode);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return defineDetails;
|
|
|
|
return defineDetails;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -302,7 +303,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
private MesPackage getMesPackageAndCheck(String packageNo, String organizeCode) {
|
|
|
|
private MesPackage getMesPackageAndCheck(String packageNo, String organizeCode) {
|
|
|
|
MesPackage mesPackageDb = getMesPackage(organizeCode, packageNo);
|
|
|
|
MesPackage mesPackageDb = getMesPackage(organizeCode, packageNo);
|
|
|
|
if (Objects.isNull(mesPackageDb)) {
|
|
|
|
if (Objects.isNull(mesPackageDb)) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】信息不存在", packageNo);
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】信息不存在,请检查数据!", packageNo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return mesPackageDb;
|
|
|
|
return mesPackageDb;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -367,12 +368,28 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
return saveMesPackageDetail;
|
|
|
|
return saveMesPackageDetail;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void checkSnStatus(MesPackageDetail mesPackageDetail) {
|
|
|
|
private void checkSn(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine) {
|
|
|
|
List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getSerialNumber());
|
|
|
|
List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getSerialNumber());
|
|
|
|
if (!CollectionUtils.isEmpty(produceSnList)) {
|
|
|
|
if (!CollectionUtils.isEmpty(produceSnList)) {
|
|
|
|
MesProduceSn nextMesProduceSn = produceSnList.stream().sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()).iterator().next();
|
|
|
|
MesProduceSn nextMesProduceSn = produceSnList.stream().sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()).iterator().next();
|
|
|
|
if (!MesExtEnumUtil.PRODUCE_SN_STATUS.checkAllowBoxingErrorProofing(nextMesProduceSn.getSnStatus()) || !MesExtEnumUtil.PRODUCE_QC_STATUS.checkAllowBoxingErrorProofing(nextMesProduceSn.getQcStatus())) {
|
|
|
|
if (!MesExtEnumUtil.PRODUCE_SN_STATUS.checkAllowBoxingErrorProofing(nextMesProduceSn.getSnStatus()) || !MesExtEnumUtil.PRODUCE_QC_STATUS.checkAllowBoxingErrorProofing(nextMesProduceSn.getQcStatus())) {
|
|
|
|
MesPcnException.throwMesBusiException("条码【%s】状态【%s】质量状态【%s】不允许操作装箱防错", mesPackageDetail.getSerialNumber(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(nextMesProduceSn.getSnStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(nextMesProduceSn.getQcStatus()));
|
|
|
|
MesPcnException.throwMesBusiException("条码【%s】状态【%s】质量状态【%s】不允许操作装箱防错,请检查数据!", mesPackageDetail.getSerialNumber(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(nextMesProduceSn.getSnStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(nextMesProduceSn.getQcStatus()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//查询加工记录
|
|
|
|
|
|
|
|
List<MesProductionRecord> productionRecordList = mesProductionRecordService.findProductionRecordList(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getSerialNumber());
|
|
|
|
|
|
|
|
//工艺校验
|
|
|
|
|
|
|
|
if(!Objects.isNull(packingDefine) && !Objects.isNull(packingDefine.getCheckCraftFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packingDefine.getCheckCraftFlag()){
|
|
|
|
|
|
|
|
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());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -383,7 +400,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
for (MesPackingDefineDetails defineDetail : defineDetails) {
|
|
|
|
for (MesPackingDefineDetails defineDetail : defineDetails) {
|
|
|
|
//条码规则为空
|
|
|
|
//条码规则为空
|
|
|
|
if (StringUtils.isEmpty(defineDetail.getPackageBarcodeRule())) {
|
|
|
|
if (StringUtils.isEmpty(defineDetail.getPackageBarcodeRule())) {
|
|
|
|
MesPcnException.throwMesBusiException("箱类别代号【%s】零件号【%s】条码规则未维护", mesPackage.getPackageSn(), defineDetail.getPartNo());
|
|
|
|
MesPcnException.throwMesBusiException("箱类别代号【%s】零件号【%s】条码规则未维护,请检查数据!", mesPackage.getPackageSn(), defineDetail.getPartNo());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
packageBarcodeRule = defineDetail.getPackageBarcodeRule().replace("*", "");
|
|
|
|
packageBarcodeRule = defineDetail.getPackageBarcodeRule().replace("*", "");
|
|
|
|
//包含箱条码
|
|
|
|
//包含箱条码
|
|
|
@ -393,24 +410,24 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (Objects.isNull(partNo)) {
|
|
|
|
if (Objects.isNull(partNo)) {
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据", mesPackageDetail.getSerialNumber());
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据,请检查数据!", mesPackageDetail.getSerialNumber());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return partNo;
|
|
|
|
return partNo;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void checkNotNull(MesPackageDetail mesPackageDetail) {
|
|
|
|
private void checkNotNull(MesPackageDetail mesPackageDetail) {
|
|
|
|
if (StringUtils.isEmpty(mesPackageDetail.getPackageNo())) {
|
|
|
|
if (StringUtils.isEmpty(mesPackageDetail.getPackageNo())) {
|
|
|
|
MesPcnException.throwMesBusiException("包装编码不能为空");
|
|
|
|
MesPcnException.throwMesBusiException("包装编码不能为空,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (StringUtils.isEmpty(mesPackageDetail.getScanType())) {
|
|
|
|
if (StringUtils.isEmpty(mesPackageDetail.getScanType())) {
|
|
|
|
MesPcnException.throwMesBusiException("客户条码规则不能为空");
|
|
|
|
MesPcnException.throwMesBusiException("客户条码规则不能为空,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void checkSerial(MesPackingDefine packingDefine, String[] split) {
|
|
|
|
private void checkSerial(MesPackingDefine packingDefine, String[] split) {
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getSerialIdIndex()) || packingDefine.getSerialIdIndex() > split.length
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getSerialIdIndex()) || packingDefine.getSerialIdIndex() > split.length
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getSerialIdIndex() - 1])) {
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getSerialIdIndex() - 1])) {
|
|
|
|
MesPcnException.throwMesBusiException("序列号所在位置不存在");
|
|
|
|
MesPcnException.throwMesBusiException("序列号所在位置不存在,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
String serialNo = split[packingDefine.getSerialIdIndex() - 1];
|
|
|
|
String serialNo = split[packingDefine.getSerialIdIndex() - 1];
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -418,18 +435,18 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
private void checkOrganizeCode(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) {
|
|
|
|
private void checkOrganizeCode(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) {
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getOrganizeIndex()) || packingDefine.getOrganizeIndex() > split.length
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getOrganizeIndex()) || packingDefine.getOrganizeIndex() > split.length
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getOrganizeIndex() - 1])) {
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getOrganizeIndex() - 1])) {
|
|
|
|
MesPcnException.throwMesBusiException("工厂所在位置不存在");
|
|
|
|
MesPcnException.throwMesBusiException("工厂所在位置不存在,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
String organizeCode = split[packingDefine.getOrganizeIndex() - 1];
|
|
|
|
String organizeCode = split[packingDefine.getOrganizeIndex() - 1];
|
|
|
|
if (!Objects.equals(organizeCode, mesPackageDetail.getOrganizeCode())) {
|
|
|
|
if (!Objects.equals(organizeCode, mesPackageDetail.getOrganizeCode())) {
|
|
|
|
MesPcnException.throwMesBusiException("箱条码工厂【%s】和当前工厂【%s】不匹配", organizeCode, mesPackageDetail.getOrganizeCode());
|
|
|
|
MesPcnException.throwMesBusiException("箱条码工厂【%s】和当前工厂【%s】不匹配,请检查数据!", organizeCode, mesPackageDetail.getOrganizeCode());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) {
|
|
|
|
private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) {
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getPartNoIndex()) || packingDefine.getPartNoIndex() > split.length
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getPartNoIndex()) || packingDefine.getPartNoIndex() > split.length
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getPartNoIndex() - 1])) {
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getPartNoIndex() - 1])) {
|
|
|
|
MesPcnException.throwMesBusiException("物料号所在位置不存在");
|
|
|
|
MesPcnException.throwMesBusiException("物料号所在位置不存在,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return getPart(mesPackageDetail.getOrganizeCode(), split[packingDefine.getPartNoIndex() - 1]);
|
|
|
|
return getPart(mesPackageDetail.getOrganizeCode(), split[packingDefine.getPartNoIndex() - 1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -439,7 +456,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
|
|
|
|
MesPart mesPart = partRDao.getByProperty(packBean);
|
|
|
|
MesPart mesPart = partRDao.getByProperty(packBean);
|
|
|
|
if (Objects.isNull(mesPart)) {
|
|
|
|
if (Objects.isNull(mesPart)) {
|
|
|
|
MesPcnException.throwMesBusiException("物料【%s】信息不存在", partNo);
|
|
|
|
MesPcnException.throwMesBusiException("物料【%s】信息不存在,请检查数据!", partNo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return mesPart;
|
|
|
|
return mesPart;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -447,11 +464,11 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
private Double getQty(MesPackingDefine packingDefine, String[] split) {
|
|
|
|
private Double getQty(MesPackingDefine packingDefine, String[] split) {
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getQtyIndex()) || packingDefine.getQtyIndex() > split.length
|
|
|
|
if (StringUtils.isEmpty(packingDefine.getQtyIndex()) || packingDefine.getQtyIndex() > split.length
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getQtyIndex() - 1])) {
|
|
|
|
|| StringUtils.isEmpty(split[packingDefine.getQtyIndex() - 1])) {
|
|
|
|
MesPcnException.throwMesBusiException("数量所在位置不存在");
|
|
|
|
MesPcnException.throwMesBusiException("数量所在位置不存在,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//校验是否数字
|
|
|
|
//校验是否数字
|
|
|
|
if (!CheckTool.isNumber(split[packingDefine.getQtyIndex() - 1])) {
|
|
|
|
if (!CheckTool.isNumber(split[packingDefine.getQtyIndex() - 1])) {
|
|
|
|
MesPcnException.throwMesBusiException("数量所在位置不为数字类型");
|
|
|
|
MesPcnException.throwMesBusiException("数量所在位置不为数字类型,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return Double.parseDouble(split[packingDefine.getQtyIndex() - 1]);
|
|
|
|
return Double.parseDouble(split[packingDefine.getQtyIndex() - 1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -490,7 +507,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getScanType(), "scanType", packBean);
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getScanType(), "scanType", packBean);
|
|
|
|
MesPackingDefine packingDefine = mesPackingDefineRDao.getByProperty(packBean);
|
|
|
|
MesPackingDefine packingDefine = mesPackingDefineRDao.getByProperty(packBean);
|
|
|
|
if (Objects.isNull(packingDefine)) {
|
|
|
|
if (Objects.isNull(packingDefine)) {
|
|
|
|
MesPcnException.throwFlowException("客户条码规则在包装定义界面未维护");
|
|
|
|
MesPcnException.throwFlowException("客户条码规则在包装定义界面未维护,请检查数据!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return packingDefine;
|
|
|
|
return packingDefine;
|
|
|
|
}
|
|
|
|
}
|
|
|
|