问题清单bug修复

tags/yfai-mes-ext-v1.0
jun 10 months ago
parent 9bcc7452f8
commit 6fb3bebb71

@ -14,7 +14,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
@Service
@Slf4j
@ -22,11 +21,7 @@ public class MesPartSapService extends BaseMesService<MesPartSap> implements IMe
@Override
protected void setPackQueryBean(MesPartSap bean, DdlPackBean packBean) {
if (Objects.isNull(bean.getIsTestPiece())) {
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, "isTestPiece", packBean);
} else {
DdlPreparedPack.getNumEqualPack(bean.getIsTestPiece(), "isTestPiece", packBean);
}
DdlPreparedPack.getNumEqualPack(bean.getIsTestPiece(), "isTestPiece", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringLikeEqualPack(bean.getPartName(), "partName", packBean);
}

@ -1,8 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProdCraftRouteService;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
import cn.estsh.i3plus.platform.common.util.MesConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -12,9 +13,9 @@ import cn.estsh.i3plus.pojo.mes.bean.MesCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.repository.MesCraftRouteRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProdRouteCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -37,11 +38,13 @@ import java.util.Objects;
public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRoute> implements IMesProdCraftRouteService {
@Autowired
private MesCraftRouteRepository mesCraftRouteRDao;
private IMesCraftRouteService mesCraftRouteService;
@Autowired
private MesWorkCenterRepository mesWorkCenterRDao;
@Autowired
private IMesPartService mesPartService;
@Autowired
private MesProdRouteCfgRepository mesProdRouteCfgRepository;
@Override
protected void setPackQueryBean(MesProdCraftRoute bean, DdlPackBean packBean) {
@ -56,111 +59,19 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRou
@Override
protected void onInsertBean(MesProdCraftRoute item) {
// 数据校验
ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteCode(), "工艺路线代码不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteName(), "工艺路线名称不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteType(), "工艺路线类型不能为空");
String partNo = item.getPartNo();
String pptCode = item.getPptCode();
String workCenterCode = item.getWorkCenterCode();
//校验产线
MesCraftRoute mesCraftRoute = mesCraftRouteRDao.getByProperty(
new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "craftRouteCode"},
new Object[]{item.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getCraftRouteCode()});
if (null == mesCraftRoute) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】无效", item.getWorkCenterCode())
.build();
}
if (!StringUtil.isEmpty(workCenterCode)) {//生产线维度配置 工艺路线类型必须与产线类型保持一致
//校验产线
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(
new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "workCenterCode"},
new Object[]{item.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getWorkCenterCode()});
if (null == mesWorkCenter) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产线代码【%s】无效", item.getWorkCenterCode())
.build();
}
if (!Objects.equals(mesCraftRoute.getCraftRouteType(), mesWorkCenter.getCenterType())) {//todo 工作版本",notes = "使用: 生产线类型: 排序/非排序
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】工艺路线类型必须与产线类型保持一致请检查数据", item.getCraftRouteCode())
.build();
}
item.setAreaCode(mesWorkCenter.getAreaCode());
}
//20 非排序类型
if (item.getCraftRouteType().equals("20")) {
if (!StringUtil.isEmpty(partNo)) {//零件维度配置 ①非排序类型的工艺路线直接跟物料关联,生产线与零件产品类型均不填
if (!StringUtil.isEmpty(workCenterCode) || !StringUtil.isEmpty(pptCode)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【非排序类型】【零件维度配置】生产线与零件产品类型均不填请检查数据", item.getCraftRouteCode())
.build();
}
} else if (!StringUtil.isEmpty(pptCode)) {//零件产品类型维度配置 ①非排序类型的工艺路线直接跟零件产品类型关联,生产线与零件均不填
if (!StringUtil.isEmpty(workCenterCode) || !StringUtil.isEmpty(partNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【非排序类型】【零件产品类型维度配置】生产线与零件均不填请检查数据", item.getCraftRouteCode())
.build();
}
}
} else {//10 排序类型
if (StringUtil.isEmpty(workCenterCode)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】产线代码【%s】不能为空", item.getCraftRouteCode(), item.getWorkCenterCode())
.build();
}
if (!StringUtil.isEmpty(partNo)) {//零件维度配置 -排序类型的工艺路线与生产线+零件关联,零件产品类型不填;
if (!StringUtil.isEmpty(pptCode)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【排序类型】的工艺路线与生产线+零件关联,零件产品类型不填,请检查数据", item.getCraftRouteCode())
.build();
}
} else if (!StringUtil.isEmpty(pptCode)) {//零件产品类型维度配置 -排序类型的工艺路线与生产线+零件产品类型关联,零件不填
if (!StringUtil.isEmpty(partNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【非排序类型】的工艺路线与生产线+零件产品类型关联,零件不填,请检查数据", item.getCraftRouteCode())
.build();
}
}
}
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getCraftRouteCode(), "craftRouteCode", roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getCraftRouteName(), "craftRouteName", roadPackBean);
DdlPreparedPack.getNumEqualPack(item.getCraftRouteType(), "craftRouteType", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】已经存在请检查数据", item.getCraftRouteCode())
.build();
}
checkData(item);
}
@Override
protected void onUpdateBean(MesProdCraftRoute item) {
// 数据校验
checkData(item);
}
private void checkData(MesProdCraftRoute item) {
// 数据校验
ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteCode(), "工艺路线代码不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteName(), "工艺路线名称不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteType(), "工艺路线类型不能为空");
@ -169,17 +80,7 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRou
String pptCode = item.getPptCode();
String workCenterCode = item.getWorkCenterCode();
//校验产线
MesCraftRoute mesCraftRoute = mesCraftRouteRDao.getByProperty(
new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "craftRouteCode"},
new Object[]{item.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getCraftRouteCode()});
if (null == mesCraftRoute) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】无效", item.getWorkCenterCode())
.build();
}
MesCraftRoute mesCraftRoute = mesCraftRouteService.getMesCraftRouteByCode(item.getCraftRouteCode(), item.getOrganizeCode());
if (!StringUtil.isEmpty(workCenterCode)) {//生产线维度配置 工艺路线类型必须与产线类型保持一致
//校验产线
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(
@ -187,79 +88,59 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRou
new Object[]{item.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getWorkCenterCode()});
if (null == mesWorkCenter) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产线代码【%s】无效", item.getWorkCenterCode())
.build();
MesException.throwMesBusiException("产线代码【%s】无效", item.getWorkCenterCode());
}
if (!Objects.equals(mesCraftRoute.getCraftRouteType(), mesWorkCenter.getCenterType())) {//todo 工作版本",notes = "使用: 生产线类型: 排序/非排序
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】工艺路线类型必须与产线类型保持一致请检查数据", item.getCraftRouteCode())
.build();
if (!Objects.equals(mesCraftRoute.getCraftRouteType(), mesWorkCenter.getCenterType())) {
MesException.throwMesBusiException("工艺路线代码【%s】工艺路线类型必须与产线类型保持一致请检查数据", item.getCraftRouteCode());
}
item.setAreaCode(mesWorkCenter.getAreaCode());
}
//零件号&产型只能维护一个
if (!StringUtil.isEmpty(partNo) && !StringUtil.isEmpty(pptCode)) {
MesException.throwMesBusiException("工艺路线代码【%s】【%s】零件与零件产品类型二选一维护请检查数据", item.getCraftRouteCode(),MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(item.getCraftRouteType()));
}
//20 非排序类型
if (item.getCraftRouteType().equals("20")) {
if (!StringUtil.isEmpty(partNo)) {//零件维度配置 ①非排序类型的工艺路线直接跟物料关联,生产线与零件产品类型均不填
if (!StringUtil.isEmpty(workCenterCode) || !StringUtil.isEmpty(pptCode)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【非排序类型】【零件维度配置】生产线与零件产品类型均不填请检查数据", item.getCraftRouteCode())
.build();
}
} else if (!StringUtil.isEmpty(pptCode)) {//零件产品类型维度配置 ①非排序类型的工艺路线直接跟零件产品类型关联,生产线与零件均不填
if (!StringUtil.isEmpty(workCenterCode) || !StringUtil.isEmpty(partNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【非排序类型】【零件产品类型维度配置】生产线与零件均不填请检查数据", item.getCraftRouteCode())
.build();
}
if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == item.getCraftRouteType()) {
if(StringUtil.isEmpty(workCenterCode) && StringUtil.isEmpty(partNo) && StringUtil.isEmpty(pptCode)){
MesException.throwMesBusiException("工艺路线代码【%s】【%s】请选择产线、零件、零件产品类请检查数据", item.getCraftRouteCode(),MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(item.getCraftRouteType()));
}
} else {//10 排序类型
if (StringUtil.isEmpty(workCenterCode)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】产线代码【%s】不能为空", item.getCraftRouteCode(), item.getWorkCenterCode())
.build();
MesException.throwMesBusiException("工艺路线代码【%s】【%s】产线代码不能为空请检查数据", item.getCraftRouteCode(), MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(item.getCraftRouteType()));
}
if (!StringUtil.isEmpty(partNo)) {//零件维度配置 -排序类型的工艺路线与生产线+零件关联,零件产品类型不填;
if (!StringUtil.isEmpty(pptCode)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【排序类型】的工艺路线与生产线+零件关联,零件产品类型不填,请检查数据", item.getCraftRouteCode())
.build();
}
} else if (!StringUtil.isEmpty(pptCode)) {//零件产品类型维度配置 -排序类型的工艺路线与生产线+零件产品类型关联,零件不填
if (!StringUtil.isEmpty(partNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】【非排序类型】的工艺路线与生产线+零件产品类型关联,零件不填,请检查数据", item.getCraftRouteCode())
.build();
}
//校验产线是否绑定有流程
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",packBean);
if(!mesProdRouteCfgRepository.isExitByHql(packBean)){
MesException.throwMesBusiException("【%s】【%s】未绑定流程信息请检查数据", MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(item.getCraftRouteType()),workCenterCode);
}
}
//唯一性校验
checkExist(item);
}
private void checkExist(MesProdCraftRoute item) {
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getCraftRouteCode(), "craftRouteCode", roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getCraftRouteName(), "craftRouteName", roadPackBean);
DdlPreparedPack.getNumEqualPack(item.getCraftRouteType(), "craftRouteType", roadPackBean);
if(StringUtil.isEmpty(item.getWorkCenterCode())){
DdlPreparedPack.getIsNull("workCenterCode", roadPackBean);
}else{
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", roadPackBean);
}
if(StringUtils.isEmpty(item.getPartNo())){
DdlPreparedPack.getIsNull("partNo", roadPackBean);
}else{
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", roadPackBean);
}
if(StringUtils.isEmpty(item.getPptCode())){
DdlPreparedPack.getIsNull("pptCode", roadPackBean);
}else{
DdlPreparedPack.getStringEqualPack(item.getPptCode(), "pptCode", roadPackBean);
}
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】已经存在请检查数据", item.getCraftRouteCode())
.build();
if (baseRDao.isExitByHql(roadPackBean)) {
MesException.throwMesBusiException("工艺路线类型【%s】生产线代码【%s】物料编码【%s】物料产品类型【%s】数据已经存在请检查数据",
MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(item.getCraftRouteType()), item.getWorkCenterCode(), item.getPartNo(), item.getPptCode());
}
}

@ -360,10 +360,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode());
item.setPartName(mesPart.getPartName());
item.setUnit(mesPart.getUnit());
//试制单,只能选择试制零件
if(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() != mesPart.getIsTestPiece()){
MesException.throwMesBusiException("物料【%s】不为试制件",item.getPartNo());
}
//生产时间新增取当天
if (StringUtil.isEmpty(item.getProduceTime())) {
item.setProduceTime(TimeTool.getToday());
@ -695,24 +691,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//计划开始时间,计划结束时间拼接
packPlanTime(item, mesShiftMap);
//获取生产版本
List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(mesWorkCenter.getErpWorkCenter() + item.getPartNo());
if (CollectionUtils.isEmpty(mesProductVersions)) {
MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
mesWorkCenter.getErpWorkCenter());
}
MesProductVersion mesProductVersion = mesProductVersions.iterator().next();
item.setProductVersion(mesProductVersion.getProductVersion());
//发送工单信息给WMS
List<MesBom> mesBomList = null;
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
} else {
//获取bom信息
mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList);
}
//校验vin号
if (!StringUtil.isEmpty(item.getVinCode())) {
if (vinCodeMap.containsKey(item.getVinCode())) {
MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode());
@ -722,15 +701,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//排序工单数量为1
item.setQty(1d);
//是否自动发布
isAuto(mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesBomList);
//试制单,只能选择试制零件
if(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() != mesPart.getIsTestPiece()){
MesException.throwMesBusiException("物料【%s】不为试制件",item.getPartNo());
}
//发送wms数据
sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter);
} else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空");
ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空");
if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0");
}
@ -749,32 +723,32 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//拼接时间
packPlanTime(item, mesShiftMap);
//校验物料生产版本是否存在
List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(mesWorkCenter.getErpWorkCenter() + item.getPartNo());
if (CollectionUtils.isEmpty(mesProductVersions)) {
MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
mesWorkCenter.getErpWorkCenter());
}
List<MesProductVersion> versionList = mesProductVersions.stream().filter(t -> Objects.equals(item.getProductVersion(), t.getProductVersion())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(versionList)) {
MesException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), mesWorkCenter.getWorkCenterCode(), item.getProductVersion());
}
MesProductVersion mesProductVersion = versionList.iterator().next();
//获取bom信息
//状态已发布
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
List<MesBom> mesBomList = null;
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
} else {
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){
ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空");
//校验物料生产版本是否存在
List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(mesWorkCenter.getErpWorkCenter() + item.getPartNo());
if (CollectionUtils.isEmpty(mesProductVersions)) {
MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
mesWorkCenter.getErpWorkCenter());
}
List<MesProductVersion> versionList = mesProductVersions.stream().filter(t -> Objects.equals(item.getProductVersion(), t.getProductVersion())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(versionList)) {
MesException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), mesWorkCenter.getWorkCenterCode(), item.getProductVersion());
}
MesProductVersion mesProductVersion = versionList.iterator().next();
//获取bom信息
mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList);
}
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
//发送工单信息给WMS
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList));
//试制单,只能选择试制零件
if(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() != mesPart.getIsTestPiece()){
MesException.throwMesBusiException("物料【%s】不为试制件",item.getPartNo());
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
} else {
//获取bom信息
mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList);
}
//发送工单信息给WMS
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList));
}
} else {
ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空");
@ -782,25 +756,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0");
}
//获取生产版本
List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(mesWorkCenter.getErpWorkCenter() + item.getPartNo());
if (CollectionUtils.isEmpty(mesProductVersions)) {
MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
mesWorkCenter.getErpWorkCenter());
}
MesProductVersion mesProductVersion = mesProductVersions.iterator().next();
item.setProductVersion(mesProductVersion.getProductVersion());
//获取bom信息
List<MesBom> mesBomList = null;
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
} else {
//获取bom信息
mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList);
}
//是否自动发布
isAuto(mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesBomList);
//发送wms数据
sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter);
}
item.setUnCompleteQty(item.getQty());
index++;
@ -808,6 +765,30 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return mesWorkOrderToWmsList;
}
private void sendToWms(Map<String, List<MesProductVersion>> mesProductVersionMap, Map<String, List<MesBom>> mesBomMap, Map<String, MesPartProdGroup> mesPartProdGroupMap, List<MesWorkOrderToWms> mesWorkOrderToWmsList, MesWorkOrder item, MesWorkCenter mesWorkCenter) {
//发送工单信息给WMS
List<MesBom> mesBomList = null;
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){
//获取生产版本
List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(mesWorkCenter.getErpWorkCenter() + item.getPartNo());
if (CollectionUtils.isEmpty(mesProductVersions)) {
MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
mesWorkCenter.getErpWorkCenter());
}
MesProductVersion mesProductVersion = mesProductVersions.iterator().next();
item.setProductVersion(mesProductVersion.getProductVersion());
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
} else {
//获取bom信息
mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList);
}
}
//是否自动发布
isAuto(mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesBomList);
}
private void isAuto(Map<String, MesPartProdGroup> mesPartProdGroupMap, List<MesWorkOrderToWms> mesWorkOrderToWmsList, MesWorkOrder item, List<MesBom> mesBomList) {
//校验零件生产组信息
MesPartProdGroup mesPartProdGroup;
@ -823,7 +804,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
//发送工单信息给WMS
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList));
if(!Objects.isNull(mesBomList)){
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList));
}
} else {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
}

Loading…
Cancel
Save