test:(修改bug)

dev
zhang xu 2024-06-24 22:38:54 +08:00
parent c9c62e2a9d
commit 4cb510bd71
15 changed files with 201 additions and 116 deletions

View File

@ -18,7 +18,7 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Builder @Builder
@TableName("etn_info") @TableName("ent_info")
public class EntInfo { public class EntInfo {
@TableId(type = IdType.AUTO) @TableId(type = IdType.AUTO)
private Long id; private Long id;

View File

@ -1,7 +1,8 @@
package com.muyu.networking.controller; package com.muyu.networking.controller;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.domain.datasources.EntInfo; import com.muyu.common.system.domain.EntInfo;
import com.muyu.networking.service.EntInfoService; import com.muyu.networking.service.EntInfoService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;

View File

@ -7,6 +7,8 @@ import javax.servlet.http.HttpServletResponse;
import com.muyu.domain.Enterprise; import com.muyu.domain.Enterprise;
import com.muyu.networking.service.EnterpriseService; import com.muyu.networking.service.EnterpriseService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PutMapping;
@ -62,6 +64,12 @@ public class EnterpriseController extends BaseController
util.exportExcel(response, list, "【请填写功能名称】数据"); util.exportExcel(response, list, "【请填写功能名称】数据");
} }
@Autowired
private RedisTemplate<String,String> redisTemplate;
/** /**
* *
*/ */

View File

@ -1,7 +1,8 @@
package com.muyu.networking.mapper; package com.muyu.networking.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.domain.datasources.EntInfo; import com.muyu.common.system.domain.EntInfo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**

View File

@ -1,8 +1,7 @@
package com.muyu.networking.service; package com.muyu.networking.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.domain.Enterprise; import com.muyu.common.system.domain.EntInfo;
import com.muyu.domain.datasources.EntInfo;
import java.util.List; import java.util.List;

View File

@ -1,11 +1,13 @@
package com.muyu.networking.service.impl; package com.muyu.networking.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.domain.datasources.EntInfo; import com.muyu.common.system.domain.EntInfo;
import com.muyu.networking.mapper.EntInfoMapper; import com.muyu.networking.mapper.EntInfoMapper;
import com.muyu.networking.service.EntInfoService; import com.muyu.networking.service.EntInfoService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.AccessType;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;

View File

@ -14,14 +14,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.DateUtils; import com.muyu.common.core.utils.DateUtils;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.LoginUser;
import com.muyu.common.system.domain.SysRole;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.remote.RemoteNetworkingService;
import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.system.remote.RemoteUserService;
import com.muyu.domain.Enterprise; import com.muyu.domain.Enterprise;
import com.muyu.domain.datasources.Datasource;
import com.muyu.networking.mapper.EnterpriseMapper; import com.muyu.networking.mapper.EnterpriseMapper;
import com.muyu.networking.service.EnterpriseService; import com.muyu.networking.service.EnterpriseService;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ -30,14 +27,11 @@ import org.springframework.stereotype.Service;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.HashMap; import java.util.HashMap;
import java.util.IllegalFormatCodePointException;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.muyu.networking.mapper.EntInfoMapper">
</mapper>

View File

