工单同步wms功能开发

tags/yfai-mes-ext-v2.3
jun 6 months ago
parent 81ca92c4e1
commit cfb57c094d

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion;
import io.swagger.annotations.ApiOperation;
/** /**
* @Description: * @Description:
@ -13,4 +14,7 @@ public interface IMesProductVersionService extends IBaseMesService<MesProductVer
ListPager<MesProductVersion> queryMesProductVersionByPagerExt(MesProductVersion mesProductVersion, Pager pager); ListPager<MesProductVersion> queryMesProductVersionByPagerExt(MesProductVersion mesProductVersion, Pager pager);
@ApiOperation("根据物料生产版本查询生产版本")
MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion);
} }

@ -64,4 +64,7 @@ public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder);
@ApiOperation("MES工单推送给WMS")
void doSendMesWorkOrderToWms(String organizeCode,Integer pageSize,String userName);
} }

@ -17,7 +17,7 @@ import java.util.List;
public interface IMesWorkOrderToWmsService extends IBaseMesService<MesWorkOrderToWms> { public interface IMesWorkOrderToWmsService extends IBaseMesService<MesWorkOrderToWms> {
@ApiOperation(value = "发送工单给Wms") @ApiOperation(value = "发送工单给Wms")
List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList); List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList, String userName, boolean flag);
@ApiOperation("根据工单号查询工单发送给WMS数据") @ApiOperation("根据工单号查询工单发送给WMS数据")
List<MesWorkOrderToWms> findMesWorkOrderToWms(String workOrderNo, String organizeCode); List<MesWorkOrderToWms> findMesWorkOrderToWms(String workOrderNo, String organizeCode);

@ -1,6 +1,5 @@
package cn.estsh.i3plus.ext.mes.apiservice.aspect; package cn.estsh.i3plus.ext.mes.apiservice.aspect;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
@ -80,24 +79,22 @@ public class MesRepositoryAspect {
@After("controllerPointcut()") @After("controllerPointcut()")
public void after(JoinPoint joinPoint) { public void after(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName(); String methodName = joinPoint.getSignature().getName();
if (methodName.startsWith("updateByProperties")) { if (methodName.equals("updateByProperties")) {
try { try {
Object[] args = joinPoint.getArgs(); Object[] args = joinPoint.getArgs();
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
if (args.length == 4) { if (args.length == 4) {
if (args[2].getClass().isArray()) { if (args[2].getClass().isArray()) {
method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"modifyDatetime", "systemSyncStatus"}, method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"systemSyncStatus"},
new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); new Object[]{CommonEnumUtil.FALSE});
} else { } else {
method.invoke(joinPoint.getTarget(), args[0], args[1], "modifyDatetime", TimeTool.getNowTime(true));
method.invoke(joinPoint.getTarget(), args[0], args[1], "systemSyncStatus", CommonEnumUtil.FALSE); method.invoke(joinPoint.getTarget(), args[0], args[1], "systemSyncStatus", CommonEnumUtil.FALSE);
} }
} else if (args.length == 3) { } else if (args.length == 3) {
if (args[0].getClass().isArray()) { if (args[0].getClass().isArray()) {
method.invoke(joinPoint.getTarget(), new String[]{"modifyDatetime", "systemSyncStatus"}, method.invoke(joinPoint.getTarget(), new String[]{"systemSyncStatus"},
new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}, args[2]); new Object[]{CommonEnumUtil.FALSE}, args[2]);
} else { } else {
method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]);
method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]);
} }
} }
@ -110,10 +107,9 @@ public class MesRepositoryAspect {
if (args.length == 3) { if (args.length == 3) {
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
if (args[1].getClass().isArray()) { if (args[1].getClass().isArray()) {
method.invoke(joinPoint.getTarget(), args[0], new String[]{"modifyDatetime", "systemSyncStatus"}, method.invoke(joinPoint.getTarget(), args[0], new String[]{"systemSyncStatus"},
new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); new Object[]{CommonEnumUtil.FALSE});
} else { } else {
method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]);
method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]);
} }
} }

@ -9,6 +9,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.platform.common.util.MesConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipment; import cn.estsh.i3plus.pojo.mes.bean.MesEquipment;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
@ -292,4 +293,17 @@ public class MesWhiteListController extends MesBaseController {
} }
return ResultBean.success("执行成功"); return ResultBean.success("执行成功");
} }
@GetMapping(value = "/mesWorkOrderSendToWmsJob")
@ApiOperation(value = "MES工单推送给WMS JOB")
public ResultBean doSendMesWorkOrderToWms(String organizeCode, Integer pageSize) {
try {
mesWorkOrderService.doSendMesWorkOrderToWms(organizeCode, pageSize, MesExtConstWords.JOB);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
} }

@ -0,0 +1,62 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel;
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
import io.swagger.annotations.ApiOperation;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* @Description : MESWMS
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/11/13 16:40
* @Modify:
**/
// 禁止 JOB 并发执行
@DisallowConcurrentExecution
@ApiOperation("MES工单推送给WMS JOB")
public class MesWorkOrderSendToWmsJob extends BaseMesScheduleJob {
public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderSendToWmsJob.class);
private static final long serialVersionUID = -321526601595924818L;
@Autowired
private IMesWorkOrderService mesWorkOrderService;
public MesWorkOrderSendToWmsJob() {
super(MesWorkOrderSendToWmsJob.class, "MES工单推送给WMS JOB");
this.setMultiInstance(true);
}
@Override
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
List<WmsJobParamModel> wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class);
if (!CollectionUtils.isEmpty(wmsJobParamModelList)) {
for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) {
try {
long startTime = System.currentTimeMillis();
LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- start", wmsJobParamModel.getOrganizeCode());
mesWorkOrderService.doSendMesWorkOrderToWms(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), MesExtConstWords.JOB);
long endTime = System.currentTimeMillis();
LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- end --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime);
} catch (Exception e) {
LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB 执行失败{}", wmsJobParamModel.getOrganizeCode(), e);
}
}
}
}
}

