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

dev.entOperation
xinzirun 2024-10-07 09:16:12 +08:00
commit f7f54bf0c1
16 changed files with 205 additions and 43 deletions

View File

@ -1,8 +1,8 @@
package com.muyu.enterprise.cache; package com.muyu.enterprise.cache;
import com.muyu.common.cache.config.CacheAbsBasic; import com.muyu.common.cache.config.CacheAbsBasic;
import com.muyu.enterprise.domain.CarCompany; import com.muyu.enterprise.domain.FaultRule;
import com.muyu.enterprise.domain.FaultType; import org.springframework.stereotype.Component;
/** /**
* redis * redis
@ -11,17 +11,16 @@ import com.muyu.enterprise.domain.FaultType;
* @Date 2024/10/3 15:22 * @Date 2024/10/3 15:22
* @author MingWei.Zong * @author MingWei.Zong
*/ */
public class CarFaultCacheService extends CacheAbsBasic<String, FaultRule> {
public class CarFaultCacheService extends CacheAbsBasic<String, FaultType> {
@Override @Override
public String keyPre() { public String keyPre() {
return "faultType:info:"; return "faultRule:info:";
} }
@Override @Override
public String decode(String key) { public String decode(String key) {
return key.replace("faultType:info:",""); return key.replace("faultRule:info:","");
} }

View File

@ -1,2 +1,9 @@
com.muyu.enterprise.cache.CarCompanyCacheService
com.muyu.enterprise.cache.CarFaultCacheService
com.muyu.enterprise.cache.CarManageCacheService com.muyu.enterprise.cache.CarManageCacheService
com.muyu.enterprise.cache.CarMessageCacheService
com.muyu.enterprise.cache.CarTemplateCacheService
com.muyu.enterprise.cache.CarWarnCacheService
com.muyu.enterprise.cache.ElectronicFenceCacheService

View File

@ -21,7 +21,7 @@ import lombok.experimental.SuperBuilder;
@TableName(value = "fault_rule",autoResultMap = true) @TableName(value = "fault_rule",autoResultMap = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Tag(name = "故障规则") @Tag(name = "故障规则")
public class FaultrRule extends BaseEntity { public class FaultRule extends BaseEntity {
/** /**
* ID * ID
*/ */

View File

@ -2,7 +2,7 @@ package com.muyu.enterprise.controller;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.enterprise.domain.FaultrRule; import com.muyu.enterprise.domain.FaultRule;
import com.muyu.enterprise.service.FaultrRuleService; import com.muyu.enterprise.service.FaultrRuleService;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -26,9 +26,9 @@ public class FaultrRuleController {
* *
*/ */
@RequestMapping(value = "/faultRuleList", method = RequestMethod.GET) @RequestMapping(value = "/faultRuleList", method = RequestMethod.GET)
public Result<List<FaultrRule>> faultRuleList(FaultrRule faultrRule) public Result<List<FaultRule>> faultRuleList(FaultRule faultrRule)
{ {
List<FaultrRule> list = faultrRuleService.faultRuleList(faultrRule); List<FaultRule> list = faultrRuleService.faultRuleList(faultrRule);
return Result.success(list); return Result.success(list);
} }
@ -38,7 +38,7 @@ public class FaultrRuleController {
* @return * @return
*/ */
@RequestMapping(value = "/insertRule",method = RequestMethod.POST) @RequestMapping(value = "/insertRule",method = RequestMethod.POST)
public Result insertRule(@RequestBody FaultrRule faultrRule){ public Result insertRule(@RequestBody FaultRule faultrRule){
return Result.success(faultrRuleService.save(faultrRule)); return Result.success(faultrRuleService.save(faultrRule));
} }
@ -48,7 +48,7 @@ public class FaultrRuleController {
* @return * @return
*/ */
@RequestMapping(value = "/updateRule",method = RequestMethod.POST) @RequestMapping(value = "/updateRule",method = RequestMethod.POST)
public Result updateRule(@RequestBody FaultrRule faultrRule){ public Result updateRule(@RequestBody FaultRule faultrRule){
return Result.success(faultrRuleService.updateById(faultrRule)); return Result.success(faultrRuleService.updateById(faultrRule));
} }
@ -59,7 +59,7 @@ public class FaultrRuleController {
*/ */
@RequestMapping(value = "/byidRuleId/{faultRuleId}",method = RequestMethod.GET) @RequestMapping(value = "/byidRuleId/{faultRuleId}",method = RequestMethod.GET)
public Result byidRuleId(@PathVariable Long faultRuleId){ public Result byidRuleId(@PathVariable Long faultRuleId){
FaultrRule byid = faultrRuleService.byidRuleId(faultRuleId); FaultRule byid = faultrRuleService.byidRuleId(faultRuleId);
return Result.success(byid); return Result.success(byid);
} }

View File

@ -1,7 +1,7 @@
package com.muyu.enterprise.mapper; package com.muyu.enterprise.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.enterprise.domain.FaultrRule; import com.muyu.enterprise.domain.FaultRule;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
@ -11,5 +11,5 @@ import org.apache.ibatis.annotations.Mapper;
* @Description FaultrRuleMapper: * @Description FaultrRuleMapper:
*/ */
@Mapper @Mapper
public interface FaultrRuleMapper extends BaseMapper<FaultrRule> { public interface FaultrRuleMapper extends BaseMapper<FaultRule> {
} }

View File

@ -1,7 +1,7 @@
package com.muyu.enterprise.service; package com.muyu.enterprise.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.enterprise.domain.FaultrRule; import com.muyu.enterprise.domain.FaultRule;
import java.util.List; import java.util.List;
/** /**
@ -10,8 +10,8 @@ import java.util.List;
* @Date 2024/9/28 12.19 * @Date 2024/9/28 12.19
* @Description FaultrRuleService: * @Description FaultrRuleService:
*/ */
public interface FaultrRuleService extends IService<FaultrRule> { public interface FaultrRuleService extends IService<FaultRule> {
List<FaultrRule> faultRuleList(FaultrRule faultrRule); List<FaultRule> faultRuleList(FaultRule faultrRule);
FaultrRule byidRuleId(Long faultRuleId); FaultRule byidRuleId(Long faultRuleId);
} }

View File

@ -3,7 +3,7 @@ package com.muyu.enterprise.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.StringUtils;
import com.muyu.enterprise.domain.FaultrRule; import com.muyu.enterprise.domain.FaultRule;
import com.muyu.enterprise.mapper.FaultrRuleMapper; import com.muyu.enterprise.mapper.FaultrRuleMapper;
import com.muyu.enterprise.service.FaultrRuleService; import com.muyu.enterprise.service.FaultrRuleService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -17,25 +17,25 @@ import java.util.List;
* @Description FaultrRuleServiceImpl: * @Description FaultrRuleServiceImpl:
*/ */
@Service @Service
public class FaultrRuleServiceImpl extends ServiceImpl<FaultrRuleMapper, FaultrRule> implements FaultrRuleService { public class FaultrRuleServiceImpl extends ServiceImpl<FaultrRuleMapper, FaultRule> implements FaultrRuleService {
@Override @Override
public List<FaultrRule> faultRuleList(FaultrRule faultrRule) { public List<FaultRule> faultRuleList(FaultRule faultrRule) {
LambdaQueryWrapper<FaultrRule> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<FaultRule> queryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotEmpty(faultrRule.getFaultRuleName())) { if (StringUtils.isNotEmpty(faultrRule.getFaultRuleName())) {
queryWrapper.eq(FaultrRule::getFaultRuleName,faultrRule.getFaultRuleName()); queryWrapper.eq(FaultRule::getFaultRuleName,faultrRule.getFaultRuleName());
} }
if (StringUtils.isNotEmpty(faultrRule.getFaultRuleParameter())) { if (StringUtils.isNotEmpty(faultrRule.getFaultRuleParameter())) {
queryWrapper.eq(FaultrRule::getFaultRuleParameter,faultrRule.getFaultRuleParameter()); queryWrapper.eq(FaultRule::getFaultRuleParameter,faultrRule.getFaultRuleParameter());
} }
return this.list(queryWrapper); return this.list(queryWrapper);
} }
@Override @Override
public FaultrRule byidRuleId(Long faultRuleId) { public FaultRule byidRuleId(Long faultRuleId) {
LambdaQueryWrapper<FaultrRule> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<FaultRule> queryWrapper = new LambdaQueryWrapper<>();
Assert.notNull(faultRuleId, "规则ID不可为空"); Assert.notNull(faultRuleId, "规则ID不可为空");
queryWrapper.eq(FaultrRule::getFaultRuleId, faultRuleId); queryWrapper.eq(FaultRule::getFaultRuleId, faultRuleId);
return this.getOne(queryWrapper); return this.getOne(queryWrapper);
} }
} }

View File

@ -93,5 +93,11 @@
<groupId>com.muyu</groupId> <groupId>com.muyu</groupId>
<artifactId>cloud-common-rabbit</artifactId> <artifactId>cloud-common-rabbit</artifactId>
</dependency> </dependency>
<!-- 企业缓存模块 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise-cache</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -3,6 +3,8 @@ package com.muyu.event.process.basic;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* @Author: zi run * @Author: zi run
* @Date 2024/9/30 15:37 * @Date 2024/9/30 15:37
@ -12,17 +14,17 @@ import org.springframework.stereotype.Component;
public class BasicEventHandler<T> implements ApplicationListener<BasicEvent<T>> { public class BasicEventHandler<T> implements ApplicationListener<BasicEvent<T>> {
/** /**
* *
*/ */
private final BasicEventListener<T> listener; private final List<BasicEventListener<T>> listeners;
/** /**
* *
* *
* @param listener * @param listeners
*/ */
public BasicEventHandler(BasicEventListener<T> listener) { public BasicEventHandler(List<BasicEventListener<T>> listeners) {
this.listener = listener; this.listeners = listeners;
} }
/** /**
@ -32,6 +34,6 @@ public class BasicEventHandler<T> implements ApplicationListener<BasicEvent<T>>
*/ */
@Override @Override
public void onApplicationEvent(BasicEvent<T> event) { public void onApplicationEvent(BasicEvent<T> event) {
listener.onEvent(event); listeners.forEach(l -> l.onEvent(event));
} }
} }

View File

@ -0,0 +1,29 @@
package com.muyu.event.process.constant;
/**
* @Author: zi run
* @Date 2024/10/6 14:39
* @Description
*/
public class CacheHandlerConstants {
/**
*
*/
public static final String CAR_MANAGE_KEY = "carManage";
/**
*
*/
public static final String FAULT_RULE_KEY = "faultRule";
/**
*
*/
public static final String ELECTRONIC_FENCE_KEY = "electronicFence";
/**
*
*/
public static final String WARN_RULE_KEY = "warnRule";
}

View File

@ -7,6 +7,7 @@ import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding; import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/** /**
* @Author: zi run * @Author: zi run
@ -14,11 +15,12 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
* @Description 线 * @Description 线
*/ */
@Slf4j @Slf4j
@Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class GoOfflineConsumer { public class GoOfflineConsumer {
/** /**
* *
*/ */
private final CacheUtil<String> cacheUtil; private final CacheUtil<String> cacheUtil;
@ -34,7 +36,7 @@ public class GoOfflineConsumer {
) )
) )
public void offline(String vin) { public void offline(String vin) {
log.info("清除缓存车辆vin: {}", vin); log.info("车辆vin码{},该车辆已下线", vin);
cacheUtil.remove(vin); cacheUtil.remove(vin);
} }
} }

View File

@ -0,0 +1,73 @@
package com.muyu.event.process.consumer;
import com.muyu.enterprise.cache.CarFaultCacheService;
import com.muyu.enterprise.cache.CarManageCacheService;
import com.muyu.enterprise.cache.CarWarnCacheService;
import com.muyu.enterprise.cache.ElectronicFenceCacheService;
import com.muyu.event.process.constant.CacheHandlerConstants;
import com.muyu.event.process.util.CacheUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
/**
* @Author: zi run
* @Date 2024/10/6 10:01
* @Description 线
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class GoOnlineConsumer {
/**
*
*/
private final CacheUtil<Object> cacheUtil;
/**
*
*/
private final CarManageCacheService carManageCacheService;
/**
*
*/
private final CarFaultCacheService carFaultCacheService;
/**
*
*/
private final ElectronicFenceCacheService electronicFenceCacheService;
/**
*
*/
private final CarWarnCacheService carWarnCacheService;
/**
* 线
* @param vin
*/
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "GO_ONLINE", durable = "true"),
exchange = @Exchange(value = "ONLINE_EXCHANGE", type = "fanout")
)
)
public void online(String vin) {
log.info("车辆vin码{},该车辆已上线", vin);
cacheUtil.put(vin, new HashMap<String, Object>() {{
put(CacheHandlerConstants.CAR_MANAGE_KEY, carManageCacheService.get(vin));
put(CacheHandlerConstants.FAULT_RULE_KEY, carFaultCacheService.get(vin));
put(CacheHandlerConstants.ELECTRONIC_FENCE_KEY, electronicFenceCacheService.get(vin));
put(CacheHandlerConstants.WARN_RULE_KEY, carWarnCacheService.get(vin));
}});
}
}

View File

@ -2,7 +2,7 @@ package com.muyu.event.process.consumer;
import com.muyu.common.core.constant.KafkaConstants; import com.muyu.common.core.constant.KafkaConstants;
import com.muyu.event.process.basic.EventPublisher; import com.muyu.event.process.basic.EventPublisher;
import com.muyu.event.process.event.IoTDBInsertDataEvent; import com.muyu.event.process.event.DataProcessEvent;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecord;
@ -73,7 +73,7 @@ public class VehicleConsumer implements ApplicationRunner, ApplicationListener<C
String message = consumerRecord.value(); String message = consumerRecord.value();
log.info("接收到车辆报文数据,内容:{}", message); log.info("接收到车辆报文数据,内容:{}", message);
log.info("------------------------------------------------"); log.info("------------------------------------------------");
eventPublisher.publish(new IoTDBInsertDataEvent(this, message)); eventPublisher.publish(new DataProcessEvent(this, message));
} }
/** /**

View File

@ -5,16 +5,16 @@ import com.muyu.event.process.basic.BasicEvent;
/** /**
* @Author: zi run * @Author: zi run
* @Date 2024/9/29 21:19 * @Date 2024/9/29 21:19
* @Description IoTDB * @Description
*/ */
public class IoTDBInsertDataEvent extends BasicEvent<String> { public class DataProcessEvent extends BasicEvent<String> {
/** /**
* IoTDB *
* *
* @param messsge * @param messsge
*/ */
public IoTDBInsertDataEvent(Object source, String messsge) { public DataProcessEvent(Object source, String messsge) {
super(source, messsge); super(source, messsge);
} }
} }

