# Conflicts:
#	cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInformationServiceImpl.java
#	cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java
#	cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/server/service/impl/FirmPermissionServiceImpl.java
dev.yang
Yueng 2024-10-09 14:00:59 +08:00
commit b2a2a2bcb7
11 changed files with 385 additions and 2 deletions

View File

@ -255,4 +255,14 @@ public class RedisService {
public Collection<String> keys (final String pattern) {
return redisTemplate.keys(pattern);
}
// /**
// * 获取使用的对象的次数
// * @param key Redis键
// * @param hKey Hash键
// */
// public void getNumber (final String key, final String hKey){
// Object o = redisTemplate.opsForHash().get(key, hKey);
// }
}

View File

@ -22,6 +22,8 @@
<module>cloud-common-rabbit</module>
<module>cloud-common-saas</module>
<module>cloud-common-wechat</module>
<module>cloud-common-cache</module>
<module>cloud-common-kafka</module>
</modules>
<artifactId>cloud-common</artifactId>

View File

@ -0,0 +1,79 @@
package com.muyu.car.gateway.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.car.domain.api.req.VehicleConnectionReq;
import com.muyu.car.domain.model.MqttServerModel;
import com.muyu.car.domain.model.VehicleInformation;
import com.muyu.car.gateway.service.VehicleInformationService;
import com.muyu.car.mapper.VehicleInformationMapper;
import com.muyu.common.redis.service.RedisService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* @Author
* @Packagecom.muyu.car.gateway.service.impl
* @Projectcloud-server-8
* @nameVehicleInformationServiceImpl
* @Date2024/10/6 2:41
*/
@Log4j2
@Service
public class VehicleInformationServiceImpl implements VehicleInformationService{
@Autowired private VehicleInformationMapper vehicleInformationMapper;
@Autowired private RedisService redisService;
@Override
public MqttServerModel getVehicleData(VehicleConnectionReq vehicleConnectionReq) {
log.info("车辆连接请求:[{}]",vehicleConnectionReq);
vehicleConnectionReq.setPassword(vehicleConnectionReq.getVehicleVin()+vehicleConnectionReq.getTimestamp()+vehicleConnectionReq.getNonce());
List<String> selectVehicle =vehicleInformationMapper.selectVehicleVin(vehicleConnectionReq.getVehicleVin());
if(selectVehicle.isEmpty()) {
vehicleInformationMapper.addVehicleConnection(vehicleConnectionReq);
log.info("车辆预上线成功");
}else {
log.info("车辆无法重复预上线");
}
// 获取名为 "ipList" 的列表
List<String> ipList = redisService.getCacheList("ipList");
if (ipList.isEmpty()) {
return null;
}
// 获取当前使用的索引位置
String indexStr = redisService.getCacheObject("currentIndex");
int index = indexStr!= null? Integer.parseInt(indexStr) : 0;
String selectedIp = ipList.get(index);
// 获取该 IP 的使用次数
String countStr = redisService.getCacheMapValue("ipCounts", selectedIp);
log.info("IP:[{}]车辆连接数:[{}]",selectedIp,countStr);
int count = countStr!= null? Integer.parseInt(countStr) : 0;
if (count < 12) {
// 使用次数加一
count++;
redisService.setCacheMapValue("ipCounts", selectedIp, String.valueOf(count));
// 更新索引
index = (index + 1) % ipList.size();
redisService.setCacheObject("currentIndex", String.valueOf(index));
return new MqttServerModel("tcp://"+selectedIp.substring(1,selectedIp.length()-1)+":1883","vehicle");
} else {
// 如果使用次数达到 12 次,跳过该 IP 并更新索引
index = (index + 1) % ipList.size();
redisService.setCacheObject("currentIndex", String.valueOf(index));
return getVehicleData(vehicleConnectionReq);
}
}
}

View File