@ -1,30 +1,26 @@
package com.muyu.networking.controller; package com.muyu.vehicle.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.poi.ExcelUtil;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.domain.FaultCode; import com.muyu.domain.FaultCode;
import com.muyu.domain.req.FaultCodeEditReq; import com.muyu.domain.req.FaultCodeEditReq;
import com.muyu.domain.req.FaultCodeQueryReq; import com.muyu.domain.req.FaultCodeQueryReq;
import com.muyu.domain.req.FaultCodeSaveReq; import com.muyu.domain.req.FaultCodeSaveReq;
import com.muyu.networking.service.FaultCodeService;
import io.swagger.annotations.*; import com.muyu.vehicle.service.FaultCodeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.DeleteMapping; import java.util.List;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.poi.ExcelUtil;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.RequiresPermissions;
/** /**

View File

@ -1,4 +1,4 @@
package com.muyu.networking.mapper; package com.muyu.vehicle.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.domain.FaultCode; import com.muyu.domain.FaultCode;

View File

@ -1,8 +1,10 @@
package com.muyu.vehicle.myDatasource.aspect; package com.muyu.vehicle.myDatasource.aspect;
import com.muyu.common.core.domain.Result;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.LoginUser;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.remote.RemoteNetworkingService; import com.muyu.common.system.remote.RemoteUserService;
import com.muyu.vehicle.myDatasource.holder.DynamicDataSourceHolder; import com.muyu.vehicle.myDatasource.holder.DynamicDataSourceHolder;
import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
@ -21,9 +23,9 @@ import org.springframework.stereotype.Component;
@Component @Component
public class DataSourceAsp { public class DataSourceAsp {
@Autowired @Autowired
private RemoteNetworkingService remoteUserService; private RemoteUserService remoteUserService;
@Pointcut("execution(public * com.muyu.vehicle.controller.*(..))") @Pointcut("execution(public * com.muyu.vehicle.controller.*Controller.*(..))")
public void pointcut() { public void pointcut() {
} }
@ -32,12 +34,15 @@ public class DataSourceAsp {
*/ */
@Before("pointcut()") @Before("pointcut()")
public void beforeMethod() { public void beforeMethod() {
Long userid = SecurityUtils.getLoginUser().getUserid(); LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser sysUser = (SysUser) remoteUserService.selectUserById(userid).getData(); Long userid = loginUser.getUserid();
DynamicDataSourceHolder.setDynamicDataSourceKey("ent_" + sysUser.getEnterpriseId()); Result<SysUser> sysUserResult = remoteUserService.selectUserById(userid);
} SysUser sysUser = sysUserResult.getData();
DynamicDataSourceHolder.setDynamicDataSourceKey("ent" + sysUser.getEnterpriseId());
}
/** /**
* *
* *

View File

@ -2,6 +2,10 @@ package com.muyu.vehicle.myDatasource.rule;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSource;
import com.muyu.vehicle.myDatasource.holder.DynamicDataSourceHolder; import com.muyu.vehicle.myDatasource.holder.DynamicDataSourceHolder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import java.util.Map; import java.util.Map;
@ -12,6 +16,10 @@ import java.util.Map;
* @Author: zhangxu * @Author: zhangxu
* @Created: 2024/6/10 19:55 * @Created: 2024/6/10 19:55
*/ */
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class DynamicDataSource extends AbstractRoutingDataSource { public class DynamicDataSource extends AbstractRoutingDataSource {
/** /**
* *

View File

@ -1,10 +1,13 @@
package com.muyu.vehicle.rabbit; package com.muyu.vehicle.rabbit;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson.JSON;
import com.muyu.domain.FaultRecord; import com.muyu.domain.FaultRecord;
import com.muyu.domain.Information;
import com.muyu.vehicle.myDatasource.holder.DynamicDataSourceHolder; import com.muyu.vehicle.myDatasource.holder.DynamicDataSourceHolder;
import com.muyu.vehicle.service.FaultRecordService; import com.muyu.vehicle.service.FaultRecordService;
import com.muyu.vehicle.service.IInformationService;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ -15,8 +18,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.IOException; import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/** /**
* @ClassDescription: * @ClassDescription:
@ -27,103 +34,161 @@ import java.util.Date;
@Component @Component
@Log4j2 @Log4j2
public class Consumer { public class Consumer {
private static final String QUEUE_NAME_EVENT_START = "zhiLian-vehicle-end";
private static final String QUEUE_NAME_EVENT_ENT = "zhiLian-vehicle-start";
private static final String QUEUE_NAME_EVENT_START = "event_exception_start";
private static final String QUEUE_NAME_EVENT_ENT = "event_exception_ent";
@Autowired @Autowired
private FaultRecordService recordService; private FaultRecordService recordService;
@Autowired
private IInformationService service;
@Autowired @Autowired
private RedisTemplate<String,String> redisTemplate; private RedisTemplate<String,String> redisTemplate;
public void manyJob(){
DynamicDataSourceHolder.setDynamicDataSourceKey("ent5");
List<Information> list = service.selectVehicleListAll(new Information());
ExecutorService executor = Executors.newFixedThreadPool(list.size());
list.forEach(information -> {
executor.submit(new Runnable() {
@Override
public void run() {
redisTemplate.opsForValue().set(information.getNumber()+"1", String.valueOf(information.getEnterpriseId()));
}
});
});
DynamicDataSourceHolder.removeDynamicDataSourceKey();
}
@RabbitListener( queuesToDeclare= {@Queue(name = QUEUE_NAME_EVENT_START)}) @RabbitListener( queuesToDeclare= {@Queue(name = QUEUE_NAME_EVENT_START)})
public void receive(String msg, Channel channel, Message message) { public void receive(String msg, Channel channel, Message message) {
//获取消息的id //获取消息的ID
String messageId = message.getMessageProperties().getMessageId(); String messageId = message.getMessageProperties().getMessageId();
log.info("接收到消息是:{}", message);
Long messageId1 = redisTemplate.opsForSet().add("messageId", messageId);
try { try {
if (messageId1 == 1) { Long count = redisTemplate.opsForSet().add("messageId", messageId);
//如果消息id不存在则进行消费 if (count==1) {
log.info("消息id不存在进行消费"); log.info("故障开始消费!{}", msg);
//进行消费 manyJob();
FaultRecord faultCode = JSON.parseObject(msg, FaultRecord.class); FaultRecord faultRecord = JSON.parseObject(msg, FaultRecord.class);
//判断车辆数据那个企业 //判断车辆属于哪个企业
String s = redisTemplate.opsForValue().get(faultCode.getVin() + "1"); String s = redisTemplate.opsForValue().get(faultRecord.getVin()+"1");
//...选择数据源 // 进行添加故障表
DynamicDataSourceHolder.setDynamicDataSourceKey("test_"+s); Executors.newFixedThreadPool(1). execute(new Runnable() {
//进行添加故障 @Override
FaultRecord build = FaultRecord.builder() public void run() {
.faultCode(faultCode.getFaultCode()) //选择数据源,切换数据源,
.startTime(new Date()) DynamicDataSourceHolder.setDynamicDataSourceKey("ent"+Integer.valueOf(s));
.vin(faultCode.getVin()) FaultRecord build = FaultRecord
.build(); .builder()
recordService.save(build); .faultCode(faultRecord.getFaultCode())
.vin(faultRecord.getVin())
.startTime(faultRecord.getStartTime()).build();
recordService.save(build);
// 移除数据源,
DynamicDataSourceHolder.removeDynamicDataSourceKey();
//移除数据源 }
DynamicDataSourceHolder.removeDynamicDataSourceKey();
//确认消息消费成功 });
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
log.error("消费成功", message); log.info("消费成功!数据源为:{}",message);
} }
} catch (IOException e) { } catch (IOException e) {
log.error("消费失败{}", e.getMessage());
try {
//回退消息
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
log.error("消费回退{}乘公共");
} catch (IOException ex) {
log.info("回退失败:{}",ex.getMessage());
} log.info("消费失败,{}",e.getMessage());
try {
//回退消息
channel.basicReject(message.getMessageProperties().getDeliveryTag(),false);
log.info("回退成功");
}catch (IOException ex){
log.info("回退失败:{}",ex.getMessage());
}
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
@RabbitListener(queuesToDeclare = {@Queue(name = QUEUE_NAME_EVENT_ENT)}) @RabbitListener(queuesToDeclare = {@Queue(name = QUEUE_NAME_EVENT_ENT)})
public void receive2(String msg, Channel channel, Message message) { public void receive2(String msg, Channel channel, Message message) {
//获取消息是 //获取消息的ID
String messageId = message.getMessageProperties().getMessageId(); String messageId = message.getMessageProperties().getMessageId();
try { try {
//将消息添加redis里面 //添加消息id到redis set集合中 添加成功返回1 表示未消费 添加失败返回0 表示已消费
Long messageId1 = redisTemplate.opsForSet().add("messageIdEnt", messageId); Long count = redisTemplate.opsForSet().add("messageId", messageId);
//添加乘公共 //添加成功 正常消费信息
if (messageId1 == 1){ if (count == 1) {
log.info("消息id不存在进行消费"); log.info("故障结束消费:{}",msg);
manyJob();
FaultRecord faultRecord = JSON.parseObject(msg, FaultRecord.class); FaultRecord faultRecord = JSON.parseObject(msg, FaultRecord.class);
//还是判断车辆数据那个企业 //判断车辆属于哪个企业
String s = redisTemplate.opsForValue().get(faultRecord.getVin() + "1"); String s = redisTemplate.opsForValue().get(faultRecord.getVin()+"1");
DynamicDataSourceHolder.setDynamicDataSourceKey("test_"+s); Executors.newFixedThreadPool(1).execute(new Runnable() {
//进行查询修改故障表 @Override
FaultRecord byFaultRecord = recordService.getByFaultRecord(faultRecord); public void run() {
log.info("进行查询的故障为:{}",byFaultRecord); //选择数据源,切换数据源,
byFaultRecord.setEndTime(faultRecord.getEndTime()); DynamicDataSourceHolder.setDynamicDataSourceKey("ent"+Integer.valueOf(s));
//修改故障表 // 进行查询故障表
recordService.updateByFaultRecord(byFaultRecord); FaultRecord faultRecordOne = recordService.getByFaultRecord(faultRecord);
//移除数据源 log.info("查询到的故障为:{}",faultRecordOne);
DynamicDataSourceHolder.removeDynamicDataSourceKey(); faultRecordOne.setEndTime(faultRecord.getEndTime());
// 进行修改故障表
recordService.updateByFaultRecord(faultRecordOne);
// 移除数据源,
DynamicDataSourceHolder.removeDynamicDataSourceKey();
}
});
//确认消费 //确认消费
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
log.info("消费成功"); log.info("消费成功");
} }
}catch (Exception e){
log.error("消费失败{}",e.getMessage());
try { } catch (Exception e) {
//回退消息 //删除队列ID
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); log.info("消费失败,{}",e.getMessage());
log.info("消费回退{}乘公共");
} catch (IOException ex) { try {
log.error("回退失败:{}",ex.getMessage()); //回退消息
} channel.basicReject(message.getMessageProperties().getDeliveryTag(),false);
log.info("回退消息");
} catch (IOException ex) {
//回退失败
log.info("回退失败");
}
} }
} }
} }

View File

@ -1,6 +1,6 @@
# Tomcat # Tomcat
server: server:
port: 9205 port: 9206
# Spring # Spring
spring: spring:
@ -9,14 +9,14 @@ spring:
password: guest password: guest
virtualHost: / virtualHost: /
port: 5672 port: 5672
host: 115.159.67.205 host: 47.93.162.81
listener: listener:
simple: simple:
prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条 prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条
publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange) publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
publisher-returns: true #确认消息已发送到队列(Queue) publisher-returns: true #确认消息已发送到队列(Queue)
main: main:
allow-circular-references: true allow-circular-references: true
application: application:
# 应用名称 # 应用名称
name: muyu-vehicle name: muyu-vehicle
@ -32,13 +32,12 @@ spring:
config: config:
# 配置中心地址 # 配置中心地址
server-addr: 122.152.211.1:8848 server-addr: 122.152.211.1:8848
namespace: networking
# 配置文件格式 # 配置文件格式
file-extension: yml file-extension: yml
# 共享配置 # 共享配置
shared-configs: shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
namespace: networking
logging: logging:
level: level:
com.muyu-vehicle.mapper: DEBUG com.muyu.vehicle.mapper: DEBUG

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.muyu.networking.mapper.CertificationMapper"> <mapper namespace="com.muyu.vehicle.mapper.CertificationMapper">
<resultMap type="com.muyu.domain.Certification" id="CertificationResult"> <resultMap type="com.muyu.domain.Certification" id="CertificationResult">
<result property="id" column="id" /> <result property="id" column="id" />