|
|
@ -1,19 +1,21 @@
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentLogService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentLogService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog.MesEquipmentLogExtService;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog.MesEquipmentLogExtService;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.mqtt.EquipLogMqttMsg;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.mqtt.EquipLogMqttMsg;
|
|
|
|
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.platform.common.util.CommonConstWords;
|
|
|
|
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
|
|
|
|
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
|
|
|
|
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
|
|
|
|
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.tool.DdlPreparedPack;
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLogDetail;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentRecord;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogDetailRepository;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogDetailRepository;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRecordRepository;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRecordRepository;
|
|
|
@ -27,7 +29,6 @@ import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
|
|
|
|
|
|
|
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 org.springframework.util.StringUtils;
|
|
|
@ -36,8 +37,9 @@ import javax.annotation.Resource;
|
|
|
|
import javax.persistence.EntityManager;
|
|
|
|
import javax.persistence.EntityManager;
|
|
|
|
import javax.persistence.Query;
|
|
|
|
import javax.persistence.Query;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import java.util.StringJoiner;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
@Slf4j
|
|
|
@ -75,38 +77,41 @@ public class MesEquipmentLogService implements IMesEquipmentLogService {
|
|
|
|
// 获取设备变量属性
|
|
|
|
// 获取设备变量属性
|
|
|
|
List<MesEquipmentVariable> equipmentVariableList = mesEquipmentExtService.getEquipmentVariableList(actorMessage.getOrganizeCode(), actorMessage.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue());
|
|
|
|
List<MesEquipmentVariable> equipmentVariableList = mesEquipmentExtService.getEquipmentVariableList(actorMessage.getOrganizeCode(), actorMessage.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue());
|
|
|
|
// 获取变量ID集合
|
|
|
|
// 获取变量ID集合
|
|
|
|
List<Long> equipVariableIdList = equipmentVariableList.stream().filter(o -> null != o).map(MesEquipmentVariable::getId).collect(Collectors.toList());
|
|
|
|
Map<Long, MesEquipmentVariable> equipVariableMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o));
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(equipVariableMap)) {
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- 获取工艺参数未查询到工艺参数完成类型的设备数据变量", actorMessage.getOrganizeCode(), actorMessage.getWorkCenterCode(), actorMessage.getWorkCellCode(), "mesVariableWhenFinishedReadStepService");
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取设备数据采集信息
|
|
|
|
// 获取设备数据采集信息
|
|
|
|
List<MesEquipmentLog> equipmentLogList = mesEquipmentLogExtService.getEquipmentLogList(actorMessage.getOrganizeCode(), actorMessage.getEquipId());
|
|
|
|
List<MesEquipVariableCollectContext> equipmentLogList = mesEquipmentLogExtService.getEquipmentLogCollectList(actorMessage.getOrganizeCode(), actorMessage.getEquipId(), MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue());
|
|
|
|
// 筛选出该设备中设备变量属性对应的数据采集信息
|
|
|
|
// 筛选出该设备中设备变量属性对应的数据采集信息
|
|
|
|
equipmentLogList = equipmentLogList.stream().filter(mesEquipmentLog -> equipVariableIdList.contains(mesEquipmentLog.getEquipVariableId())).collect(Collectors.toList());
|
|
|
|
equipmentLogList = CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> equipVariableMap.containsKey(o.getEquipVariableId())).collect(Collectors.toList());
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(equipmentLogList)) {
|
|
|
|
LOGGER.info("需要保存的工艺参数信息: list ={}", equipmentLogList);
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- 获取工艺参数未查询到设备LOG", actorMessage.getOrganizeCode(), actorMessage.getWorkCenterCode(), actorMessage.getWorkCellCode(), "mesVariableWhenFinishedReadStepService");
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Long recordId = snowflakeIdMaker.nextId();
|
|
|
|
equipmentLogList.forEach(o -> BeanUtils.copyProperties(equipVariableMap.get(o.getEquipVariableId()), o));
|
|
|
|
|
|
|
|
|
|
|
|
MesEquipmentRecord mesEquipmentRecord =new MesEquipmentRecord();
|
|
|
|
MesEquipmentRecord mesEquipmentRecord =new MesEquipmentRecord();
|
|
|
|
BeanUtils.copyProperties(actorMessage, mesEquipmentRecord);
|
|
|
|
BeanUtils.copyProperties(actorMessage, mesEquipmentRecord);
|
|
|
|
mesEquipmentRecord.setRecordStatus(MesExtEnumUtil.RECORD_STATUS.RECORD_STATUS_10.getValue());
|
|
|
|
mesEquipmentRecord.setRecordStatus(MesExtEnumUtil.RECORD_STATUS.RECORD_STATUS_10.getValue());
|
|
|
|
mesEquipmentRecord.setId(recordId);
|
|
|
|
mesEquipmentRecord.setId(snowflakeIdMaker.nextId());
|
|
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelInitialize(mesEquipmentRecord, actorMessage.getUserName());
|
|
|
|
ConvertBean.serviceModelInitialize(mesEquipmentRecord, actorMessage.getUserName());
|
|
|
|
|
|
|
|
|
|
|
|
String key = getKey(mesEquipmentRecord);
|
|
|
|
String key = getKey(mesEquipmentRecord);
|
|
|
|
LOGGER.info("key ={}", key);
|
|
|
|
equipmentLogList.forEach(equipLog -> redisMesPcn.putList(key, equipLog));
|
|
|
|
// todo 目前没有适合的方法,需要优化一下
|
|
|
|
|
|
|
|
equipmentLogList.forEach(equipLog -> {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
redisMesPcn.putList(key, equipLog);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
/* MesEq
|
|
|
|
|
|
|
|
redisMesPcn.putObject()*/
|
|
|
|
|
|
|
|
mesEquipmentRecordRepository.save(mesEquipmentRecord);
|
|
|
|
mesEquipmentRecordRepository.save(mesEquipmentRecord);
|
|
|
|
LOGGER.info("产线【{}】,工位【{}】,设备【{}】下,保存rediskey【{}】和记录成功", mesEquipmentRecord.getWorkCenterCode(),mesEquipmentRecord.getWorkCellCode(),mesEquipmentRecord.getEquipmentCode(),key);
|
|
|
|
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- KEY:{} --- 工艺参数:{}",
|
|
|
|
|
|
|
|
actorMessage.getOrganizeCode(), actorMessage.getWorkCenterCode(), actorMessage.getWorkCellCode(), "mesVariableWhenFinishedReadStepService", key, JSONObject.toJSONString(equipmentLogList));
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private String getKey(MesEquipmentRecord mesEquipmentRecord){
|
|
|
|
private String getKey(MesEquipmentRecord mesEquipmentRecord){
|
|
|
|
return mesEquipmentRecord.getOrganizeCode() + ":" + mesEquipmentRecord.getWorkCenterCode() + ":" + mesEquipmentRecord.getWorkCellCode() + ":" + mesEquipmentRecord.getEquipmentCode () + ":" + mesEquipmentRecord.getId();
|
|
|
|
return new StringJoiner(MesPcnExtConstWords.COLON).add(mesEquipmentRecord.getOrganizeCode()).add(mesEquipmentRecord.getWorkCenterCode()).add(mesEquipmentRecord.getWorkCellCode()).add(mesEquipmentRecord.getEquipmentCode()).add(mesEquipmentRecord.getId().toString()).toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private String getVariableKey(String equipId, String keyType){
|
|
|
|
private String getVariableKey(String equipId, String keyType){
|
|
|
@ -115,17 +120,21 @@ public class MesEquipmentLogService implements IMesEquipmentLogService {
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void saveEquipmentLogDetails(String organizeCode) {
|
|
|
|
public void saveEquipmentLogDetails(String organizeCode) {
|
|
|
|
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.RECORD_STATUS.RECORD_STATUS_10.getValue(), "recordStatus", ddlPackBean);
|
|
|
|
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);
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, ddlPackBean);
|
|
|
|
List<MesEquipmentRecord> mesEquipmentRecords = mesEquipmentRecordRepository.findByHqlTopWhere(ddlPackBean, 10);
|
|
|
|
List<MesEquipmentRecord> mesEquipmentRecords = mesEquipmentRecordRepository.findByHqlTopWhere(ddlPackBean, 10);
|
|
|
|
if (CollectionUtils.isEmpty(mesEquipmentRecords)) {
|
|
|
|
|
|
|
|
LOGGER.info("没有设备记录需要同步");
|
|
|
|
LOGGER.info("保存工艺参数job --- 读取到设备记录信息[{}]条 ---", CollectionUtils.isEmpty(mesEquipmentRecords) ? MesPcnExtConstWords.ZERO : mesEquipmentRecords.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
LOGGER.info("读取设备记录信息【{}】条", mesEquipmentRecords.size());
|
|
|
|
if (CollectionUtils.isEmpty(mesEquipmentRecords)) return;
|
|
|
|
|
|
|
|
|
|
|
|
for (MesEquipmentRecord mesEquipmentRecord : mesEquipmentRecords) {
|
|
|
|
for (MesEquipmentRecord mesEquipmentRecord : mesEquipmentRecords) {
|
|
|
|
|
|
|
|
if (null == mesEquipmentRecord) continue;
|
|
|
|
saveEquipmentLogDetail(mesEquipmentRecord);
|
|
|
|
saveEquipmentLogDetail(mesEquipmentRecord);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void saveEquipmentLogDetail(MesEquipmentRecord mesEquipmentRecord) {
|
|
|
|
private void saveEquipmentLogDetail(MesEquipmentRecord mesEquipmentRecord) {
|
|
|
|