From 87b161325d9186d8211a7d472ed04fa279f33954 Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei>
Date: 星期五, 14 十一月 2025 16:12:43 +0800
Subject: [PATCH] Merge branch 'master' of http://lanpucloud.cn:1111/r/herb
---
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java | 617 +++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 439 insertions(+), 178 deletions(-)
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
index 74d1590..648ddcc 100755
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
@@ -6,6 +6,7 @@
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.mina.core.session.IoSession;
@@ -23,6 +24,7 @@
import org.jeecg.modules.dry.common.CacheConstants;
import org.jeecg.modules.dry.entity.*;
import org.jeecg.modules.dry.mqtt.MqMessage;
+import org.jeecg.modules.dry.mqtt.MqttConfig;
import org.jeecg.modules.dry.mqtt.MqttUtil;
import org.jeecg.modules.dry.service.*;
import org.jeecg.modules.dry.socket.ServerHandler;
@@ -33,7 +35,11 @@
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
@Slf4j
@@ -54,6 +60,9 @@
private IDryEquipmentService equipmentService;
@Autowired
+ private IDryEqpTypeService dryEqpTypeService;
+
+ @Autowired
private RedisUtil redisUtil;
@Autowired
@@ -68,11 +77,19 @@
@Value(value = "${jeecg.mqtt.role}")
private String role;
+
@Autowired
private MqttUtil mqttUtil;
@Value(value = "${jeecg.mqtt.enable}")
private boolean mqttEnable;
+
+ private static final ConcurrentHashMap<String, ReentrantLock> tenantLocks = new ConcurrentHashMap<>();
+
+ private ReentrantLock getLock(String tenantId, String type) {
+ String lockKey = tenantId + ":" + type;
+ return tenantLocks.computeIfAbsent(lockKey, k -> new ReentrantLock());
+ }
public String getTemporaryToken() {
if (token == null) {
@@ -90,24 +107,24 @@
@Override
@Transactional
public Result<?> realTimeDataHandle(RealTimeDataVo realTimeDataVo) {
- TenantContext.setTenant(realTimeDataVo.getTenantid()+"");
- // log.info("瀹炴椂鏁版嵁锛�"+realTimeDataVo.toString());
+ TenantContext.setTenant(realTimeDataVo.getTenantid() + "");
+// log.info("瀹炴椂鏁版嵁锛�" + realTimeDataVo.toString());
// 1 鏌ヨ鎴栧垱寤哄伐鍗�
// 1.1 浠巖edis鍙栧嚭宸ュ崟缂撳瓨
DryOrderVo orderVo = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(),
- realTimeDataVo.getTenantid()+"_"+realTimeDataVo.getMachineid());
+ realTimeDataVo.getTenantid() + "_" + realTimeDataVo.getMachineid());
// 1.2 濡傛灉鏈夌紦瀛樿褰�
- if(orderVo != null && orderVo.getCode().equals(realTimeDataVo.getWorkorder())) {
+ if (orderVo != null && orderVo.getCode().equals(realTimeDataVo.getWorkorder())) {
- // 1.3 娌℃湁缂撳瓨璁板綍鍐嶆煡璇㈡暟鎹簱
+ // 1.3 娌℃湁缂撳瓨璁板綍鍐嶆煡璇㈡暟鎹簱
} else {
// 鏍规嵁绉熸埛id鍜屽伐鍗曞彿鏌ヨ鏁版嵁搴撴槸鍚︽湁璁板綍锛屾湁鍒欒繑鍥烇紝娌℃湁鍒欐柊澧炰竴鏉″啀杩斿洖
orderVo = getOrSaveDryOrderVoDB(realTimeDataVo);
}
if (orderVo == null) {
- log.error("宸ュ崟涓嶅瓨鍦紝宸ュ崟鍙凤細"+realTimeDataVo.getWorkorder()+",璁惧锛�" + realTimeDataVo.getMachineid() +",鑽潗锛�" + realTimeDataVo.getName());
+ log.error("宸ュ崟涓嶅瓨鍦紝宸ュ崟鍙凤細" + realTimeDataVo.getWorkorder() + ",璁惧锛�" + realTimeDataVo.getMachineid() + ",鑽潗锛�" + realTimeDataVo.getName());
return Result.error("宸ュ崟涓嶅瓨鍦�");
}
@@ -132,11 +149,6 @@
orderVo.setEnvTemp(realTimeDataVo.getEnvtemp());
orderVo.setRemain(realTimeDataVo.getAi_total_time());
orderVo.setCurRemain(realTimeDataVo.getAi_time());
- orderVo.setState_fan(realTimeDataVo.getState_fan());
- orderVo.setState_roller(realTimeDataVo.getState_roller());
- orderVo.setState_auto(realTimeDataVo.getState_auto());
- orderVo.setState_windbox(realTimeDataVo.getState_windbox());
- orderVo.setState_valve(realTimeDataVo.getState_valve());
orderVo.setOrderStatus(realTimeDataVo.getWorkorder_status());
orderVo.setEqp_status(realTimeDataVo.getEqp_status());
// orderVo.setEqp_state(realTimeDataVo.getEqp_state());
@@ -147,70 +159,173 @@
DryOrderTrendVo trendVo = new DryOrderTrendVo(realTimeDataVo);
// 2.2 淇濆瓨宸ュ崟鍚按鐜囧彉鍖� 鎴� 閲嶉噺鍙樺寲
-
- if(realTimeDataVo.getReport_flag()) {
- DryProdRecord prodRecord = new DryProdRecord();
- prodRecord.setReportHeadName(realTimeDataVo.getReport_head_name());
- prodRecord.setReportHeadBatch(realTimeDataVo.getReport_head_batch());
- prodRecord.setReportHeadNum(realTimeDataVo.getReport_head_num());
- prodRecord.setReportHeadMachine(realTimeDataVo.getReport_head_machine());
- prodRecord.setReportHeadAccepter(realTimeDataVo.getReport_head_accepter());
- prodRecord.setReportHeadDate(realTimeDataVo.getReport_head_date());
- prodRecord.setReportHeadLeader(realTimeDataVo.getReport_head_leader());
- prodRecord.setReportHeadTecher(realTimeDataVo.getReport_head_techer());
-
- prodRecord.setReportCheckField(realTimeDataVo.getReport_check_field()?1:0);
- prodRecord.setReportCheckFile(realTimeDataVo.getReport_check_file()?1:0);
- prodRecord.setReportCheckTag(realTimeDataVo.getReport_check_tag()?1:0);
- prodRecord.setReportCheckTool(realTimeDataVo.getReport_check_tool()?1:0);
- prodRecord.setReportCheckMan(realTimeDataVo.getReport_check_man());
- prodRecord.setReportCheckStatus(realTimeDataVo.getReport_check_status()?1:0);
- prodRecord.setReportCheckQa(realTimeDataVo.getReport_check_qa());
- prodRecord.setReportCheckRecord(realTimeDataVo.getReport_check_record());
-
- prodRecord.setReportProductView(realTimeDataVo.getReport_product_view()?1:0);
- prodRecord.setReportProductWind(realTimeDataVo.getReport_product_wind()?1:0);
- prodRecord.setReportProductSun(realTimeDataVo.getReport_product_sun()?1:0);
- prodRecord.setReportProductLowDry(realTimeDataVo.getReport_product_low_dry()?1:0);
- prodRecord.setReportProductDry(realTimeDataVo.getReport_product_dry()?1:0);
- prodRecord.setReportProductStart(realTimeDataVo.getReport_product_start());
- prodRecord.setReportProductEnd(realTimeDataVo.getReport_product_end());
- prodRecord.setReportProductTotal(realTimeDataVo.getReport_product_total());
- prodRecord.setReportProductCheck(realTimeDataVo.getReport_product_check()?1:0);
- prodRecord.setReportProductMan1(realTimeDataVo.getReport_product_man1());
- prodRecord.setReportProductMan2(realTimeDataVo.getReport_product_man2());
- prodRecord.setReportProductWeight(realTimeDataVo.getReport_product_weight());
- prodRecord.setReportProductWaste(realTimeDataVo.getReport_product_waste());
- prodRecord.setReportProductUse(realTimeDataVo.getReport_product_use());
- prodRecord.setReportProductQa(realTimeDataVo.getReport_product_qa());
-
- prodRecord.setReportCleanMachine(realTimeDataVo.getReport_clean_machine()?1:0);
- prodRecord.setReportCleanWaste(realTimeDataVo.getReport_clean_waste()?1:0);
- prodRecord.setReportCleanTool(realTimeDataVo.getReport_clean_tool()?1:0);
- prodRecord.setReportCleanDoor(realTimeDataVo.getReport_clean_door()?1:0);
- prodRecord.setReportCleanBox(realTimeDataVo.getReport_clean_box()?1:0);
- prodRecord.setReportCleanRecord(realTimeDataVo.getReport_clean_record()?1:0);
- prodRecord.setReportCleanDate(realTimeDataVo.getReport_clean_date());
- prodRecord.setReportCleanMan(realTimeDataVo.getReport_clean_man());
- prodRecord.setReportCleanConfirm(realTimeDataVo.getReport_clean_confirm()?1:0);
- prodRecord.setReportCleanQa(realTimeDataVo.getReport_clean_qa());
- prodRecordService.save(prodRecord);
- }
saveOrderTrendVo(trendVo, orderVo);
orderVo.setTrendVo(trendVo);
orderVo.getBellowsTemp().put(realTimeDataVo.getTime3(), realTimeDataVo.getTemp2());
// 2.3 鏇存柊鍒皉edis缂撳瓨
redisUtil.hset(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(),
- realTimeDataVo.getTenantid()+"_"+realTimeDataVo.getMachineid(),orderVo, 60*60);
+ realTimeDataVo.getTenantid() + "_" + realTimeDataVo.getMachineid(), orderVo, 60 * 60);
return Result.ok();
}
+
+ @Override
+ @Transactional
+ public Result<?> realTimeDataHandle(RealTimeDataParentVo realTimeDataParentVo) {
+ TenantContext.setTenant(realTimeDataParentVo.getTenantid() + "");
+// log.info("瀹炴椂鏁版嵁锛�" + realTimeDataParentVo.toString());
+ if (realTimeDataParentVo.getRealTime() != null) {
+ RealTimeDataVo realTimeDataVo = realTimeDataParentVo.getRealTime();
+
+ // 1 鏌ヨ鎴栧垱寤哄伐鍗�
+ // 1.1 浠巖edis鍙栧嚭宸ュ崟缂撳瓨
+ DryOrderVo orderVo = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(),
+ realTimeDataParentVo.getTenantid() + "_" + realTimeDataParentVo.getMachineid());
+ // 1.2 濡傛灉鏈夌紦瀛樿褰�
+ if (orderVo != null && orderVo.getCode() != null && orderVo.getCode().equals(realTimeDataParentVo.getWorkorder())) {
+
+ // 1.3 娌℃湁缂撳瓨璁板綍鍐嶆煡璇㈡暟鎹簱
+ } else {
+ // 鏍规嵁绉熸埛id鍜屽伐鍗曞彿鏌ヨ鏁版嵁搴撴槸鍚︽湁璁板綍锛屾湁鍒欒繑鍥烇紝娌℃湁鍒欐柊澧炰竴鏉″啀杩斿洖
+ realTimeDataVo.setWorkorder(realTimeDataParentVo.getWorkorder());
+ orderVo = getOrSaveDryOrderVoDB(realTimeDataVo);
+ }
+ if (orderVo == null) {
+ log.error("宸ュ崟涓嶅瓨鍦紝宸ュ崟鍙凤細" + realTimeDataParentVo.getWorkorder() + ",璁惧锛�" + realTimeDataParentVo.getMachineid() + ",鑽潗锛�" + realTimeDataVo.getName());
+ return Result.error("宸ュ崟涓嶅瓨鍦�");
+ }
+
+ // 2 鏇存柊宸ュ崟瀹炴椂鏁版嵁
+ // 2.1 灏嗗伐鍗曚腑鐨勬暟鎹浛鎹负鏈�鏂版暟鎹�
+ realTimeDataVo.setOrderId(orderVo.getId());
+ orderVo.setInitial(realTimeDataVo.getMoisture1());
+ orderVo.setDryTime(realTimeDataVo.getTime3());
+ orderVo.setDelay(realTimeDataVo.getDelay());
+ orderVo.setTurn(realTimeDataVo.getTurntime());
+ orderVo.setYield(realTimeDataVo.getWeight3());
+ orderVo.setStart(realTimeDataVo.getStart());
+ orderVo.setAuto(realTimeDataVo.getAuto());
+ orderVo.setPlcdisable(realTimeDataVo.getPlcdisable());
+ orderVo.setLowalarm(realTimeDataVo.getLowalarm());
+ orderVo.setWind(realTimeDataVo.getWind());
+ orderVo.setOriginWeight(realTimeDataVo.getWeight2());
+ orderVo.setWatt(realTimeDataVo.getWatt());
+ orderVo.setSteam(realTimeDataVo.getSteam());
+ orderVo.setEnvHum(realTimeDataVo.getEnvhum());
+ orderVo.setEnvTemp(realTimeDataVo.getEnvtemp());
+ orderVo.setRemain(realTimeDataVo.getAi_total_time());
+ orderVo.setCurRemain(realTimeDataVo.getAi_time());
+ orderVo.setOrderStatus(realTimeDataVo.getWorkorder_status());
+ orderVo.setEqp_status(realTimeDataVo.getEqp_status());
+// orderVo.setEqp_state(realTimeDataVo.getEqp_state());
+ if(realTimeDataParentVo.getFault()!=null && StringUtils.isNotEmpty(realTimeDataParentVo.getFault().getWarning())){
+ orderVo.setWarning(realTimeDataParentVo.getFault().getWarning());
+ }
+ if(realTimeDataParentVo.getFault()!=null && StringUtils.isNotEmpty(realTimeDataParentVo.getFault().getError())){
+ orderVo.setFault(realTimeDataParentVo.getFault().getError());
+ }
+ orderVo.setLevel(realTimeDataVo.getLevel());
+ DryOrderTrendVo trendVo = new DryOrderTrendVo(realTimeDataVo);
+ // 2.2 淇濆瓨宸ュ崟鍚按鐜囧彉鍖� 鎴� 閲嶉噺鍙樺寲
+
+ saveOrderTrendVo(trendVo, orderVo);
+ orderVo.setTrendVo(trendVo);
+ orderVo.getBellowsTemp().put(realTimeDataVo.getTime3(), realTimeDataVo.getTemp2());
+
+ if (realTimeDataParentVo.getFault() != null) {
+ if (realTimeDataParentVo.getFault().getError() != null) {
+ orderVo.setFault(realTimeDataParentVo.getFault().getError());
+ }
+ if (realTimeDataParentVo.getFault().getWarning() != null) {
+ orderVo.setWarning(realTimeDataParentVo.getFault().getWarning());
+ }
+ }
+
+ // 2.3 鏇存柊鍒皉edis缂撳瓨
+ redisUtil.hset(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(),
+ realTimeDataVo.getTenantid() + "_" + realTimeDataVo.getMachineid(), orderVo, 60 * 60);
+ }
+
+ if (realTimeDataParentVo.getReport() != null) {
+ saveReport(realTimeDataParentVo);
+ }
+
+ if (realTimeDataParentVo.getFault() != null) {
+ ReentrantLock faultLock = getLock(realTimeDataParentVo.getTenantid() + "", "fault");
+ faultLock.lock();
+ try {
+ fitFaultRecord(realTimeDataParentVo);
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ faultLock.unlock();
+ }
+
+ }
+ return Result.ok();
+ }
+
+ private void saveReport(RealTimeDataParentVo realTimeDataParentVo) {
+ RealTimeReportVo report = realTimeDataParentVo.getReport();
+ if (report.getReport_flag()) {
+ DryProdRecord prodRecord = new DryProdRecord();
+ prodRecord.setReportHeadName(report.getReport_head_name());
+ prodRecord.setReportHeadBatch(report.getReport_head_batch());
+ prodRecord.setReportHeadNum(report.getReport_head_num());
+ prodRecord.setReportHeadMachine(report.getReport_head_machine());
+ prodRecord.setReportHeadAccepter(report.getReport_head_accepter());
+ prodRecord.setReportHeadDate(report.getReport_head_date());
+ prodRecord.setReportHeadLeader(report.getReport_head_leader());
+ prodRecord.setReportHeadTecher(report.getReport_head_techer());
+
+ prodRecord.setReportCheckField(report.getReport_check_field() ? 1 : 0);
+ prodRecord.setReportCheckFile(report.getReport_check_file() ? 1 : 0);
+ prodRecord.setReportCheckTag(report.getReport_check_tag() ? 1 : 0);
+ prodRecord.setReportCheckTool(report.getReport_check_tool() ? 1 : 0);
+ prodRecord.setReportCheckMan(report.getReport_check_man());
+ prodRecord.setReportCheckStatus(report.getReport_check_status() ? 1 : 0);
+ prodRecord.setReportCheckQa(report.getReport_check_qa());
+ prodRecord.setReportCheckRecord(report.getReport_check_record());
+
+ prodRecord.setReportProductView(report.getReport_product_view() ? 1 : 0);
+ prodRecord.setReportProductWind(report.getReport_product_wind() ? 1 : 0);
+ prodRecord.setReportProductSun(report.getReport_product_sun() ? 1 : 0);
+ prodRecord.setReportProductLowDry(report.getReport_product_low_dry() ? 1 : 0);
+ prodRecord.setReportProductDry(report.getReport_product_dry() ? 1 : 0);
+ prodRecord.setReportProductStart(report.getReport_product_start());
+ prodRecord.setReportProductEnd(report.getReport_product_end());
+ prodRecord.setReportProductTotal(report.getReport_product_total());
+ prodRecord.setReportProductCheck(report.getReport_product_check() ? 1 : 0);
+ prodRecord.setReportProductMan1(report.getReport_product_man1());
+ prodRecord.setReportProductMan2(report.getReport_product_man2());
+ prodRecord.setReportProductWeight(report.getReport_product_weight());
+ prodRecord.setReportProductWaste(report.getReport_product_waste());
+ prodRecord.setReportProductUse(report.getReport_product_use());
+ prodRecord.setReportProductQa(report.getReport_product_qa());
+
+ prodRecord.setReportCleanMachine(report.getReport_clean_machine() ? 1 : 0);
+ prodRecord.setReportCleanWaste(report.getReport_clean_waste() ? 1 : 0);
+ prodRecord.setReportCleanTool(report.getReport_clean_tool() ? 1 : 0);
+ prodRecord.setReportCleanDoor(report.getReport_clean_door() ? 1 : 0);
+ prodRecord.setReportCleanBox(report.getReport_clean_box() ? 1 : 0);
+ prodRecord.setReportCleanRecord(report.getReport_clean_record() ? 1 : 0);
+ prodRecord.setReportCleanDate(report.getReport_clean_date());
+ prodRecord.setReportCleanMan(report.getReport_clean_man());
+ prodRecord.setReportCleanConfirm(report.getReport_clean_confirm() ? 1 : 0);
+ prodRecord.setReportCleanQa(report.getReport_clean_qa());
+ prodRecordService.save(prodRecord);
+ }
+ }
+
+
/**
* 鏍规嵁绉熸埛id鍜屽伐鍗曞彿鏌ヨ鏁版嵁搴撴槸鍚︽湁璁板綍锛屾湁鍒欒繑鍥烇紝娌℃湁鍒欐柊澧炰竴鏉�
+ *
* @param realTimeDataVo
* @return
*/
private DryOrderVo getOrSaveDryOrderVoDB(RealTimeDataVo realTimeDataVo) {
+ TenantContext.setTenant(realTimeDataVo.getTenantid() + "");
DryOrderVo orderVo;
LambdaQueryWrapper<DryOrder> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DryOrder::getCode, realTimeDataVo.getWorkorder());
@@ -222,7 +337,8 @@
// 杞崲涓虹紦瀛樻暟鎹粨鏋�
orderVo = BeanUtil.toBean(one, DryOrderVo.class);
if (one.getTemps() != null) {
- Map map = JSONObject.parseObject(one.getTemps(), new TypeReference<Map<Integer,Double>>(){});
+ Map map = JSONObject.parseObject(one.getTemps(), new TypeReference<Map<Integer, Double>>() {
+ });
orderVo.setBellowsTemp(map);
}
// 鏌ヨ绉伴噸璁板綍锛屾坊鍔犲埌缂撳瓨鏁版嵁缁撴瀯
@@ -232,7 +348,7 @@
orderVo.setTrendVo(oldVo);
orderVo.setDetailList(trendVos);
}
- // 3 鏁版嵁搴撴病鏈夊垯鏂板涓�鏉℃暟鎹�
+ // 3 鏁版嵁搴撴病鏈夊垯鏂板涓�鏉℃暟鎹�
} else {
orderVo = saveNewOrder(realTimeDataVo);
@@ -242,38 +358,123 @@
/**
* 淇濆瓨鏂板伐鍗�
+ *
* @param realTimeDataVo
* @return
*/
private DryOrderVo saveNewOrder(RealTimeDataVo realTimeDataVo) {
+ TenantContext.setTenant(realTimeDataVo.getTenantid() + "");
DryOrderVo orderVo;
// 鏌ヨ璁惧
DryEquipment equ = queryEquipmentByCodeTenant(realTimeDataVo);
if (equ == null) {
- log.error("鏈壘鍒拌澶囷細"+realTimeDataVo.getIndex() +","+realTimeDataVo.getName() +",鏈哄彴锛�" + realTimeDataVo.getMachineid());
- return null;
+ log.error("鏈壘鍒拌澶囷細" + realTimeDataVo.getIndex() + "," + realTimeDataVo.getName() + ",鏈哄彴锛�" + realTimeDataVo.getMachineid());
+ log.error("鏂板璁惧锛�");
+ if (realTimeDataVo.getMachineid() == null || realTimeDataVo.getTenantid() == null) {
+ log.error("鏂板璁惧澶辫触锛氳澶嘔D鎴栫鎴稩D涓虹┖锛乵achineid={}, tenantid={}",
+ realTimeDataVo.getMachineid(), realTimeDataVo.getTenantid());
+ return null;
+ }
+
+ DryEquipment addEqu = new DryEquipment(realTimeDataVo);
+
+ try {
+ String digits = StringUtils.getDigits(realTimeDataVo.getMachineid());
+ addEqu.setName(Integer.parseInt(digits) + "#骞茬嚗璁惧");
+ } catch (NumberFormatException e) {
+ log.error("璁惧ID鏍煎紡閿欒锛屾棤娉曟彁鍙栨暟瀛楅儴鍒嗭細machineid={}", realTimeDataVo.getMachineid(), e);
+ return null;
+ }
+
+ DryEqpType eqpType = dryEqpTypeService.getOne(
+ new LambdaQueryWrapper<DryEqpType>()
+ .eq(DryEqpType::getTenantId, realTimeDataVo.getTenantid())
+ );
+ if (eqpType == null) {
+ log.error("鏈煡璇㈠埌绉熸埛璁惧绫诲瀷锛歿}", realTimeDataVo.getTenantid());
+ return null;
+ }
+
+ Optional.ofNullable(eqpType).ifPresent(type -> addEqu.setType(type.getId()));
+
+ // 璁惧鏂板
+ ReentrantLock equipmentLock = getLock(realTimeDataVo.getTenantid() + "", "equipment");
+
+ equipmentLock.lock();
+ try {
+ if (!equipmentService.save(addEqu)) {
+ log.error("鏂板璁惧澶辫触锛氭暟鎹簱淇濆瓨寮傚父锛乪quipment={}", addEqu);
+ return null;
+ }
+ redisUtil.del(CommonCacheConstant.DRY_CACHE_TENANT_EQUS_LIST);
+ redisUtil.del(CommonCacheConstant.DRY_CACHE_TENANT_EQUS);
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ equipmentLock.unlock();
+ }
+ equ = addEqu;
+
+ log.info("鏂板璁惧鎴愬姛锛歟quipmentId={}", addEqu.getId());
+
}
// 鏌ヨ鑽潗
- DryHerbFormula herbFormula = queryHerbByIndexTenant(realTimeDataVo);
+ DryHerbFormula herbFormula = queryHerbByIndexTenant(realTimeDataVo);
if (herbFormula == null) {
- log.error("鏈壘鍒拌嵂鏉愶細"+realTimeDataVo.getIndex() +","+realTimeDataVo.getName() +",鏈哄彴锛�" + realTimeDataVo.getMachineid());
+ log.error("鏈壘鍒拌嵂鏉愶細" + realTimeDataVo.getIndex() + "," + realTimeDataVo.getName() + ",鏈哄彴锛�" + realTimeDataVo.getMachineid());
return null;
}
- // 鍒涘缓鏂板伐鍗�
- orderVo = new DryOrderVo(realTimeDataVo);
- orderVo.setHerbId(herbFormula.getId());
- orderVo.setEquId(equ.getId());
- DryOrder dryOrder = BeanUtil.toBean(orderVo, DryOrder.class);
- boolean save = dryOrderService.save(dryOrder);
- return orderVo;
+ // 宸ュ崟鏂板
+ ReentrantLock orderLock = getLock(realTimeDataVo.getTenantid() + "", "order");
+ orderLock.lock();
+ try {
+ //鏍规嵁绉熸埛id 鍜� 鑽潗id 妫�鏌ユ渶杩戞槸鍚﹀瓨鍦ㄥ伐鍗� TODO 楠岃瘉
+ LambdaQueryWrapper<DryOrder> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(DryOrder::getHerbId, herbFormula.getId());
+ queryWrapper.eq(DryOrder::getTenantId, realTimeDataVo.getTenantid());
+ queryWrapper.orderByDesc(DryOrder::getOrderTime);
+ queryWrapper.last("LIMIT 1");
+ // 1 鏌ヨ鏁版嵁搴�
+ DryOrder one = dryOrderService.getOne(queryWrapper);
+ if(one!=null){
+ Date orderDate = one.getOrderTime();
+ //30S鍐呬笉鍏佽鏂板缓宸ュ崟锛岄伩鍏嶉噸澶�
+ LocalDateTime orderTime = orderDate.toInstant()
+ .atZone(ZoneId.systemDefault())
+ .toLocalDateTime();
+
+ LocalDateTime now = LocalDateTime.now();
+ long secondsBetween = java.time.Duration.between(orderTime, now).getSeconds();
+ boolean b = secondsBetween <= 30;
+ if(b){
+ return BeanUtil.toBean(one, DryOrderVo.class);
+ }
+ }
+
+ // 鍒涘缓鏂板伐鍗�
+ orderVo = new DryOrderVo(realTimeDataVo);
+ orderVo.setHerbId(herbFormula.getId());
+ orderVo.setEquId(equ.getId());
+ DryOrder dryOrder = BeanUtil.toBean(orderVo, DryOrder.class);
+ boolean save = dryOrderService.save(dryOrder);
+ return orderVo;
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ orderLock.unlock();
+ }
+
+
+ return null;
}
/**
* 鏌ヨ璁惧锛屾柊璁惧鍒欐坊鍔犲埌璁惧涓绘暟鎹�
+ *
* @param realTimeDataVo
* @return
*/
@@ -283,7 +484,7 @@
queryWrapper.eq(DryEquipment::getCode, realTimeDataVo.getMachineid());
DryEquipment one = equipmentService.getOne(queryWrapper);
if (one == null) {
- log.error(role+"淇濆瓨瀹炴椂鏁版嵁锛屾湭鎵惧埌璁惧锛�"+realTimeDataVo.getMachineid());
+ log.error(role + "淇濆瓨瀹炴椂鏁版嵁锛屾湭鎵惧埌璁惧锛�" + realTimeDataVo.getMachineid());
// one = new DryEquipment(realTimeDataVo);
// equipmentService.save(one);
if (MqttConstant.ROLE_ADMIN.equals(role)) {
@@ -294,8 +495,10 @@
object.put("tenantId", realTimeDataVo.getTenantid());
mqttMessage.setPayload(object.toJSONString().getBytes());
try {
- mqttUtil.getMqttClient().publish(MqttConstant.SERVICE_REQ_PREFIX ,mqttMessage);
- }catch (MqttException e) {
+ if (mqttEnable) {
+ mqttUtil.getMqttClient().publish(MqttConstant.SERVICE_REQ_PREFIX, mqttMessage);
+ }
+ } catch (MqttException e) {
e.printStackTrace();
}
@@ -307,6 +510,7 @@
/**
* 鏌ヨ鑽潗锛屾柊鑽潗娣诲姞鍒版暟鎹簱
+ *
* @param realTimeDataVo
* @return
*/
@@ -314,26 +518,33 @@
LambdaQueryWrapper<DryHerbFormula> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DryHerbFormula::getTenantId, realTimeDataVo.getTenantid());
queryWrapper.eq(DryHerbFormula::getName, realTimeDataVo.getName());
+ queryWrapper.orderByDesc(DryHerbFormula::getCreateTime);
+ queryWrapper.last("LIMIT 1");
DryHerbFormula one = dryHerbFormulaService.getOne(queryWrapper);
- if (one == null) {
- one = new DryHerbFormula(realTimeDataVo);
- DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(realTimeDataVo.getTenantid() + "", realTimeDataVo.getMachineid());
- one.setEqpType(dryEquipment.getType());
- dryHerbFormulaService.save(one);
- }
+
+// if (one == null) {
+// one = new DryHerbFormula(realTimeDataVo);
+// DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(realTimeDataVo.getTenantid() + "", realTimeDataVo.getMachineid());
+// if (dryEquipment != null && dryEquipment.getType() != null) {
+// one.setEqpType(dryEquipment.getType());
+// }
+//
+// dryHerbFormulaService.save(one);
+// }
return one;
}
/**
* 淇濆瓨鍚按鐜囧彉鍖栬褰�
+ *
* @param trendVo
* @param orderVo
*/
private void saveOrderTrendVo(DryOrderTrendVo trendVo, DryOrderVo orderVo) {
//鍒ゆ柇 瀹炴椂鍚按鐜� 鎴� 瀹炴椂閲嶉噺鏈夋病鏈夊彉鍖栵紝鏈夊彉鍖栧垯鏇存柊
- if(orderVo.getTrendVo() == null && trendVo != null && trendVo.getWeight() > 0
- || orderVo.getTrendVo()!=null && trendVo.getWeight() < orderVo.getTrendVo().getWeight()
- ) {
+ if (orderVo.getTrendVo() == null && trendVo != null && trendVo.getWeight() > 0
+ || orderVo.getTrendVo() != null && trendVo.getWeight() < orderVo.getTrendVo().getWeight()
+ ) {
DryOrder byId = dryOrderService.getById(orderVo.getId());
// 灏嗘渶鏂扮粨鏋滄洿鏂板埌宸ュ崟
if (byId != null) {
@@ -351,12 +562,13 @@
/**
* 鏌ヨ鏈哄彴瀹炴椂鏁版嵁
+ *
* @param realTimeDataVo
* @return
*/
@Override
public Result<?> queryMachineRealTImeData(RealTimeDataVo realTimeDataVo) {
- TenantContext.setTenant(realTimeDataVo.getTenantid()+"");
+ TenantContext.setTenant(realTimeDataVo.getTenantid() + "");
// 鏌ヨ鎵�鏈夋満鍙�,鏌ヨ璇彞缁勮
LambdaQueryWrapper<DryEquipment> queryWrapper = new LambdaQueryWrapper<>();
@@ -378,13 +590,13 @@
dryEquipments.stream().forEach(item -> {
// 鑾峰彇宸ュ崟
DryOrderVo order = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid() + "_" + item.getCode());
- list.add(item.getName().substring(0, item.getName().indexOf('#')+1));
- if (order != null) {
+ list.add(item.getName().substring(0, item.getName().indexOf('#') + 1));
+ if (order != null && order.getDetailList()!=null && !order.getDetailList().isEmpty()) {
// 璁$畻骞茬嚗鏁堢巼锛岀敤浜庡姣�
DryOrderTrendVo dryOrderTrendVo = order.getDetailList().get(order.getDetailList().size() - 1);
double v = order.getOriginWeight() - dryOrderTrendVo.getWeight();
- if (v > 0 && dryOrderTrendVo.getTotalTime()>0) {
+ if (v > 0 && dryOrderTrendVo.getTotalTime() > 0) {
DecimalFormat df = new DecimalFormat("#.00");
dList.add(Double.valueOf(df.format(v / dryOrderTrendVo.getTotalTime() * 60)));
} else {
@@ -406,7 +618,7 @@
// 鏌ヨ杩戝崄娆℃晥鐜囧拰鑳借兘鑰楀钩鍧�
dryOrderService.queryRecentOrderAvg(orderVo);
}
- }catch (Exception e) {
+ } catch (Exception e) {
e.printStackTrace();
}
return Result.ok(orderVo);
@@ -420,27 +632,27 @@
DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(msgVo.getTenantId() + "", msgVo.getMachineId());
log.info("鑾峰彇璁惧锛�" + dryEquipment.toString());
- // managedSessions.keySet().forEach(addr -> {
- // ObjectOutputStream oos = null;
- try {
+ // managedSessions.keySet().forEach(addr -> {
+ // ObjectOutputStream oos = null;
+ try {
// Socket socket = SocketServerConfig.clientMap.get(addr);
- IoSession session = ServerHandler.clientSocket.get(dryEquipment.getIp());
- if (session == null) {
- return Result.error("鏈幏鍙栧埌session,璇锋鏌ュ鎴风閰嶇疆鎴栬澶噄p閰嶇疆鏄惁姝e父");
- }
- SocketMsgVo smv = new SocketMsgVo(msgVo);
- session.write(JSONObject.toJSONString(smv));
+ IoSession session = ServerHandler.clientSocket.get(dryEquipment.getIp());
+ if (session == null) {
+ return Result.error("鏈幏鍙栧埌session,璇锋鏌ュ鎴风閰嶇疆鎴栬澶噄p閰嶇疆鏄惁姝e父");
+ }
+ SocketMsgVo smv = new SocketMsgVo(msgVo);
+ session.write(JSONObject.toJSONString(smv));
// oos = new ObjectOutputStream(socket.getOutputStream());
// String s = JSONObject.toJSONString(new SocketMsgVo(msgVo));
// oos.writeUTF(s);
// oos.flush();
- } catch (Exception e) {
- throw new RuntimeException(e);
- } finally {
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ } finally {
- }
- // });
+ }
+ // });
return Result.OK();
}
@@ -458,16 +670,16 @@
if (order != null) {
orderVo.setEnvHum(order.getEnvHum());
orderVo.setEnvTemp(order.getEnvTemp());
- double watt = order.getWatt() - order.getDetailList().get(0).getWatt();
- orderVo.setWatt(orderVo.getWatt()==null? watt : orderVo.getWatt() + watt);
- double steam = order.getSteam() - order.getDetailList().get(0).getSteam();
- orderVo.setSteam(orderVo.getSteam()==null? steam : orderVo.getSteam() + steam);
- orderVo.setOriginWeight(orderVo.getOriginWeight()==null? order.getOriginWeight(): orderVo.getOriginWeight() + order.getOriginWeight());
+ double watt = order.getWatt() - (order.getDetailList().size() > 0 ?order.getDetailList().get(0).getWatt():0);
+ orderVo.setWatt(orderVo.getWatt() == null ? watt : orderVo.getWatt() + watt);
+ double steam = order.getSteam() - ( order.getDetailList().size() > 0 ?order.getDetailList().get(0).getSteam():0);
+ orderVo.setSteam(orderVo.getSteam() == null ? steam : orderVo.getSteam() + steam);
+ orderVo.setOriginWeight(orderVo.getOriginWeight() == null ? order.getOriginWeight() : orderVo.getOriginWeight() + order.getOriginWeight());
- double yield = order.getOriginWeight()*(1-(order.getInitial()/100))/(1-(order.getTarget()/100));
- orderVo.setYield(orderVo.getYield()==null? yield: orderVo.getYield() + yield);
+ double yield = order.getOriginWeight() * (1 - (order.getInitial() / 100)) / (1 - (order.getTarget() / 100));
+ orderVo.setYield(orderVo.getYield() == null ? yield : orderVo.getYield() + yield);
double sub = order.getOriginWeight() - order.getYield();
- orderVo.setReduce(orderVo.getReduce()==null? sub: orderVo.getReduce() + sub);
+ orderVo.setReduce(orderVo.getReduce() == null ? sub : orderVo.getReduce() + sub);
}
@@ -484,7 +696,7 @@
@Override
public Result<?> fitFaultRecord(RealTimeDataVo vo) {
- TenantContext.setTenant(vo.getTenantid()+"");
+ TenantContext.setTenant(vo.getTenantid() + "");
ThreadUtil.execute(() -> {
try {
//瑙f瀽瀛樺偍鎶ヨ鏁版嵁
@@ -494,30 +706,28 @@
//澶勭悊缁撴潫鍚庯紝灏唕edis涓疄鏃舵暟鎹彂閫佽嚦浜戞湇鍔″櫒
- Map<Object, Object> toCloudFaultMap = redisUtil.hmget(MqttConstant.MQTT_REAL_FAULT);
- if(mqttEnable && !toCloudFaultMap.isEmpty()){
- MqMessage< Map<Object, Object>> message = new MqMessage<>();
- message.setData(toCloudFaultMap);
- message.setTentId(vo.getTenantid()+"");
- MqttMessage mqttMessage = new MqttMessage();
- mqttMessage.setQos(0);
- mqttMessage.setPayload(JSON.toJSONString(message).getBytes());
- mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_REAL_FAULT_DATA,mqttMessage);
- }
-
-
- //瑕佷繚瀛樼殑鍘嗗彶鏁呴殰
- if(!faultRecords1.isEmpty()){
- MqMessage<List<DryFaultRecord>> message = new MqMessage<>();
- message.setData(faultRecords1);
- message.setTentId(vo.getTenantid()+"");
+ Map<Object, Object> toCloudFaultMap = redisUtil.hmget(String.format(MqttConstant.MQTT_REAL_FAULT, vo.getTenantid()));
+ if (mqttEnable && !toCloudFaultMap.isEmpty()) {
+ MqMessage<Map<Object, Object>> message = new MqMessage<>();
+ message.setData(toCloudFaultMap);
+ message.setTentId(vo.getTenantid() + "");
MqttMessage mqttMessage = new MqttMessage();
mqttMessage.setQos(0);
- mqttMessage.setPayload((JSON.toJSONString(message).getBytes()));
- mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_FAULT_DATA,mqttMessage);
+ mqttMessage.setPayload(JSON.toJSONString(message).getBytes());
+ mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_REAL_FAULT_DATA, mqttMessage);
}
+ //瑕佷繚瀛樼殑鍘嗗彶鏁呴殰
+ if (!faultRecords1.isEmpty()) {
+ MqMessage<List<DryFaultRecord>> message = new MqMessage<>();
+ message.setData(faultRecords1);
+ message.setTentId(vo.getTenantid() + "");
+ MqttMessage mqttMessage = new MqttMessage();
+ mqttMessage.setQos(0);
+ mqttMessage.setPayload((JSON.toJSONString(message).getBytes()));
+ mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_FAULT_DATA, mqttMessage);
+ }
} catch (Exception e) {
@@ -528,24 +738,69 @@
return null;
}
+ @Override
+ public void fitFaultRecord(RealTimeDataParentVo vo) {
+ TenantContext.setTenant(vo.getTenantid() + "");
+ //瑙f瀽瀛樺偍鎶ヨ鏁版嵁
+ List<DryFaultRecord> errorList = fitFault(vo.getFault().getError(), vo.getWorkorder(), vo.getTenantid(), vo.getMachineid(), 1);
+ List<DryFaultRecord> warnList = fitFault(vo.getFault().getWarning(), vo.getWorkorder(), vo.getTenantid(), vo.getMachineid(), 2);
+ if (!errorList.isEmpty()) {
+ log.error("淇濆瓨鏁呴殰锛歿}", errorList.toString());
+ }
+ if (!warnList.isEmpty()) {
+ log.error("淇濆瓨鍛婅锛歿}", warnList.toString());
+ }
+
+ //浠ヤ笅涓轰簯鏈嶅姟澶勭悊鏁呴殰,鍘傚唴鏈湴鏈嶅姟鏃犻渶澶勭悊
+ if (!mqttEnable) return;
+
+
+ //澶勭悊缁撴潫鍚庯紝灏唕edis涓疄鏃舵暟鎹彂閫佽嚦浜戞湇鍔″櫒 key = tenantId + machineId + eqpFault
+ Map<Object, Object> toCloudFaultMap = redisUtil.hmget(String.format(MqttConstant.MQTT_REAL_FAULT, vo.getTenantid()));
+
+
+ Map<String, DryFaultRecordVo> dryFaultMap = toCloudFaultMap.entrySet().stream()
+ .collect(Collectors.toMap(
+ entry -> entry.getKey().toString(),
+ entry -> (DryFaultRecordVo) entry.getValue()
+ ));
+
+ String tenantId = vo.getTenantid() + "";
+
+ //骞挎挱鍙戦�佺粰鍚勭鎴蜂笅绉诲姩璁惧
+ if (dryFaultMap.isEmpty()) {
+ return;
+ }
+ String recTopic = String.format(MqttConstant.SERVICE_BROADCAST_TENANT_REAL_FAULT, tenantId);
+ //鏁版嵁杞崲
+ List<DryFaultRecordVo> faultList = new ArrayList<DryFaultRecordVo>((dryFaultMap.values()));
+ MqMessage<List<DryFaultRecordVo>> mqMessage = new MqMessage<>(faultList, tenantId, recTopic);
+ //鍙戦�佸箍鎾�
+// log.error("骞挎挱缁欙細{}", recTopic);
+ mqttUtil.sendMqttMessage(MqttConstant.SERVICE_BROADCAST_TENANT_REAL_FAULT, mqMessage, 1);
+
+
+ }
+
/**
* 瑙f瀽瀛樺偍鏁呴殰鏁版嵁
* TODO 淇濊瘉鍘熷瓙鎬�
- * @param fault 鏁呴殰鏁版嵁
- * @param orderId 宸ュ崟
- * @param tenantId 绉熸埛
+ *
+ * @param fault 鏁呴殰鏁版嵁
+ * @param orderId 宸ュ崟
+ * @param tenantId 绉熸埛
* @param machineId 璁惧
* @param faultType 鏁呴殰绫诲瀷
* @return 缁勮濂芥晠闅滄暟鎹�
*/
- private List<DryFaultRecord> fitFault(String fault, String orderId,Integer tenantId,String machineId,Integer faultType){
+ private List<DryFaultRecord> fitFault(String fault, String orderId, Integer tenantId, String machineId, Integer faultType) {
List<DryFaultRecord> result = new ArrayList<>();
- if(StringUtils.isEmpty(fault))return result;
+ if (StringUtils.isEmpty(fault)) return result;
//鏁版嵁鏍锋湰锛�"eqp_fault": "婊氱瓛闄嶈秴鏃�-鎶ヨ,椋庢満杩囨祦鎶ヨ,婊氱瓛鍗囪秴鏃�-鎶ヨ,椋庣鍗囨姤璀�",
- System.err.println((faultType == 1 ? "绫诲瀷锛氭晠闅�" : "绫诲瀷锛氭姤璀�") + DateUtils.formatDateTime()+"--"+fault);
+// System.err.println((faultType == 1 ? "绫诲瀷锛氭晠闅�" : "绫诲瀷锛氭姤璀�") + DateUtils.formatDateTime() + "--" + fault);
//redis涓殑鏁呴殰
- Map<Object, Object> rFauMap = redisUtil.hmget(MqttConstant.MQTT_REAL_FAULT);
+ Map<Object, Object> rFauMap = redisUtil.hmget(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId));
Map<String, Object> redFauMap = rFauMap.entrySet().stream()
.collect(Collectors.toMap(
entry -> entry.getKey().toString(), // 閿浆鎹负瀛楃涓�
@@ -553,42 +808,44 @@
));
//娌℃湁鐢熸垚宸ュ崟鐨勬晠闅滄暟鎹笉瀛樺偍
- if(StringUtils.isEmpty(orderId)){
+ if (StringUtils.isEmpty(orderId)) {
return result;
}
- if(StringUtils.isEmpty(fault) && rFauMap.isEmpty()){
+ if (StringUtils.isEmpty(fault) && rFauMap.isEmpty()) {
return result;
}
//1.瑙f瀽鏁版嵁
String[] eqpFaults = fault.split(",");
- Map<String,DryFaultRecord> addFauMap = new HashMap<>();
- Map<String,DryFaultRecord> realFauMap = new HashMap<>();
+ Map<String, DryFaultRecord> addFauMap = new HashMap<>();
+ Map<String, DryFaultRecord> realFauMap = new HashMap<>();
for (int i = 0; i < eqpFaults.length; i++) {
String eqpFault = eqpFaults[i];
//閬垮厤绌哄瓧绗︿覆
- if(StringUtils.isEmpty(eqpFault.trim())) continue;
+ if (StringUtils.isEmpty(eqpFault.trim())) continue;
//1.1妫�鏌qtt涓槸鍚﹀凡瀛樺湪杩欎釜鏁呴殰
- String redisKey = String.format("%s_%s_%s", tenantId, machineId,eqpFault).trim();
+ String redisKey = String.format("%s_%s_%s", tenantId, machineId, eqpFault).trim();
realFauMap.put(redisKey, new DryFaultRecord());
- DryFaultRecordVo rFault = (DryFaultRecordVo) redisUtil.hget(MqttConstant.MQTT_REAL_FAULT,redisKey);
+ DryFaultRecordVo rFault = (DryFaultRecordVo) redisUtil.hget(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId), redisKey);
//1.2濡傛灉redis涓嶅瓨鍦ㄥ垯瀛樺叆锛堝瓨鏁呴殰寮�濮嬶級
- if(rFault ==null){
+ if (rFault == null) {
//缁勮缂撳瓨鏁版嵁
// DryFaultRecord faultRecord = new DryFaultRecord(orderId,tenantId,eqpFault,faultType,new Date(),null);
// addFauMap.put(redisKey,faultRecord);
Map<String, DryEquipment> equipmentMap = equipmentService.queryEquByTenantId(tenantId);
String tenantName = (String) redisUtil.hget(CommonCacheConstant.SYS_CACHE_TENANT, tenantId + "");
- DryFaultRecordVo vo = new DryFaultRecordVo(orderId,tenantId,eqpFault,faultType,new Date(),null,1,equipmentMap.get(machineId).getName(),tenantName);
- addFauMap.put(redisKey,vo);
- }else {
+ DryFaultRecordVo vo = new DryFaultRecordVo(orderId, tenantId, eqpFault, faultType, new Date(), null, 1, machineId, equipmentMap.get(machineId).getName(), tenantName);
+ addFauMap.put(redisKey, vo);
+ } else {
+
+
//濡傛灉鏁版嵁宸插瓨鍦紝涓旇鏁板ぇ浜�1灏遍噸缃鏁帮紙璁℃暟3娆″悗鍒ゅ畾鏁呴殰缁撴潫锛�3娆′箣鍓嶉噸鏂颁笂鎶ユ晠闅滆鏄庢晠闅滆繕鍦ㄦ寔缁� 闇�瑕侀噸鏂拌鏁帮級
- if(rFault.getECount()!=null && rFault.getECount() > 1){
+ if (rFault.getECount() != null && rFault.getECount() > 1) {
rFault.setECount(1);
- redisUtil.hset(MqttConstant.MQTT_REAL_FAULT,redisKey,rFault);
- System.err.println("鎶ヨ娆℃暟閲嶇疆 clear clear 锛宬ey-"+redisKey);
+ redisUtil.hset(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId), redisKey, rFault);
+ System.err.println("鎶ヨ娆℃暟閲嶇疆 clear clear 锛宬ey-" + redisKey);
}
}
@@ -599,40 +856,44 @@
//鍚堝苟鏁版嵁
addFauMap.forEach((key, value) -> redFauMap.putIfAbsent(key, value));
//娌℃湁鏂版晠闅滄暟鎹笉鐢ㄨ鐩�
- if(!addFauMap.isEmpty()){
- redisUtil.hmset(MqttConstant.MQTT_REAL_FAULT,redFauMap);
+ if (!addFauMap.isEmpty()) {
+ redisUtil.hmset(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId), redFauMap);
}
//2妫�娴嬪凡缁撴潫鐨勬晠闅�
//2.1濡傛灉瀹炴椂鏁版嵁涓嶅瓨鍦╮edis瀛樺湪鍒欎唬琛ㄦ晠闅滅粨鏉燂紝瀛樺叆鏁版嵁搴�
- Map<Object, Object> curFauMap = redisUtil.hmget(MqttConstant.MQTT_REAL_FAULT);
- curFauMap.keySet().stream()
+ Map<Object, Object> curFauMap = redisUtil.hmget(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId));
+ Map<Object, DryFaultRecordVo> collect = curFauMap.keySet().stream()
+ .filter(key -> {
+ String[] split = key.toString().split("_");
+ return split[0].equals(tenantId + "") && split[1].equals(machineId);
+ })
//鐗瑰埆娉ㄦ剰锛屽涓姤璀︾被鍨嬪叡鐢ㄦ柟娉曢渶瑕佸尯鍒嗙被鍨�
- .filter(key -> !realFauMap.containsKey(key) && ((DryFaultRecordVo)curFauMap.get(key)).getFaultType() == faultType)
- .forEach(key -> {
- DryFaultRecordVo vo = (DryFaultRecordVo)redFauMap.get(key);
- vo.setECount(vo.getECount()+1);
- if(redisUtil.hget(MqttConstant.MQTT_REAL_FAULT,key.toString())!=null){
- //鏇存柊娆℃暟
- redisUtil.hset(MqttConstant.MQTT_REAL_FAULT,key.toString(),vo);
- System.err.println("鎶ヨ娆℃暟鏇存柊锛宬ey-"+key);
- }
+ .filter(key -> !realFauMap.containsKey(key) && (Objects.equals(((DryFaultRecordVo) curFauMap.get(key)).getFaultType(), faultType)))
+ .collect(Collectors.toMap(key -> key, // 淇濈暀鍘熼敭
+ key -> (DryFaultRecordVo) curFauMap.get(key)));
+ collect.keySet().forEach(key -> {
+ DryFaultRecordVo vo = (DryFaultRecordVo) redFauMap.get(key);
+ vo.setECount(vo.getECount() + 1);
+ if (redisUtil.hget(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId), key.toString()) != null) {
+ //鏇存柊娆℃暟
+ redisUtil.hset(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId), key.toString(), vo);
+ System.err.println("鎶ヨ娆℃暟鏇存柊锛宬ey-" + key);
+ }
- if(vo.getECount()>=3){
- vo.setEndTime(new Date());
- //TODO 缁撴潫瓒呰繃鏌愪釜鏃堕棿鍖洪棿鍒ゅ畾涓洪敊璇暟鎹�
- faultRecordService.save(vo);
- redisUtil.hdel(MqttConstant.MQTT_REAL_FAULT,key);
- result.add(vo);
- System.err.println((faultType == 1 ? "绫诲瀷锛氭晠闅�" : "绫诲瀷锛氭姤璀�") + DateUtils.formatDateTime()+"瀛樺叆鏁版嵁搴�");
- }
- });
-
+ if (vo.getECount() >= 3) {
+ vo.setEndTime(new Date());
+ //TODO 缁撴潫瓒呰繃鏌愪釜鏃堕棿鍖洪棿鍒ゅ畾涓洪敊璇暟鎹�
+ faultRecordService.save(vo);
+ redisUtil.hdel(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId), key);
+ result.add(vo);
+// System.err.println((faultType == 1 ? "绫诲瀷锛氭晠闅�" : "绫诲瀷锛氭姤璀�") + DateUtils.formatDateTime() + "瀛樺叆鏁版嵁搴�");
+ }
+ });
return result;
}
-
}
--
Gitblit v1.9.3