Merge remote-tracking branch 'origin/dev' into dev

tags/yfai-pcn-ext-v1.0
jun 12 months ago
commit fd5dbfb7df

@ -124,6 +124,9 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取上下文工位扫描监控信息")
MesScanMonitorContext getScanMonitorContext(String organizeCode, String workCenterCode, String workCellCode);
@ApiOperation(value = "获取上下文工位扫描监控信息的开模记录ID")
String getScanMonitorContextMouldRecordId(StationRequestBean reqBean);
@ApiOperation(value = "删除上下文工位扫描监控信息")
void deleteScanMonitorContext(StationRequestBean reqBean);

@ -35,4 +35,12 @@ public interface MqttService {
*
*/
void connect();
/**
*
*
*/
void testSend();
void testSendList();
}

@ -131,7 +131,7 @@ public class TestController {
@GetMapping("/testInsert")
@ApiOperation(value = "批量")
public void testInsert() {
testService.insertList();
//testService.insertList();
}
}

@ -52,4 +52,17 @@ public class PcnMqttController {
public void connect() {
mqttService.connect();
}
@PostMapping("/testSend")
@ApiOperation(value = "批量发送")
public void testSend() {
mqttService.testSend();
}
@PostMapping("/testSendList")
@ApiOperation(value = "批量发送")
public void testSendList() {
mqttService.testSendList();
}
}

