Merge remote-tracking branch 'origin/dev.processing.beautify' into dev

dev.fault.change
晨哀 2024-10-09 08:19:17 +08:00
commit e31070e5ba
49 changed files with 866 additions and 62 deletions

View File

@ -34,7 +34,7 @@ public class TokenController {
@PostMapping("login")
public Result<?> login (@RequestBody LoginBody form) {
// 用户登录
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(),form.getFirmId());
// 获取登录token
return Result.success(tokenService.createToken(userInfo));
}

View File

@ -1,10 +1,19 @@
package com.muyu.auth.form;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author muyu
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class LoginBody {
/**
*
@ -16,19 +25,9 @@ public class LoginBody {
*/
private String password;
public String getUsername () {
return username;
}
/**
* Id
*/
private Long firmId;
public void setUsername (String username) {
this.username = username;
}
public String getPassword () {
return password;
}
public void setPassword (String password) {
this.password = password;
}
}

View File

@ -37,14 +37,15 @@ public class SysLoginService {
@Autowired
private RedisService redisService;
/**
*
*/
public LoginUser login (String username, String password) {
public LoginUser login (String username, String password, Long firmId) {
// 用户名或密码为空 错误
if (StringUtils.isAnyBlank(username, password)) {
if (StringUtils.isAnyBlank(username, password,String.valueOf(firmId))) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
throw new ServiceException("用户/密码必须填写");
throw new ServiceException("用户/密码/公司 必须填写");
}
// 密码如果不在指定范围内 错误
if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
@ -60,12 +61,21 @@ public class SysLoginService {
}
// IP黑名单校验
String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾访问IP已被列入系统黑名单");
throw new ServiceException("很遗憾访问IP已被列入系统黑名单");
}
// 查询用户信息
Result<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
Result<LoginUser> userResult = null;
if (firmId == 1){
userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
}else {
userResult = remoteUserService.getFirmUserInfo(username, firmId,SecurityConstants.INNER);
}
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");

View File

@ -16,6 +16,11 @@ public class ServiceNameConstants {
*/
public static final String SYSTEM_SERVICE = "cloud-system";
/**
* serviceid
*/
public static final String ENTERPRISE_SERVICE = "cloud-car";
/**
* serviceid
*/

View File

@ -151,6 +151,17 @@ public class JwtUtils {
return getValue(claims, SecurityConstants.DETAILS_USERNAME);
}
/**
*
*
* @param claims
*
* @return
*/
public static String getDatabaseName (Claims claims) {
return getValue(claims, SecurityConstants.DATABASE_NAME);
}
/**
*
*

View File

@ -9,9 +9,12 @@ import com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory;
import com.muyu.cloud.common.many.datasource.role.DynamicDataSource;
import com.muyu.cloud.common.saas.domain.model.EntInfo;
import com.muyu.cloud.common.saas.exception.SaaSException;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.SpringUtils;
import com.muyu.common.system.domain.SysFirm;
import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.resp.SysFirmResp;
import com.muyu.common.system.remote.RemoteUserService;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.ApplicationArguments;
@ -20,6 +23,7 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -36,22 +40,25 @@ import java.util.Map;
@AutoConfiguration(before = MybatisPlusAutoConfiguration.class)
public class ManyDataSource implements ApplicationRunner{
private List<EntInfo> dataSourceInfoList(){
RemoteUserService remoteUserService = SpringUtils.getBean(RemoteUserService.class);
Result<List<SysUser>> tableDataInfoResult = remoteUserService.companyList();
if (tableDataInfoResult==null){
Result<List<SysFirmResp>> firmList = remoteUserService.getFirmList(SecurityConstants.INNER);
if (firmList==null) {
throw new SaaSException("saas远调数据源错误");
}
List<SysUser> data = tableDataInfoResult.getData();
if (tableDataInfoResult.getCode() == Result.SUCCESS && data !=null){
List<SysFirmResp> data = firmList.getData();
if (firmList.getCode() == Result.SUCCESS && data !=null){
List<EntInfo> list = new ArrayList<>();
for (SysUser row : data) {
for (SysFirmResp row : data) {
list.add(
EntInfo.builder()
.entCode(row.getDatabaseName())
.ip(DatasourceContent.IP)
.port(DatasourceContent.PORT)
.url(row.getSysFirmDatasource().getUrl())
.entCode(row.getSysFirmDatasource().getDatabase())
.ip(row.getSysFirmDatasource().getIp())
.port(row.getSysFirmDatasource().getPort())
.password(row.getSysFirmDatasource().getPassword())
.username(row.getSysFirmDatasource().getUsername())
.build()
);
}
@ -79,7 +86,7 @@ public class ManyDataSource implements ApplicationRunner{
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceInfoList()
.stream()
.map(entInfo -> DataSourceInfo.hostAndPortBuild(entInfo.getEntCode(), entInfo.getIp(), entInfo.getPort()))
.map(entInfo -> DataSourceInfo.hostAndPortBuild(entInfo))
.forEach(dataSourceInfo -> {
dataSourceMap.put(dataSourceInfo.getKey(), druidDataSourceFactory.create(dataSourceInfo));
});
@ -98,7 +105,7 @@ public class ManyDataSource implements ApplicationRunner{
DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class);
for (EntInfo entInfo : dataSourceInfoList()) {
DataSourceInfo dataSourceInfo = DataSourceInfo.hostAndPortBuild(
entInfo.getEntCode(), entInfo.getIp(), entInfo.getPort()
entInfo
);
DruidDataSource druidDataSource = druidDataSourceFactory.create(dataSourceInfo);
dynamicDataSource.put(dataSourceInfo.getKey(), druidDataSource);

View File

@ -1,7 +1,9 @@
package com.muyu.cloud.common.many.datasource.domain.model;
import com.muyu.cloud.common.many.datasource.constents.DatasourceContent;
import com.muyu.cloud.common.saas.domain.model.EntInfo;
import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.system.domain.SysFirmDatasource;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -39,12 +41,12 @@ public class DataSourceInfo {
private String password;
public static DataSourceInfo hostAndPortBuild(String key, String host, Integer port) {
public static DataSourceInfo hostAndPortBuild(EntInfo entInfo) {
return DataSourceInfo.builder()
.key(key)
.url(StringUtils.format(DatasourceContent.DATASOURCE_URL, host, port, key))
.password(DatasourceContent.PASSWORD)
.userName(DatasourceContent.USER_NAME)
.key(entInfo.getEntCode())
.url(StringUtils.format(entInfo.getUrl(), entInfo.getIp(), entInfo.getPort(), entInfo.getEntCode()))
.password(entInfo.getUsername())
.userName(entInfo.getPassword())
.build();
}
}

View File

@ -19,7 +19,13 @@ public class EntInfo {
private String entCode;
private String url;
private String ip;
private Integer port;
private String username;
private String password;
}

View File

@ -56,7 +56,7 @@ public class TokenService {
claimsMap.put(SecurityConstants.USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
claimsMap.put(SecurityConstants.DATABASE_NAME, loginUser.getSysUser().getDatabaseName());
claimsMap.put(SecurityConstants.DATABASE_NAME, loginUser.getSysUser().getDatabase());
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));

View File

@ -78,6 +78,10 @@ public class SysDept extends BaseEntity {
*
*/
private String parentName;
/**
* Id
*/
private Long firmId;
/**
*

View File

@ -0,0 +1,29 @@
package com.muyu.common.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @Author
* @Packagecom.muyu.system.domain
* @Projectcloud-vehicle
* @nameSysFirm
* @Date2024/10/8 19:41
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_firm")
public class SysFirm {
@TableId(type = IdType.AUTO)
private Integer firmId;
private String firmName;
private String firmCode;
private Integer datasourceId;
}

View File

@ -0,0 +1,32 @@
package com.muyu.common.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @Author
* @Packagecom.muyu.system.domain
* @Projectcloud-vehicle
* @nameSysFirmDatasource
* @Date2024/10/8 19:44
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_firm_datasource")
public class SysFirmDatasource {
@TableId(type = IdType.AUTO)
private Long id;
private String url;
private String ip;
private Integer port;
private String database;
private String username;
private String password;
}

View File

@ -55,6 +55,11 @@ public class SysUser extends BaseEntity {
@Excel(name = "用户名称")
private String nickName;
/**
*
*/
private String userType;
/**
*
*/
@ -106,6 +111,9 @@ public class SysUser extends BaseEntity {
@Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
private Date loginDate;
private String database;
/**
*
*/
@ -136,10 +144,10 @@ public class SysUser extends BaseEntity {
private Long roleId;
/**
*
* Id
* @param userId
*/
private String databaseName;
private String firmId;
public SysUser (Long userId) {

View File

@ -0,0 +1,30 @@
package com.muyu.common.system.domain.resp;
import com.muyu.common.system.domain.SysFirm;
import com.muyu.common.system.domain.SysFirmDatasource;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author
* @Packagecom.muyu.common.system.domain
* @Projectcloud-vehicle
* @nameSysFirmDTO
* @Date2024/10/8 20:23
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SysFirmResp {
/**
*
*/
private SysFirm sysFirm;
/**
*
*/
private SysFirmDatasource sysFirmDatasource;
}

View File

@ -3,7 +3,9 @@ package com.muyu.common.system.remote;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.constant.ServiceNameConstants;
import com.muyu.common.core.domain.Result;
import com.muyu.common.system.domain.SysFirm;
import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.resp.SysFirmResp;
import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory;
import com.muyu.common.system.domain.LoginUser;
import org.springframework.cloud.openfeign.FeignClient;
@ -40,6 +42,8 @@ public interface RemoteUserService {
@PostMapping("/user/register")
public Result<Boolean> registerUserInfo (@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
@GetMapping("/user/companyList")
public Result<List<SysUser>> companyList ();
@GetMapping("/firm/firmInnList")
Result<List<SysFirmResp>> getFirmList(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
@GetMapping("/user/firmUserInfo/{username}/{firmId}")
Result<LoginUser> getFirmUserInfo(@PathVariable("username") String username,@PathVariable("firmId") Long firmId,@RequestHeader(SecurityConstants.FROM_SOURCE) String inner);
}

View File

@ -1,6 +1,7 @@
package com.muyu.common.system.remote.factory;
import com.muyu.common.core.domain.Result;
import com.muyu.common.system.domain.resp.SysFirmResp;
import com.muyu.common.system.remote.RemoteUserService;
import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.LoginUser;
@ -33,9 +34,15 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
public Result<Boolean> registerUserInfo (SysUser sysUser, String source) {
return Result.error("注册用户失败:" + throwable.getMessage());
}
@Override
public Result<List<SysUser>> companyList() {
return Result.error("saas连接system失败:" + throwable.getMessage());
public Result<List<SysFirmResp>> getFirmList(String source) {
return Result.error("注册用户失败:" + throwable.getMessage());
}
@Override
public Result<LoginUser> getFirmUserInfo(String username, Long firmId, String inner) {
return Result.error("注册用户失败:" + throwable.getMessage());
}
};
}

View File

@ -71,6 +71,7 @@ public class AuthFilter implements GlobalFilter, Ordered {
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
addHeader(mutate,SecurityConstants.DATABASE_NAME, JwtUtils.getDatabaseName(claims));
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());

View File

@ -0,0 +1,152 @@
package com.muyu.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.common.core.web.domain.BaseEntity;
import com.muyu.common.system.domain.SysUser;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Date;
/**
* @Author
* @Packagecom.muyu.domain
* @Projectcloud-vehicle
* @nameFirmUser
* @Date2024/10/8 18:59
*/
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_user")
@Tag(name = "企业用户")
public class FirmUser extends BaseEntity {
/**
* ID
*/
@Schema(name = "用户ID")
@TableId(type = IdType.AUTO)
private Long userId;
/**
* ID
*/
@Schema(name = "部门ID")
private Long deptId;
/**
*
*/
@Schema(name = "用户账号")
private String userName;
/**
*
*/
@Schema(name = "用户昵称")
private String nickName;
/**
* 00
*/
@Schema(name = "用户类型00系统用户")
private String userType;
/**
*
*/
@Schema(name = "用户邮箱")
private String email;
/**
*
*/
@Schema(name = "手机号码")
private String phonenumber;
/**
* 0 1 2
*/
@Schema(name = "用户性别0男 1女 2未知")
private String sex;
/**
*
*/
@Schema(name = "头像地址")
private String avatar;
/**
*
*/
@Schema(name = "密码")
private String password;
/**
* 0 1
*/
@Schema(name = "帐号状态0正常 1停用")
private String status;
/**
* 0 2
*/
@Schema(name = "删除标志0代表存在 2代表删除")
private String delFlag;
/**
* IP
*/
@Schema(name = "最后登录IP")
private String loginIp;
/**
*
*/
@Schema(name = "最后登录时间")
private Date loginDate;
public static FirmUser builderFirmUser(SysUser sysUser) {
return FirmUser.builder()
.userId(sysUser.getUserId())
.deptId(sysUser.getDeptId())
.userType(sysUser.getUserType())
.userName(sysUser.getUserName())
.nickName(sysUser.getNickName())
.email(sysUser.getEmail())
.phonenumber(sysUser.getPhonenumber())
.sex(sysUser.getSex())
.avatar(sysUser.getAvatar())
.password(sysUser.getPassword())
.status(sysUser.getStatus())
.delFlag(sysUser.getDelFlag())
.loginIp(sysUser.getLoginIp())
.loginDate(sysUser.getLoginDate())
.createBy(sysUser.getCreateBy())
.createTime(sysUser.getCreateTime())
.updateBy(sysUser.getUpdateBy())
.updateTime(sysUser.getUpdateTime())
.remark(sysUser.getRemark())
.build();
}
public static SysUser builderSysUser(FirmUser sysUser) {
return SysUser.builder()
.userId(sysUser.getUserId())
.deptId(sysUser.getDeptId())
.userName(sysUser.getUserName())
.userType(sysUser.getUserType())
.nickName(sysUser.getNickName())
.email(sysUser.getEmail())
.phonenumber(sysUser.getPhonenumber())
.sex(sysUser.getSex())
.avatar(sysUser.getAvatar())
.password(sysUser.getPassword())
.status(sysUser.getStatus())
.delFlag(sysUser.getDelFlag())
.loginIp(sysUser.getLoginIp())
.loginDate(sysUser.getLoginDate())
.createBy(sysUser.getCreateBy())
.createTime(sysUser.getCreateTime())
.updateBy(sysUser.getUpdateBy())
.updateTime(sysUser.getUpdateTime())
.remark(sysUser.getRemark())
.build();
}
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>cloud-modules-enterprise-remote</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise-common</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,28 @@
package com.muyu.enterprise.remote;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.constant.ServiceNameConstants;
import com.muyu.common.core.domain.Result;
import com.muyu.common.system.domain.SysUser;
import com.muyu.enterprise.remote.factory.RemoteFirmUserFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
/**
* @Author
* @Packagecom.muyu.enterpries.remote
* @Projectcloud-vehicle
* @nameRemoteFirmUserService
* @Date2024/10/8 19:58
*/
@FeignClient(contextId = "remoteFirmUserService",
value = ServiceNameConstants.ENTERPRISE_SERVICE,
fallbackFactory = RemoteFirmUserFallbackFactory.class)
public interface RemoteFirmUserService {
@GetMapping("/firm/query_by_username/{username}")
Result<SysUser> queryByUsername(@PathVariable("username") String username,@RequestHeader(SecurityConstants.INNER) String source,@RequestHeader("ent_code") String databaseName);
}

View File

@ -0,0 +1,34 @@
package com.muyu.enterprise.remote.factory;
import com.muyu.common.core.domain.Result;
import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.remote.factory.RemoteFileFallbackFactory;
import com.muyu.enterprise.remote.RemoteFirmUserService;
import lombok.extern.log4j.Log4j2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @Author
* @Packagecom.muyu.enterprise.remote.factory
* @Projectcloud-vehicle
* @nameRemoteFirmUserFallbackFactory
* @Date2024/10/8 20:01
*/
@Component
@Log4j2
public class RemoteFirmUserFallbackFactory implements FallbackFactory<RemoteFirmUserService>
{
@Override
public RemoteFirmUserService create(Throwable cause) {
log.error("文件服务调用失败:{}", cause.getMessage());
return new RemoteFirmUserService() {
@Override
public Result<SysUser> queryByUsername(String username, String source,String databaseName) {
return Result.error("saas连接失败:" + cause.getMessage());
}
};
}
}

View File

@ -23,6 +23,12 @@
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>com.muyu</groupId>-->
<!-- <artifactId>cloud-common-saas</artifactId>-->
<!-- </dependency>-->
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>

View File

@ -1,15 +1,24 @@
package com.muyu.enterprise;
import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
import com.muyu.common.security.annotation.EnableCustomConfig;
import com.muyu.common.security.annotation.EnableMyFeignClients;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@Log4j2
@EnableCustomConfig
@EnableMyFeignClients
@SpringBootApplication
// (
// exclude = {
// DataSourceAutoConfiguration.class,
// DruidDataSourceAutoConfigure.class,
// DynamicDataSourceAutoConfiguration.class
// })
public class CloudEnterpriseApplication {
public static void main(String[] args) {
SpringApplication.run(CloudEnterpriseApplication.class,args);

View File

@ -78,9 +78,8 @@ public class ElectController extends BaseController {
//获取用户信息
LoginUser loginUser = SecurityUtils.getLoginUser();
//获取租户唯一标识
String databaseName = loginUser.getSysUser().getDatabaseName();
//将信息存到Redis
fenceCahceService.put(databaseName+fence.getCoordinates(),fence);
fenceCahceService.put(fence.getCoordinates(),fence);
return Result.success(save?"操作成功":"操作失败");
}

View File

@ -0,0 +1,104 @@
package com.muyu.enterprise.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.security.annotation.InnerAuth;
import com.muyu.common.system.domain.SysUser;
import com.muyu.domain.FirmUser;
import com.muyu.enterprise.service.FirmUserService;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @Author
* @Packagecom.muyu.enterprise.controller
* @Projectcloud-vehicle
* @nameSysUserController
* @Date2024/10/8 18:59
*/
@RestController
@RequestMapping("/firm_user")
@Tag(name = "企业用户控制层")
public class FirmUserController extends BaseController {
/**
*
*/
@Resource
private FirmUserService firmUserService;
/**
*
* @return
*/
@Schema(description = "企业用户列表")
@GetMapping("/list")
public Result<FirmUser> list(){
return success(firmUserService.list());
}
/**
*
* @param userId
* @return
*/
@Schema(description = "查询企业用户")
@GetMapping("/query/{userId}")
public Result<FirmUser> query(@PathVariable("userId") Long userId){
return success(firmUserService.getById(userId));
}
@Schema(description = "根据用户名查询企业用户")
@GetMapping("/query_by_username/{username}")
@InnerAuth
public Result<SysUser> queryByUsername(@PathVariable("username") String username){
LambdaQueryWrapper<FirmUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(FirmUser::getUserName, username);
FirmUser firmUser = firmUserService.getOne(queryWrapper);
return success(FirmUser.builderSysUser(firmUser));
}
/**
*
* @param sysUser
* @return
*/
@Schema(description = "新增企业用户")
@PostMapping("/add")
public Result<Long> add(@RequestBody SysUser sysUser){
FirmUser firmUser = FirmUser.builderFirmUser(sysUser);
firmUserService.save(firmUser);
return success(firmUser.getUserId());
}
/**
*
* @param sysUser
* @return
*/
@Schema(description = "修改企业用户")
@PutMapping("/edit")
public Result edit(@RequestBody SysUser sysUser){
FirmUser firmUser = FirmUser.builderFirmUser(sysUser);
firmUserService.updateById(firmUser);
return success();
}
/**
*
* @param userId
* @return
*/
@Schema(description = "删除企业用户")
@DeleteMapping("/remove/{userId}")
public Result remove(@PathVariable("userId") Long userId){
firmUserService.removeById(userId);
return success();
}
}

View File

@ -62,9 +62,9 @@ public class MessageTemplateController {
//获取用户信息
LoginUser loginUser = SecurityUtils.getLoginUser();
//获取租户唯一标识
String databaseName = loginUser.getSysUser().getDatabaseName();
//添加到缓存
templateCacheService.put(databaseName+messageTemplateAddReq.getMessageTemplateName(), MessageTemplate.addBuild(messageTemplateAddReq));
templateCacheService.put(messageTemplateAddReq.getMessageTemplateName(), MessageTemplate.addBuild(messageTemplateAddReq));
return Result.success(save? "新增成功" : "新增失败");
}

View File

@ -107,10 +107,8 @@ public class VehicleController extends BaseController {
boolean save = vehicleService.save(Vehicle.addBuild(vehicleAddReq));
//获取用户信息
LoginUser loginUser = SecurityUtils.getLoginUser();
//获取租户唯一标识
String databaseName = loginUser.getSysUser().getDatabaseName();
//存到redis
vehicleCacheService.put(databaseName+vehicleAddReq.getVehicleVin(), Vehicle.addBuild(vehicleAddReq));
vehicleCacheService.put(vehicleAddReq.getVehicleVin(), Vehicle.addBuild(vehicleAddReq));
return Result.success(save? "新增成功" : "新增失败");
}

View File

@ -67,8 +67,7 @@ public class WarnRuleController {
//获取用户信息
LoginUser loginUser = SecurityUtils.getLoginUser();
//获取租户唯一标识
String databaseName = loginUser.getSysUser().getDatabaseName();
warnRuleCacheService.put(databaseName+warnRule.getRuleName(),warnRule);
warnRuleCacheService.put(warnRule.getRuleName(),warnRule);
return Result.success(save);
}

View File

@ -0,0 +1,16 @@
package com.muyu.enterprise.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.domain.FirmUser;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author
* @Packagecom.muyu.enterprise.mapper
* @Projectcloud-vehicle
* @nameFirmUserMapper
* @Date2024/10/8 19:05
*/
@Mapper
public interface FirmUserMapper extends BaseMapper<FirmUser> {
}

View File

@ -0,0 +1,14 @@
package com.muyu.enterprise.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.domain.FirmUser;
/**
* @Author
* @Packagecom.muyu.enterprise.service
* @Projectcloud-vehicle
* @nameFirmUserService
* @Date2024/10/8 19:04
*/
public interface FirmUserService extends IService<FirmUser> {
}

View File

@ -0,0 +1,20 @@
package com.muyu.enterprise.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.domain.FirmUser;
import com.muyu.enterprise.mapper.FirmUserMapper;
import com.muyu.enterprise.service.FirmUserService;
import org.springframework.stereotype.Service;
/**
* @Author
* @Packagecom.muyu.enterprise.service.impl
* @Projectcloud-vehicle
* @nameFirmUserServiceImpl
* @Date2024/10/8 19:05
*/
@Service
public class FirmUserServiceImpl
extends ServiceImpl<FirmUserMapper, FirmUser>
implements FirmUserService {
}

View File

@ -24,6 +24,7 @@
<module>cloud-modules-enterprise-common</module>
<module>cloud-modules-enterprise-server</module>
<module>cloud-modules-enterprise-cache</module>
<module>cloud-modules-enterprise-remote</module>
</modules>
<packaging>pom</packaging>

View File

@ -72,7 +72,7 @@ public class OnLineMonitoringConsumer {
Object breakdown = faultCacheService.get(vin);
Vehicle vehicle = vehicleCacheService.get(vin);
WarnRule warnRule = warnRuleCacheService.get(vin);
WarnRuleResp warnStrategy = warnStrategyCacheService.get(vin);
WarnRuleResp warnRuleResp = warnStrategyCacheService.get(vin);
VehicleManageResp vehicleManageResp = allVehicleCacheService.get(vin);
// 封装从redis中获得的数据
HashMap<String, Object> map = new HashMap<>();
@ -80,7 +80,7 @@ public class OnLineMonitoringConsumer {
map.put("breakdown",breakdown);
map.put("vehicle",vehicle);
map.put("warnRule",warnRule);
map.put("warnStrategy",warnStrategy);
map.put("warnRuleResp",warnRuleResp);
map.put("vehicleManageResp",vehicleManageResp);
// 添加到本地缓存中
cacheUtil.put(vin,map);

View File

@ -25,7 +25,7 @@ import javax.annotation.Resource;
public class TestKafka {
private static final String TIPSY = "tipsy";
private static final String VIN = "1123wsdfr54323wsd";
private static final String VIN = "63YCZDY6336C8H4CA";
/**
* 线

View File

@ -7,7 +7,7 @@ nacos:
addr: 47.101.49.53:8848
user-name: nacos
password: nacos
namespace: dev
namespace: seven
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
# Spring
spring:

View File

@ -17,6 +17,16 @@
<dependencies>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise-remote</artifactId>
</dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise-remote</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>

View File

@ -29,6 +29,7 @@ public class SysDeptController extends BaseController {
@Autowired
private SysDeptService deptService;
/**
*
*/

View File

@ -0,0 +1,64 @@
package com.muyu.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.security.annotation.InnerAuth;
import com.muyu.common.system.domain.SysFirm;
import com.muyu.common.system.domain.SysFirmDatasource;
import com.muyu.common.system.domain.resp.SysFirmResp;
import com.muyu.system.service.SysFirmDatasourceService;
import com.muyu.system.service.SysFirmService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
*
* @Author
* @Packagecom.muyu.system.controller
* @Projectcloud-vehicle
* @nameSysFirmController
* @Date2024/10/8 19:41
*/
@RestController
@RequestMapping("/firm")
public class SysFirmController extends BaseController {
@Resource
private SysFirmService sysFirmService;
@Resource
private SysFirmDatasourceService sysFirmDatasourceService;
/**
*
* @return
*/
@GetMapping("/firmList")
public Result<List<SysFirm>> firmList(){
return success(sysFirmService.list());
}
@GetMapping("/firmInnList")
@InnerAuth
public Result<List<SysFirmResp>> firmInnList(){
LambdaQueryWrapper<SysFirm> wrapper = new LambdaQueryWrapper<>();
wrapper.ne(SysFirm::getFirmId, 1);
return success(sysFirmService.list(wrapper)
.stream()
.map(sysFirm ->
SysFirmResp.builder()
.sysFirm(sysFirm)
.sysFirmDatasource(
sysFirmDatasourceService.getById(sysFirm.getDatasourceId())
)
)
);
}
}

View File

@ -0,0 +1,27 @@
package com.muyu.system.controller;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.system.service.SysFirmDatasourceService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
*
* @Author
* @Packagecom.muyu.system.controller
* @Projectcloud-vehicle
* @nameSysFirmDatasourceController
* @Date2024/10/8 19:49
*/
@RestController
@RequestMapping("/firmDatasource")
public class SysFirmDatasourceController extends BaseController {
@Resource
private SysFirmDatasourceService sysFirmDatasourceService;
}

View File

@ -1,5 +1,6 @@
package com.muyu.system.controller;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.utils.poi.ExcelUtil;
@ -10,10 +11,8 @@ import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.InnerAuth;
import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.SysDept;
import com.muyu.common.system.domain.SysRole;
import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.LoginUser;
import com.muyu.common.system.domain.*;
import com.muyu.enterprise.remote.RemoteFirmUserService;
import com.muyu.system.domain.resp.AuthRoleResp;
import com.muyu.system.domain.resp.UserDetailInfoResp;
import com.muyu.system.domain.resp.UserInfoResp;
@ -25,6 +24,8 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
import java.util.Set;
@ -55,6 +56,31 @@ public class SysUserController extends BaseController {
@Autowired
private SysConfigService configService;
@Resource
private RemoteFirmUserService remoteFirmUserService;
@Resource
private SysFirmDatasourceService sysFirmDatasourceService;
@GetMapping("/firmUserInfo/{username}/{firmId}")
@InnerAuth
Result<LoginUser> getFirmUserInfo(@PathVariable("username") String username,@PathVariable("firmId") Long firmId){
SysFirmDatasource sysFirmDatasource = sysFirmDatasourceService.getById(firmId);
Result<SysUser> sysUserResult = remoteFirmUserService.queryByUsername(username, SecurityConstants.INNER, sysFirmDatasource.getDatabase());
List<SysRole> sysRoles = roleService.selectRolesByUserId(firmId);
SysUser sysUser = sysUserResult.getData();
// 角色集合
Set<String> roles = permissionService.getRolePermission(sysUser);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(sysUser);
LoginUser loginUser = new LoginUser();
loginUser.setSysUser(sysUser);
loginUser.setRoles(roles);
loginUser.setPermissions(permissions);
return success(loginUser);
}
/**
*

View File

@ -0,0 +1,16 @@
package com.muyu.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.common.system.domain.SysFirmDatasource;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author
* @Packagecom.muyu.system.mapper
* @Projectcloud-vehicle
* @nameSysFirmDatasourceMapper
* @Date2024/10/8 19:47
*/
@Mapper
public interface SysFirmDatasourceMapper extends BaseMapper<SysFirmDatasource> {
}

View File

@ -0,0 +1,16 @@
package com.muyu.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.common.system.domain.SysFirm;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author
* @Packagecom.muyu.system.mapper
* @Projectcloud-vehicle
* @nameSysFirmMapper
* @Date2024/10/8 19:45
*/
@Mapper
public interface SysFirmMapper extends BaseMapper<SysFirm> {
}

View File

@ -0,0 +1,14 @@
package com.muyu.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.common.system.domain.SysFirmDatasource;
/**
* @Author
* @Packagecom.muyu.system.service.impl
* @Projectcloud-vehicle
* @nameSysFirmDatasourceService
* @Date2024/10/8 19:48
*/
public interface SysFirmDatasourceService extends IService<SysFirmDatasource> {
}

View File

@ -0,0 +1,14 @@
package com.muyu.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.common.system.domain.SysFirm;
/**
* @Author
* @Packagecom.muyu.system.service
* @Projectcloud-vehicle
* @nameSysFirmService
* @Date2024/10/8 19:46
*/
public interface SysFirmService extends IService<SysFirm> {
}

View File

@ -0,0 +1,20 @@
package com.muyu.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.system.domain.SysFirmDatasource;
import com.muyu.system.mapper.SysFirmDatasourceMapper;
import com.muyu.system.service.SysFirmDatasourceService;
import org.springframework.stereotype.Service;
/**
* @Author
* @Packagecom.muyu.system.service.impl
* @Projectcloud-vehicle
* @nameSysFirmDatasourceServiceImpl
* @Date2024/10/8 19:48
*/
@Service
public class SysFirmDatasourceServiceImpl
extends ServiceImpl<SysFirmDatasourceMapper, SysFirmDatasource>
implements SysFirmDatasourceService {
}

View File

@ -0,0 +1,20 @@
package com.muyu.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.system.domain.SysFirm;
import com.muyu.system.mapper.SysFirmMapper;
import com.muyu.system.service.SysFirmService;
import org.springframework.stereotype.Service;
/**
* @Author
* @Packagecom.muyu.system.service.im
* @Projectcloud-vehicle
* @nameSysFirmServiceImpl
* @Date2024/10/8 19:46
*/
@Service
public class SysFirmServiceImpl
extends ServiceImpl<SysFirmMapper, SysFirm>
implements SysFirmService {
}

View File

@ -23,7 +23,6 @@
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
<result property="databaseName" column="database_name"/>
<association property="dept" javaType="com.muyu.common.system.domain.SysDept" resultMap="deptResult"/>
<collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
</resultMap>
@ -64,7 +63,6 @@
u.create_by,
u.create_time,
u.remark,
u.database_name,
d.dept_id,
d.parent_id,
d.ancestors,

15
pom.xml
View File

@ -267,18 +267,33 @@
<version>${muyu.version}</version>
</dependency>
<!-- kafka消息中间件 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-kafka</artifactId>
<version>${muyu.version}</version>
</dependency>
<!-- saas模块 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-saas</artifactId>
<version>${muyu.version}</version>
</dependency>
<!--企业业务平台公共模块-->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise-common</artifactId>
<version>${muyu.version}</version>
</dependency>
<!--企业业务平台远调-->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise-remote</artifactId>
<version>${muyu.version}</version>
</dependency>
</dependencies>
</dependencyManagement>