@ -174,8 +174,7 @@ public class MesEquipmentVariableService extends BaseMesService<MesEquipmentVari
private List<String> getClientHandleId(int size, String organizeCode, String userName) { private List<String> getClientHandleId(int size, String organizeCode, String userName) {
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.CLIENT_HANDLE_ID); GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.CLIENT_HANDLE_ID);
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList(); return syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList();
return resultList;
} }
private MesEquipment getMesEquipment(String organizeCode,String equipmentCode) { private MesEquipment getMesEquipment(String organizeCode,String equipmentCode) {

@ -5,7 +5,9 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion;
import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -44,4 +46,14 @@ public class MesProductVersionService extends BaseMesService<MesProductVersion>
List<MesProductVersion> mesProductVersions = mesProductVersionRepository.findByHqlWherePage(productVersionQueryPackBean, pager); List<MesProductVersion> mesProductVersions = mesProductVersionRepository.findByHqlWherePage(productVersionQueryPackBean, pager);
return new ListPager<>(mesProductVersions, pager); return new ListPager<>(mesProductVersions, pager);
} }
@Override
public MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion) {
if (StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(partNo)) return null;
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, ddlPackBean);
return baseRDao.getByProperty(ddlPackBean);
}
} }

@ -271,6 +271,7 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
} }
DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder); DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder);
DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue(), "pullingStatus", packBeanWorkOrder); DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue(), "pullingStatus", packBeanWorkOrder);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBeanWorkOrder);
return mesWorkOrderRepository.findByHqlTopWhere(packBeanWorkOrder, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize); return mesWorkOrderRepository.findByHqlTopWhere(packBeanWorkOrder, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize);
} }
@ -281,7 +282,7 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
} else { } else {
DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean);
} }
mesWorkOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "pullingStatus"}, mesWorkOrderRepository.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "pullingStatus"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue()}, packBean); new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue()}, packBean);
} }

