From 1401cd8734c19fd394b8752258423d29415ecd2e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?=
=?UTF-8?q?=E5=A4=A9?= <752558143@qq.com>
Date: Sat, 1 Jun 2024 18:15:50 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E6=AD=A5=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mes/pcn/api/base/IMesEquipmentLogService.java | 18 +++
.../apiservice/schedulejob/MesSaveVariableJob.java | 44 +++++++
.../serviceimpl/actor/MesHandlerEquipLogActor.java | 37 ++++++
.../serviceimpl/base/MesEquipmentLogService.java | 128 +++++++++++++++++++++
.../step/MesMouldRecordGenerateStepService.java | 7 +-
.../step/MesProductSnGenerateStepService.java | 79 ++++++++++---
.../MesVariableWhenFinishedReadStepService.java | 91 +++++++--------
.../ext/mes/pcn/pojo/model/ActorMessage.java | 33 ++++++
8 files changed, 368 insertions(+), 69 deletions(-)
create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentLogService.java
create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesSaveVariableJob.java
create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/actor/MesHandlerEquipLogActor.java
create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java
create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ActorMessage.java
diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentLogService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentLogService.java
new file mode 100644
index 0000000..4ebf7b8
--- /dev/null
+++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentLogService.java
@@ -0,0 +1,18 @@
+package cn.estsh.i3plus.ext.mes.pcn.api.base;
+
+import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
+import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
+import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
+import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.List;
+
+public interface IMesEquipmentLogService {
+
+ void saveEquipmentLogToRedis(ActorMessage actorMessage);
+
+
+ void saveEquipmentLogDetails();
+}
diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesSaveVariableJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesSaveVariableJob.java
new file mode 100644
index 0000000..caee2e0
--- /dev/null
+++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesSaveVariableJob.java
@@ -0,0 +1,44 @@
+package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob;
+
+
+import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentLogService;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+
+import java.util.Map;
+
+/**
+ * @author wangjie
+ * @version 1.0
+ * @date 2021/2/2 16:44
+ **/
+@Slf4j
+@DisallowConcurrentExecution
+@ApiOperation("保存工艺参数job")
+public class MesSaveVariableJob implements Job {
+
+ @Autowired
+ private IMesEquipmentLogService mesEquipmentLogService;
+
+ @Override
+ public void execute(JobExecutionContext jobExecutionContext) {
+
+ log.info("保存工艺参数job -- START ");
+
+ long startTime = System.currentTimeMillis();
+
+ mesEquipmentLogService.saveEquipmentLogDetails();
+
+ long endTime = System.currentTimeMillis();
+
+ log.info("保存工艺参数job --- END --- 耗时: {} ms", endTime - startTime);
+
+ }
+}
diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/actor/MesHandlerEquipLogActor.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/actor/MesHandlerEquipLogActor.java
new file mode 100644
index 0000000..7bf183d
--- /dev/null
+++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/actor/MesHandlerEquipLogActor.java
@@ -0,0 +1,37 @@
+package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.actor;
+
+import akka.actor.AbstractActor;
+import akka.actor.UntypedAbstractActor;
+import akka.japi.pf.ReceiveBuilder;
+import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentLogService;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
+import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.FsmRouteDataService;
+import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+@Component
+@Scope("prototype")
+public class MesHandlerEquipLogActor extends AbstractActor {
+ //定义日志,很重要
+ private static final Logger log = LoggerFactory.getLogger(MesHandlerEquipLogActor.class);
+
+ @Autowired
+ private IMesEquipmentLogService mesEquipmentLogService;
+ /**
+ *
重写接收方法
+ * @author hanchao 2018/4/16 21:31
+ **/
+ @Override
+ public Receive createReceive() {
+
+ return ReceiveBuilder.create().match(ActorMessage.class, o -> {
+
+ mesEquipmentLogService.saveEquipmentLogToRedis(o);
+
+ }).matchAny(o -> log.error("FiniteStateMachineActor--收到的意外的消息{}", o)).build();
+ }
+}
diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java
new file mode 100644
index 0000000..1537d5f
--- /dev/null
+++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java
@@ -0,0 +1,128 @@
+package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
+
+import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
+import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentLogService;
+import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog.MesEquipmentLogExtService;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
+import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
+import cn.estsh.i3plus.platform.common.convert.ConvertBean;
+import cn.estsh.i3plus.platform.common.util.CommonConstWords;
+import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
+import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
+import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
+import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
+import cn.estsh.i3plus.pojo.mes.bean.*;
+import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
+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.util.ImppRedis;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class MesEquipmentLogService implements IMesEquipmentLogService {
+
+ public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG);
+
+ @Autowired
+ private MesEquipmentLogExtService mesEquipmentLogExtService;
+ @Autowired
+ private MesEquipmentExtService mesEquipmentExtService;
+ @Autowired
+ private MesEquipmentLogDetailRepository mesEquipmentLogDetailRepository;
+ @Autowired
+ private MesEquipmentRecordRepository mesEquipmentRecordRepository;
+ @Autowired
+ private SnowflakeIdMaker snowflakeIdMaker;
+ @Resource(name = "redisMesPcn")
+ private ImppRedis redisMesPcn;
+
+ @Override
+ public void saveEquipmentLogToRedis(ActorMessage actorMessage) {
+ // 获取设备变量属性
+ List equipmentVariableList = mesEquipmentExtService.getEquipmentVariableList(actorMessage.getOrganizeCode(), actorMessage.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue());
+ // 获取变量属性中的clientHandle 列表
+ List clientHandleList = equipmentVariableList.stream().filter(o -> o.getClientHandle() != null).map( o -> Long.valueOf(o.getClientHandle().longValue())).collect(Collectors.toList());
+ // 获取设备数据采集信息
+ List equipmentLogList = mesEquipmentLogExtService.getEquipmentLogList(actorMessage.getOrganizeCode(), actorMessage.getEquipId());
+ // 筛选出该设备中设备变量属性对应的数据采集信息
+ equipmentLogList = equipmentLogList.stream().filter(mesEquipmentLog -> clientHandleList.contains(mesEquipmentLog.getId()) ).collect(Collectors.toList());
+
+ Long recordId = snowflakeIdMaker.nextId();
+
+ MesEquipmentRecord mesEquipmentRecord =new MesEquipmentRecord();
+ BeanUtils.copyProperties(actorMessage, mesEquipmentRecord);
+ mesEquipmentRecord.setRecordStatus(MesExtEnumUtil.RECORD_STATUS.RECORD_STATUS_10.getValue());
+ mesEquipmentRecord.setId(recordId);
+
+ ConvertBean.serviceModelInitialize(mesEquipmentRecord, actorMessage.getUserName());
+
+ String key = getKey(mesEquipmentRecord);
+
+ equipmentLogList.forEach(equipLog -> {
+ redisMesPcn.putList(key, equipLog);
+ });
+ mesEquipmentRecordRepository.save(mesEquipmentRecord);
+ LOGGER.info("产线【{}】,工位【{}】,设备【{}】下,保存rediskey【{}】和记录成功", mesEquipmentRecord.getWorkCenterCode(),mesEquipmentRecord.getWorkCellCode(),mesEquipmentRecord.getEquipmentCode(),key);
+ }
+
+ private String getKey(MesEquipmentRecord mesEquipmentRecord){
+ return mesEquipmentRecord.getOrganizeCode() + ":" + mesEquipmentRecord.getWorkCenterCode() + ":" + mesEquipmentRecord.getWorkCellCode() + ":" + mesEquipmentRecord.getEquipmentCode () + ":" + mesEquipmentRecord.getId();
+ }
+
+ @Override
+ public void saveEquipmentLogDetails() {
+ DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
+ DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.RECORD_STATUS.RECORD_STATUS_10.getValue(), "recordStatus", ddlPackBean);
+ DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, ddlPackBean);
+ List mesEquipmentRecords = mesEquipmentRecordRepository.findByHqlWhere(ddlPackBean);
+ if (CollectionUtils.isEmpty(mesEquipmentRecords)) {
+ LOGGER.info("没有设备记录需要同步");
+ }
+ LOGGER.info("读取设备记录信息【{}】条", mesEquipmentRecords.size());
+ for (MesEquipmentRecord mesEquipmentRecord : mesEquipmentRecords) {
+ saveEquipmentLogDetail(mesEquipmentRecord);
+ }
+ }
+
+ private void saveEquipmentLogDetail(MesEquipmentRecord mesEquipmentRecord) {
+
+ String key = getKey(mesEquipmentRecord);
+ List equipmentLogList = (List)redisMesPcn.getList(key, 0, -1);
+
+ List mesEquipmentLogDetails = new ArrayList<>();
+
+ for (MesEquipmentLog mesEquipmentLog : equipmentLogList) {
+ MesEquipmentLogDetail mesEquipmentLogDetail = new MesEquipmentLogDetail();
+ BeanUtils.copyProperties(mesEquipmentLog, mesEquipmentLogDetail);
+ mesEquipmentLogDetail.setAreaCode(mesEquipmentRecord.getAreaCode());
+ mesEquipmentLogDetail.setCraftCode(mesEquipmentRecord.getCraftCode());
+ mesEquipmentLogDetail.setProcessCode(mesEquipmentRecord.getProcessCode());
+ mesEquipmentLogDetail.setWorkCenterCode(mesEquipmentRecord.getWorkCenterCode());
+ mesEquipmentLogDetail.setExtend(mesEquipmentRecord.getProduceSnJson());
+ mesEquipmentLogDetails.add(mesEquipmentLogDetail);
+ }
+ mesEquipmentLogDetailRepository.saveAll(mesEquipmentLogDetails);
+ // 修改状态
+ mesEquipmentRecord.setRecordStatus(MesExtEnumUtil.RECORD_STATUS.RECORD_STATUS_20.getValue());
+ mesEquipmentRecordRepository.save(mesEquipmentRecord);
+ // 删除key
+ redisMesPcn.deleteKey(key);
+ }
+}
diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java
index 2422f39..14788ca 100644
--- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java
+++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java
@@ -57,14 +57,19 @@ public class MesMouldRecordGenerateStepService extends BaseStepService {
StationResultBean resultBean = new StationResultBean();
-
+ //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue());
+ // 获取条码信息
List mesProduceSns = mesProductionDispatchContextStepService.getOutProduceSnDataContext(reqBean);
+ // 获取头道模具号
MesEquipVariableCollectContext mesFirstMouldNoCollectContext = mesProductionDispatchContextStepService.getFirstMouldNoContext(reqBean);
+ // 获取模具号
MesEquipVariableCollectContext mesMouldNoCollectContext = mesProductionDispatchContextStepService.getMouldNoContext(reqBean);
List mesProdMouldRecords = new ArrayList<>();
+
for (MesProduceSn mesProduceSn : mesProduceSns) {
+ // 获取工位设备信息
MesCellEquipContext mesCellEquipContext = productionProcessContext.getCurCellEquip();
String equipmentCode = mesCellEquipContext.getEquipmentCode();
diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java
index 4935a6a..a348e86 100644
--- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java
+++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java
@@ -2,18 +2,18 @@ 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.IMesProductionProcessContextStepService;
+import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesSnProductionProcessContext;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesWorkOrderContext;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
+import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
-import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
-import cn.estsh.i3plus.pojo.mes.bean.MesPart;
-import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
-import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
+import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@@ -21,14 +21,17 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
+import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.stream.Collectors;
/**
* @Description : 生成零件条码
@@ -64,34 +67,75 @@ public class MesProductSnGenerateStepService extends BaseStepService {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
-
+ // 获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue());
MesWorkCell mesWorkCell = productionProcessContext.getWorkCell();
+ // 获取一模多腔信息
+ List mesModelMultiCavities = mesProductionDispatchContextStepService.getMouldMultiCavityContext(reqBean);
+ // 获取工单号信息
+ List workOrderDataContext = mesProductionDispatchContextStepService.getWorkOrderDataContext(reqBean);
+ // 获取零件号,可能存在多个
+ List partNoList = getPartNoList(mesModelMultiCavities, workOrderDataContext);
+ // 根据零件号组装产品条码信息
+ List mesProduceSns = generateSn(reqBean, productionProcessContext, mesWorkCell, partNoList);
+ // 保存条码信息
+ mesProduceSnRepository.saveAll(mesProduceSns);
+ // 放到上下文
+ mesProductionDispatchContextStepService.saveOutProduceSnDataContext(reqBean, mesProduceSns);
- MesEquipVariableCollectContext mesFirstMouldNoCollectContext = mesProductionDispatchContextStepService.getFirstMouldNoContext(reqBean);
+ return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "生成零件条码成功");
+ }
- List mesModelMultiCavities = mesProductionDispatchContextStepService.getMouldMultiCavityContext(reqBean);
+ /**
+ * 根据零件号组装产品条码信息
+ * @param reqBean
+ * @param productionProcessContext
+ * @param mesWorkCell
+ * @param partNoList
+ * @return
+ */
+ private List generateSn(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesWorkCell mesWorkCell, List partNoList) {
List mesProduceSns = new ArrayList<>();
- // todo 要判空
- for (MesMouldMultiCavity modelMultiCavity : mesModelMultiCavities) {
+ for (String partNo : partNoList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
- DdlPreparedPack.getStringEqualPack(modelMultiCavity.getPartNo(), "partNo", packBean);
+ DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
MesPart mesPart = mesPartRepository.getByProperty(packBean);
if (mesPart == null) {
- return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "零件号不存在");
+ MesPcnException.throwFlowException("零件号不存在");
}
+ // 根据条码规则生成条码
String sn = generateByRule(mesPart);
- MesProduceSn mesProduceSn = generateMesProduceSn(mesPart, sn,mesWorkCell, productionProcessContext,reqBean);
+ // 组装条码信息
+ MesProduceSn mesProduceSn = generateMesProduceSn(mesPart, sn, mesWorkCell, productionProcessContext, reqBean);
+ ConvertBean.serviceModelInitialize(mesProduceSn, reqBean.getUserInfo());
mesProduceSns.add(mesProduceSn);
}
- mesProduceSnRepository.saveAll(mesProduceSns);
- MesSnProductionProcessContext mesSnProductionProcessContext = (MesSnProductionProcessContext) productionProcessContext;
- mesSnProductionProcessContext.productSns(mesProduceSns);
-
- return StepResult.getSuccessComplete();
+ return mesProduceSns;
}
+ /**
+ * 获取零件号列表
+ * 一模多腔或者加工单信息中获取
+ * @param mesModelMultiCavities
+ * @param workOrderDataContext
+ * @return
+ */
+ private List getPartNoList(List mesModelMultiCavities, List workOrderDataContext) {
+ List partNoList = new ArrayList<>();
+ if (!CollectionUtils.isEmpty(workOrderDataContext)) {
+ partNoList = workOrderDataContext.stream().map(MesWorkOrder::getPartNo).collect(Collectors.toList());
+ }
+ if (!CollectionUtils.isEmpty(mesModelMultiCavities)) {
+ partNoList = mesModelMultiCavities.stream().map(MesMouldMultiCavity::getPartNo).collect(Collectors.toList());
+ }
+ return partNoList;
+ }
+ /**
+ * 生成条码
+ * @param mesPart
+ * @return
+ */
private String generateByRule(MesPart mesPart) {
//生成工单号
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(ORDER_NO_JIS_SORT);
@@ -124,6 +168,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
mesProduceSn.setCraftCode(productionProcessContext.getCraftCode());
mesProduceSn.setPrintCount(0);
mesProduceSn.setPrintStatus(10);
+ mesProduceSn.setOrganizeCode(reqBean.getOrganizeCode());
return mesProduceSn;
}
diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java
index 2e26c5e..9efa785 100644
--- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java
+++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java
@@ -1,14 +1,21 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
+import akka.actor.Props;
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.apiservice.serviceimpl.actor.MesHandlerEquipLogActor;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base.MesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog.MesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesSnProductionProcessContext;
+import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
+import cn.estsh.i3plus.mes.pcn.config.SpringExt;
+import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
@@ -24,18 +31,21 @@ import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
+import org.eclipse.milo.opcua.stack.core.channel.messages.HelloMessage;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
* @Description : 保存工艺参数
- * @Author : wangjie
+ * @Author : zxw
**/
@Slf4j
@Service
@@ -44,28 +54,19 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService {
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
- private IMesProductionProcessContextStepService productionProcessContextStepService;
-
- @Autowired
- private MesPartRepository mesPartRepository;
+ private ActorSystem actorSystem;
@Autowired
- private MesProduceSnRepository mesProduceSnRepository;
-
- @Autowired
- private ISyncFuncService syncFuncService;
-
- private MesEquipmentLogExtService mesEquipmentLogExtService;
+ private IMesProductionProcessContextStepService productionProcessContextStepService;
- private MesEquipmentExtService mesEquipmentExtService;
- private MesEquipmentLogDetailRepository mesEquipmentLogDetailRepository;
@Autowired
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService;
public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT";
+ private static final Map refMap = new ConcurrentHashMap<>(200);
@Override
public StepResult execute(StationRequestBean reqBean) {
@@ -74,46 +75,34 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
+ // 获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
- MesCellEquipContext curCellEquip = productionProcessContext.getCurCellEquip();
-
- List equipmentLogList = mesEquipmentLogExtService.getEquipmentLogList(reqBean.getOrganizeCode(), curCellEquip.getEquipId());
-
- List equipmentVariableList = mesEquipmentExtService.getEquipmentVariableList(productionProcessContext.getOrganizeCode(), curCellEquip.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue());
-
- List clientHandleList = equipmentVariableList.stream().filter(o -> o.getClientHandle() != null).map( o -> Long.valueOf(o.getClientHandle().longValue())).collect(Collectors.toList());
-
- equipmentLogList = equipmentLogList.stream().filter(mesEquipmentLog -> clientHandleList.contains(mesEquipmentLog.getId())).collect(Collectors.toList());
-
-
- List mesEquipmentLogDetails = new ArrayList<>();
-
- curCellEquip.setQuality(MesExtEnumUtil.EQUIP_LOG_QUALITY.defaultQuality());
- Optional optional = CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> (null != o && !mesEquipmentLogExtService.checkEquipQuality(o.getQuality()))).findFirst();
- if (null != optional && optional.isPresent()) curCellEquip.setQuality(optional.get().getQuality());
-
- MesEquipVariableCollectContext mesFirstMouldNoCollectContext = mesProductionDispatchContextStepService.getFirstMouldNoContext(reqBean);
-
- mesProductionDispatchContextStepService.sendEquipQualityMessage(reqBean, curCellEquip);
-
- MesSnProductionProcessContext mesSnProductionProcessContext = (MesSnProductionProcessContext) productionProcessContext;
-
- for (MesEquipmentLog mesEquipmentLog : equipmentLogList) {
- MesEquipmentLogDetail mesEquipmentLogDetail = new MesEquipmentLogDetail();
- BeanUtils.copyProperties(mesEquipmentLog, mesEquipmentLogDetail);
- mesEquipmentLogDetail.setAreaCode(reqBean.getAreaCode());
- mesEquipmentLogDetail.setCraftCode(productionProcessContext.getCraftCode());
- mesEquipmentLogDetail.setProcessCode(reqBean.getProcessCode());
- mesEquipmentLogDetail.setWorkCenterCode(reqBean.getWorkCenterCode());
- mesEquipmentLogDetail.setExtend(mesSnProductionProcessContext.getProduceSnJson());
- mesEquipmentLogDetails.add(mesEquipmentLogDetail);
- }
- mesEquipmentLogDetailRepository.saveAll(mesEquipmentLogDetails);
+ // 获取条码信息
+ List mesProduceSns = mesProductionDispatchContextStepService.getOutProduceSnDataContext(reqBean);
+ // 通过上下文获取工位设备信息
+ MesCellEquipContext curCellEquip = productionProcessContext.getCurCellEquip();
- return StepResult.getSuccessComplete();
+ String mesProduceSnsStr = !CollectionUtils.isEmpty(mesProduceSns) ? JSONObject.toJSONString(mesProduceSns) : null;
+ ActorMessage actorMessage = ActorMessage.builder()
+ .equipmentCode(curCellEquip.getEquipmentCode())
+ .equipId(curCellEquip.getEquipId())
+ .organizeCode(reqBean.getOrganizeCode())
+ .organizeName(reqBean.getOrganizeName())
+ .workCellCode(reqBean.getWorkCellCode())
+ .workCenterCode(reqBean.getWorkCenterCode())
+ .areaCode(reqBean.getAreaCode())
+ .craftCode(productionProcessContext.getCraftCode())
+ .processCode(reqBean.getProcessCode())
+ .produceSnJson(mesProduceSnsStr)
+ .userName(reqBean.getUserInfo())
+ .build();
+ // 数据采集信息需要存放到 redis中
+ String key = this.getFsmBusikey(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.name());
+ ActorRef ref = refMap.computeIfAbsent(key,
+ k -> actorSystem.actorOf(SpringExtProvider.getInstance().get(actorSystem).create("mesHandlerEquipLogActor"), key));
+ ref.tell(actorMessage, ActorRef.noSender());
+
+ return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存工艺参数成功");
}
-
-
-
}
diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ActorMessage.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ActorMessage.java
new file mode 100644
index 0000000..fe5f51a
--- /dev/null
+++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ActorMessage.java
@@ -0,0 +1,33 @@
+package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
+
+import io.swagger.annotations.ApiParam;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class ActorMessage {
+
+ @ApiParam("用户名称")
+ private String userName;
+ @ApiParam("组织代码")
+ private String organizeCode;
+ @ApiParam("组织名称")
+ private String organizeName;
+ @ApiParam("工作中心代码")
+ private String workCenterCode;
+ @ApiParam("工作单元代码")
+ private String workCellCode;
+
+ private String areaCode;
+
+ private String craftCode;
+
+ private String processCode;
+
+ private String produceSnJson;
+
+ private String equipmentCode;
+
+ private Integer equipId;
+}