@ -17,10 +17,30 @@ import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Slf4j
public class PcnMqttCallback implements MqttCallbackExtended {
private static ExecutorService executorService = new ThreadPoolExecutor(1, 20,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(200), r -> {
Thread thread = new Thread(r);
thread.setName("executorService--"+r.hashCode());
return thread;
},new ThreadPoolExecutor.DiscardPolicy());
private static ExecutorService executorServiceTwo = new ThreadPoolExecutor(1, 20,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(200), r -> {
Thread thread = new Thread(r);
thread.setName("executorServiceTwo--"+r.hashCode());
return thread;
},new ThreadPoolExecutor.DiscardPolicy());
//手动注入
private MqttConfig mqttConfig = SpringUtils.getBean(MqttConfig.class);
@ -94,6 +114,12 @@ public class PcnMqttCallback implements MqttCallbackExtended {
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) {
log.info("== pcnMqttCallback ==> messageArrived 接收消息主题: {},接收消息内容: {}", topic, new String(mqttMessage.getPayload()));
executorService.execute(() -> saveData(topic, mqttMessage));
}
private void saveData(String topic, MqttMessage mqttMessage) {
log.info("== pcnMqttCallback ==> messageArrived 接收消息主题: {},异步处理开始 消息内容: {}", topic, new String(mqttMessage.getPayload()));
try{
String resStr = new String(mqttMessage.getPayload(), "UTF-8").trim();
/**
@ -102,7 +128,7 @@ public class PcnMqttCallback implements MqttCallbackExtended {
//topic1主题
List<EquipLogMqttMsg> equipLogMqttMsgList = JSONObject.parseArray(resStr, EquipLogMqttMsg.class);
for (EquipLogMqttMsg equipLogMqttMsg : equipLogMqttMsgList) {
equipmentLogService.updateValue(equipLogMqttMsg);
executorServiceTwo.execute(()-> equipmentLogService.updateValue(equipLogMqttMsg));
}
//业务处理
//doSomething1(maps);

@ -36,6 +36,7 @@ public class MesWorkCellOperationLogJob extends BaseMesScheduleJob {
@Override
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
if (true) return;
/**
*
* {

@ -175,14 +175,12 @@ public class MesEquipmentLogService implements IMesEquipmentLogService {
DdlPreparedPack.getNumEqualPack(equipmentLog.getEquipId(), MesPcnExtConstWords.EQUIP_ID, packBean);
DdlPreparedPack.getNumEqualPack(equipmentLog.getEquipVariableId(), MesPcnExtConstWords.EQUIP_VARIABLE_ID, packBean);
mesEquipmentLogRepository.updateByProperties(new String[]{MesPcnExtConstWords.EQUIP_VARIABLE_STATUS,"equipVariableValue"}, new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue(),equipLogMqttMsg.getValue() }, packBean);
LOGGER.info("messageArrived -> value修改成功");
MesEquipmentLogDetail mesEquipmentLogDetail = new MesEquipmentLogDetail();
BeanUtils.copyProperties(equipmentLog, mesEquipmentLogDetail);
ConvertBean.serviceModelInitialize(mesEquipmentLogDetail, "mqtt");
mesEquipmentLogDetailRepository.saveAll(Arrays.asList(mesEquipmentLogDetail));
LOGGER.info("messageArrived -> detail插入成功");
}
}

@ -1,23 +1,24 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkCellScanMonitorLogService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellScanMonitorLog;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellScanMonitorLogRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.netflix.discovery.converters.Auto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
//import cn.estsh.i3plus.platform.common.convert.ConvertBean;
//import cn.estsh.i3plus.platform.common.tool.TimeTool;
//import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
//import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
//import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
//import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellScanMonitorLog;
//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
//import com.netflix.discovery.converters.Auto;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
/**
* @Description :
@ -43,44 +44,44 @@ public class MesWorkCellScanMonitorLogServiceImpl implements IMesWorkCellScanMon
*/
@Override
public void doRecordCellOperationLog(String organizeCode, Integer pageSize, Integer times) {
//查询serviceFlag是未处理状态,mouldRecordId不为空的记录每次查询pageSize 默认50条
DdlPackBean logPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue(), "dealStatus", logPackBean);
DdlPreparedPack.getNumberSmallerEqualPack(times, "times", logPackBean);
DdlPreparedPack.getIsNotNull("mouldRecordId", logPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, logPackBean);
List<MesWorkCellScanMonitorLog> monitorLogs = monitorLogRao.findByHqlTopWhere(logPackBean, pageSize);
if (!monitorLogs.isEmpty()) {
List<Long> mouldRecordIdList = monitorLogs.stream().map(MesWorkCellScanMonitorLog::getMouldRecordId).distinct().collect(Collectors.toList());
Map<Long, List<MesWorkCellScanMonitorLog>> logs = monitorLogs.stream().collect(Collectors.groupingBy(MesWorkCellScanMonitorLog::getMouldRecordId));
for (Long mouldRecordId : mouldRecordIdList) {
DdlPackBean recordPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(mouldRecordId, "mouldRecordId", recordPackBean);
List<MesProductionRecord> recordList = productionRecordRao.findByHqlWhere(recordPackBean);
//需要补录如下字段
DdlPackBean monitorLogPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(mouldRecordId, "mouldRecordId", monitorLogPackBean);
int newTimes = logs.get(mouldRecordId).get(0).getTimes() + 1;
if (!recordList.isEmpty()) {
String workOrderNoStr = recordList.stream().map(MesProductionRecord::getWorkOrderNo).collect(Collectors.joining(","));
String serialNoStr = recordList.stream().map(MesProductionRecord::getSerialNumber).collect(Collectors.joining(","));
String productSnStr = recordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.joining(","));
String custSnStr = recordList.stream().map(MesProductionRecord::getCustSn).collect(Collectors.joining(","));
String partNoStr = recordList.stream().map(MesProductionRecord::getPartNo).collect(Collectors.joining(","));
String partNameStr = recordList.stream().map(MesProductionRecord::getPartName).collect(Collectors.joining(","));
monitorLogRao.updateByProperties(new String[]{"workOrderNo", "serialNumber", "productSn", "custSn", "partNo", "partName", "modifyDatetime", "modifyUser", "dealStatus", "times"},
new Object[]{workOrderNoStr, serialNoStr, productSnStr, custSnStr, partNoStr, partNameStr, TimeTool.getNowTime(true), "JOB", MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue(), newTimes}, monitorLogPackBean);
} else {
if (newTimes > times) {
monitorLogRao.updateByProperties(new String[]{"modifyDatetime", "modifyUser", "times"}, new Object[]{TimeTool.getNowTime(true), "JOB", newTimes}, monitorLogPackBean);
} else {
monitorLogRao.updateByProperties(new String[]{"modifyDatetime", "modifyUser", "times", "dealStatus"}, new Object[]{TimeTool.getNowTime(true), "JOB", newTimes, MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_FAILURE.getValue()}, monitorLogPackBean);
}
}
}
}
// //查询serviceFlag是未处理状态,mouldRecordId不为空的记录每次查询pageSize 默认50条
// DdlPackBean logPackBean = DdlPackBean.getDdlPackBean(organizeCode);
// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue(), "dealStatus", logPackBean);
// DdlPreparedPack.getNumberSmallerEqualPack(times, "times", logPackBean);
// DdlPreparedPack.getIsNotNull("mouldRecordId", logPackBean);
// DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, logPackBean);
// List<MesWorkCellScanMonitorLog> monitorLogs = monitorLogRao.findByHqlTopWhere(logPackBean, pageSize);
//
// if (!monitorLogs.isEmpty()) {
// List<Long> mouldRecordIdList = monitorLogs.stream().map(MesWorkCellScanMonitorLog::getMouldRecordId).distinct().collect(Collectors.toList());
// Map<Long, List<MesWorkCellScanMonitorLog>> logs = monitorLogs.stream().collect(Collectors.groupingBy(MesWorkCellScanMonitorLog::getMouldRecordId));
// for (Long mouldRecordId : mouldRecordIdList) {
// DdlPackBean recordPackBean = DdlPackBean.getDdlPackBean(organizeCode);
// DdlPreparedPack.getNumEqualPack(mouldRecordId, "mouldRecordId", recordPackBean);
//
// List<MesProductionRecord> recordList = productionRecordRao.findByHqlWhere(recordPackBean);
// //需要补录如下字段
// DdlPackBean monitorLogPackBean = DdlPackBean.getDdlPackBean(organizeCode);
// DdlPreparedPack.getNumEqualPack(mouldRecordId, "mouldRecordId", monitorLogPackBean);
// int newTimes = logs.get(mouldRecordId).get(0).getTimes() + 1;
// if (!recordList.isEmpty()) {
// String workOrderNoStr = recordList.stream().map(MesProductionRecord::getWorkOrderNo).collect(Collectors.joining(","));
// String serialNoStr = recordList.stream().map(MesProductionRecord::getSerialNumber).collect(Collectors.joining(","));
// String productSnStr = recordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.joining(","));
// String custSnStr = recordList.stream().map(MesProductionRecord::getCustSn).collect(Collectors.joining(","));
// String partNoStr = recordList.stream().map(MesProductionRecord::getPartNo).collect(Collectors.joining(","));
// String partNameStr = recordList.stream().map(MesProductionRecord::getPartName).collect(Collectors.joining(","));
// monitorLogRao.updateByProperties(new String[]{"workOrderNo", "serialNumber", "productSn", "custSn", "partNo", "partName", "modifyDatetime", "modifyUser", "dealStatus", "times"},
// new Object[]{workOrderNoStr, serialNoStr, productSnStr, custSnStr, partNoStr, partNameStr, TimeTool.getNowTime(true), "JOB", MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue(), newTimes}, monitorLogPackBean);
// } else {
// if (newTimes > times) {
// monitorLogRao.updateByProperties(new String[]{"modifyDatetime", "modifyUser", "times"}, new Object[]{TimeTool.getNowTime(true), "JOB", newTimes}, monitorLogPackBean);
// } else {
// monitorLogRao.updateByProperties(new String[]{"modifyDatetime", "modifyUser", "times", "dealStatus"}, new Object[]{TimeTool.getNowTime(true), "JOB", newTimes, MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_FAILURE.getValue()}, monitorLogPackBean);
// }
// }
// }
// }
}
}