@ -0,0 +1,120 @@
package com.muyu.car.instance;
import com.aliyun.ecs20140526.models.*;
import com.aliyun.tea.TeaException;
import com.muyu.car.domain.example.ExampleInformation;
import com.muyu.common.redis.service.RedisService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
*
* @Author
* @Packagecom.muyu.car.domain
* @Projectcloud-server-8
* @nameGenerateInstance
* @Date2024/9/29 10:42
*/
@Component
@Log4j2
@Tag(name = "启动时创建实例")
public class GenerateInstance implements ApplicationRunner {
@Autowired private RedisService redisService;
/**
*
* @throws Exception
*/
public static List<String> generateInstance() throws Exception {
// 创建ECS客户端对象用于后续调用ECS相关API
com.aliyun.ecs20140526.Client client = CreateClient.createClient();
com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk()
.setSize("40")
.setCategory("cloud_essd");
com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest()
// 设置地域ID
.setRegionId("cn-hangzhou")
// 设置镜像ID
.setImageId("m-bp1hkxfctk751s62jqhq")
// 设置实例类型
.setInstanceType("ecs.t6-c1m1.large")
// 设置安全组ID
.setSecurityGroupId("sg-bp1a7fk8js5pn3fw9p2m")
// 设置虚拟交换机ID
.setVSwitchId("vsw-bp193np7r01vssqxhh24e")
// 设置实例名称
.setInstanceName("server-mqtt")
// 设置实例付费类型为后付费按量付费
.setInstanceChargeType("PostPaid")
// 设置互联网最大出带宽为1 Mbps
.setInternetMaxBandwidthOut(1)
// 设置系统盘配置
.setSystemDisk(systemDisk)
// 设置主机名
.setHostName("root")
// 设置实例密码
.setPassword("EightGroup123.")
// 设置创建实例的数量
.setAmount(2);
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtime);
// 获取body返回值对象
RunInstancesResponseBody body = runInstancesResponse.getBody();
ArrayList<String> list = new ArrayList<>();
// 得到实例ID数组
for (String instance : body.getInstanceIdSets().getInstanceIdSet()) {
list.add(instance);
}
log.info("实例ID:{}",list);
return list;
} catch (TeaException error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
log.info(error.getMessage());
// 诊断地址
log.info(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
log.info(error.getMessage());
// 诊断地址
log.info(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
return null;
}
@Override
public void run(ApplicationArguments args) throws Exception {
List<String> InstanceIds = generateInstance();
log.info("创建实例成功");
log.info("正在加载实例");
Thread.sleep(30000);
List<ExampleInformation> exampleInformations = QueryInstance.queryInstance(InstanceIds);
log.info("加载成功");
ArrayList<String> list = new ArrayList<>();
for (ExampleInformation exampleInformation : exampleInformations) {
redisService.setCacheObject("InstanceIdKey:"+exampleInformation.getInstanceId(),exampleInformation);
list.add(exampleInformation.getIpAddress());
}
redisService.setCacheList("ipList",list);
log.info("实例信息:{}",exampleInformations);
}
}

View File

@ -1,6 +1,9 @@
package com.muyu.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.muyu.domain.req.FaultCodeAddReq;
import com.muyu.domain.req.FirmPermissionAddReq;
import com.muyu.domain.req.FirmPermissionUpdReq;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -42,4 +45,22 @@ public class FirmPermission {
private Integer carTypeNumber;
public static FirmPermission addfirmpermission(FirmPermissionAddReq firmPermissionAddReq){
return FirmPermission.builder()
.permissionLevel(firmPermissionAddReq.getPermissionLevel())
.carNumber(firmPermissionAddReq.getCarNumber())
.carTypeNumber(firmPermissionAddReq.getCarTypeNumber())
.build();
}
public static FirmPermission updfirmpermission(FirmPermissionUpdReq firmPermissionUpdReq){
return FirmPermission.builder()
.permissionId(firmPermissionUpdReq.getPermissionId())
.permissionLevel(firmPermissionUpdReq.getPermissionLevel())
.carNumber(firmPermissionUpdReq.getCarNumber())
.carTypeNumber(firmPermissionUpdReq.getCarTypeNumber())
.build();
}
}

View File

@ -0,0 +1,39 @@
package com.muyu.domain.req;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* @Authorweiran
* @Packagecom.muyu.domain.req
* @Projectcloud-server-8
* @nameFirmPermissionAddReq
* @Date2024/10/8 19:48
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Tag(name = "企业权限新增请求对象",description = "企业权限新增请求对象")
public class FirmPermissionAddReq {
/**
*
*/
private String permissionLevel;
/**
*
*/
private Integer carNumber;
/**
*
*/
private Integer carTypeNumber;
}

View File

@ -0,0 +1,46 @@
package com.muyu.domain.req;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* @Authorweiran
* @Packagecom.muyu.domain.req
* @Projectcloud-server-8
* @nameFirmPermissionUpdReq
* @Date2024/10/8 20:11
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Tag(name = "企业权限修改请求对象",description = "企业权限修改请求对象")
public class FirmPermissionUpdReq {
/**
* Id
*/
@TableId(value = "permission_id")
private long permissionId;
/**
*
*/
private String permissionLevel;
/**
*
*/
private Integer carNumber;
/**
*
*/
private Integer carTypeNumber;
}

View File

@ -1,12 +1,16 @@
package com.muyu.server.controller;
import com.muyu.common.core.domain.Result;
import com.muyu.domain.FirmPermission;
import com.muyu.domain.req.FirmPermissionAddReq;
import com.muyu.domain.req.FirmPermissionUpdReq;
import com.muyu.domain.req.FirmUpdPermissionReq;
import com.muyu.server.service.FirmPermissionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -35,4 +39,41 @@ public class FirmPermissionController {
firmPermissionService.updpermission(firmUpdPermissionReq);
return Result.success(null,"权限更改成功");
}
/**
*
* @return
*/
@PostMapping("/permissionlist")
@Operation(summary = "权限等级列表",description = "权限等级列表")
public Result permissionlist(){
return Result.success(firmPermissionService.permissionlist());
}
/**
*
* @param firmPermissionAddReq
* @return
*/
@PostMapping("/addpermission")
@Operation(summary = "企业权限新增",description = "企业权限新增")
public Result addpermission(@RequestBody FirmPermissionAddReq firmPermissionAddReq){
firmPermissionService.save(FirmPermission.addfirmpermission(firmPermissionAddReq));
return Result.success();
}
/**
*
* @param firmPermissionUpdReq
* @return
*/
@PostMapping("/updpermission")
@Operation(summary = "企业权限修改",description = "企业权限修改")
public Result updpermission(@RequestBody FirmPermissionUpdReq firmPermissionUpdReq){
firmPermissionService.updateById(FirmPermission.updfirmpermission(firmPermissionUpdReq));
return Result.success();
}
}

