装箱防错功能开发

tags/yfai-pcn-ext-v1.0
jun 11 months ago
parent 0338eb1752
commit 104bd117bb

@ -0,0 +1,38 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description : MES
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/7 14:34
* @Modify:
**/
public interface IMesBoxingErrorProofingService {
@ApiOperation(value = "查询包装明细")
ListPager<MesPackageDetail> queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager);
@ApiOperation(value = "扫描")
MesPackage doScan(MesPackageDetail mesPackageDetail);
@ApiOperation(value = "保存包装明细")
void saveMesPackageDetails(List<MesPackageDetail> mesPackage, String userName);
@ApiOperation(value = "更新包装表")
void updateMesPackage(MesPackage mesPackage);
@ApiOperation(value = "更新包装明细")
void updateMesPackageDetails(MesPackageDetail mesPackage);
@ApiOperation(value = "解锁")
void unLock(String organizeCode, String userName, String pwd);
}

@ -0,0 +1,145 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesBoxingErrorProofingService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@Api(tags = "装箱防错")
@RequestMapping(MesCommonConstant.MES_YANFEN + "/boxing-error-proofing")
@Slf4j
public class MesBoxingErrorProofingController {
@Autowired
private IMesBoxingErrorProofingService mesBoxingErrorProofingService;
@GetMapping("/mes-package-details/query")
@ApiOperation(value = "查询包装明细")
public ResultBean queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager) {
try {
ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空");
mesPackage.setOrganizeCode(AuthUtil.getOrganizeCode());
ListPager<MesPackageDetail> partInspectionListPager = mesBoxingErrorProofingService.queryMesPackageDetailByPager(mesPackage, pager);
return ResultBean.success("查询成功").setListPager(partInspectionListPager);
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/do-scan")
@ApiOperation(value = "扫描")
public ResultBean doScan(MesPackageDetail mesPackageDetail) {
try {
ValidatorBean.checkNotNull(mesPackageDetail.getPackageNo(), "箱条码不能为空");
mesPackageDetail.setOrganizeCode(AuthUtil.getOrganizeCode());
ConvertBean.serviceModelInitialize(mesPackageDetail, AuthUtil.getSessionUser().getUserName());
MesPackage mesPackage = mesBoxingErrorProofingService.doScan(mesPackageDetail);
return ResultBean.success("扫描成功").setResultObject(mesPackage);
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PostMapping("/mes-package-details/saveAll")
@ApiOperation(value = "保存包装明细")
public ResultBean saveMesPackageDetails(@RequestBody List<MesPackageDetail> mesPackageDetailList) {
try {
//属性校验
mesPackageDetailList.forEach(mesPackageDetail -> {
ValidatorBean.checkNotNull(mesPackageDetail.getPackageNo(), "箱条码不能为空");
});
String userName = AuthUtil.getSessionUser().getUserName();
mesBoxingErrorProofingService.saveMesPackageDetails(mesPackageDetailList, userName);
return ResultBean.success("保存成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PutMapping("/mes-package/update")
@ApiOperation(value = "更新包装表")
public ResultBean updateMesPackage(MesPackage mesPackage) {
try {
//属性校验
ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空");
ValidatorBean.checkNotNull(mesPackage.getIsSealed(), "是否封箱不能为空");
mesPackage.setOrganizeCode(AuthUtil.getOrganizeCode());
ConvertBean.serviceModelUpdate(mesPackage, AuthUtil.getSessionUser().getUserName());
mesBoxingErrorProofingService.updateMesPackage(mesPackage);
return ResultBean.success("保存成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PutMapping("/mes-package-details/update")
@ApiOperation(value = "更新包装明细")
public ResultBean updateMesPackageDetails(MesPackageDetail mesPackage) {
try {
//属性校验
ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空");
ValidatorBean.checkNotNull(mesPackage.getSerialNumber(), "替换条码不能为空");
ValidatorBean.checkNotNull(mesPackage.getOldSerialNumber(), "替换源条码不能为空");
ConvertBean.serviceModelUpdate(mesPackage, AuthUtil.getSessionUser().getUserName());
mesBoxingErrorProofingService.updateMesPackageDetails(mesPackage);
return ResultBean.success("保存成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/unLock")
@ApiOperation(value = "解锁")
public ResultBean unLock(String pwd) {
try {
//属性校验
ValidatorBean.checkNotNull(pwd, "密码不能为空");
mesBoxingErrorProofingService.unLock(AuthUtil.getOrganizeCode(), AuthUtil.getSessionUser().getUserName(), pwd);
return ResultBean.success("解锁成功");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,417 @@
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.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.CheckTool;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Description : MES
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/7 14:33
* @Modify:
**/
@Service
@Slf4j
public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingService {
@Autowired
private MesPackageRepository mesPackageRDao;
@Autowired
private MesPartRepository partRDao;
@Autowired
private MesPackingDefineRepository mesPackingDefineRDao;
@Autowired
private MesPackingDefineDetailsRepository mesPackingDefineDetailsRDao;
@Autowired
private MesPackageDetailRepository mesPackageDetailRDao;
@Autowired
private IMesConfigService configService;
@Autowired
private MesPackageResultRepository mesPackageResultRDao;
@Override
public ListPager<MesPackageDetail> queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPackage.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", packBean);
pager = PagerHelper.getPager(pager, mesPackageDetailRDao.findByHqlWhereCount(packBean));
List<MesPackageDetail> resultList = mesPackageDetailRDao.findByHqlWherePage(packBean, pager);
return new ListPager<>(resultList, pager);
}
@Override
public MesPackage doScan(MesPackageDetail mesPackageDetail) {
//扫描的是包装
if (mesPackageDetail.getIsScanPackageBoolean()) {
checkNotNull(mesPackageDetail);
MesPackage mesPackage = getMesPackage(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getPackageNo());
if (Objects.nonNull(mesPackage)) {
return mesPackage;
}
//获取包装定义
MesPackingDefine packingDefine = getMesPackingDefine(mesPackageDetail);
//解析获取信息保存
if (StringUtils.isEmpty(packingDefine.getSplitChar())) {
MesPcnException.throwMesBusiException("箱类别代号【%s】分隔符不能为空", packingDefine.getPackCode());
}
String[] split = mesPackageDetail.getPackageNo().split("\\" + packingDefine.getSplitChar());
//获取序列号
checkSerial(packingDefine, split);
//工厂校验
checkOrganizeCode(mesPackageDetail, packingDefine, split);
//获取物料信息是否存在
MesPart mesPart = getMesPart(mesPackageDetail, packingDefine, split);
//获取数量信息是否存在
Double qty = getQty(packingDefine, split);
MesPackage packages = getMesPackage(mesPackageDetail, mesPart, qty, packingDefine);
return mesPackageRDao.insert(packages);
} else {
checkNotNull(mesPackageDetail);
//校验过程条码是否存在
if (StringUtils.isEmpty(mesPackageDetail.getSerialNumber())) {
MesPcnException.throwMesBusiException("过程条码不允许为空");
}
//校验包装条码信息
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);
//包装规格明细
MesPackageDetail saveMesPackageDetail = getPackageDetail(mesPackageDetail, mesPart);
if (mesPackageDetail.getIsMemoryBoolean()) {
//保存包装明细
mesPackageDetailRDao.insert(saveMesPackageDetail);
//更新包装表
updateMesPackage(mesPackage, mesPackageDetail.getModifyUser(), 1d, false);
}
mesPackage.setMesPackageDetail(saveMesPackageDetail);
return mesPackage;
}
}
@Override
public void saveMesPackageDetails(List<MesPackageDetail> mesPackageDetailList, String userName) {
MesPackageDetail packageDetail = mesPackageDetailList.iterator().next();
int qty = mesPackageDetailList.size();
//校验包装条码信息
MesPackage mesPackage = getMesPackageAndCheck(packageDetail.getPackageNo(), packageDetail.getOrganizeCode());
//去掉重复零件条码
checkSerialNumber(mesPackageDetailList, packageDetail, userName);
//保存包装明细
mesPackageDetailRDao.saveAll(mesPackageDetailList);
//更新包装表
updateMesPackage(mesPackage, userName, qty, false);
}
@Override
public void updateMesPackage(MesPackage mesPackage) {
String userName = mesPackage.getModifyUser();
if (Objects.isNull(CommonEnumUtil.TRUE_OR_FALSE.valueOfDescription(mesPackage.getIsSealed()))) {
MesPcnException.throwMesBusiException("是否封箱不能为空");
}
//查询包装条码信息
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());
}
//关箱
updateMesPackage(mesPackageDb, mesPackage.getModifyUser(), 0d, true);
} else if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackage.getIsSealed()) {
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
MesPcnException.throwMesBusiException("包装条码【%s】状态不为已关箱不需要拆箱", mesPackage.getPackageNo());
}
//拆箱
unboxing(mesPackage, userName, mesPackageDb);
}
}
@Override
public void updateMesPackageDetails(MesPackageDetail mesPackageDetail) {
//查询包装条码信息
MesPackage mesPackageDb = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode());
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) {
MesPcnException.throwMesBusiException("包装条码【%s】不为已关箱状态不允许操作替换条码", mesPackageDetail.getPackageNo());
}
//校验是否重复扫描
List<MesPackageDetail> mesPackageDetails = getMesPackageDetailList(mesPackageDetail);
for (MesPackageDetail packageDetail : mesPackageDetails) {
//替换条码是否已经存在
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getSerialNumber())) {
MesPcnException.throwMesBusiException("零件条码【%s】已存在存在", mesPackageDetail.getSerialNumber());
}
//替换条码
if (packageDetail.getSerialNumber().equals(mesPackageDetail.getOldSerialNumber())) {
packageDetail.setSerialNumber(mesPackageDetail.getSerialNumber());
packageDetail.setOldSerialNumber(mesPackageDetail.getOldSerialNumber());
ConvertBean.serviceModelUpdate(packageDetail, mesPackageDetail.getModifyUser());
}
}
mesPackageDetailRDao.saveAll(mesPackageDetails);
}
private List<MesPackageDetail> getMesPackageDetailList(MesPackageDetail mesPackageDetail) {
String[] serialNumberList = new String[]{mesPackageDetail.getSerialNumber(), mesPackageDetail.getOldSerialNumber()};
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean);
DdlPreparedPack.getInPackArray(serialNumberList, "serialNumber", ddlPackBean);
List<MesPackageDetail> mesPackageDetails = mesPackageDetailRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesPackageDetails)) {
MesPcnException.throwMesBusiException("零件条码【%s】不存在", mesPackageDetail.getOldSerialNumber());
}
return mesPackageDetails;
}
@Override
public void unLock(String organizeCode, String userName, String pwd) {
String cfgValue = configService.getCfgValue(organizeCode, MesCommonConstant.BOXING_ERROR_PROOFING_PWD);
if (!Objects.equals(cfgValue, pwd)) {
MesPcnException.throwMesBusiException("解锁失败密码错误");
}
}
private void unboxing(MesPackage mesPackage, String userName, MesPackage mesPackageDb) {
//更新包装表
mesPackageDb.setQty(0d);
mesPackageDb.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(mesPackageDb, userName);
mesPackageRDao.update(mesPackageDb);
//软删包装明细
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackage.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", ddlPackBean);
mesPackageDetailRDao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "isDeleted"},
new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()},
ddlPackBean);
}
private MesPackage getMesPackageAndCheck(String packageNo, String organizeCode) {
MesPackage mesPackageDb = getMesPackage(organizeCode, packageNo);
if (Objects.isNull(mesPackageDb)) {
MesPcnException.throwMesBusiException("包装条码【%s】信息不存在", packageNo);
}
return mesPackageDb;
}
private void checkSerialNumber(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);
}
}
}
private void updateMesPackage(MesPackage mesPackage, String userName, double qty, boolean close) {
mesPackage.setQty(MathOperation.add(mesPackage.getQty(), qty));
if (mesPackage.getPackSpecQty() <= mesPackage.getQty() || close) {
mesPackage.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesPackage.setLotNo(TimeTool.getToday());
//数据写入接口表回传wms
saveMesPackageResult(mesPackage, userName);
}
ConvertBean.serviceModelUpdate(mesPackage, userName);
mesPackageRDao.update(mesPackage);
}
private void saveMesPackageResult(MesPackage mesPackage, String userName) {
MesPackageResult mesPackageResult;
List<MesPackageResult> mesPackageResultList = new ArrayList<>();
List<MesPackageDetail> mesPackageDetailList = getMesPackageDetailList(mesPackage.getOrganizeCode(), mesPackage.getPackageNo());
for (MesPackageDetail mesPackageDetail : mesPackageDetailList) {
mesPackageResult = new MesPackageResult(mesPackageDetail, mesPackage.getQty());
ConvertBean.serviceModelInitialize(mesPackageResult, userName);
mesPackageResultList.add(mesPackageResult);
}
mesPackageResultRDao.saveAll(mesPackageResultList);
}
private List<MesPackageDetail> getMesPackageDetailList(String organizeCode, String packageNo) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(packageNo, "packageNo", ddlPackBean);
List<MesPackageDetail> mesPackageDetails = mesPackageDetailRDao.findByHqlWhere(ddlPackBean);
return mesPackageDetails;
}
private MesPackageDetail getPackageDetail(MesPackageDetail mesPackageDetail, MesPart mesPart) {
MesPackageDetail saveMesPackageDetail = new MesPackageDetail();
saveMesPackageDetail.setPackageNo(mesPackageDetail.getPackageNo());
saveMesPackageDetail.setSerialNumber(mesPackageDetail.getSerialNumber());
saveMesPackageDetail.setPartNo(mesPart.getPartNo());
saveMesPackageDetail.setPartName(mesPart.getPartName());
saveMesPackageDetail.setQty(1d);
saveMesPackageDetail.setOrganizeCode(mesPackageDetail.getOrganizeCode());
ConvertBean.serviceModelInitialize(saveMesPackageDetail, mesPackageDetail.getCreateUser());
return saveMesPackageDetail;
}
private String getPartNo(MesPackageDetail mesPackageDetail, MesPackage mesPackage, List<MesPackingDefineDetails> defineDetails) {
String packageBarcodeRule;
String partNo = null;
for (MesPackingDefineDetails defineDetail : defineDetails) {
//条码规则为空
if (StringUtils.isEmpty(defineDetail.getPackageBarcodeRule())) {
MesPcnException.throwMesBusiException("箱类别代号【%s】零件号【%s】条码规则未维护", mesPackage.getPackageSn(), defineDetail.getPartNo());
}
packageBarcodeRule = defineDetail.getPackageBarcodeRule().replace("*", "");
//包含箱条码
if (mesPackageDetail.getSerialNumber().contains(packageBarcodeRule)) {
partNo = defineDetail.getPartNo();
break;
}
}
if (Objects.isNull(partNo)) {
MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据", mesPackage.getSerialNumber());
}
return partNo;
}
private void checkNotNull(MesPackageDetail mesPackageDetail) {
if (StringUtils.isEmpty(mesPackageDetail.getPackageNo())) {
MesPcnException.throwMesBusiException("包装编码不能为空");
}
if (StringUtils.isEmpty(mesPackageDetail.getScanType())) {
MesPcnException.throwMesBusiException("客户条码规则不能为空");
}
}
private void checkSerial(MesPackingDefine packingDefine, String[] split) {
if (StringUtils.isEmpty(packingDefine.getSerialIdIndex()) || packingDefine.getSerialIdIndex() > split.length
|| StringUtils.isEmpty(split[packingDefine.getSerialIdIndex() - 1])) {
MesPcnException.throwMesBusiException("序列号所在位置不存在");
}
String serialNo = split[packingDefine.getSerialIdIndex() - 1];
}
private void checkOrganizeCode(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) {
if (StringUtils.isEmpty(packingDefine.getOrganizeIndex()) || packingDefine.getOrganizeIndex() > split.length
|| StringUtils.isEmpty(split[packingDefine.getOrganizeIndex() - 1])) {
MesPcnException.throwMesBusiException("工厂所在位置不存在");
}
String organizeCode = split[packingDefine.getOrganizeIndex() - 1];
if (!Objects.equals(organizeCode, mesPackageDetail.getOrganizeCode())) {
MesPcnException.throwMesBusiException("箱条码工厂【%s】和当前工厂【%s】不匹配", organizeCode, mesPackageDetail.getOrganizeCode());
}
}
private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) {
if (StringUtils.isEmpty(packingDefine.getPartNoIndex()) || packingDefine.getPartNoIndex() > split.length
|| StringUtils.isEmpty(split[packingDefine.getPartNoIndex() - 1])) {
MesPcnException.throwMesBusiException("物料号所在位置不存在");
}
MesPart mesPart = getPart(mesPackageDetail.getOrganizeCode(), split[packingDefine.getPartNoIndex() - 1]);
return mesPart;
}
private MesPart getPart(String organizeCode, String partNo) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
MesPart mesPart = partRDao.getByProperty(packBean);
if (Objects.isNull(mesPart)) {
MesPcnException.throwMesBusiException("物料【%s】信息不存在", partNo);
}
return mesPart;
}
private Double getQty(MesPackingDefine packingDefine, String[] split) {
if (StringUtils.isEmpty(packingDefine.getQtyIndex()) || packingDefine.getQtyIndex() > split.length
|| StringUtils.isEmpty(split[packingDefine.getQtyIndex() - 1])) {
MesPcnException.throwMesBusiException("数量所在位置不存在");
}
//校验是否数字
if (!CheckTool.isNumber(split[packingDefine.getQtyIndex() - 1])) {
MesPcnException.throwMesBusiException("数量所在位置不为数字类型");
}
return Double.parseDouble(split[packingDefine.getQtyIndex() - 1]);
}
private MesPackage getMesPackage(MesPackageDetail mesPackageDetail, MesPart mesPart, Double qty, MesPackingDefine packingDefine) {
//保存包装信息
MesPackage packages = new MesPackage();
packages.setPackageNo(mesPackageDetail.getPackageNo());
packages.setPartNo(mesPart.getPartNo());
packages.setPartName(mesPart.getPartName());
packages.setPackSpecQty(qty);
packages.setQty(0d);
packages.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
packages.setPrintStatus(MesPcnEnumUtil.PACKAGE_PRINT_STATUS.UNPRINTED.getValue());
packages.setPackageSn(packingDefine.getPackCode());
packages.setOrganizeCode(mesPackageDetail.getOrganizeCode());
ConvertBean.serviceModelInitialize(packages, mesPackageDetail.getCreateUser());
return packages;
}
private MesPackage getMesPackage(String organizeCode, String packageNo) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(packageNo, "packageNo", packBean);
return mesPackageRDao.getByProperty(packBean);
}
private MesPackingDefine getMesPackingDefine(MesPackageDetail mesPackageDetail) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesPackageDetail.getScanType(), "scanType", packBean);
MesPackingDefine packingDefine = mesPackingDefineRDao.getByProperty(packBean);
if (Objects.isNull(packingDefine)) {
MesPcnException.throwFlowException("客户条码规则在包装定义界面未维护");
}
return packingDefine;
}
}

@ -26,6 +26,8 @@ public class MesCommonConstant {
public static final String SPOT_CHECK_ORDER_NO_RULE = "SPOT_CHECK_ORDER_NO_RULE"; public static final String SPOT_CHECK_ORDER_NO_RULE = "SPOT_CHECK_ORDER_NO_RULE";
//生成重新点检单据号 //生成重新点检单据号
public static final String SPOT_CHECK_ORDER_NO_COPY_RULE = "SPOT_CHECK_ORDER_NO_COPY_RULE"; public static final String SPOT_CHECK_ORDER_NO_COPY_RULE = "SPOT_CHECK_ORDER_NO_COPY_RULE";
//装箱防错密码
public static final String BOXING_ERROR_PROOFING_PWD = "BOXING_ERROR_PROOFING_PWD";
} }

Loading…
Cancel
Save