|
|
|
@ -17,6 +17,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ResultBean;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@ -104,28 +105,12 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
}
|
|
|
|
|
//校验包装条码信息
|
|
|
|
|
MesPackage mesPackage = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode());
|
|
|
|
|
//校验是否重复扫描
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), "serialNumber", ddlPackBean);
|
|
|
|
|
if (mesPackageDetailRDao.isExitByHql(ddlPackBean)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】已存在该箱,不允许重复扫描", mesPackageDetail.getSerialNumber());
|
|
|
|
|
}
|
|
|
|
|
//校验是否已关闭
|
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
|
MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码");
|
|
|
|
|
}
|
|
|
|
|
//获取包装定义明细
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackage.getPackageSn(), "packCode", ddlPackBean);
|
|
|
|
|
List<MesPackingDefineDetails> defineDetails = mesPackingDefineDetailsRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
if (CollectionUtils.isEmpty(defineDetails)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("箱类别代号【%s】包装定义明细未维护", mesPackage.getPackageSn());
|
|
|
|
|
}
|
|
|
|
|
//校验是否包含
|
|
|
|
|
String partNo = getPartNo(mesPackageDetail, mesPackage, defineDetails);
|
|
|
|
|
//物料信息
|
|
|
|
|
MesPart mesPart = getPart(mesPackageDetail.getOrganizeCode(), partNo);
|
|
|
|
|
//校验条码规则
|
|
|
|
|
MesPart mesPart = getMesPart(mesPackageDetail, mesPackage);
|
|
|
|
|
//包装规格明细
|
|
|
|
|
MesPackageDetail saveMesPackageDetail = getPackageDetail(mesPackageDetail, mesPart);
|
|
|
|
|
if (mesPackageDetail.getIsMemoryBoolean()) {
|
|
|
|
@ -139,7 +124,6 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void saveMesPackageDetails(List<MesPackageDetail> mesPackageDetailList, String userName) {
|
|
|
|
|
MesPackageDetail packageDetail = mesPackageDetailList.iterator().next();
|
|
|
|
@ -147,15 +131,18 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
//校验包装条码信息
|
|
|
|
|
MesPackage mesPackage = getMesPackageAndCheck(packageDetail.getPackageNo(), packageDetail.getOrganizeCode());
|
|
|
|
|
//去掉重复零件条码
|
|
|
|
|
checkSerialNumber(mesPackageDetailList, packageDetail, userName);
|
|
|
|
|
List<MesPackageDetail> saveMesPackageDetailList = new ArrayList<>();
|
|
|
|
|
checkSerialNumber(saveMesPackageDetailList,mesPackageDetailList, packageDetail, userName);
|
|
|
|
|
//保存包装明细
|
|
|
|
|
mesPackageDetailRDao.saveAll(mesPackageDetailList);
|
|
|
|
|
if(!CollectionUtils.isEmpty(saveMesPackageDetailList)){
|
|
|
|
|
mesPackageDetailRDao.saveAll(saveMesPackageDetailList);
|
|
|
|
|
}
|
|
|
|
|
//更新包装表
|
|
|
|
|
updateMesPackage(mesPackage, userName, qty, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void updateMesPackage(MesPackage mesPackage) {
|
|
|
|
|
public ResultBean updateMesPackage(MesPackage mesPackage) {
|
|
|
|
|
String userName = mesPackage.getModifyUser();
|
|
|
|
|
if (Objects.isNull(CommonEnumUtil.TRUE_OR_FALSE.valueOfDescription(mesPackage.getIsSealed()))) {
|
|
|
|
|
MesPcnException.throwMesBusiException("是否封箱不能为空");
|
|
|
|
@ -164,16 +151,24 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
MesPackage mesPackageDb = getMesPackageAndCheck(mesPackage.getPackageNo(), mesPackage.getOrganizeCode());
|
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.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());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", ddlPackBean);
|
|
|
|
|
if (!mesPackageDetailRDao.isExitByHql(ddlPackBean)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】下不存在零件条码,不允许关箱", mesPackage.getPackageNo());
|
|
|
|
|
}
|
|
|
|
|
//关箱
|
|
|
|
|
updateMesPackage(mesPackageDb, mesPackage.getModifyUser(), 0d, true);
|
|
|
|
|
} else if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackage.getIsSealed()) {
|
|
|
|
|
return ResultBean.success("关箱成功");
|
|
|
|
|
} else {
|
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
|
MesPcnException.throwMesBusiException("包装条码【%s】状态不为已关箱,不需要拆箱", mesPackage.getPackageNo());
|
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】状态不为已关箱,不需要拆箱", mesPackage.getPackageNo());
|
|
|
|
|
}
|
|
|
|
|
//拆箱
|
|
|
|
|
unboxing(mesPackage, userName, mesPackageDb);
|
|
|
|
|
return ResultBean.success("拆箱成功");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -182,11 +177,13 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
//查询包装条码信息
|
|
|
|
|
MesPackage mesPackageDb = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode());
|
|
|
|
|
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
|
|
|
|
|
MesPcnException.throwMesBusiException("包装条码【%s】不为已关箱状态,不允许操作替换条码", mesPackageDetail.getPackageNo());
|
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】不为已关箱状态,不允许操作替换条码", mesPackageDetail.getPackageNo());
|
|
|
|
|
}
|
|
|
|
|
//校验是否重复扫描
|
|
|
|
|
List<MesPackageDetail> mesPackageDetails = getMesPackageDetailList(mesPackageDetail);
|
|
|
|
|
|
|
|
|
|
//校验条码是否符合规则
|
|
|
|
|
MesPart mesPart = getMesPart(mesPackageDetail, mesPackageDb);
|
|
|
|
|
boolean exist = false;
|
|
|
|
|
for (MesPackageDetail packageDetail : mesPackageDetails) {
|
|
|
|
|
//替换条码是否已经存在
|
|
|
|
|
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getSerialNumber())) {
|
|
|
|
@ -196,8 +193,14 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getOldSerialNumber())) {
|
|
|
|
|
packageDetail.setSerialNumber(mesPackageDetail.getSerialNumber());
|
|
|
|
|
packageDetail.setOldSerialNumber(mesPackageDetail.getOldSerialNumber());
|
|
|
|
|
packageDetail.setPartNo(mesPart.getPartNo());
|
|
|
|
|
packageDetail.setPartName(mesPart.getPartName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(packageDetail, mesPackageDetail.getModifyUser());
|
|
|
|
|
exist = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!exist){
|
|
|
|
|
MesPcnException.throwMesBusiException("原零件条码【%s】不存在", mesPackageDetail.getOldSerialNumber());
|
|
|
|
|
}
|
|
|
|
|
mesPackageDetailRDao.saveAll(mesPackageDetails);
|
|
|
|
|
}
|
|
|
|
@ -222,6 +225,37 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackage mesPackage) {
|
|
|
|
|
//校验是否重复扫描
|
|
|
|
|
checkSerialNumber(mesPackageDetail);
|
|
|
|
|
//获取包装定义明细
|
|
|
|
|
List<MesPackingDefineDetails> defineDetails = getMesPackingDefineDetails(mesPackageDetail.getOrganizeCode(), mesPackage.getPackageSn());
|
|
|
|
|
//校验是否包含
|
|
|
|
|
String partNo = getPartNo(mesPackageDetail, mesPackage, defineDetails);
|
|
|
|
|
//物料信息
|
|
|
|
|
return getPart(mesPackageDetail.getOrganizeCode(), partNo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkSerialNumber(MesPackageDetail mesPackageDetail) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), "serialNumber", ddlPackBean);
|
|
|
|
|
if (mesPackageDetailRDao.isExitByHql(ddlPackBean)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】已存在该箱,不允许重复扫描", mesPackageDetail.getSerialNumber());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesPackingDefineDetails> getMesPackingDefineDetails(String organizeCode, String packCode) {
|
|
|
|
|
DdlPackBean ddlPackBean;
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(packCode, "packCode", 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);
|
|
|
|
@ -241,20 +275,21 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
private MesPackage getMesPackageAndCheck(String packageNo, String organizeCode) {
|
|
|
|
|
MesPackage mesPackageDb = getMesPackage(organizeCode, packageNo);
|
|
|
|
|
if (Objects.isNull(mesPackageDb)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("包装条码【%s】信息不存在", packageNo);
|
|
|
|
|
MesPcnException.throwMesBusiException("箱条码【%s】信息不存在", packageNo);
|
|
|
|
|
}
|
|
|
|
|
return mesPackageDb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkSerialNumber(List<MesPackageDetail> mesPackageDetailList, MesPackageDetail packageDetail, String userName) {
|
|
|
|
|
private void checkSerialNumber(List<MesPackageDetail> saveMesPackageDetailList,List<MesPackageDetail> mesPackageDetailList, MesPackageDetail packageDetail, String userName) {
|
|
|
|
|
List<MesPackageDetail> mesPackageDetails = getMesPackageDetailList(packageDetail.getOrganizeCode(), packageDetail.getPackageNo());
|
|
|
|
|
if (!CollectionUtils.isEmpty(mesPackageDetails)) {
|
|
|
|
|
List<String> serialNumberList = mesPackageDetails.stream().map(MesPackageDetail::getSerialNumber).collect(Collectors.toList());
|
|
|
|
|
for (MesPackageDetail mesPackageDetail : mesPackageDetailList) {
|
|
|
|
|
if (serialNumberList.contains(mesPackageDetail.getSerialNumber())) {
|
|
|
|
|
mesPackageDetailList.remove(mesPackageDetail);
|
|
|
|
|
}
|
|
|
|
|
ConvertBean.serviceModelInitialize(mesPackageDetail, userName);
|
|
|
|
|
if (!serialNumberList.contains(mesPackageDetail.getSerialNumber())) {
|
|
|
|
|
//校验零件规则
|
|
|
|
|
saveMesPackageDetailList.add(mesPackageDetail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -319,7 +354,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (Objects.isNull(partNo)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据", mesPackage.getSerialNumber());
|
|
|
|
|
MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据", mesPackageDetail.getSerialNumber());
|
|
|
|
|
}
|
|
|
|
|
return partNo;
|
|
|
|
|
}
|
|
|
|
|