排序推单

uat-temp-wj-shenshanorder
王杰 3 months ago
parent 283cc58820
commit a9cb79ff8b

@ -1,5 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi; package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg;
@ -20,7 +22,8 @@ public interface IMesQueueOrderPushService {
Integer getQueueOrderPushMaxSeq(String organizeCode, String workOrderNo); Integer getQueueOrderPushMaxSeq(String organizeCode, String workOrderNo);
@ApiOperation(value = "写入工位工单推送信息") @ApiOperation(value = "写入工位工单推送信息")
void insertQueueOrderPush(String organizeCode, String userInfo, MesProduceSn produceSn, List<MesQueueOrderPushCellCfg> queueOrderPushCellCfgList); void insertQueueOrderPush(String organizeCode, String userInfo, List<MesQueueOrderPushCellCfg> queueOrderPushCellCfgList,
MesProductionPsOutContext productionPsOutContext, MesProductionPartContext productionPartContext);
@ApiOperation(value = "根据配置查询生产队列工位推送信息") @ApiOperation(value = "根据配置查询生产队列工位推送信息")
List<MesQueueOrderPush> getQueueOrderPushList(String organizeCode, List<MesQueueOrderPushCellCfg> queueOrderPushCellCfgList); List<MesQueueOrderPush> getQueueOrderPushList(String organizeCode, List<MesQueueOrderPushCellCfg> queueOrderPushCellCfgList);

@ -1,12 +1,13 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
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.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg;
import cn.estsh.i3plus.pojo.mes.repository.MesQueueOrderPushCellCfgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesQueueOrderPushCellCfgRepository;
@ -63,18 +64,26 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService {
//写入工位工单推送信息 //写入工位工单推送信息
@Override @Override
public void insertQueueOrderPush(String organizeCode, String userInfo, MesProduceSn produceSn, List<MesQueueOrderPushCellCfg> queueOrderPushCellCfgList) { public void insertQueueOrderPush(String organizeCode, String userInfo, List<MesQueueOrderPushCellCfg> queueOrderPushCellCfgList,
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(userInfo) || null == produceSn || CollectionUtils.isEmpty(queueOrderPushCellCfgList)) return; MesProductionPsOutContext productionPsOutContext, MesProductionPartContext productionPartContext) {
Integer processSeq = getQueueOrderPushMaxSeq(organizeCode, produceSn.getWorkOrderNo()); if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(userInfo) || null == productionPsOutContext || CollectionUtils.isEmpty(queueOrderPushCellCfgList)) return;
Integer processSeq = getQueueOrderPushMaxSeq(organizeCode, productionPsOutContext.getWorkOrderNo());
for (MesQueueOrderPushCellCfg queueOrderPushCellCfg : queueOrderPushCellCfgList) { for (MesQueueOrderPushCellCfg queueOrderPushCellCfg : queueOrderPushCellCfgList) {
if (null == queueOrderPushCellCfg) continue; if (null == queueOrderPushCellCfg) continue;
MesQueueOrderPush queueOrderPush = new MesQueueOrderPush(); MesQueueOrderPush queueOrderPush = new MesQueueOrderPush();
queueOrderPush.setPushSourceCode(queueOrderPushCellCfg.getPushSourceCode()); queueOrderPush.setPushSourceCode(queueOrderPushCellCfg.getPushSourceCode());
queueOrderPush.setWorkOrderNo(produceSn.getWorkOrderNo()); queueOrderPush.setWorkOrderNo(productionPsOutContext.getWorkOrderNo());
queueOrderPush.setProductSn(produceSn.getProductSn()); queueOrderPush.setProductSn(productionPsOutContext.getProductSn());
queueOrderPush.setCustSn(produceSn.getCustSn()); queueOrderPush.setCustSn(productionPsOutContext.getCustSn());
queueOrderPush.setPartNo(productionPsOutContext.getPartNo());
queueOrderPush.setPartName(productionPsOutContext.getPartName());
queueOrderPush.setProcessSeq(processSeq); queueOrderPush.setProcessSeq(processSeq);
queueOrderPush.setQueueStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); queueOrderPush.setQueueStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue());
queueOrderPush.setProductSeq(productionPartContext.getProductSeq());
queueOrderPush.setWorkOrderSeq(productionPartContext.getWorkOrderSeq());
queueOrderPush.setCarModelCode(productionPartContext.getCarModelCode());
queueOrderPush.setCustOrderNo(productionPartContext.getCustOrderNo());
queueOrderPush.setPartProdGroupCode(productionPartContext.getPartProdGroupCode());
queueOrderPush.setAreaCode(queueOrderPushCellCfg.getAreaCode()); queueOrderPush.setAreaCode(queueOrderPushCellCfg.getAreaCode());
queueOrderPush.setWorkCenterCode(queueOrderPushCellCfg.getWorkCenterCode()); queueOrderPush.setWorkCenterCode(queueOrderPushCellCfg.getWorkCenterCode());
queueOrderPush.setSourceWorkCellCode(queueOrderPushCellCfg.getWorkCellCode()); queueOrderPush.setSourceWorkCellCode(queueOrderPushCellCfg.getWorkCellCode());

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
@ -17,8 +18,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus;
import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -59,6 +59,9 @@ public class MesProductionSortModuleService extends BaseModuleService {
@Autowired @Autowired
private MesQueueOrderRepository queueOrderRepository; private MesQueueOrderRepository queueOrderRepository;
@Autowired
private IMesQueueOrderPushService queueOrderPushService;
@Override @Override
public void init(StationRequestBean reqBean) { public void init(StationRequestBean reqBean) {
@ -93,16 +96,22 @@ public class MesProductionSortModuleService extends BaseModuleService {
// 获取工单信息 // 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
// 获取产成零件信息
List<MesProductionPartContext> productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean);
// 排除掉空腔的产成零件
productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toList());
// 发送班次班组和工单 // 发送班次班组和工单
StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext);
//封装工位展示的客制化信息 (获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条) //生产线是否推单
StationResultBean resultBeanCustom = getStationResultBean(queryQueueOrderTopFiftyProductSeq(reqBean, getNewPartProdGroupCode(reqBean, moduleContentContext, productionPartContext))); MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
Boolean isPushQueue = (StringUtils.isEmpty(workCenter.getIsPushQueue()) || workCenter.getIsPushQueue().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0) ? false : true;
//获取队列信息
//非推单【获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条】
List<MesQueueOrderModel> queueOrderModelList = !isPushQueue
? queryQueueOrderTopFiftyProductSeq(reqBean, getNewPartProdGroupCode(reqBean, moduleContentContext))
: queryQueueOrderPush(reqBean);
//封装工位展示的客制化信息
StationResultBean resultBeanCustom = getStationResultBean(queueOrderModelList);
if (null == resultBeanCustom) this.sendMessage(reqBean, resultBean); if (null == resultBeanCustom) this.sendMessage(reqBean, resultBean);
else this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue()).addStationResultBeans(resultBean).addStationResultBeans(resultBeanCustom)); else this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue()).addStationResultBeans(resultBean).addStationResultBeans(resultBeanCustom));
@ -113,6 +122,8 @@ public class MesProductionSortModuleService extends BaseModuleService {
} }
private StationResultBean getStationResultBean(List<MesQueueOrderModel> mesQueueOrderModelList) { private StationResultBean getStationResultBean(List<MesQueueOrderModel> mesQueueOrderModelList) {
if (CollectionUtils.isEmpty(mesQueueOrderModelList)) return null; if (CollectionUtils.isEmpty(mesQueueOrderModelList)) return null;
return new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()) return new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue())
@ -130,6 +141,7 @@ public class MesProductionSortModuleService extends BaseModuleService {
return attrBeanList; return attrBeanList;
} }
//获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条
private List<MesQueueOrderModel> queryQueueOrderTopFiftyProductSeq(StationRequestBean reqBean, List<String> partProdGroupCodeList) { private List<MesQueueOrderModel> queryQueueOrderTopFiftyProductSeq(StationRequestBean reqBean, List<String> partProdGroupCodeList) {
if (CollectionUtils.isEmpty(partProdGroupCodeList)) return null; if (CollectionUtils.isEmpty(partProdGroupCodeList)) return null;
@ -170,7 +182,13 @@ public class MesProductionSortModuleService extends BaseModuleService {
return queueOrderModelList; return queueOrderModelList;
} }
private List<String> getNewPartProdGroupCode(StationRequestBean reqBean, List<List<StationKvBean>> moduleContentContext, List<MesProductionPartContext> productionPartContext) { //获取零件生产组代码
private List<String> getNewPartProdGroupCode(StationRequestBean reqBean, List<List<StationKvBean>> moduleContentContext) {
// 获取产成零件信息
List<MesProductionPartContext> productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean);
// 排除掉空腔的产成零件
productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toList());
// 扫描验证完加工单才能拿到产成零件信息 // 扫描验证完加工单才能拿到产成零件信息
if (!CollectionUtils.isEmpty(productionPartContext)) { if (!CollectionUtils.isEmpty(productionPartContext)) {
@ -190,6 +208,15 @@ public class MesProductionSortModuleService extends BaseModuleService {
return queueOrder == null ? null : Stream.of(queueOrder.getPartProdGroupCode()).collect(Collectors.toList()); return queueOrder == null ? null : Stream.of(queueOrder.getPartProdGroupCode()).collect(Collectors.toList());
} }
//查询推单队列
private List<MesQueueOrderModel> queryQueueOrderPush(StationRequestBean reqBean) {
//处理排序线推单上下文, 返回推送工位类型对应的配置信息 【来源工位】
List<MesQueueOrderPushCellCfg> queueOrderPushCellCfgList = productionProcessContextStepService.dispatchQueueOrderPushCellCfgContext(reqBean, MesExtEnumUtil.QUEUE_ORDER_CELL_PUSH_TYPE.TARGET.getValue());
List<MesQueueOrderPush> queueOrderPushList =
}
private boolean checkJumpNumber(String nextWorkOrderSeq, String currentWorkOrderSeq) { private boolean checkJumpNumber(String nextWorkOrderSeq, String currentWorkOrderSeq) {
if (StringUtils.isEmpty(nextWorkOrderSeq) || StringUtils.isEmpty(currentWorkOrderSeq) || !CheckTool.isNumber(nextWorkOrderSeq) || !CheckTool.isNumber(currentWorkOrderSeq)) return false; if (StringUtils.isEmpty(nextWorkOrderSeq) || StringUtils.isEmpty(currentWorkOrderSeq) || !CheckTool.isNumber(nextWorkOrderSeq) || !CheckTool.isNumber(currentWorkOrderSeq)) return false;
return Integer.parseInt(currentWorkOrderSeq) != Integer.parseInt(nextWorkOrderSeq) + MesPcnExtConstWords.ONE; return Integer.parseInt(currentWorkOrderSeq) != Integer.parseInt(nextWorkOrderSeq) + MesPcnExtConstWords.ONE;

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
@ -17,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -62,12 +64,17 @@ public class MesWorkOrderQueuePushStepService extends BaseStepService {
String.format("生产线[%s]工位[%s]未配置[%s]类型的生产队列推送工位配置信息,当前跳过工位工单推送!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), MesExtEnumUtil.QUEUE_ORDER_CELL_PUSH_TYPE.SOURCE.getDescription())); String.format("生产线[%s]工位[%s]未配置[%s]类型的生产队列推送工位配置信息,当前跳过工位工单推送!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), MesExtEnumUtil.QUEUE_ORDER_CELL_PUSH_TYPE.SOURCE.getDescription()));
} }
//获取上下文产出条码数据信息集合 //获取上下文产出条码信息
List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); //获取上下文产出零件信息
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
if (CollectionUtils.isEmpty(productionPsOutContextList) || CollectionUtils.isEmpty(productionPartContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!");
//写入工位工单推送信息 //写入工位工单推送信息
productionPsOutContextList.stream().forEach(o -> queueOrderPushService.insertQueueOrderPush(reqBean.getOrganizeCode(), reqBean.getUserInfo(), o, queueOrderPushCellCfgList)); productionPsOutContextList.stream().forEach(o ->
queueOrderPushService.insertQueueOrderPush(reqBean.getOrganizeCode(), reqBean.getUserInfo(), queueOrderPushCellCfgList, o,
productionPartContextList.stream().filter(i -> (null != o && !StringUtils.isEmpty(i.getForeignKey()) && i.getForeignKey().compareTo(o.getForeignKey()) == 0)).findFirst().get())
);
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- PUSH_SOURCE_CODE:{}", log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- PUSH_SOURCE_CODE:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()),

Loading…
Cancel
Save