@ -9,12 +9,14 @@ import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
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 org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@ -77,9 +79,14 @@ public class MesWorkOrderExtService implements IMesWorkOrderExtService {
@Override
public List<MesWorkOrder> getWorkOrderListByShiftCode(String organizeCode, String workCenterCode, String shiftCode) {
String currentTime = DateUtil.formatDateTime(new Date());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(shiftCode, MesPcnExtConstWords.SHIFT_CODE, packBean);
DdlPreparedPack.getStringSmallerNotEqualPack(currentTime, "planStartTime", packBean);
DdlPreparedPack.getStringBiggerNotEqualPack(currentTime, "planEndTime", packBean);
return workOrderRepository.findByHqlWhere(packBean);
}
}

@ -1,10 +1,12 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.swslog.ISwsWriteDbLogService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
@ -17,8 +19,12 @@ import lombok.extern.slf4j.Slf4j;
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 java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogService {
@ -70,6 +76,8 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic
if (resultBean.getIsCheckRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return false;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(resultBean.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getNumEqualPack(scanMonitorContext.getMouldRecordId(), MesPcnExtConstWords.MOULD_RECORD_ID, packBean);
DdlPreparedPack.getStringEqualPack(resultBean.getStepCode(), MesPcnExtConstWords.STEP_CODE, packBean);
if (resultBean.getCheckRepeatType().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) DdlPreparedPack.getStringEqualPack(resultBean.getMessage(), MesPcnExtConstWords.MESSAGE, packBean);
@ -81,5 +89,33 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic
}
@Override
public void doRestoreDbLog(StationResultBean resultBean) {
if (StringUtils.isEmpty(resultBean.getScanInfo()) || CollectionUtils.isEmpty(resultBean.getResultList())) return;
List<MesProductionPsOutContext> productionPsOutContextList = resultBean.getResultList();
String workOrderNo = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesProductionPsOutContext::getWorkOrderNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
String serialNumber = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSerialNumber()))).map(MesProductionPsOutContext::getSerialNumber).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
String productSn = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProductSn()))).map(MesProductionPsOutContext::getProductSn).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
String custSn = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCustSn()))).map(MesProductionPsOutContext::getCustSn).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
String partNo = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsOutContext::getPartNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
String partName = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartName()))).map(MesProductionPsOutContext::getPartName).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(resultBean.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getNumEqualPack(Long.valueOf(resultBean.getScanInfo()), MesPcnExtConstWords.MOULD_RECORD_ID, packBean);
workCellScanMonitorLogRepository.updateByProperties(
new String[]{MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.SERIAL_NUMBER, MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.CUST_SN,
MesPcnExtConstWords.PART_NO, MesPcnExtConstWords.PART_NAME, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.DEAL_STATUS},
new Object[]{workOrderNo, serialNumber, productSn, custSn,
partNo, partName, TimeTool.getNowTime(true), resultBean.getUserInfo(), MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue()},
packBean);
}
}