View File

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.domain.FirmPermission;
import com.muyu.domain.req.FirmUpdPermissionReq;
import java.util.List;
/**
*
* @Authorweiran
@ -20,4 +22,10 @@ public interface FirmPermissionService extends IService<FirmPermission> {
* @return
*/
void updpermission(FirmUpdPermissionReq firmUpdPermissionReq);
/**
*
* @return
*/
List<FirmPermission> permissionlist();
}

View File

@ -2,6 +2,7 @@ package com.muyu.server.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.muyu.common.core.utils.StringUtils;
@ -80,6 +81,9 @@ public class FirmManageServiceImpl extends ServiceImpl<FirmManageMapper, SysUser
*/
@Override
public void updpermission(FirmUpdPermissionReq firmUpdPermissionReq, long permissionId) {
LambdaUpdateWrapper<Firm> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(Firm::getPermissionId, permissionId );
updateWrapper.eq(Firm::getFirmId, firmUpdPermissionReq.getFirmId());
firmService.update(updateWrapper);
}
}

View File

@ -24,6 +24,7 @@ import java.util.List;
public class FirmPermissionServiceImpl extends ServiceImpl<FirmPermissionMapper, FirmPermission> implements FirmPermissionService {
@Autowired
private FirmManageService firmManageService;
/**
*
* @param firmUpdPermissionReq
@ -41,4 +42,16 @@ public class FirmPermissionServiceImpl extends ServiceImpl<FirmPermissionMapper,
//修改企业对应权限
firmManageService.updpermission(firmUpdPermissionReq,permissionId);
}
/**
*
* @return
*/
@Override
public List<FirmPermission> permissionlist() {
LambdaQueryWrapper<FirmPermission> queryWrapper = new LambdaQueryWrapper<>();
List<FirmPermission> list = this.list(queryWrapper);
return list;
}
}