@ -26,7 +26,6 @@ import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.repository.shipping.MesWorkOrderToWmsRepository;
import cn.estsh.i3plus.pojo.mes.util.DateUtilExt; import cn.estsh.i3plus.pojo.mes.util.DateUtilExt;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import cn.estsh.i3plus.pojo.model.wms.WmsProductModel;
@ -47,7 +46,6 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service @Service
@Slf4j @Slf4j
@ -75,8 +73,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired @Autowired
private MesCustomerPartRepository mesCustomerPartRDao; private MesCustomerPartRepository mesCustomerPartRDao;
@Autowired @Autowired
private IMesPartSapService iMesPartSapService;
@Autowired
private IMesMoveRuleService mesMoveRuleService; private IMesMoveRuleService mesMoveRuleService;
@Autowired @Autowired
private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao; private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao;
@ -106,8 +102,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired @Autowired
private MesWorkOrderLogRepository mesWorkOrderLogRepository; private MesWorkOrderLogRepository mesWorkOrderLogRepository;
@Autowired @Autowired
private MesWorkOrderToWmsRepository mesWorkOrderToWmsRDao;
@Autowired
private MesBomRepository mesBomRDao; private MesBomRepository mesBomRDao;
@Autowired @Autowired
private MesPartRepository mesPartRDao; private MesPartRepository mesPartRDao;
@ -172,6 +166,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired @Autowired
private IMesConfigService mesConfigService; private IMesConfigService mesConfigService;
@Autowired
private IMesProductVersionService mesProductVersionService;
@Override @Override
public MesWorkOrder insert(MesWorkOrder bean) { public MesWorkOrder insert(MesWorkOrder bean) {
// 数据校验 // 数据校验
@ -208,7 +205,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
insertUnSortWorkOrder(bean, mesWorkCenter); insertUnSortWorkOrder(bean, mesWorkCenter);
//bto //bto
} else { } else {
insertBtoWorkOrder(bean, mesWorkCenter); insertBtoWorkOrder(bean);
} }
return bean; return bean;
} }
@ -253,15 +250,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
closeMesQueueOrder(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName()); closeMesQueueOrder(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName());
} }
result.setWorkOrderStatus(bean.getWorkOrderStatus()); result.setWorkOrderStatus(bean.getWorkOrderStatus());
if (result.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()
&& bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) {
//校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion(result);
//获取bom信息
List<MesBom> bomList = mesBomService.findMesBomByPartNoAndBomVersion(result.getPartNo(), result.getOrganizeCode(), mesProductVersion.getAlternativePartList());
//发送工单信息给WMS
mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsService.saveMesWorkOrderToWms(result, bomList));
}
} }
updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0);
@ -479,23 +467,19 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
mesProduceSnRao.insert(mesProduceSn); mesProduceSnRao.insert(mesProduceSn);
} }
private List<MesWorkOrderPart> sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List<MesWorkOrderToWms> saveMesWorkOrderToWms) { private List<MesWorkOrderPart> autoPublish(MesWorkOrder item) {
//非试制单 //非试制单
List<MesBom> bomList = null;
MesProductVersion mesProductVersion = null; MesProductVersion mesProductVersion = null;
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) {
//获取生产版本 //获取生产版本
mesProductVersion = getMesProductVersion(item, mesWorkCenter); mesProductVersion = getMesProductVersion(item.getOrganizeCode(),item.getPartNo());
item.setProductVersion(mesProductVersion.getProductVersion()); item.setProductVersion(mesProductVersion.getProductVersion());
//获取bom信息
bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
item.setBomCode(bomList.iterator().next().getBomCode());
} }
//是否自动发布 //是否自动发布
return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion); return isAuto(item, mesProductVersion);
} }
private List<MesWorkOrderPart> isAuto(MesWorkOrder item, List<MesWorkOrderToWms> saveMesWorkOrderToWms, List<MesBom> bomList,MesProductVersion mesProductVersion) { private List<MesWorkOrderPart> isAuto(MesWorkOrder item,MesProductVersion mesProductVersion) {
MesPartProdGroup mesPartProdGroup = null; MesPartProdGroup mesPartProdGroup = null;
if(StringUtil.isEmpty(item.getPartProdGroupCode())){ if(StringUtil.isEmpty(item.getPartProdGroupCode())){
mesPartProdGroup = getMesPartProdGroup(item); mesPartProdGroup = getMesPartProdGroup(item);
@ -514,14 +498,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//自动发布 //自动发布
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
//发送工单信息给WMS
if(!Objects.isNull(bomList)){
saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList));
}
// 创建工单打印队列 // 创建工单打印队列
insertPrintQueue(item); insertPrintQueue(item);
} else { } else {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
} }
@ -569,32 +547,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
} }
private MesProductVersion checkMesProductVersion(MesWorkOrder item) {
DdlPackBean ddlPackBean;
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
//DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(item.getProductVersion(), "productVersion", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getProductVersion());
}
return mesProductVersion;
}
private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
//DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
mesWorkCenter.getErpWorkCenter());
}
return mesProductVersion;
}
private void packPlanTime(MesWorkOrder item, Map<String, List<MesShift>> mesShiftMap) { private void packPlanTime(MesWorkOrder item, Map<String, List<MesShift>> mesShiftMap) {
ValidatorBean.checkNotNull(item.getPlanDate(), "计划日期不能为空"); ValidatorBean.checkNotNull(item.getPlanDate(), "计划日期不能为空");
ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空");
@ -644,7 +596,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
public void saveMesWorkOrderExcel(List<MesWorkOrder> mesWorkOrderList) { public void saveMesWorkOrderExcel(List<MesWorkOrder> mesWorkOrderList) {
MesWorkOrder next = mesWorkOrderList.iterator().next(); MesWorkOrder next = mesWorkOrderList.iterator().next();
//属性校验&字段填充 //属性校验&字段填充
List<MesWorkOrderToWms> mesWorkOrderToWmsList = checkData(mesWorkOrderList, next.getOrganizeCode()); checkData(mesWorkOrderList, next.getOrganizeCode());
//BTO序号 //BTO序号
List<String> seqList = new ArrayList<>(); List<String> seqList = new ArrayList<>();
if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == next.getWorkOrderType()) { if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == next.getWorkOrderType()) {
@ -701,17 +653,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesWorkOrderLogList.add(workOrderLog); mesWorkOrderLogList.add(workOrderLog);
} }
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(mesWorkOrderToWmsList)) {
mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList);
}
//保存工单记录 //保存工单记录
if (CollectionUtils.isNotEmpty(mesWorkOrderLogList)) { if (CollectionUtils.isNotEmpty(mesWorkOrderLogList)) {
workOrderLogService.insertBatch(mesWorkOrderLogList); workOrderLogService.insertBatch(mesWorkOrderLogList);
} }
} }
private List<MesWorkOrderToWms> checkData(List<MesWorkOrder> mesWorkOrderList, String organizeCode) { private void checkData(List<MesWorkOrder> mesWorkOrderList, String organizeCode) {
MesWorkOrder next = mesWorkOrderList.iterator().next(); MesWorkOrder next = mesWorkOrderList.iterator().next();
String nowDate = TimeTool.getNowTime(true); String nowDate = TimeTool.getNowTime(true);
//获取产线信息 //获取产线信息
@ -733,7 +681,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
try { try {
mesCustomerPartMap = BeanMapUtilsExt.getBeanMap(mesCustomerPartRDao, "erpPartNo", organizeCode, partNoList, "客户物料信息"); mesCustomerPartMap = BeanMapUtilsExt.getBeanMap(mesCustomerPartRDao, "erpPartNo", organizeCode, partNoList, "客户物料信息");
} catch (Exception e) { } catch (Exception e) {
mesCustomerPartMap = null;
} }
//获取物料信息 //获取物料信息
Map<String, MesPartSap> mesPartSapMap = BeanMapUtilsExt.getBeanMap(mesPartSapRDao, "partNo", organizeCode, partNoList, "物料信息"); Map<String, MesPartSap> mesPartSapMap = BeanMapUtilsExt.getBeanMap(mesPartSapRDao, "partNo", organizeCode, partNoList, "物料信息");
@ -769,15 +716,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (baseRDao.isExitByHql(orderPackBean)) { if (baseRDao.isExitByHql(orderPackBean)) {
MesException.throwMesBusiException("单号已存在"); MesException.throwMesBusiException("单号已存在");
} }
//BOM信息
Map<String, List<MesBom>> mesBomMap = new HashMap<>();
//vin号 //vin号
Map<String, String> vinCodeMap = new HashMap<>(); Map<String, String> vinCodeMap = new HashMap<>();
//零件生产组 //零件生产组
Map<String, MesPartProdGroup> mesPartProdGroupMap = new HashMap<>(); Map<String, MesPartProdGroup> mesPartProdGroupMap = new HashMap<>();
//发送wms数据
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
int index = 0; int index = 0;
for (MesWorkOrder item : mesWorkOrderList) { for (MesWorkOrder item : mesWorkOrderList) {
item.setWorkOrderNo(orderList.get(index)); item.setWorkOrderNo(orderList.get(index));
@ -847,8 +789,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
//排序工单数量为1 //排序工单数量为1
item.setQty(1d); item.setQty(1d);
//发送wms数据 //自动发布
sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter);
} else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空");
ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空");
@ -884,7 +826,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
packPlanTime(item, mesShiftMap); packPlanTime(item, mesShiftMap);
//状态已发布 //状态已发布
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
List<MesBom> mesBomList = null;
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){
ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空");
//校验物料生产版本是否存在 //校验物料生产版本是否存在
@ -898,16 +839,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
MesProductVersion mesProductVersion = versionList.iterator().next(); MesProductVersion mesProductVersion = versionList.iterator().next();
item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); item.setErpWorkCenter(mesProductVersion.getWorkCenterCode());
//获取bom信息
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 { } else {
ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空"); ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空");
@ -915,19 +846,17 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0"); MesException.throwMesBusiException("生产数量不能小于等于0");
} }
//发送wms数据 //自动发布
sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter);
} }
item.setUnCompleteQty(item.getQty()); item.setUnCompleteQty(item.getQty());
item.setFid(UUID.randomUUID().toString()); item.setFid(UUID.randomUUID().toString());
index++; index++;
} }
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) { private void autoPublish(Map<String, List<MesProductVersion>> mesProductVersionMap, Map<String, MesPartProdGroup> mesPartProdGroupMap, MesWorkOrder item, MesWorkCenter mesWorkCenter) {
//发送工单信息给WMS //发送工单信息给WMS
List<MesBom> mesBomList = null;
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){
//获取生产版本 //获取生产版本
List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(item.getPartNo()); List<MesProductVersion> mesProductVersions = mesProductVersionMap.get(item.getPartNo());
@ -937,19 +866,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
MesProductVersion mesProductVersion = mesProductVersions.iterator().next(); MesProductVersion mesProductVersion = mesProductVersions.iterator().next();
item.setProductVersion(mesProductVersion.getProductVersion()); 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); isAuto(mesPartProdGroupMap, item);
} }
private void isAuto(Map<String, MesPartProdGroup> mesPartProdGroupMap, List<MesWorkOrderToWms> mesWorkOrderToWmsList, MesWorkOrder item, List<MesBom> mesBomList) { private void isAuto(Map<String, MesPartProdGroup> mesPartProdGroupMap, MesWorkOrder item) {
//校验零件生产组信息 //校验零件生产组信息
MesPartProdGroup mesPartProdGroup; MesPartProdGroup mesPartProdGroup;
if (mesPartProdGroupMap.containsKey(item.getWorkCenterCode() + item.getPartNo())) { if (mesPartProdGroupMap.containsKey(item.getWorkCenterCode() + item.getPartNo())) {
@ -963,10 +885,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//自动发布 //自动发布
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
//发送工单信息给WMS
if(!Objects.isNull(mesBomList)){
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList));
}
} else { } else {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
} }
@ -993,7 +911,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//查询产线信息 //查询产线信息
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode()); MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode());
//获取生产版本 //获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
//物料+生产版本获取bom信息 //物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//报工类型 //报工类型
@ -1093,7 +1011,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
} }
//获取生产版本 //获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode(),mesWorkOrder.getProductVersion()); MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion());
//物料+生产版本获取bom信息 //物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//生成条码 //生成条码
@ -1161,7 +1079,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//保存报工记录 试制单不报工 //保存报工记录 试制单不报工
if (CollectionUtils.isNotEmpty(mesProductOffLineList) && (Objects.isNull(mesWorkOrder.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag()))) { if (CollectionUtils.isNotEmpty(mesProductOffLineList) && (Objects.isNull(mesWorkOrder.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag()))) {
mesProductOffLineList.forEach(t->t.setBomTotalSize(mesProductOffLineList.size())); mesProductOffLineList.forEach(t->{
if(Objects.isNull(t.getBomTotalSize())){
t.setBomTotalSize(mesProductOffLineList.size());
}
});
mesProductOffLineService.insertBatch(mesProductOffLineList); mesProductOffLineService.insertBatch(mesProductOffLineList);
} }
//保存移库记录 //保存移库记录
@ -1215,7 +1137,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
String nowTime = TimeTool.getNowTime(true); String nowTime = TimeTool.getNowTime(true);
if (StringUtil.isEmpty(model.getSn())) { if (StringUtil.isEmpty(model.getSn())) {
//获取生产版本 //获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(model); MesProductVersion mesProductVersion = getMesProductVersion(model.getOrganizeCode(),model.getPartNo());
//获取bom //获取bom
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//生成流水码 //生成流水码
@ -1502,17 +1424,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return newMesProductOffLine; return newMesProductOffLine;
} }
private MesProductVersion getMesProductVersion(WmsProductModel model) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getOrderBy(null, null, ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", model.getPartNo());
}
return mesProductVersion;
}
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime,boolean isSort) { private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime,boolean isSort) {
boolean isItemMove; boolean isItemMove;
boolean isItemReport; boolean isItemReport;
@ -1550,7 +1461,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size())); mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size()));
} else if (isItemReport) { } else if (isItemReport) {
String reportSn = String.valueOf(snowflakeIdMaker.nextId()); String reportSn = String.valueOf(snowflakeIdMaker.nextId());
MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion()); MesProductVersion itemVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion());
List<MesBom> bomList = null; List<MesBom> bomList = null;
try { try {
bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList());
@ -1559,10 +1470,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//bom下的子节汇报 //bom下的子节汇报
if (!CollectionUtils.isEmpty(bomList)) { if (!CollectionUtils.isEmpty(bomList)) {
for (MesBom bom : bomList) { for (MesBom bom : bomList) {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, nowTime)); mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true,bomList.size(), nowTime));
} }
} else { } else {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true, nowTime)); mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true,MesExtConstWords.ONE, nowTime));
} }
} }
//移库 //移库
@ -1580,7 +1491,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//bom下的子节汇报总成也需要汇报 //bom下的子节汇报总成也需要汇报
if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) { if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) {
for (MesBom mesBom : mesBoms) { for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false, nowTime)); mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false,mesBoms.size(), nowTime));
} }
} }
} }
@ -1611,20 +1522,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return resultList.iterator().next(); return resultList.iterator().next();
} }
private MesProductVersion getMesProductVersion(String partNo,String organizeCode,String productVersion) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo,productVersion);
}
return mesProductVersion;
}
private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) { String sn, MesBom mesBom,Double itemQty, boolean isItemReport,Integer bomSize,String nowTime) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine(); MesProductOffLine newMesProductOffLine = new MesProductOffLine();
BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); newMesProductOffLine.setReportPartNo(mesBom.getPartNo());
@ -1654,6 +1553,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime); newMesProductOffLine.setDescription(nowTime);
newMesProductOffLine.setBomTotalSize(bomSize);
newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString()); newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString());
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser()); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser());
return newMesProductOffLine; return newMesProductOffLine;
@ -1817,7 +1717,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//校验标识 //校验标识
//若工单类型为排序 //若工单类型为排序
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
//校验产线类型和工单类型是否匹配 //校验产线类型和工单类型是否匹配
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) {
@ -1826,23 +1725,15 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
//校验物料生产版本是否存在 //校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion(item); MesProductVersion mesProductVersion = getMesProductVersion(item.getOrganizeCode(), item.getPartNo(), item.getProductVersion());
item.setProductVersion(mesProductVersion.getProductVersion()); item.setProductVersion(mesProductVersion.getProductVersion());
//获取bom信息
List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
//发送工单信息给WMS
saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList));
} }
item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
item.setFid(UUID.randomUUID().toString()); item.setFid(UUID.randomUUID().toString());
ConvertBean.serviceModelInitialize(item, userName); ConvertBean.serviceModelInitialize(item, userName);
MesWorkOrder mesWorkOrder = workOrderRepository.insert(item); MesWorkOrder mesWorkOrder = workOrderRepository.insert(item);
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
mesWorkOrderToWmsRDao.saveAll(saveMesWorkOrderToWms);
}
saveMesWorkOrderLog(mesWorkOrder); saveMesWorkOrderLog(mesWorkOrder);
mesWorkOrderList.add(mesWorkOrder); mesWorkOrderList.add(mesWorkOrder);
} }
@ -1880,13 +1771,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
} }
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
//排序工单数量为1 //排序工单数量为1
bean.setQty(1d); bean.setQty(1d);
//生成工单号 //生成工单号
bean.setWorkOrderNo(getOrderNo(bean)); bean.setWorkOrderNo(getOrderNo(bean));
//发送工单给WMS //自动发布
List<MesWorkOrderPart> orderPartList = sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); List<MesWorkOrderPart> orderPartList = autoPublish(bean);
//顺序号 //顺序号
bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean));
//生成客户条码 //生成客户条码
@ -1895,7 +1785,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
insertMesWorkOrder(bean, orderPartList); insertMesWorkOrder(bean, orderPartList);
//物料名称不存在,从物料信息中获取 //物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
bean.setPartName(mesPart.getPartName()); bean.setPartName(mesPart.getPartName());
bean.setUnit(mesPart.getUnit()); bean.setUnit(mesPart.getUnit());
//生产时间新增取当天 //生产时间新增取当天
@ -1906,11 +1796,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
bean.setUnCompleteQty(bean.getQty()); bean.setUnCompleteQty(bean.getQty());
bean.setFid(UUID.randomUUID().toString()); bean.setFid(UUID.randomUUID().toString());
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
baseRDao.insert(bean); baseRDao.insert(bean);
workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty());
@ -1941,20 +1826,15 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
bean.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); bean.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName());
} }
bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
//非试制单 //非试制单
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) {
ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空"); ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空");
//校验物料生产版本是否存在 //校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion(bean); MesProductVersion mesProductVersion = getMesProductVersion(bean.getOrganizeCode(), bean.getPartNo(), bean.getProductVersion());
bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode());
//获取bom信息
List<MesBom> bomList = mesBomService.findMesBomByPartNoAndBomVersion(bean.getPartNo(), bean.getOrganizeCode(), mesProductVersion.getAlternativePartList());
//发送工单信息给WMS
saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(bean, bomList));
} }
//物料名称不存在,从物料信息中获取 //物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
bean.setPartName(mesPart.getPartName()); bean.setPartName(mesPart.getPartName());
bean.setUnit(mesPart.getUnit()); bean.setUnit(mesPart.getUnit());
//生产时间新增取当天 //生产时间新增取当天
@ -1966,31 +1846,25 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
bean.setUnCompleteQty(bean.getQty()); bean.setUnCompleteQty(bean.getQty());
bean.setFid(UUID.randomUUID().toString()); bean.setFid(UUID.randomUUID().toString());
bean.setWorkOrderNo(getOrderNo(bean)); bean.setWorkOrderNo(getOrderNo(bean));
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
baseRDao.insert(bean); baseRDao.insert(bean);
workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty());
} }
private void insertBtoWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { private void insertBtoWorkOrder(MesWorkOrder bean) {
ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空"); ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空");
ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空"); ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空");
if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) {
MesException.throwMesBusiException("生产数量不能小于等于0"); MesException.throwMesBusiException("生产数量不能小于等于0");
} }
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
//顺序号 //顺序号
bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean));
//生成工单号 //生成工单号
bean.setWorkOrderNo(getOrderNo(bean)); bean.setWorkOrderNo(getOrderNo(bean));
//发送工单给WMS //自动发布
sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); autoPublish(bean);
//物料名称不存在,从物料信息中获取 //物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
bean.setPartName(mesPart.getPartName()); bean.setPartName(mesPart.getPartName());
bean.setUnit(mesPart.getUnit()); bean.setUnit(mesPart.getUnit());
//生产时间新增取当天 //生产时间新增取当天
@ -2001,11 +1875,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
bean.setUnCompleteQty(bean.getQty()); bean.setUnCompleteQty(bean.getQty());
bean.setFid(UUID.randomUUID().toString()); bean.setFid(UUID.randomUUID().toString());
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
//生成WorkOrderSeq //生成WorkOrderSeq
GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ);
List<String> resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); List<String> resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList();
@ -2014,24 +1883,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty());
} }
public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList) {
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
MesWorkOrderToWms mesWorkOrderToWms = null;
for (MesBom mesBom : mesBomList) {
mesWorkOrderToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesWorkOrderToWms.setUnit(mesBom.getUnit());
mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo());
mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName());
mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit());
mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty()));
ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser());
mesWorkOrderToWmsList.add(mesWorkOrderToWms);
}
return mesWorkOrderToWmsList;
}
public void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) { public void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) {
//查询物料信息 //查询物料信息
@ -2050,7 +1901,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode()); MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
} }
//获取生产版本 //获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
//物料+生产版本获取bom信息 //物料+生产版本获取bom信息
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
@ -2095,19 +1946,79 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
mesProductOffLineRDao.saveAll(mesProductOffLineList); mesProductOffLineRDao.saveAll(mesProductOffLineList);
} }
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) {
//修改工单,需要重新同步 @Override
mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); public void doSendMesWorkOrderToWms(String organizeCode, Integer pageSize, String userName) {
ConvertBean.serviceModelUpdate(mesWorkOrder, userName); List<MesWorkOrder> mesWorkOrderListToWms = getMesWorkOrderListToWms(organizeCode, pageSize);
workOrderRepository.update(mesWorkOrder); if (CollectionUtils.isEmpty(mesWorkOrderListToWms)) {
//保存记录 log.info("工厂:{}不存在未推送的工单", organizeCode);
saveMesWorkOrderLog(mesWorkOrder); }
//获取物料信息
Map<String, MesPart> partMap = BeanMapUtilsExt.getBeanMap(mesPartRDao, "partNo", organizeCode, mesWorkOrderListToWms.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()), "物料信息");
// 根据零件加生产版本分组
Map<String, List<MesWorkOrder>> mesWorkOrderListToWmsMap = mesWorkOrderListToWms.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getPartNo()).add(t.getProductVersion()).toString()));
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
List<String> workOrderNoList = new ArrayList<>();
for (Map.Entry<String, List<MesWorkOrder>> workOrderMap : mesWorkOrderListToWmsMap.entrySet()) {
List<MesBom> bomExpendList = null;
List<MesBom> bomList = null;
MesProductVersion productVersion = null;
try {
productVersion = getMesProductVersion(organizeCode, workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], workOrderMap.getKey().split(MesExtConstWords.COMMA)[1]);
bomList = findMesBomByPartNoAndBomVersion(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], organizeCode, productVersion.getAlternativePartList());
} catch (ImppBusiException e) {
log.info("工厂:{} 信息{}",organizeCode,e.getErrorDetail());
continue;
}
//数据处理
for (MesWorkOrder workOrder : workOrderMap.getValue()) {
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomList, userName, false));
workOrderNoList.add(workOrder.getWorkOrderNo());
//BOT工单只拆一层
try {
if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == workOrder.getWorkOrderType() && partMap.containsKey(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0])) {
bomExpendList = Objects.isNull(bomExpendList) ? findBomList(organizeCode, partMap.get(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]), productVersion.getAlternativePartList()) : bomExpendList;
mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomExpendList, userName, true));
}else {
log.info("工厂:{}BTO工单{}物料:{}信息不存在", organizeCode, workOrder.getWorkOrderNo(), workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]);
}
} catch (ImppBusiException e) {
log.info("工单:{} BOT工单只拆一层异常{}",workOrder.getWorkOrderNo(),e.getErrorDetail());
}
} }
}
//数据持久化
mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList);
//更新工单状态为已同步
updateMesWorkOrder(organizeCode, userName, workOrderNoList);
}
private void updateMesWorkOrder(String organizeCode, String userName, List<String> workOrderNoList) {
if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (workOrderNoList.size() == MesExtConstWords.ONE) {
DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean);
} else {
DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean);
}
baseRDao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "syncToWms"}, new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.VALID}, packBean);
}
public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) {
MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
mesWorkOrderLogRepository.insert(workOrderLog); mesWorkOrderLogRepository.insert(workOrderLog);
} }
private List<MesWorkOrder> getMesWorkOrderListToWms(String organizeCode, Integer pageSize) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBean);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, "syncToWms", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBean);
return baseRDao.findByHqlTopWhere(packBean, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize);
}
public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) { public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) {
List<MesBom> bomData = new ArrayList<>(); List<MesBom> bomData = new ArrayList<>();
// 递归展开 BOM // 递归展开 BOM
@ -2445,7 +2356,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//查询数据 //查询数据
List<MesWorkOrderAssembly> orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List<MesWorkOrderAssembly> orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderPart> orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List<MesWorkOrderPart> orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderToWms> toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderLog> orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List<MesWorkOrderLog> orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesQueueOrder> queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List<MesQueueOrder> queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn()); MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn());
@ -2454,14 +2364,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
List<MesWorkOrder> newWrkOrderList = new ArrayList<>(); List<MesWorkOrder> newWrkOrderList = new ArrayList<>();
List<MesWorkOrderAssembly> newOrderAssemblyList = new ArrayList<>(); List<MesWorkOrderAssembly> newOrderAssemblyList = new ArrayList<>();
List<MesWorkOrderPart> newOrderPartList = new ArrayList<>(); List<MesWorkOrderPart> newOrderPartList = new ArrayList<>();
List<MesWorkOrderToWms> newToWmsList = new ArrayList<>();
List<MesWorkOrderLog> newOrderLogList = new ArrayList<>(); List<MesWorkOrderLog> newOrderLogList = new ArrayList<>();
List<MesProduceSn> newProduceSnList = new ArrayList<>(); List<MesProduceSn> newProduceSnList = new ArrayList<>();
List<MesQueueOrder> newQueueOrderList = new ArrayList<>(); List<MesQueueOrder> newQueueOrderList = new ArrayList<>();
List<MesPrintQueue> newPrintQueueList = new ArrayList<>(); List<MesPrintQueue> newPrintQueueList = new ArrayList<>();
MesWorkOrderAssembly newOrderAssembly = null; MesWorkOrderAssembly newOrderAssembly = null;
MesWorkOrderPart newOrderPart = null; MesWorkOrderPart newOrderPart = null;
MesWorkOrderToWms newOrderPartToWms = null;
MesWorkOrderLog orderLog = null; MesWorkOrderLog orderLog = null;
MesProduceSn newProduceSn = null; MesProduceSn newProduceSn = null;
MesQueueOrder newQueueOrder = null; MesQueueOrder newQueueOrder = null;
@ -2495,15 +2403,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newOrderPartList.add(newOrderPart); newOrderPartList.add(newOrderPart);
} }
} }
//工单发送给WMS数据
if (!CollectionUtils.isEmpty(toWmsList)) {
for (MesWorkOrderToWms toWms : toWmsList) {
newOrderPartToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(toWms, newOrderPartToWms, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newToWmsList.add(newOrderPartToWms);
}
}
//生产工单日志 //生产工单日志
if (!CollectionUtils.isEmpty(orderLogList)) { if (!CollectionUtils.isEmpty(orderLogList)) {
for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { for (MesWorkOrderLog mesWorkOrderLog : orderLogList) {
@ -2557,9 +2456,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (!CollectionUtils.isEmpty(newOrderLogList)) { if (!CollectionUtils.isEmpty(newOrderLogList)) {
workOrderLogService.insertBatch(newOrderLogList); workOrderLogService.insertBatch(newOrderLogList);
} }
if (!CollectionUtils.isEmpty(newToWmsList)) {
mesWorkOrderToWmsService.insertBatch(newToWmsList);
}
if (!CollectionUtils.isEmpty(newQueueOrderList)) { if (!CollectionUtils.isEmpty(newQueueOrderList)) {
queueOrderRao.saveAll(newQueueOrderList); queueOrderRao.saveAll(newQueueOrderList);
} }
@ -2600,4 +2496,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1)); return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1));
} }
private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) {
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion);
}
return mesProductVersion;
}
private MesProductVersion getMesProductVersion(String organizeCode, String partNo) {
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, null);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", partNo);
}
return mesProductVersion;
}
} }