@ -2,16 +2,34 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.mqtt;
import cn.estsh.i3plus.ext.mes.pcn.api.mqtt.MqttService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.mqtt.PcnMqttClient;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository;
import com.google.common.collect.Lists;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class MqttServiceImpl implements MqttService {
@Autowired
private PcnMqttClient myMqttClient;
@Autowired
private MesEquipmentVariableRepository mesEquipmentVariableRepository;
@Autowired
private MesEquipmentLogRepository mesEquipmentLogRepository;
@Override
public void addTopic(String topic) {
myMqttClient.subscribe(topic);
@ -57,4 +75,93 @@ public class MqttServiceImpl implements MqttService {
e.printStackTrace();
}
}
@Override
public void testSend() {
/* MesEquipmentVariable equipmentVariable = mesEquipmentVariableRepository.getById(1813525136173084672l);
List<MesEquipmentVariable> array = new ArrayList<>();
for (int i = 0; i< 10000; i++) {
MesEquipmentVariable equipmentVariableNew = new MesEquipmentVariable();
BeanUtils.copyProperties(equipmentVariable, equipmentVariableNew);
//equipmentVariableNew.setId(equipmentVariable.getId()+1);
equipmentVariableNew.setId(null);
equipmentVariableNew.setTagAddress(equipmentVariableNew.getTagAddress() +i);
equipmentVariableNew.setTagName(equipmentVariableNew.getTagName() +i);
ConvertBean.serviceModelInitialize(equipmentVariableNew,"test");
array.add(equipmentVariableNew);
}
List<List<MesEquipmentVariable>> lists = Lists.partition(array, 100);
for (List<MesEquipmentVariable> list : lists) {
mesEquipmentVariableRepository.saveAll(list);
}*/
DdlPackBean packBean = new DdlPackBean();
DdlPreparedPack.getNumEqualPack(300, "equipId", packBean);
List<MesEquipmentLog> arrayEquip = new ArrayList<>();
List<MesEquipmentVariable> equipmentVariables = mesEquipmentVariableRepository.findByHqlWhere(packBean);
for (MesEquipmentVariable variable : equipmentVariables) {
MesEquipmentLog mesEquipmentLogNew = new MesEquipmentLog();
mesEquipmentLogNew.setEquipVariableName(variable.getTagAddress());
mesEquipmentLogNew.setEquipVariableId(variable.getId());
mesEquipmentLogNew.setEquipId(variable.getEquipId());
mesEquipmentLogNew.setEquipmentCode(variable.getEquipmentCode());
mesEquipmentLogNew.setEquipVariableStatus(0);
mesEquipmentLogNew.setEquipVariableValue("1");
arrayEquip.add(mesEquipmentLogNew);
}
List<List<MesEquipmentLog>> lists1 = Lists.partition(arrayEquip, 100);
for (List<MesEquipmentLog> list : lists1) {
mesEquipmentLogRepository.saveAll(list);
}
/*
DdlPackBean packBean = new DdlPackBean();
DdlPreparedPack.getNumEqualPack(1813525136173084672l, "id", packBean);
DdlPreparedPack.getNumEqualPack(300, "equipId", packBean);
MesEquipmentLog mesEquipmentLog = mesEquipmentLogRepository.getByProperty(packBean);
List<MesEquipmentLog> arrayEquip = new ArrayList<>();
for (int i = 0; i< 10000; i++) {
Long id = 1813525136173084672l;
MesEquipmentLog mesEquipmentLogNew = new MesEquipmentLog();
BeanUtils.copyProperties(mesEquipmentLog, mesEquipmentLogNew);
mesEquipmentLogNew.setId(mesEquipmentLog.getId()+1);
mesEquipmentLogNew.setEquipVariableId(id +i);
mesEquipmentLogNew.setEquipVariableDesc(mesEquipmentLog.getEquipVariableValue() +i);
mesEquipmentLogNew.setEquipVariableDesc(mesEquipmentLog.getEquipVariableValue() +i);
arrayEquip.add(mesEquipmentLogNew);
}
List<List<MesEquipmentLog>> lists1 = Lists.partition(arrayEquip, 100);
for (List<MesEquipmentLog> list : lists1) {
mesEquipmentLogRepository.saveAll(list);
}
*/
/*
String aa = "[{\"PTCode\":\"156\",\"key\":\"DB1000,X344.0\",\"tagAddress\":\"DB1000.344.0\",\"value\":false,\"time\":\"2024-07-17 16:18:13\"}]"
myMqttClient.publish(msgJson, topic);*/
}
@Override
public void testSendList() {
String start ="[";
for (int i=0; i<100 ; i++) {
String aa = "{\"PTCode\":\"156\",\"key\":\"aa " + i +
"\",\"value\":2,\"time\":\"2024-07-17 16:18:13\"}";
start += aa;
}
String end ="]";
start += end;
myMqttClient.publish(start, "ABC");
}
}