View File

@ -0,0 +1,38 @@
package com.muyu.event.process.listener;
import com.alibaba.fastjson2.JSONObject;
import com.muyu.enterprise.domain.FaultRule;
import com.muyu.event.process.basic.BasicEvent;
import com.muyu.event.process.basic.BasicEventListener;
import com.muyu.event.process.constant.CacheHandlerConstants;
import com.muyu.event.process.util.CacheUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @Author: zi run
* @Date 2024/10/6 14:28
* @Description
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class IdentifyingFailuresEventListener implements BasicEventListener<String> {
/**
*
*/
private final CacheUtil<Object> cacheUtil;
@Override
public void onEvent(BasicEvent<String> event) {
log.info("触发识别故障时间监听器……");
JSONObject data = JSONObject.parseObject(event.getData());
Map<String, Object> dataMap = (Map<String, Object>) cacheUtil.get((String) data.get("vin"));
FaultRule faultRule = (FaultRule) dataMap.get(CacheHandlerConstants.FAULT_RULE_KEY);
}
}

View File

@ -5,6 +5,10 @@ import com.muyu.event.process.basic.BasicEvent;
import com.muyu.event.process.basic.BasicEventListener; import com.muyu.event.process.basic.BasicEventListener;
import com.muyu.event.process.iotdb.service.IoTDBService; import com.muyu.event.process.iotdb.service.IoTDBService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@ -15,9 +19,10 @@ import java.util.stream.Collectors;
* @Date 2024/9/29 22:12 * @Date 2024/9/29 22:12
* @Description IoTDB * @Description IoTDB
*/ */
@Slf4j
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class IoTDBInsertDataListener implements BasicEventListener<String> { public class IoTDBInsertDataEventListener implements BasicEventListener<String> {
/** /**
* IoTDB * IoTDB
@ -36,6 +41,7 @@ public class IoTDBInsertDataListener implements BasicEventListener<String> {
*/ */
@Override @Override
public void onEvent(BasicEvent<String> event) { public void onEvent(BasicEvent<String> event) {
log.info("触发向IoTDB插入数据事件监听器……");
JSONObject data = JSONObject.parseObject(event.getData()); JSONObject data = JSONObject.parseObject(event.getData());
List<String> keyList = extractKeys(data); List<String> keyList = extractKeys(data);
List<String> valueList = extractValues(data); List<String> valueList = extractValues(data);