@ -1,9 +1,11 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToWmsService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToWmsService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesBom; import cn.estsh.i3plus.pojo.mes.bean.MesBom;
@ -28,18 +30,19 @@ import java.util.List;
public class MesWorkOrderToWmsServiceImpl extends BaseMesService<MesWorkOrderToWms> implements IMesWorkOrderToWmsService { public class MesWorkOrderToWmsServiceImpl extends BaseMesService<MesWorkOrderToWms> implements IMesWorkOrderToWmsService {
@Override @Override
public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList) { public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList,String userName,boolean flag) {
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>(); List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
MesWorkOrderToWms mesWorkOrderToWms = null; MesWorkOrderToWms mesWorkOrderToWms = null;
for (MesBom mesBom : mesBomList) { for (MesBom mesBom : mesBomList) {
mesWorkOrderToWms = new MesWorkOrderToWms(); mesWorkOrderToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, MesExtConstWords.ID);
mesWorkOrderToWms.setUnit(mesBom.getUnit()); mesWorkOrderToWms.setUnit(mesBom.getUnit());
mesWorkOrderToWms.setFlag(flag ? CommonEnumUtil.VALID : CommonEnumUtil.FALSE);
mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo());
mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName());
mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit()); mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit());
mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty())); mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty()));
ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser()); ConvertBean.serviceModelInitialize(mesWorkOrderToWms, userName);
mesWorkOrderToWmsList.add(mesWorkOrderToWms); mesWorkOrderToWmsList.add(mesWorkOrderToWms);
} }
return mesWorkOrderToWmsList; return mesWorkOrderToWmsList;

Loading…
Cancel
Save