@ -6,9 +6,9 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
@ -35,7 +35,7 @@ public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRule
if (CollectionUtils.isEmpty(backList)) backList = new ArrayList<>();
backList.add(equipVariableCollectContext);
backList.add(filterSpecialChar(equipVariableCollectContext));
}
@ -45,4 +45,16 @@ public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRule
}
//不过滤":"tesla零件号带冒号
//不过滤[)>字符
private MesEquipVariableCollectContext filterSpecialChar(MesEquipVariableCollectContext equipVariableCollectContext) {
String realEquipVariableValue = equipVariableCollectContext.getEquipVariableValue();
String equipVariableValue = StringUtils.removePattern(equipVariableCollectContext.getEquipVariableValue(), "[^A-Z^a-z0-9_^\\s^\\-^/^\\.^\\[^\\)^\\>^\\:]");
return realEquipVariableValue.equals(equipVariableValue) ? equipVariableCollectContext : equipVariableCollectContext.replaceValue(realEquipVariableValue, equipVariableValue);
}
}

@ -218,7 +218,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
double rate = (complateQty - qty)/qty;
if (rate > workCenter.getOrderRate()) {
if (rate > workCenter.getOrderRate()/100) {
productionPartContextList.forEach(o -> o.busiCheckToDelete());
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList.forEach(o -> o.busiCheckToDelete());
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],配置了超工单,但超过了比例[%s]!", workOrder, mesWorkOrder.getQty(), complateQty, workCenter.getOrderRate()));

@ -450,6 +450,12 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
return !StringUtils.isEmpty(scanMonitorContextJson) ? JSONObject.parseObject(scanMonitorContextJson, MesScanMonitorContext.class) : null;
}
@Override
public String getScanMonitorContextMouldRecordId(StationRequestBean reqBean) {
MesScanMonitorContext scanMonitorContext = getScanMonitorContext(reqBean);
return (null != scanMonitorContext && !StringUtils.isEmpty(scanMonitorContext.getMouldRecordId())) ? scanMonitorContext.getMouldRecordId().toString() : null;
}
private String getContextKey(String organizeCode, String workCenterCode, String workCellCode) {
return new StringJoiner(":").add(organizeCode).add(workCenterCode).add(workCellCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString();
}

@ -3,9 +3,11 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
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.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.process.BaseProcessMonitorService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.swslog.ISwsWriteDbLogService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -29,6 +31,9 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
@Autowired
private IFsmCommonService fsmCommonService;
@Autowired
private ISwsWriteDbLogService writeDbLogService;
//工序开始
@Override
public Boolean doProcessStart(StationRequestBean requestBean) {
@ -42,6 +47,9 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
//工序结束
@Override
public Boolean doProcessComplete(StationRequestBean requestBean) {
//补DB日志 [获取开模ID赋值scanInfo] [获取上下文产出条码数据信息集合赋值resultList]
writeDbLogService.doRestoreDbLog(requestBean, new StationResultBean().restoreDbLog().
scanInfo(productionProcessContextStepService.getScanMonitorContextMouldRecordId(requestBean)).resultList(productionDispatchContextStepService.getProductionPsOutContext(requestBean)));
//清除上下文中的所有业务数据
productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean);
//发送工序完成音

@ -77,7 +77,10 @@ public class MesEquipVariableCollectContext implements Serializable {
@ApiParam("数据类型")
private String dataType;
@ApiParam("变量当前值")
@ApiParam("变量当前值[读到的equipVariableValue值如果存在特殊字符, 原始值赋给此字段后再过滤特殊字符]")
private String realEquipVariableValue;
@ApiParam("变量当前值[非匹配参考值的读取信息需要过滤特殊字符]")
private String equipVariableValue;
@ApiParam("变量状态")
@ -127,4 +130,10 @@ public class MesEquipVariableCollectContext implements Serializable {
return this;
}
public MesEquipVariableCollectContext replaceValue(String realEquipVariableValue, String equipVariableValue) {
this.realEquipVariableValue = realEquipVariableValue;
this.equipVariableValue = equipVariableValue;
return this;
}
}

@ -153,6 +153,8 @@ public class MesPcnExtConstWords {
public static final String PRODUCE_SEQ = "produceSeq";
// URL
public static final String URL = "url";
// 处理状态
public static final String DEAL_STATUS = "dealStatus";
// 时间格式
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

Loading…
Cancel
Save