diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java index 2da87b4..b41cd7f 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -15,15 +16,6 @@ import java.util.Optional; public interface IMesProductionProcessContextStepService { - @ApiOperation(value = "存储上下文对象") - Boolean doCacheContext(StationRequestBean reqBean, String item, Object o); - - @ApiOperation(value = "获取上下文对象") - String getCachedContext(StationRequestBean reqBean, String item); - - @ApiOperation(value = "获取展示组件MODULE_CONTENT内容") - List> getCachedModuleContext(StationRequestBean reqBean); - @ApiOperation(value = "存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】") Boolean doCacheProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); @@ -90,4 +82,29 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "发送设备质量信息") void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext); + + @ApiOperation(value = "存储展示组件MODULE_CONTENT内容") + Boolean doCacheModuleContext(StationRequestBean reqBean, List> dataList); + + @ApiOperation(value = "获取展示组件MODULE_CONTENT内容") + List> getCachedModuleContext(StationRequestBean reqBean); + + @ApiOperation(value = "存储上个扫描/读取信息") + Boolean doCacheLastScanContext(StationRequestBean reqBean, List dataList); + + @ApiOperation(value = "获取上个扫描/读取信息") + List getCachedLastScanContext(StationRequestBean reqBean); + + @ApiOperation(value = "发送工步内容") + void doSendStepContextMessage(StationRequestBean reqBean); + + @ApiOperation(value = "发送工步内容") + void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source); + + @ApiOperation(value = "发送工步内容") + void sendStepContextMessage(StationRequestBean reqBean, List resultList); + + + + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java index 5a9edc9..18265ed 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import io.swagger.annotations.ApiOperation; @@ -26,5 +27,7 @@ public interface IMesWorkOrderService { @ApiOperation(value = "查询工单") public ListPager queryMesWorkOrderListByPager(MesWorkOrder workOrder, Pager pager); + void doProductReport(List mesProduceSnList); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java index c56c0fb..40bd1f8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java @@ -3,6 +3,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -11,9 +13,9 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * @Description : @@ -58,4 +60,18 @@ public class MesWorkOrderController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @PostMapping(value = "/doProductReport") + @ApiOperation(value = "生产报工") + public ResultBean doProductReport(@RequestBody List mesProduceSnList) { + try { + workOrderService.doProductReport(mesProduceSnList); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 9267db7..5143d22 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -1,20 +1,27 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; -import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description : @@ -30,7 +37,18 @@ public class MesWorkOrderService implements IMesWorkOrderService { @Autowired private MesWorkOrderRepository workOrderRepository; - + @Autowired + private MesProductVersionRepository mesProductVersionRDao; + @Autowired + private MesBomRepository mesBomRDao; + @Autowired + private MesWorkCenterRepository mesWorkCenterRDao; + @Autowired + private MesPartRepository mesPartRDao; + @Autowired + private MesProductPlanRepository mesProductPlanRDao; + @Autowired + private MesProductOffLineRepository mesProductOffLineRDao; @Override public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { @@ -76,4 +94,180 @@ public class MesWorkOrderService implements IMesWorkOrderService { return packBean; } + + @Override + public void doProductReport(List mesProduceSnList) { + //新增初始化 + String organizeCode = AuthUtil.getOrganizeCode(); + String userName = AuthUtil.getSessionUser().getUserName(); + + Map> mesWorkOrderMap = mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getPartNo)); + Map mesPartMap = new HashMap<>(); + MesPart mesPart = null; + //查询工单状态 + Integer[] orderStatus =new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.process.getValue()}; + for (Map.Entry> mesProduceSn : mesWorkOrderMap.entrySet()) { + List mesWorkOrderList = mesProduceSn.getValue(); + //获取物料信息 + if(mesPartMap.containsKey(mesProduceSn.getKey())){ + mesPart = mesPartMap.get(mesProduceSn.getKey()); + }else{ + //查询物料信息 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesProduceSn.getKey(), "partNo", ddlPackBean); + mesPart = mesPartRDao.getByProperty(ddlPackBean); + if(Objects.isNull(mesPart)){ + throw new ImppBusiException(String.format("物料【%s】信息不存在", mesProduceSn.getKey())); + } + mesPartMap.put(mesProduceSn.getKey(),mesPart); + } + //根据物料获取已发布的工单 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getInPackArray(orderStatus, "workOrderStatus", ddlPackBean); + MesWorkOrder oldMesWorkOrder = workOrderRepository.getByProperty(ddlPackBean); + if(Objects.isNull(oldMesWorkOrder)){ + throw new ImppBusiException(String.format("物料【%s】状态未已发布的工单信息不存在", mesPart.getPartNo())); + } + //查询工作中心 + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getWorkCenterCode(), "workCenterCode", ddlPackBean); + MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesWorkCenter)) { + throw new ImppBusiException(String.format("产线【%s】不存在", oldMesWorkOrder.getWorkCenterCode())); + } + //获取生产版本 + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); + MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); + if (null == mesProductVersion) { + throw new ImppBusiException(String.format("物料【%s】生产版本信息不存在", mesPart.getPartNo())); + } + //物料+生产版本获取bom信息 + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean); + List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesBoms)) { + throw new ImppBusiException(String.format("物料【%s】生产版本【%s】对应bom信息不存在", + mesPart.getPartNo(), mesProductVersion.getProductVersion())); + } + oldMesWorkOrder.setNum(mesWorkOrderList.size()); + oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); + //更新SAP计划完成数量 + saveMesProductPlan(oldMesWorkOrder, false, true); + + //更新工单状态 + double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); + oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); + if (oldMesWorkOrder.getReportedQty() > oldMesWorkOrder.getQty()) { + throw new ImppBusiException(String.format("工单报工数量【%s】大于工单数量【%s】,不允许报工", + oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())); + } else if (Objects.equals(oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())) { + oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } else { + oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.process.getValue()); + } + ConvertBean.serviceModelUpdate(oldMesWorkOrder,userName); + workOrderRepository.update(oldMesWorkOrder); + //保存数据 + List mesProductOffLineList = new ArrayList<>(); + MesProductOffLine newMesProductOffLine; + for (MesProduceSn produceSn : mesWorkOrderList) { + for (MesBom mesBom : mesBoms) { + newMesProductOffLine = new MesProductOffLine(); + newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); + newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartNameRdd()); + newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); + newMesProductOffLine.setItemPartNameRdd(mesBom.getItemPartName()); + newMesProductOffLine.setItemQty(mesBom.getItemQty()); + newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setQty(1d); + newMesProductOffLine.setReportSn(produceSn.getProductSn()); + newMesProductOffLine.setBomVersion(oldMesWorkOrder.getProductVersion()); + newMesProductOffLine.setSerialNumber(produceSn.getProductSn()); + newMesProductOffLine.setUnit(mesBom.getUnit()); + newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); + newMesProductOffLine.setWorkOrderNo(oldMesWorkOrder.getWorkOrderNo()); + newMesProductOffLine.setWorkCenterCode(oldMesWorkOrder.getWorkCenterCode()); + newMesProductOffLine.setWorkCellCode(oldMesWorkOrder.getWorkCellCode()); + newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType()); + newMesProductOffLine.setSapWorkCenter(oldMesWorkOrder.getErpWorkCenter()); + newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); + + ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); + mesProductOffLineList.add(newMesProductOffLine); + } + } + mesProductOffLineRDao.saveAll(mesProductOffLineList); + } + } + + private void saveMesProductPlan(MesWorkOrder bean, boolean isInsert, boolean isReport) { + if (StringUtil.isEmpty(bean.getPlanOrderNo())) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(bean.getPlanStartTime(), "planStartDate", ddlPackBean); + DdlPreparedPack.getStringEqualPack(bean.getPlanEndTime(), "planEndDate", ddlPackBean); + MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); + if (null == mesProductPlan) { + MesProductPlan mesPlanOrder = new MesProductPlan(); + mesPlanOrder.setPlanOrderNo(""); + mesPlanOrder.setPlanQty(bean.getQty()); + mesPlanOrder.setPlanPartNo(bean.getPartNo()); + mesPlanOrder.setCompleteQty(0d); + mesPlanOrder.setUncompleteQty(bean.getQty()); + mesPlanOrder.setUnit(bean.getUnit()); + mesPlanOrder.setPlanStartDate(bean.getPlanStartTime()); + mesPlanOrder.setPlanEndDate(bean.getPlanEndTime()); + mesPlanOrder.setPartMappingWorkCenterCode(bean.getErpWorkCenter()); + mesPlanOrder.setPlanOrganizeCode(bean.getOrganizeCode()); + mesPlanOrder.setOrganizeCode(bean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(mesPlanOrder, bean.getCreateUser()); + mesProductPlanRDao.insert(mesPlanOrder); + } else { + if (isInsert) { + mesProductPlan.setPlanQty(MathOperation.add(mesProductPlan.getPlanQty(), bean.getQty())); + } else { + //报工 + if (isReport) { + mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); + //报工调整 + } else { + mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); + } + } + mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); + ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); + mesProductPlanRDao.update(mesProductPlan); + } + } else { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getPlanOrderNo(), "planOrderNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); + MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); + if (null == mesProductPlan) { + throw new ImppBusiException(String.format("SAP计划单号【%s】物料【%s】,不存在", bean.getPlanOrderNo(), bean.getPartNo())); + } + if (!isInsert) { + if (Objects.isNull(mesProductPlan.getCompleteQty())) { + mesProductPlan.setCompleteQty(0d); + } + //报工 + if (isReport) { + mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); + //报工调整 + } else { + mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); + } + mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); + ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); + mesProductPlanRDao.update(mesProductPlan); + } + } + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/ReadWorkResultStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/ReadWorkResultStepService.java deleted file mode 100644 index 8c0c255..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/ReadWorkResultStepService.java +++ /dev/null @@ -1,203 +0,0 @@ -/* -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step; - -import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; -import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; -import cn.estsh.i3plus.platform.common.util.MesConstWords; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipment; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentInterfaceInfo; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentParam; -import cn.estsh.i3plus.pojo.mes.bean.MesWcEquipment; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -import cn.estsh.i3plus.pojo.mes.model.StepResult; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentInterfaceInfoRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentParamRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesWcEquipmentRepository; -import cn.estsh.impp.framework.boot.auth.AuthUtil; -import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -*/ -/** - * @Description : 读取加工结果 - * @Reference : - * @Author : xiangwei.zhang - * @CreateDate : 2024-04-22 - * @Modify: - **//* - -@Slf4j -@Service("jxSnLineOnCheckMcOrPsStepService") -public class ReadWorkResultStepService extends BaseStepService { - - @Autowired - private MesWcEquipmentRepository wcEquipmentRepository; - - @Autowired - private MesEquipmentRepository equipmentRepository; - - @Autowired - private MesEquipmentParamRepository equipmentParamRepository; - - @Autowired - private MesEquipmentInterfaceInfoRepository mesEquipmentInterfaceInfoRepository; - - @Override - public StepResult init(StationRequestBean reqBean) { - reqBean.setSerialNumber(null); - reqBean.setProductSn(null); - reqBean.setTray(null); - clearStepContent(reqBean); - return super.init(reqBean); - } - - */ -/** - * ⑴ 根据工序对应的设备获取设备参数, 查询条件: 变量类型 ---> equParamList。 - * ⑵ 从equParamList中筛选 一个点位: 加工模式, 条件: 二级类别。 - * ⑶ 从equParamList中筛选 多个点位: 加工结果, 条件: 二级类别。 - * 点位结果类型:成功, 失败, 报废, 可疑。 - * 一个类型对应一个点位, 最多包含四个, 至少包含成功类型。 - * ⑷ 分别根据 设备对应的变量配置类型+二级类别+变量类型获取各个点位的接口逻辑配置信息。 - * ⑸ 读取设备ID对应的DB设备分表的数据, 查询条件: 点位+状态。 - * 判断接口逻辑是否打勾常变值, 打勾查询条件带上 状态等于0 (暂定0)。 - * 不打勾无需带上状态条件,且只读一次。 - * ⑹ 根据加工模式点位读取数据,判断值是否匹配接口逻辑的参考值。执行逻辑详见流程图。 - * ⑺根据类型结果点位读取数据, 轮询读取, 有值时判断是否匹配参考值, 不匹配继续轮询读取, 匹配则结 - * 束本次读取逻辑, 如果匹配的类型是成功/报废/可疑类型则可进入下个工步, 否则从头开始, 无值继续 - * 轮询读取。执行逻辑详见流程图。 - * ⑻每次读取有值时均需要直接修改当前点位数据的状态改为1(暂定1)与时间改为当前时间。 - * @param reqBean - * @return - *//* - - @Override - public StepResult execute(StationRequestBean reqBean) { - // 1 获取工位信息 - String workCell = reqBean.getWorkCellCode(); - // 2 根据工位在组织模型中获取设备信息编号 - MesWcEquipment mesWcEquipment = wcEquipmentRepository.getByProperty( - new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "workCellCode"}, - new Object[]{AuthUtil.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), - CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCell}); - if (null == mesWcEquipment) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工位代码【%s】无效", workCell) - .build(); - } - // 3 查询设备信息 - MesEquipment mesEquipmentDb = equipmentRepository.getByProperty( - new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "equipmentCode"}, - new Object[]{mesWcEquipment.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), - CommonEnumUtil.IS_VAILD.VAILD.getValue(), mesWcEquipment.getEquipmentCode()}); - if (null == mesEquipmentDb) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("设备代码【%s】无效", mesWcEquipment.getEquipmentCode()) - .build(); - } - //4 查询设备参数信息 - List mesEquipmentParamList = equipmentParamRepository.findByProperty( - new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "equipmentCode"}, - new Object[]{mesWcEquipment.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), - CommonEnumUtil.IS_VAILD.VAILD.getValue(), mesWcEquipment.getEquipmentCode()}); - if (CollectionUtils.isEmpty(mesEquipmentParamList)) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("设备代码【%s】无效", mesWcEquipment.getEquipmentCode()) - .build(); - } - // - List mesEquipmentParams = mesEquipmentParamList.stream().filter(mesEquipParam -> Objects.equals(mesEquipParam.getVariableType(), cn.estsh.i3plus.ext.mes.pojo.util.MesPcnExtEnumUtil.EQUIPMENT_VARIABLE_TYPE.PRODUCTION_PARAM.getValue())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(mesEquipmentParams)) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("未配置加工结果", mesWcEquipment.getEquipmentCode()) - .build(); - } - // 从equParamList中筛选 一个点位: 加工模式, 条件: 二级类别。 - List mesEquipmentParamsModel = mesEquipmentParamList.stream().filter(mesEquipParam -> Objects.equals(mesEquipParam.getVariableType(), cn.estsh.i3plus.ext.mes.pojo.util.MesPcnExtEnumUtil.EQUIPMENT_VARIABLE_TYPE.PRODUCTION_PARAM.getValue())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(mesEquipmentParams)) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("未配置加工模式", mesWcEquipment.getEquipmentCode()) - .build(); - } - // 从equParamList中筛选 多个点位: 加工结果, 条件: 二级类别。 - List mesEquipmentParamsResult = mesEquipmentParamList.stream().filter(mesEquipParam -> Objects.equals(mesEquipParam.getVariableType(), cn.estsh.i3plus.ext.mes.pojo.util.MesPcnExtEnumUtil.EQUIPMENT_VARIABLE_TYPE.PRODUCTION_PARAM.getValue())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(mesEquipmentParams)) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("未配置加工结果", mesWcEquipment.getEquipmentCode()) - .build(); - } - for (MesEquipmentParam mesEquipmentParam : mesEquipmentParamsModel) { - // 查询设备接口逻辑维护(可以拿到 查询的值以及对应的参考值) 有4个点位 成功 失败 报废 可疑 - List mesEquipmentInterfaceInfoList = mesEquipmentInterfaceInfoRepository.findByProperty( - new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "variableConfigType", "secondCategory"}, - new Object[]{mesWcEquipment.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), - CommonEnumUtil.IS_VAILD.VAILD.getValue(), mesEquipmentDb.getVariableConfigType(), mesEquipmentParam.getSecondCategory()}); - if (CollectionUtils.isEmpty(mesEquipmentInterfaceInfoList)) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("设备接口逻辑维护信息缺失", mesWcEquipment.getEquipmentCode()) - .build(); - } - MesEquipmentInterfaceInfo mesEquipmentInterfaceInfo = mesEquipmentInterfaceInfoList.get(0); - // 查询设备数据采集表 - boolean flag = Objects.equals(mesEquipmentInterfaceInfo.getIsOftenChangeValue(), 1); - Integer status = 1; - if (flag) { - status = 0; - } - //根据加工模式点位读取数据,判断值是否匹配接口逻辑的参考值 需要带条件 状态=0 - // readEquipmentInfo(); - String res = ""; - //res = readEquipmentInfo(); - if (StringUtils.isEmpty(res)) { - // 无结果 - } else if (Objects.equals(res, mesEquipmentInterfaceInfo.getReferValue())) { - // 手动 - // todo 修改状态为1 进入下一个工步 - return StepResult.getSuccessComplete(""); - } else { - // 自动/半自动 - // todo 修改状态为1 - - } - } - - - // todo 查询数据库看设备的返回信息 与 逻辑维护的数据进行匹配,匹配成功则直接 - //todo 根据设备id找到分表,然后查询 - - - - - - return stepResult; - } - - private - -} -*/ diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchBackValueService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchBackValueService.java index ac78c6b..9d6028d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchBackValueService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchBackValueService.java @@ -31,7 +31,7 @@ public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRule for (MesEquipVariableCollectContext equipVariableCollectContext : collectContext.getEquipVariableCollectContextList()) { - if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue; + if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue; if (CollectionUtils.isEmpty(backList)) backList = new ArrayList<>(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java index 53916b2..0d362a5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java @@ -28,6 +28,7 @@ import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; /** * @Description : 读装配件条码工步 @@ -50,6 +51,15 @@ public class MesAssemblyReadStepService extends BaseStepService { private IMesMouldMultiCavityService mouldMultiCavityService; @Override + public StepResult init(StationRequestBean reqBean) { + + productionProcessContextStepService.doSendStepContextMessage(reqBean); + + return super.init(reqBean); + + } + + @Override public StepResult execute(StationRequestBean reqBean) { StationResultBean resultBean = new StationResultBean(); @@ -115,9 +125,11 @@ public class MesAssemblyReadStepService extends BaseStepService { //保存设备当前一轮工序待验证的装配件条码信息 productionProcessContext.assemblySnJson(equipVariableCollectContextList); + productionProcessContextStepService.doSendStepContextMessage(reqBean, + equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + return stepResult; } - } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java index 37ee7c1..524e3fe 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,7 +30,11 @@ public class MesAssemblyScanStepService extends BaseStepService { @Override public StepResult guide(StationRequestBean reqBean) { + + productionProcessContextStepService.doSendStepContextMessage(reqBean); + return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean(), "请扫描装配件条码!"); + } @Override @@ -46,6 +51,8 @@ public class MesAssemblyScanStepService extends BaseStepService { //保存设备当前一轮工序待验证的装配件条码信息 productionProcessContext.assemblySnJson(getAssemblySnJson(reqBean)); + productionProcessContextStepService.doSendStepContextMessage(reqBean, reqBean.getScanInfo(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); + return stepResult; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index 5cd73e1..539a480 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -57,6 +57,15 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { private IPartService partService; @Override + public StepResult init(StationRequestBean reqBean) { + + productionProcessContextStepService.doSendStepContextMessage(reqBean); + + return super.init(reqBean); + + } + + @Override public StepResult execute(StationRequestBean reqBean) { StationResultBean resultBean = new StationResultBean(); @@ -121,13 +130,15 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); + productionProcessContextStepService.doSendStepContextMessage(reqBean, firstMouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + //验证一模多腔信息 List mouldMultiCavityList = getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), firstMouldNo, true); - //获取物料信息 + //获取零件信息 Map partDataMap = getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList); - //保存设备当前一轮工序的头道模具号,一模多腔信息,物料信息 + //保存设备当前一轮工序的头道模具号,一模多腔信息,零件信息 productionProcessContext.firstMouldNo(equipVariableCollectContextList.get(0)).mouldCavityJson(mouldMultiCavityList).partDataJson(partDataMap); //更新展示组件MODULE_CONTENT内容 @@ -164,24 +175,24 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { Map finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList); - //物料信息缺失 抛出异常 + //零件信息缺失 抛出异常 List filterList = CollectionUtils.isEmpty(finalPartDataMap) ? null : partNoList.stream().filter(o -> (null != o && !finalPartDataMap.containsKey(o))).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查物料信息,物料编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString())); + if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString())); return finalPartDataMap; } public void doCacheMoudleContext(StationRequestBean reqBean, List mouldMultiCavityList, Boolean isFirstMouldNo) { - productionProcessContextStepService.doCacheContext(reqBean, MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue(), getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo)); + productionProcessContextStepService.doCacheModuleContext(reqBean, getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo)); } private List> getModuleContextData(StationRequestBean reqBean, List mouldMultiCavityList, Boolean isFirstMouldNo) { - List> moduleContextData = new ArrayList<>(); - mouldMultiCavityList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(moduleContextData, - new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnConstWords.PART_NO, "物料编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "物料名称", o.getPartName()))); - return moduleContextData; + List> dataList = new ArrayList<>(); + mouldMultiCavityList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, + new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName()))); + return dataList; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java index f10aaca..2999797 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java @@ -51,6 +51,15 @@ public class MesMouldNoReadStepService extends BaseStepService { private MesFirstMouldNoReadStepService firstMouldNoReadStepService; @Override + public StepResult init(StationRequestBean reqBean) { + + productionProcessContextStepService.doSendStepContextMessage(reqBean); + + return super.init(reqBean); + + } + + @Override public StepResult execute(StationRequestBean reqBean) { StationResultBean resultBean = new StationResultBean(); @@ -118,6 +127,8 @@ public class MesMouldNoReadStepService extends BaseStepService { String mouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); + productionProcessContextStepService.doSendStepContextMessage(reqBean, mouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + stepResult.obj(equipVariableCollectContextList.get(0)); if (!StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) || !StringUtils.isEmpty(productionProcessContext.getWorkOrderDataJson())) return stepResult; @@ -125,10 +136,10 @@ public class MesMouldNoReadStepService extends BaseStepService { //磨具号当头道模具号的使用 List mouldMultiCavityList = firstMouldNoReadStepService.getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), mouldNo, false); - //获取物料信息 + //获取零件信息 Map partDataMap = firstMouldNoReadStepService.getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList); - //保存设备当前一轮工序的一模多腔信息,物料信息 + //保存设备当前一轮工序的一模多腔信息,零件信息 productionProcessContext.mouldCavityJson(mouldMultiCavityList).partDataJson(partDataMap); //更新展示组件MODULE_CONTENT内容 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java index cf4351d..1637270 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java @@ -46,6 +46,15 @@ public class MesProductResultReadStepService extends BaseStepService { private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; @Override + public StepResult init(StationRequestBean reqBean) { + + productionProcessContextStepService.doSendStepContextMessage(reqBean); + + return super.init(reqBean); + + } + + @Override public StepResult execute(StationRequestBean reqBean) { StationResultBean resultBean = new StationResultBean(); @@ -91,7 +100,7 @@ public class MesProductResultReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - if (stepResult.isCompleted()) matchProductResult(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, collectContextList); + matchProductResult(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, collectContextList); productionProcessContextStepService.doCacheProductionProcessContext(reqBean, productionProcessContext); @@ -120,6 +129,9 @@ public class MesProductResultReadStepService extends BaseStepService { for (Map.Entry> entry : variableCategoryMap.entrySet()) { if (null == entry) continue; if (!(Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, entry.getKey(), entry.getValue())) continue; + + productionProcessContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription())); return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.obj(entry.getKey()), true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java index 40eee53..d36c3d0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java @@ -28,6 +28,7 @@ import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; /** * @Description : 读主条码工步 @@ -50,6 +51,15 @@ public class MesProductSnReadStepService extends BaseStepService { private IMesMouldMultiCavityService mouldMultiCavityService; @Override + public StepResult init(StationRequestBean reqBean) { + + productionProcessContextStepService.doSendStepContextMessage(reqBean); + + return super.init(reqBean); + + } + + @Override public StepResult execute(StationRequestBean reqBean) { StationResultBean resultBean = new StationResultBean(); @@ -115,6 +125,9 @@ public class MesProductSnReadStepService extends BaseStepService { //保存设备当前一轮工序的待验证的主条码信息 productionProcessContext.productSnJson(equipVariableCollectContextList); + productionProcessContextStepService.doSendStepContextMessage(reqBean, + equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + return stepResult; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java index a39891a..42426b8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; @@ -22,10 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -48,22 +46,6 @@ public class MesProductionProcessContextStepService extends BaseStepService impl private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); } @Override - public Boolean doCacheContext(StationRequestBean reqBean, String item, Object o) { - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), item, JSONObject.toJSONString(o)); - } - - @Override - public String getCachedContext(StationRequestBean reqBean, String item) { - return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), item); - } - - @Override - public List> getCachedModuleContext(StationRequestBean reqBean) { - String moduleContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); - return StringUtils.isEmpty(moduleContent) ? null : JSONObject.parseObject(moduleContent, new TypeReference>>() {}); - } - - @Override public Boolean doCacheProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesProductionProcessContext.class.getSimpleName(), JSONObject.toJSONString(productionProcessContext)); } @@ -299,4 +281,57 @@ public class MesProductionProcessContextStepService extends BaseStepService impl this.sendMessage(reqBean, resultBean); } + + + @Override + public Boolean doCacheModuleContext(StationRequestBean reqBean, List> dataList) { + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue(), JSONObject.toJSONString(dataList)); + } + + @Override + public List> getCachedModuleContext(StationRequestBean reqBean) { + String moduleContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); + return StringUtils.isEmpty(moduleContent) ? null : JSONObject.parseObject(moduleContent, new TypeReference>>() {}); + } + + @Override + public Boolean doCacheLastScanContext(StationRequestBean reqBean, List dataList) { + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO, JSONObject.toJSONString(dataList)); + } + + @Override + public List getCachedLastScanContext(StationRequestBean reqBean) { + String lastScanContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO); + return StringUtils.isEmpty(lastScanContent) ? new ArrayList<>() : JSONObject.parseArray(lastScanContent, StationKvBean.class); + } + + @Override + public void doSendStepContextMessage(StationRequestBean reqBean) { + sendStepContextMessage(reqBean, getCachedLastScanContext(reqBean)); + } + + @Override + public void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source) { + + List lastScanContext = getCachedLastScanContext(reqBean); + + StationKvBeanUtil.addStationKvBeanLimix100ThenHalf(lastScanContext, new StationKvBean().name(source.getDescription()).value(scanInfo)); + + doCacheLastScanContext(reqBean, lastScanContext); + + sendStepContextMessage(reqBean, lastScanContext); + + } + + @Override + public void sendStepContextMessage(StationRequestBean reqBean, List lastScanContext) { + StationResultBean resultBean = new StationResultBean(); + resultBean.setResultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + lastScanContext.size() > 1 ? lastScanContext.get(1).name("上次" + lastScanContext.get(1).getName()).key(MesPcnExtConstWords.LAST_SCAN_INFO) : null, + lastScanContext.size() > 0 ? lastScanContext.get(0).name("当前" + lastScanContext.get(0).getName()).key(MesPcnExtConstWords.SCAN_INFO) : null)); + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue()); + this.sendMessage(reqBean, resultBean); + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java index d9c3d64..0779488 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java @@ -44,7 +44,7 @@ public class MesProductionProcessContext { @ApiParam("工艺代码") private String craftCode; - @ApiParam("工艺代码") + @ApiParam("工艺名称") private String craftName; @ApiParam("当前工位设备对象([Json]MesCellEquipContext)") @@ -74,7 +74,7 @@ public class MesProductionProcessContext { @ApiParam("模具号") private String mouldNo; - @ApiParam("一模多腔信息") + @ApiParam("一模多腔信息(JSON LIST)") private String mouldCavityJson; @ApiParam("零件信息") diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index b1e94d5..5214ac7 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -83,10 +83,18 @@ public class MesPcnExtConstWords { public static final String AND = "&"; // 空 public static final String EMPTY = ""; + // ; + public static final String SEMICOLON = ";"; - //生产过程控制上下文 + // 生产过程控制上下文 public static final String PRODUCTION_PROCESS_CONTEXT = "PRODUCTION_PROCESS_CONTEXT"; - //定制页面名称(默认) + // 定制页面名称(默认) public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT"; + // 上个扫描信息 + public static final String LAST_SCAN_INFO = "lastScanInfo"; + + // 当前扫描信息 + public static final String SCAN_INFO = "scanInfo"; + }