pom.xml
@@ -2,298 +2,284 @@ <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> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.6.2</version> <name>ruoyi</name> <description>微服务系统</description> <properties> <ruoyi.version>3.6.2</ruoyi.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-boot.version>2.7.7</spring-boot.version> <spring-cloud.version>2021.0.5</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version> <spring-boot-admin.version>2.7.10</spring-boot-admin.version> <swagger.fox.version>3.0.0</swagger.fox.version> <swagger.core.version>1.6.2</swagger.core.version> <tobato.version>1.27.2</tobato.version> <kaptcha.version>2.3.3</kaptcha.version> <pagehelper.boot.version>1.4.6</pagehelper.boot.version> <druid.version>1.2.16</druid.version> <dynamic-ds.version>3.5.2</dynamic-ds.version> <commons.io.version>2.11.0</commons.io.version> <velocity.version>2.3</velocity.version> <fastjson.version>2.0.25</fastjson.version> <jjwt.version>0.9.1</jjwt.version> <minio.version>8.2.2</minio.version> <poi.version>4.1.2</poi.version> <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version> </properties> <!-- 依赖声明 --> <dependencyManagement> <dependencies> <!-- SpringCloud 微服务 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringCloud Alibaba 微服务 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot 依赖配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- FastDFS 分布式文件系统 --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>${tobato.version}</version> </dependency> <!-- Swagger 依赖配置 --> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>${swagger.core.version}</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>${swagger.core.version}</version> </dependency> <!-- 验证码 --> <dependency> <groupId>pro.fessional</groupId> <artifactId>kaptcha</artifactId> <version>${kaptcha.version}</version> </dependency> <!-- pagehelper 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper.boot.version}</version> </dependency> <!-- io常用工具类 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons.io.version}</version> </dependency> <!-- excel工具 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi.version}</version> </dependency> <!-- 代码生成使用模板 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>${velocity.version}</version> </dependency> <!-- JSON 解析器和生成器 --> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>${fastjson.version}</version> </dependency> <!-- JWT --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jjwt.version}</version> </dependency> <!-- 线程传递值 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId> <version>${transmittable-thread-local.version}</version> </dependency> <!-- 核心模块 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-core</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 接口模块 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 安全模块 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-security</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 权限范围 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-datascope</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 多数据源 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-datasource</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 日志记录 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-log</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 缓存服务 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-redis</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 系统接口 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-system</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 账户接口 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-account</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 订单接口 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-order</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 系统其他接口 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-other</artifactId> <version>${ruoyi.version}</version> </dependency> </dependencies> </dependencyManagement> <modules> <module>ruoyi-auth</module> <module>ruoyi-gateway</module> <module>ruoyi-modules</module> <module>ruoyi-api</module> <module>ruoyi-common</module> <module>ruoyi-service</module> </modules> <packaging>pom</packaging> <dependencies> <!-- bootstrap 启动器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>public</id> <name>aliyun nexus</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>aliyun nexus</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> <modelVersion>4.0.0</modelVersion> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.6.2</version> <name>ruoyi</name> <description>微服务系统</description> <properties> <ruoyi.version>3.6.2</ruoyi.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-boot.version>2.7.7</spring-boot.version> <spring-cloud.version>2021.0.5</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version> <spring-boot-admin.version>2.7.10</spring-boot-admin.version> <swagger.fox.version>3.0.0</swagger.fox.version> <swagger.core.version>1.6.2</swagger.core.version> <tobato.version>1.27.2</tobato.version> <kaptcha.version>2.3.3</kaptcha.version> <pagehelper.boot.version>1.4.6</pagehelper.boot.version> <druid.version>1.2.16</druid.version> <dynamic-ds.version>3.5.2</dynamic-ds.version> <commons.io.version>2.11.0</commons.io.version> <velocity.version>2.3</velocity.version> <fastjson.version>2.0.25</fastjson.version> <jjwt.version>0.9.1</jjwt.version> <minio.version>8.2.2</minio.version> <poi.version>4.1.2</poi.version> <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version> </properties> <!-- 依赖声明 --> <dependencyManagement> <dependencies> <!-- SpringCloud 微服务 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringCloud Alibaba 微服务 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot 依赖配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- FastDFS 分布式文件系统 --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>${tobato.version}</version> </dependency> <!-- Swagger 依赖配置 --> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>${swagger.core.version}</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>${swagger.core.version}</version> </dependency> <!-- 验证码 --> <dependency> <groupId>pro.fessional</groupId> <artifactId>kaptcha</artifactId> <version>${kaptcha.version}</version> </dependency> <!-- pagehelper 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper.boot.version}</version> </dependency> <!-- io常用工具类 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons.io.version}</version> </dependency> <!-- excel工具 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi.version}</version> </dependency> <!-- 代码生成使用模板 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>${velocity.version}</version> </dependency> <!-- JSON 解析器和生成器 --> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>${fastjson.version}</version> </dependency> <!-- JWT --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jjwt.version}</version> </dependency> <!-- 线程传递值 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId> <version>${transmittable-thread-local.version}</version> </dependency> <!-- 核心模块 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-core</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 接口模块 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 安全模块 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-security</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 权限范围 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-datascope</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 多数据源 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-datasource</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 日志记录 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-log</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 缓存服务 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-redis</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 系统接口 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-system</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- 数据交互接口 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-dataInterchange</artifactId> <version>${ruoyi.version}</version> </dependency> </dependencies> </dependencyManagement> <modules> <module>ruoyi-auth</module> <module>ruoyi-gateway</module> <module>ruoyi-modules</module> <module>ruoyi-api</module> <module>ruoyi-common</module> <module>ruoyi-service</module> </modules> <packaging>pom</packaging> <dependencies> <!-- bootstrap 启动器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>public</id> <name>aliyun nexus</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>aliyun nexus</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project> ruoyi-api/pom.xml
@@ -1,22 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.6.2</version> </parent> <modelVersion>4.0.0</modelVersion> <modules> <module>ruoyi-api-system</module> </modules> <artifactId>ruoyi-api</artifactId> <packaging>pom</packaging> <description> ruoyi-api系统接口 </description> <parent> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.6.2</version> </parent> <modelVersion>4.0.0</modelVersion> <modules> <module>ruoyi-api-system</module> <module>ruoyi-api-dataInterchange</module> </modules> <artifactId>ruoyi-api</artifactId> <packaging>pom</packaging> <description> ruoyi-api系统接口 </description> </project> ruoyi-api/ruoyi-api-dataInterchange/pom.xml
New file @@ -0,0 +1,33 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api</artifactId> <version>3.6.2</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ruoyi-api-dataInterchange</artifactId> <description> ruoyi-api-dataInterchange数据交换接口模块 </description> <dependencies> <!-- RuoYi Common Core--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-core</artifactId> <exclusions> <exclusion> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project> ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/config/DataUpdateHandlerConfig.java
New file @@ -0,0 +1,32 @@ package com.ruoyi.dataInterchange.api.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.context.annotation.Configuration; /** * @author xiaochen * @ClassName DataUpdateInterceptor * @Description 数据更新操作处理 * @date 2021-12-15 * <p> * 注意,之前在此处注入了 JwtTokenUtils * <p> * 造成spring循环依赖,项目支棱不起来 */ @Slf4j @Configuration public class DataUpdateHandlerConfig implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { } @Override public void updateFill(MetaObject metaObject) { } } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/config/HttpConfig.java
File was renamed from ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/config/HttpConfig.java @@ -1,4 +1,4 @@ package com.ruoyi.dataInterchange.config; package com.ruoyi.dataInterchange.api.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.client.RestTemplateBuilder; @@ -14,12 +14,12 @@ **/ @Configuration public class HttpConfig { @Autowired private RestTemplateBuilder builder; @Bean public RestTemplate restTemplate() { return builder.build(); } @Autowired private RestTemplateBuilder builder; @Bean public RestTemplate restTemplate() { return builder.build(); } } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/config/MybatisPlusConfig.java
New file @@ -0,0 +1,51 @@ package com.ruoyi.dataInterchange.api.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author xiaochen * @ClassName MybatisPlusConfig * @Description MybatisPlus相关配置 * @date 2020-09-22 11:22、 * 直接以实现类作为bean的注入(有事务管理的类) * @EnableTransactionManagement(proxyTargetClass = true) */ @Configuration public class MybatisPlusConfig { private final DataUpdateHandlerConfig dataUpdateHandler; @Autowired public MybatisPlusConfig(DataUpdateHandlerConfig dataUpdateHandler) { this.dataUpdateHandler = dataUpdateHandler; } /** * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } /** * 自动填充功能 * * @return */ @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(dataUpdateHandler); return globalConfig; } } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPExgMsgRegisterClientFallbackFactory.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.dataInterchange.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRegisterClient; import com.ruoyi.dataInterchange.api.vo.UPExgMsgRegisterVo; import org.springframework.cloud.openfeign.FallbackFactory; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 13:40 */ public class UPExgMsgRegisterClientFallbackFactory implements FallbackFactory<UPExgMsgRegisterClient> { @Override public UPExgMsgRegisterClient create(Throwable cause) { return new UPExgMsgRegisterClient() { @Override public R<List<UPExgMsgRegisterVo>> getUPExgMsgRegisterListIsAfterCreateTime(Long startTime) { return R.fail("查询添加时间大于等于给定时间的车辆基础数据失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPExgMsgReportDriverInfoClientFallbackFactory.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.dataInterchange.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgReportDriverInfoClient; import com.ruoyi.dataInterchange.api.vo.UPExgMsgReportDriverInfoVo; import org.springframework.cloud.openfeign.FallbackFactory; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 16:36 */ public class UPExgMsgReportDriverInfoClientFallbackFactory implements FallbackFactory<UPExgMsgReportDriverInfoClient> { @Override public UPExgMsgReportDriverInfoClient create(Throwable cause) { return new UPExgMsgReportDriverInfoClient() { @Override public R<List<UPExgMsgReportDriverInfoVo>> getUPExgMsgReportDriverInfoListIsAfterCreateTime(Long createTime) { return R.fail("查询添加时间等于或大于给定时间的数据失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPExgMsgRegisterClient.java
New file @@ -0,0 +1,29 @@ package com.ruoyi.dataInterchange.api.feignClient; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.dataInterchange.api.factory.UPExgMsgRegisterClientFallbackFactory; import com.ruoyi.dataInterchange.api.vo.UPExgMsgRegisterVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 13:40 */ @FeignClient(contextId = "UPExgMsgRegisterClient", value = ServiceNameConstants.DATA_INTERCHANGE_SERVICE, fallbackFactory = UPExgMsgRegisterClientFallbackFactory.class) public interface UPExgMsgRegisterClient { /** * 查询添加时间大于等于给定时间的车辆基础数据 * * @param startTime * @return */ @PostMapping("/UPExgMsgRegister/getUPExgMsgRegisterListIsAfterCreateTime") R<List<UPExgMsgRegisterVo>> getUPExgMsgRegisterListIsAfterCreateTime(@RequestParam("startTime") Long startTime); } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPExgMsgReportDriverInfoClient.java
New file @@ -0,0 +1,29 @@ package com.ruoyi.dataInterchange.api.feignClient; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.dataInterchange.api.factory.UPExgMsgReportDriverInfoClientFallbackFactory; import com.ruoyi.dataInterchange.api.vo.UPExgMsgReportDriverInfoVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 16:36 */ @FeignClient(contextId = "UPExgMsgReportDriverInfoClient", value = ServiceNameConstants.DATA_INTERCHANGE_SERVICE, fallbackFactory = UPExgMsgReportDriverInfoClientFallbackFactory.class) public interface UPExgMsgReportDriverInfoClient { /** * 查询添加时间等于或大于给定时间的数据 * * @param createTime * @return */ @PostMapping("/UPExgMsgReportDriverInfo/getUPExgMsgReportDriverInfoListIsAfterCreateTime") R<List<UPExgMsgReportDriverInfoVo>> getUPExgMsgReportDriverInfoListIsAfterCreateTime(@RequestParam("createTime") Long createTime); } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/VehicleColorEnum.java
New file @@ -0,0 +1,34 @@ package com.ruoyi.dataInterchange.api.model.enums; /** * 车辆颜色枚举 * * @author zhibing.pu * @Date 2025/3/17 14:18 */ public enum VehicleColorEnum { BLUE(1, "蓝色"), YELLOW(2, "黄色"), BLACK(3, "黑色"), WHITE(4, "白色"), OTHER(9, "其他"), ; private Integer code; private String name; VehicleColorEnum(Integer code, String name) { this.code = code; this.name = name; } public static String getName(Integer num) { VehicleColorEnum[] values = VehicleColorEnum.values(); for (VehicleColorEnum value : values) { if (value.code.equals(num)) { return value.name; } } return ""; } } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPExgMsgRegisterVo.java
New file @@ -0,0 +1,59 @@ package com.ruoyi.dataInterchange.api.vo; import lombok.Data; /** * @author zhibing.pu * @Date 2025/3/17 13:45 */ @Data public class UPExgMsgRegisterVo { /** * id */ private String id; /** * 车牌号 */ private String vehicleNo; /** * 车牌颜色 */ private int vehicleColor; /** * 子业务类型标识 */ private int dataType; /** * 后续数据长度 */ private Integer dataLength; /** * 平台唯一编号,由平台所在地行政区划代码和平台编号组成 */ private String platformId; /** * 车载终端厂商唯一编码,由车载终端厂商所在地行政区划代码和厂商ID组成 */ private String producerId; /** * 车载终端型号 */ private String terminalModelType; /** * 车载终端编号 */ private String terminalId; /** * 车载终端SIM卡电话号码 */ private String terminalSIMCode; /** * 下级平台唯一标识 */ private Integer inferiorPlatformId; /** * 添加时间 */ private Long createTime; } ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPExgMsgReportDriverInfoVo.java
New file @@ -0,0 +1,55 @@ package com.ruoyi.dataInterchange.api.vo; import lombok.Data; /** * @author zhibing.pu * @Date 2025/3/17 16:38 */ @Data public class UPExgMsgReportDriverInfoVo { /** * 主键 */ private String id; /** * 车牌号 */ private String vehicleNo; /** * 车牌颜色 */ private int vehicleColor; /** * 子业务类型标识 */ private int dataType; /** * 后续数据长度 */ private int dataLength; /** * 驾驶员姓名 */ private String driverName; /** * 驾驶证编号 */ private String driverId; /** * 从业资格证号 */ private String licence; /** * 发证机构名称 */ private String orgName; /** * 下级平台唯一标识 */ private Integer inferiorPlatformId; /** * 添加时间 */ private Long createTime; } ruoyi-api/ruoyi-api-dataInterchange/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
New file @@ -0,0 +1,2 @@ com.ruoyi.dataInterchange.api.factory.UPExgMsgRegisterClientFallbackFactory com.ruoyi.dataInterchange.api.factory.UPExgMsgReportDriverInfoClientFallbackFactory ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Car.java
New file @@ -0,0 +1,173 @@ package com.ruoyi.system.api.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; /** * @author zhibing.pu * @Date 2025/3/17 11:29 */ @Data @TableName("t_car") public class Car { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 车牌号 */ @TableField("vehicle_number") private String vehicleNumber; /** * 车牌颜色 */ @TableField("license_plate_color") private String licensePlateColor; /** * 所属企业id */ @TableField("enterprise_id") private Integer enterpriseId; /** * 载客数 */ @TableField("passenger_capacity") private String passengerCapacity; /** * 车辆品牌 */ @TableField("brand") private String brand; /** * 车辆品牌型号 */ @TableField("brand_model") private String brandModel; /** * 车辆类型 */ @TableField("vehicle_type") private String vehicleType; /** * 司机id */ @TableField("driver_id") private Integer driverId; /** * 车身颜色 */ @TableField("vehicle_color") private String vehicleColor; /** * 经营区域 */ @TableField("operating_area") private String operatingArea; /** * 运营类型 */ @TableField("operate_type") private String operateType; /** * 发动机号 */ @TableField("engine_number") private String engineNumber; /** * 车辆VIN码 */ @TableField("vin") private String vin; /** * 注册日期 */ @TableField("registration_date") private String registrationDate; /** * 燃料类型 */ @TableField("fuel_type") private String fuelType; /** * 发动机排量 */ @TableField("engine_capacity") private String engineCapacity; /** * 运输证发证机关 */ @TableField("transport_license_issuing_authority") private String transportLicenseIssuingAuthority; /** * 运输证有效期开始时间 */ @TableField("transport_certificate_start") private String transportCertificateStart; /** * 运输证有效期结束时间 */ @TableField("transport_certificate_end") private String transportCertificateEnd; /** * 车辆初次登记时间 */ @TableField("initial_registration_time") private String initialRegistrationTime; /** * 车辆检修状态 */ @TableField("vehicle_maintenance_status") private String vehicleMaintenanceStatus; /** * 车辆年审状态 */ @TableField("annual_review_status") private String annualReviewStatus; /** * 卫星定位装置品牌 */ @TableField("gps_brand") private String gpsBrand; /** * 卫星定位装置型号 */ @TableField("gps_model") private String gpsModel; /** * 卫星定位装置IMEI号 */ @TableField("gps_imei") private String gpsImei; /** * 卫星定位装置安装日期 */ @TableField("gps_installation_date") private String gpsInstallationDate; /** * 运价类型编码 */ @TableField("rate_type_number") private String rateTypeNumber; /** * 运输证字号 */ @TableField("transport_certificate_number") private String transportCertificateNumber; /** * 车辆状态(1=在线,2=异常,3=离线,4=故障) */ @TableField("status") private Integer status; /** * 添加时间 */ @TableField("create_time") private LocalDateTime createTime; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Driver.java
New file @@ -0,0 +1,228 @@ package com.ruoyi.system.api.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; /** * @author zhibing.pu * @Date 2025/3/17 16:12 */ @Data @TableName("t_driver") public class Driver { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 姓名 */ @TableField("name") private String name; /** * 手机号 */ @TableField("phone") private String phone; /** * 所属企业id */ @TableField("enterprise_id") private Integer enterpriseId; /** * 驾驶证号 */ @TableField("driving_license_number") private String drivingLicenseNumber; /** * 通讯地址 */ @TableField("mailing_address") private String mailingAddress; /** * 紧急联系人 */ @TableField("emergency_contact") private String emergencyContact; /** * 紧急联系电话 */ @TableField("emergency_phone") private String emergencyPhone; /** * 紧急联系人通讯地址 */ @TableField("emergency_mailing_address") private String emergencyMailingAddress; /** * 婚姻状况 */ @TableField("marital_status") private String maritalStatus; /** * 性别 */ @TableField("gender") private String gender; /** * 出生日期 */ @TableField("birthday") private String birthday; /** * 国籍 */ @TableField("nation") private String nation; /** * 民族 */ @TableField("nationality") private String nationality; /** * 外语 */ @TableField("foreign_languages") private String foreignLanguages; /** * 学历 */ @TableField("education") private String education; /** * 户籍登记机关 */ @TableField("household_registration_authority") private String householdRegistrationAuthority; /** * 户籍所在地 */ @TableField("domicile") private String domicile; /** * 签约公司 */ @TableField("contracting_company") private String contractingCompany; /** * 驾驶员照片 */ @TableField("avatar_file") private String avatarFile; /** * 驾驶证照片 */ @TableField("driving_licence_file") private String drivingLicenceFile; /** * 准驾车型 */ @TableField("quasi_driving_type") private String quasiDrivingType; /** * 初次领取驾驶证日期 */ @TableField("first_license_date") private String firstLicenseDate; /** * 驾驶证有效开始时间 */ @TableField("driving_licence_start") private String drivingLicenceStart; /** * 驾驶证有效期结束时间 */ @TableField("driving_licence_end") private String drivingLicenceEnd; /** * 是否是巡游出租车 */ @TableField("cruise_taxi") private String cruiseTaxi; /** * 资格证号 */ @TableField("certification") private String certification; /** * 资格证发证日期 */ @TableField("certification_issue_date") private String certificationIssueDate; /** * 初次领取资格证日期 */ @TableField("first_license_certification") private String firstLicenseCertification; /** * 资格证有效期开始时间 */ @TableField("certification_start") private String certificationStart; /** * 资格证有效期结束时间 */ @TableField("certification_end") private String certificationEnd; /** * 资格证发证机构名称 */ @TableField("orgName") private String orgName; /** * 司机平台注册日期 */ @TableField("registration_date") private String registrationDate; /** * 司机是都在黑名单中 */ @TableField("blacklist") private String blacklist; /** * 专职驾驶员 */ @TableField("full_time_driver") private String fullTimeDriver; /** * 营运类型 */ @TableField("operation_type") private String operationType; /** * 合同有效期开始时间 */ @TableField("contract_life_start") private String contractLifeStart; /** * 合同有效期结束时间 */ @TableField("contract_life_end") private String contractLifeEnd; /** * 状态(1=有效,2=无效) */ @TableField("status") private Integer status; /** * 标识(1=新增,2=修改) */ @TableField("flag") private Integer flag; /** * 更新时间 */ @TableField("update_time") private LocalDateTime updateTime; /** * 车牌号 */ @TableField("vehicle_number") private String vehicleNumber; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Enterprise.java
@@ -43,4 +43,54 @@ */ @TableField("ip_whitelist") private String ipWhitelist; /** * 统一社会信用代码 */ @TableField("credit_identifier") private String creditIdentifier; /** * 紧急联系电话 */ @TableField("emergency_number") private String emergencyNumber; /** * 经营范围 */ @TableField("business_scope") private String businessScope; /** * 运营类型 */ @TableField("operation_type") private String operationType; /** * 通讯地址 */ @TableField("mailing_address") private String mailingAddress; /** * 注册资本 */ @TableField("registered_capital") private String registeredCapital; /** * 法人代表 */ @TableField("legal_representative") private String legalRepresentative; /** * 联系人 */ @TableField("contact_person") private String contactPerson; /** * 联系电话 */ @TableField("contact_number") private String contactNumber; /** * 状态(1=有效,2=无效) */ @TableField("status") private Integer status; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/query/GetEnterpriseListReq.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.system.api.query; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author zhibing.pu * @Date 2025/3/17 10:27 */ @Data @ApiModel public class GetEnterpriseListReq extends BasePage { @ApiModelProperty("公司名称") private String name; @ApiModelProperty("经营范围") private String businessScope; @ApiModelProperty("通讯地址") private String mailingAddress; @ApiModelProperty("法人代表") private String legalRepresentative; @ApiModelProperty("车辆运营类型") private String operationType; } ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -1,17 +1,6 @@ package com.ruoyi.auth.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import com.ruoyi.auth.form.LoginBody; import com.ruoyi.auth.form.RegisterBody; import com.ruoyi.auth.service.SysLoginService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.JwtUtils; @@ -19,9 +8,23 @@ import com.ruoyi.common.security.auth.AuthUtil; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.HashMap; import java.util.List; /** * token 控制 @@ -40,9 +43,6 @@ private SysUserClient userClient; @PostMapping("login") public R<?> login(@RequestBody LoginBody form, HttpServletRequest request) { // 用户登录 @@ -50,32 +50,11 @@ HashMap<String, Object> map = new HashMap<>(); map.put("token", tokenService.createToken(userInfo)); List<SysRole> roles = userInfo.getSysUser().getRoles(); if(CollectionUtils.isEmpty(roles)){ return R.fail("请关联角色!"); } map.put("roleName",roles.get(0).getRoleName()); map.put("info", userInfo); // 修改用户最后登录时间 SysUser sysUser = new SysUser(); sysUser.setUserId(userInfo.getSysUser().getUserId()); sysUser.setLoginDate(new Date()); System.out.println("修改用户登录时间" + sysUser); userClient.updateSysUser(sysUser); return R.ok(map); } @PostMapping("loginShop") public R<?> loginShop(@RequestBody LoginBody form, HttpServletRequest request) { // 用户登录 LoginUser userInfo = sysLoginService.loginShop(form.getUsername(), form.getPassword(), request); HashMap<String, Object> map = new HashMap<>(); map.put("token", tokenService.createToken(userInfo)); List<SysRole> roles = userInfo.getSysUser().getRoles(); if(CollectionUtils.isEmpty(roles)){ return R.fail("请关联角色!"); } map.put("roleName",roles.get(0).getRoleName()); if (CollectionUtils.isEmpty(roles)) { return R.fail("请关联角色!"); } map.put("roleName", roles.get(0).getRoleName()); map.put("info", userInfo); // 修改用户最后登录时间 SysUser sysUser = new SysUser(); @@ -111,11 +90,5 @@ return R.ok(); } @PostMapping("register") public R<?> register(@RequestBody RegisterBody registerBody, HttpServletRequest request) { // 用户注册 sysLoginService.register(registerBody.getUsername(), registerBody.getPassword(), request); return R.ok(); } } ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java
@@ -2,50 +2,34 @@ /** * 用户登录对象 * * * @author ruoyi */ public class LoginBody { /** * 用户名 */ private String username; /** * 用户密码 */ private String password; /** * 登录平台类型(1=平台,2=门店) */ private Integer roleType; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getRoleType() { return roleType; } public void setRoleType(Integer roleType) { this.roleType = roleType; } } public class LoginBody { /** * 用户名 */ private String username; /** * 用户密码 */ private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java
@@ -2,26 +2,27 @@ /** * 服务名称 * * * @author ruoyi */ public class ServiceNameConstants { /** * 认证服务的serviceid */ public static final String AUTH_SERVICE = "ruoyi-auth"; /** * 系统模块的serviceid */ public static final String SYSTEM_SERVICE = "ruoyi-system"; /** * 文件服务的serviceid */ public static final String FILE_SERVICE = "ruoyi-file"; public static final String ACCOUNT_SERVICE = "ruoyi-account"; public static final String OTHER_SERVICE = "ruoyi-other"; public static final String ORDER_SERVICE = "ruoyi-order"; public class ServiceNameConstants { /** * 认证服务的serviceid */ public static final String AUTH_SERVICE = "ruoyi-auth"; /** * 系统模块的serviceid */ public static final String SYSTEM_SERVICE = "ruoyi-system"; /** * 文件服务的serviceid */ public static final String FILE_SERVICE = "ruoyi-file"; /** * 数据交互服务的serviceid */ public static final String DATA_INTERCHANGE_SERVICE = "ruoyi-dataInterchange"; } ruoyi-modules/ruoyi-system/pom.xml
@@ -110,6 +110,10 @@ </exclusion> </exclusions> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-dataInterchange</artifactId> </dependency> </dependencies> <build> ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
@@ -1,38 +1,38 @@ package com.ruoyi.system; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.ruoyi.common.security.annotation.EnableCustomConfig; import com.ruoyi.common.security.annotation.EnableRyFeignClients; import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * 系统模块 * * * @author ruoyi */ @EnableCustomConfig @MapperScan({"com.ruoyi.system.mapper"}) @EnableScheduling//开启定时任务 @EnableCustomSwagger2 @EnableRyFeignClients @SpringBootApplication @EnableTransactionManagement public class RuoYiSystemApplication { public static void main(String[] args) { SpringApplication.run(RuoYiSystemApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 系统模块启动成功 ლ(´ڡ`ლ)゙ \n" + " .-------. ____ __ \n" + " | _ _ \\ \\ \\ / / \n" + " | ( ' ) | \\ _. / ' \n" + " |(_ o _) / _( )_ .' \n" + " | (_,_).' __ ___(_ o _)' \n" + " | |\\ \\ | || |(_,_)' \n" + " | | \\ `' /| `-' / \n" + " | | \\ / \\ / \n" + " ''-' `'-' `-..-' "); } public class RuoYiSystemApplication { public static void main(String[] args) { SpringApplication.run(RuoYiSystemApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 系统模块启动成功 ლ(´ڡ`ლ)゙ \n" + " .-------. ____ __ \n" + " | _ _ \\ \\ \\ / / \n" + " | ( ' ) | \\ _. / ' \n" + " |(_ o _) / _( )_ .' \n" + " | (_,_).' __ ___(_ o _)' \n" + " | |\\ \\ | || |(_,_)' \n" + " | | \\ `' /| `-' / \n" + " | | \\ / \\ / \n" + " ''-' `'-' `-..-' "); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.system.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author zhibing.pu * @Date 2025/3/17 11:38 */ @RestController @RequestMapping("/car") public class CarController { } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/EnterpriseController.java
@@ -1,16 +1,17 @@ package com.ruoyi.system.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.system.api.model.Enterprise; import com.ruoyi.system.api.query.GetEnterpriseListReq; import com.ruoyi.system.service.IEnterpriseService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; /** import javax.annotation.Resource; /** * @author zhibing.pu * @Date 2025/3/6 11:01 */ @@ -24,12 +25,29 @@ /** * 获取企业 * * @param username * @return */ @PostMapping("/getEnterprise") public R<Enterprise> getEnterprise(@RequestParam("username") String username){ public R<Enterprise> getEnterprise(@RequestParam("username") String username) { Enterprise username1 = enterpriseService.getOne(new QueryWrapper<Enterprise>().eq("username", username)); return R.ok(username1); } @GetMapping("/getEnterpriseList") @ApiOperation(value = "获取公司列表数据", tags = {"公司管理"}) public R<PageInfo<Enterprise>> getEnterpriseList(GetEnterpriseListReq req) { PageInfo<Enterprise> enterpriseList = enterpriseService.getEnterpriseList(req); return R.ok(enterpriseList); } @GetMapping("/getEnterpriseInfo/{id}") @ApiOperation(value = "获取公司详情", tags = {"公司管理"}) public R<Enterprise> getEnterpriseInfo(@PathVariable("id") Integer id) { Enterprise enterprise = enterpriseService.getById(id); return R.ok(enterprise); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -33,7 +33,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -46,645 +45,641 @@ @RequestMapping("/user") @Api(tags = "用户信息") public class SysUserController extends BaseController { @Resource private ISysUserService userService; @Resource private ISysRoleService roleService; @Resource private ISysDeptService deptService; @Resource private ISysPostService postService; @Resource private ISysPermissionService permissionService; @Resource private ISysConfigService configService; @Resource private ISysUserRoleService userRoleService; @Resource private ISysUserRoleService sysUserRoleService; @Resource private UserShopService userShopService; @Resource private TokenService tokenService; @Autowired private ISysMenuService menuService; /** * 获取用户列表 */ @GetMapping("/list") @ApiOperation(value = "获取系统用户列表", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult list(GetSysUserList getSysUserList) { PageInfo<SysUser> pageInfo = new PageInfo<>(getSysUserList.getPageCurr(), getSysUserList.getPageSize()); PageInfo<SysUser> page = userService.getList(pageInfo, getSysUserList); return AjaxResult.success(page); } /** * 获取用户选择列表 */ @PostMapping("/getChangeUserList") @ApiOperation(value = "获取用户选择列表", tags = {"管理后台-获取用户选择列表", "门店后台-部门管理"}) public AjaxResult<PageInfo<SysUser>> getChangeUserList(@RequestBody ChangeUserQuery query) { return AjaxResult.success(userService.getChangeUserList(query)); } /** * 新增用户 */ @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping("/add") @ApiOperation(value = "添加系统用户", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult add(@RequestBody SysUser user) { user.setUserName(user.getPhonenumber()); Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser1 = userService.getById(userid); if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ user.setNickName(user.getPhonenumber()); } if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("手机号已开通账号"); } if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) { return error("登录账号重复"); } return AjaxResult.success(); } @GetMapping("/verifyUserNameRepeat/{username}") @ApiOperation(value = "校验账号是否重复", tags = {"管理后台-账号管理"}) public AjaxResult verifyUserNameRepeat(@PathVariable String username){ SysUser user = new SysUser(); user.setUserName(username); if (StringUtils.isNotEmpty(username) && !userService.checkUserNameUnique(user)) { return error("账号不可重复"); } return success(); } /** * 根据用户编号获取详细信息 */ @ApiOperation(value = "获取用户详情", tags = {"管理后台-账号管理", "门店后台-部门管理"}) @GetMapping("/getInfo/{userId}") public AjaxResult getInfo(@PathVariable Long userId) { userService.checkUserDataScope(userId); AjaxResult ajax = AjaxResult.success(); List<SysRole> roles = roleService.selectRoleAll(); ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); ajax.put("posts", postService.selectPostAll()); if (StringUtils.isNotNull(userId)) { SysUser sysUser = userService.selectUserById(userId); if(sysUser.getRoleType() == 2){ Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser1 = userService.selectUserById(userid); UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, sysUser.getUserId()).eq(UserShop::getShopId, sysUser1.getObjectId())); sysUser.setDeptId(one.getDeptId()); sysUser.setNickName(one.getNickName()); SysDept sysDept = deptService.selectDeptById(one.getDeptId()); sysUser.setDept(sysDept); sysUser.setRoleId(one.getRoleId()); } ajax.put("data", sysUser); ajax.put("postIds", postService.selectPostListByUserId(userId)); ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); } return AjaxResult.success(ajax); } /** * 修改用户 */ @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/update") @ApiOperation(value = "编辑系统用户", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult edit(@Validated @RequestBody SysUser user) { user.setUserName(user.getPhonenumber()); if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ user.setNickName(user.getPhonenumber()); } R<Integer> admin = this.isAdmin(user.getUserId()); Integer data = admin.getData(); if(data == null || data != 1){ SysUserRole one = sysUserRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, user.getUserId())); one.setRoleId(user.getRoleId()); sysUserRoleService.updateSysUserRole(one); } userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); SysUser sysUser = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getPhonenumber, user.getPhonenumber()) .eq(SysUser::getDelFlag,0) .last("LIMIT 1")); if (StringUtils.isNotEmpty(user.getPhonenumber()) && (Objects.nonNull(sysUser) && !user.getUserId().equals(sysUser.getUserId()) )) { return error("手机号已开通账号"); } sysUser = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getUserName, user.getUserName()) .eq(SysUser::getDelFlag,0) .last("LIMIT 1")); if (StringUtils.isNotEmpty(user.getUserName()) && (Objects.nonNull(sysUser) && !user.getUserId().equals(sysUser.getUserId()) )) { return error("登录账号重复"); } user.setUpdateBy(SecurityUtils.getUsername()); if (user.getPassword() != null && !"".equals(user.getPassword())) { user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setPassword(SecurityUtils.encryptPassword(MD5Generator.generateMD5("a123456"))); user.setPassWordUpdate(new Date()); } if (user.getPhonenumber() != null) { user.setUserName(user.getPhonenumber()); } user.setUpdateBy(SecurityUtils.getUsername()); user.setUpdateTime(new Date()); userService.updateUser(user); user = userService.getById(user.getUserId()); //添加门店员工关系数据 if(2 == user.getRoleType()){ UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, user.getUserId()).eq(UserShop::getShopId, user.getObjectId())); one.setUserId(user.getUserId()); one.setShopId(user.getObjectId()); one.setRoleType(one.getRoleType()); one.setRoleId(user.getRoleId()); one.setDeptId(user.getDeptId()); one.setNickName(user.getNickName()); userShopService.updateById(one); } return success(); } /** * 删除用户 */ @Log(title = "用户管理", businessType = BusinessType.DELETE) @DeleteMapping("/{userIds}") @ApiOperation(value = "删除系统用户", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult remove(@PathVariable Long[] userIds) { if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) { return error("当前用户不能删除"); } userService.deleteUserByIds(userIds); return AjaxResult.success(); } @PostMapping("/shopUserStart") @ApiOperation(value = "账号管理--禁用/启用", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult shopUserStart(@RequestBody ShopUserStart shopUserStart) { if (shopUserStart.getUserId() == null) { return AjaxResult.error("userId不能为空"); } SysUser sysUser = userService.selectUserById(shopUserStart.getUserId()); if (sysUser.getStatus().equals("0")) { sysUser.setStatus("1"); sysUser.setForbiddenRemark(shopUserStart.getRemark()); } else { sysUser.setStatus("0"); sysUser.setForbiddenRemark(""); } return toAjax(userService.updateUser(sysUser)); } @PostMapping("/getUserList") public R<List<SysUser>> getUserList(@RequestBody List<Integer> userIds) { List<SysUser> list = userService.list(new LambdaQueryWrapper<SysUser>().in(SysUser::getUserId, userIds)); return R.ok(list); } @PostMapping("/isAdmin") public R<Integer> isAdmin(@RequestBody Long userId){ SysUserRole one = sysUserRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); Long id =one.getRoleId(); return R.ok(id.intValue()); } @PostMapping("/getSysUser") public R<SysUser> getSysUser(@RequestParam("userId") Long userId) { try { SysUser sysUser = userService.selectUserById(userId); return R.ok(sysUser); } catch (Exception e) { e.printStackTrace(); return R.ok(); } } @PostMapping("/updateSysUser") @Transactional(rollbackFor = Exception.class) public R<Boolean> updateSysUser(@RequestBody SysUser sysUser) { try { sysUser.setUpdateBy(SecurityUtils.getUsername()); sysUser.setUpdateTime(new Date()); userService.updateUser(sysUser); if(null != sysUser.getRoleId()){ userRoleService.deleteSysUserRoleByUserId(sysUser.getUserId()); SysUserRole sysUserRole = new SysUserRole(); sysUserRole.setRoleId(sysUser.getRoleId()); sysUserRole.setUserId(sysUser.getUserId()); userRoleService.insertSysUserRole(sysUserRole); } return R.ok(true); } catch (Exception e) { e.printStackTrace(); return R.fail(); } } /** * 获取当前用户信息 */ @InnerAuth @GetMapping("/info/{username}") public R<LoginUser> info(@PathVariable("username") String username) { SysUser sysUser = userService.selectUserByUserName(username); if (StringUtils.isNull(sysUser)) { return R.fail("用户名或密码错误"); } // 角色集合 Set<String> roles = permissionService.getRolePermission(sysUser); // 权限集合getRolePermission Set<String> permissions = permissionService.getMenuPermission(sysUser); LoginUser sysUserVo = new LoginUser(); sysUserVo.setSysUser(sysUser); sysUserVo.setRoles(roles); sysUserVo.setPermissions(permissions); return R.ok(sysUserVo); } /** * 门店登录使用 * @param username * @return */ @InnerAuth @GetMapping("/infoShop/{username}") public R<LoginUser> infoShop(@PathVariable("username") String username) { SysUser sysUser = userService.selectUserShopByUserName(username); if (StringUtils.isNull(sysUser)) { return R.fail("用户名或密码错误"); } // 角色集合 Set<String> roles = permissionService.getRolePermission(sysUser); // 权限集合getRolePermission Set<String> permissions = permissionService.getMenuPermission(sysUser); LoginUser sysUserVo = new LoginUser(); sysUserVo.setSysUser(sysUser); sysUserVo.setRoles(roles); sysUserVo.setPermissions(permissions); return R.ok(sysUserVo); } /** * 注册用户信息 */ @PostMapping("/register") public R<Boolean> register(@RequestBody SysUser sysUser) { String username = sysUser.getUserName(); if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { return R.fail("当前系统没有开启注册功能!"); } if (!userService.checkUserNameUnique(sysUser)) { return R.fail("保存用户'" + username + "'失败,注册账号已存在"); } return R.ok(userService.registerUser(sysUser)); } /** * 获取用户信息 * * @return 用户信息 */ @GetMapping("/getInfo") public AjaxResult getInfo() { SysUser user = userService.selectUserById(SecurityUtils.getUserId()); // 角色集合 Set<String> roles = permissionService.getRolePermission(user); // 权限集合 Set<String> permissions = permissionService.getMenuPermission(user); AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); return ajax; } /** * 重置密码 */ @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/resetPwd") @ApiOperation(value = "重置密码", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult resetPwd(@RequestBody SysUser user) { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); user.setPassword(SecurityUtils.encryptPassword(MD5Generator.generateMD5("a123456"))); user.setUpdateBy(SecurityUtils.getUsername()); return toAjax(userService.resetPwd(user)); } /** * 状态修改 */ @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysUser user) { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); user.setUpdateBy(SecurityUtils.getUsername()); return toAjax(userService.updateUserStatus(user)); } /** * 根据用户编号获取授权角色 */ @GetMapping("/authRole/{userId}") public AjaxResult authRole(@PathVariable("userId") Long userId) { AjaxResult ajax = AjaxResult.success(); SysUser user = userService.selectUserById(userId); List<SysRole> roles = roleService.selectRolesByUserId(userId); ajax.put("user", user); ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); return ajax; } /** * 用户授权角色 */ @Log(title = "用户管理", businessType = BusinessType.GRANT) @PutMapping("/authRole") public AjaxResult insertAuthRole(Long userId, Long[] roleIds) { userService.checkUserDataScope(userId); userService.insertUserAuth(userId, roleIds); return success(); } /** * 获取部门树列表 */ @GetMapping("/deptTree") public AjaxResult deptTree(SysDept dept) { return success(deptService.selectDeptTreeList(dept)); } @PostMapping("/updateUser") public R<Boolean> updateUser(@RequestBody SysUser sysUser){ return R.ok(userService.updateById(sysUser)); } /** * 通过用户id查询角色对象 * @param userId * @return */ @PostMapping("/queryRoleByUserId/{userId}") public R<SysRole> queryRoleByUserId(@PathVariable("userId") Long userId){ SysUserRole one = sysUserRoleService.getOne(Wrappers.lambdaQuery(SysUserRole.class) .eq(SysUserRole::getUserId, userId) .last("LIMIT 1")); System.out.println("通过用户id查询角色对象"+one); if(Objects.nonNull(one)){ SysRole byId = roleService.getOne(Wrappers.lambdaQuery(SysRole.class) .eq(SysRole::getRoleId,one.getRoleId()) .last("LIMIT 1")); return R.ok(byId); } return R.ok(); } @PostMapping("/queryRoleByRoleId/{roleId}") public R<SysRole> queryRoleByRoleId(@PathVariable("roleId") Long roleId){ return R.ok( roleService.getOne(Wrappers.lambdaQuery(SysRole.class) .eq(SysRole::getRoleId, roleId) .last("LIMIT 1"))); } /** * 通过手机号集合查询用户 * @param phoneList * @return */ @PostMapping("/queryUserByPhoneList") public R<List<SysUser>> queryUserByPhoneList(@RequestBody List<String> phoneList){ List<SysUser> list = userService.list(Wrappers.lambdaQuery(SysUser.class) .in(SysUser::getPhonenumber, phoneList) .ne(SysUser::getDelFlag,2)); return R.ok(list); } /** * 通过手机号查询用户 * @param phone * @return */ @PostMapping("/queryUserByPhone") public R<SysUser> queryUserByPhone(@RequestBody String phone){ SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getPhonenumber, phone) .last("LIMIT 1")); return R.ok(user); } /** * 通过账号查询用户 * @param userName * @return */ @ResponseBody @PostMapping("/queryUserByUserName") public R<SysUser> queryUserByUserName(@RequestBody String userName){ SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getUserName, userName) .eq(SysUser::getDelFlag, "0") .eq(SysUser::getStatus, 0) .last("LIMIT 1")); return R.ok(user); } /** * 添加管理员 * @param user */ @ResponseBody @PostMapping("/addSysUser") @Transactional(rollbackFor = Exception.class) public R<Long> addSysUser(@RequestBody SysUser user) { if(StringUtils.isEmpty(user.getUserName())){ user.setUserName(user.getPhonenumber()); } if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ user.setNickName(user.getPhonenumber()); } @Resource private ISysUserService userService; @Resource private ISysRoleService roleService; @Resource private ISysDeptService deptService; @Resource private ISysPostService postService; @Resource private ISysPermissionService permissionService; @Resource private ISysConfigService configService; @Resource private ISysUserRoleService userRoleService; @Resource private ISysUserRoleService sysUserRoleService; @Resource private UserShopService userShopService; @Resource private TokenService tokenService; @Autowired private ISysMenuService menuService; /** * 获取用户列表 */ @GetMapping("/list") @ApiOperation(value = "获取系统用户列表", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult list(GetSysUserList getSysUserList) { PageInfo<SysUser> pageInfo = new PageInfo<>(getSysUserList.getPageCurr(), getSysUserList.getPageSize()); PageInfo<SysUser> page = userService.getList(pageInfo, getSysUserList); return AjaxResult.success(page); } /** * 获取用户选择列表 */ @PostMapping("/getChangeUserList") @ApiOperation(value = "获取用户选择列表", tags = {"管理后台-获取用户选择列表", "门店后台-部门管理"}) public AjaxResult<PageInfo<SysUser>> getChangeUserList(@RequestBody ChangeUserQuery query) { return AjaxResult.success(userService.getChangeUserList(query)); } /** * 新增用户 */ @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping("/add") @ApiOperation(value = "添加系统用户", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult add(@RequestBody SysUser user) { user.setUserName(user.getPhonenumber()); Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser1 = userService.getById(userid); if (!org.springframework.util.StringUtils.hasLength(user.getNickName())) { user.setNickName(user.getPhonenumber()); } if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("手机号已开通账号"); } if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) { return error("登录账号重复"); } return AjaxResult.success(); } @GetMapping("/verifyUserNameRepeat/{username}") @ApiOperation(value = "校验账号是否重复", tags = {"管理后台-账号管理"}) public AjaxResult verifyUserNameRepeat(@PathVariable String username) { SysUser user = new SysUser(); user.setUserName(username); if (StringUtils.isNotEmpty(username) && !userService.checkUserNameUnique(user)) { return error("账号不可重复"); } return success(); } /** * 根据用户编号获取详细信息 */ @ApiOperation(value = "获取用户详情", tags = {"管理后台-账号管理", "门店后台-部门管理"}) @GetMapping("/getInfo/{userId}") public AjaxResult getInfo(@PathVariable Long userId) { userService.checkUserDataScope(userId); AjaxResult ajax = AjaxResult.success(); List<SysRole> roles = roleService.selectRoleAll(); ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); ajax.put("posts", postService.selectPostAll()); if (StringUtils.isNotNull(userId)) { SysUser sysUser = userService.selectUserById(userId); if (sysUser.getRoleType() == 2) { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser1 = userService.selectUserById(userid); UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, sysUser.getUserId()).eq(UserShop::getShopId, sysUser1.getObjectId())); sysUser.setDeptId(one.getDeptId()); sysUser.setNickName(one.getNickName()); SysDept sysDept = deptService.selectDeptById(one.getDeptId()); sysUser.setDept(sysDept); sysUser.setRoleId(one.getRoleId()); } ajax.put("data", sysUser); ajax.put("postIds", postService.selectPostListByUserId(userId)); ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); } return AjaxResult.success(ajax); } /** * 修改用户 */ @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/update") @ApiOperation(value = "编辑系统用户", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult edit(@Validated @RequestBody SysUser user) { user.setUserName(user.getPhonenumber()); if (!org.springframework.util.StringUtils.hasLength(user.getNickName())) { user.setNickName(user.getPhonenumber()); } R<Integer> admin = this.isAdmin(user.getUserId()); Integer data = admin.getData(); if (data == null || data != 1) { SysUserRole one = sysUserRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, user.getUserId())); one.setRoleId(user.getRoleId()); sysUserRoleService.updateSysUserRole(one); } userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); SysUser sysUser = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getPhonenumber, user.getPhonenumber()) .eq(SysUser::getDelFlag, 0) .last("LIMIT 1")); if (StringUtils.isNotEmpty(user.getPhonenumber()) && (Objects.nonNull(sysUser) && !user.getUserId().equals(sysUser.getUserId()))) { return error("手机号已开通账号"); } sysUser = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getUserName, user.getUserName()) .eq(SysUser::getDelFlag, 0) .last("LIMIT 1")); if (StringUtils.isNotEmpty(user.getUserName()) && (Objects.nonNull(sysUser) && !user.getUserId().equals(sysUser.getUserId()))) { return error("登录账号重复"); } user.setUpdateBy(SecurityUtils.getUsername()); if (user.getPassword() != null && !"".equals(user.getPassword())) { user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setPassword(SecurityUtils.encryptPassword(MD5Generator.generateMD5("a123456"))); user.setPassWordUpdate(new Date()); } if (user.getPhonenumber() != null) { user.setUserName(user.getPhonenumber()); } user.setUpdateBy(SecurityUtils.getUsername()); user.setUpdateTime(new Date()); userService.updateUser(user); user = userService.getById(user.getUserId()); //添加门店员工关系数据 if (2 == user.getRoleType()) { UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, user.getUserId()).eq(UserShop::getShopId, user.getObjectId())); one.setUserId(user.getUserId()); one.setShopId(user.getObjectId()); one.setRoleType(one.getRoleType()); one.setRoleId(user.getRoleId()); one.setDeptId(user.getDeptId()); one.setNickName(user.getNickName()); userShopService.updateById(one); } return success(); } /** * 删除用户 */ @Log(title = "用户管理", businessType = BusinessType.DELETE) @DeleteMapping("/{userIds}") @ApiOperation(value = "删除系统用户", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult remove(@PathVariable Long[] userIds) { if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) { return error("当前用户不能删除"); } userService.deleteUserByIds(userIds); return AjaxResult.success(); } @PostMapping("/shopUserStart") @ApiOperation(value = "账号管理--禁用/启用", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult shopUserStart(@RequestBody ShopUserStart shopUserStart) { if (shopUserStart.getUserId() == null) { return AjaxResult.error("userId不能为空"); } SysUser sysUser = userService.selectUserById(shopUserStart.getUserId()); if (sysUser.getStatus().equals("0")) { sysUser.setStatus("1"); sysUser.setForbiddenRemark(shopUserStart.getRemark()); } else { sysUser.setStatus("0"); sysUser.setForbiddenRemark(""); } return toAjax(userService.updateUser(sysUser)); } @PostMapping("/getUserList") public R<List<SysUser>> getUserList(@RequestBody List<Integer> userIds) { List<SysUser> list = userService.list(new LambdaQueryWrapper<SysUser>().in(SysUser::getUserId, userIds)); return R.ok(list); } @PostMapping("/isAdmin") public R<Integer> isAdmin(@RequestBody Long userId) { SysUserRole one = sysUserRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); Long id = one.getRoleId(); return R.ok(id.intValue()); } @PostMapping("/getSysUser") public R<SysUser> getSysUser(@RequestParam("userId") Long userId) { try { SysUser sysUser = userService.selectUserById(userId); return R.ok(sysUser); } catch (Exception e) { e.printStackTrace(); return R.ok(); } } @PostMapping("/updateSysUser") @Transactional(rollbackFor = Exception.class) public R<Boolean> updateSysUser(@RequestBody SysUser sysUser) { try { sysUser.setUpdateBy(SecurityUtils.getUsername()); sysUser.setUpdateTime(new Date()); userService.updateUser(sysUser); if (null != sysUser.getRoleId()) { userRoleService.deleteSysUserRoleByUserId(sysUser.getUserId()); SysUserRole sysUserRole = new SysUserRole(); sysUserRole.setRoleId(sysUser.getRoleId()); sysUserRole.setUserId(sysUser.getUserId()); userRoleService.insertSysUserRole(sysUserRole); } return R.ok(true); } catch (Exception e) { e.printStackTrace(); return R.fail(); } } /** * 获取当前用户信息 */ @InnerAuth @GetMapping("/info/{username}") public R<LoginUser> info(@PathVariable("username") String username) { SysUser sysUser = userService.selectUserByUserName(username); if (StringUtils.isNull(sysUser)) { return R.fail("用户名或密码错误"); } // 角色集合 Set<String> roles = permissionService.getRolePermission(sysUser); // 权限集合getRolePermission Set<String> permissions = permissionService.getMenuPermission(sysUser); LoginUser sysUserVo = new LoginUser(); sysUserVo.setSysUser(sysUser); sysUserVo.setRoles(roles); sysUserVo.setPermissions(permissions); return R.ok(sysUserVo); } /** * 门店登录使用 * * @param username * @return */ @InnerAuth @GetMapping("/infoShop/{username}") public R<LoginUser> infoShop(@PathVariable("username") String username) { SysUser sysUser = userService.selectUserShopByUserName(username); if (StringUtils.isNull(sysUser)) { return R.fail("用户名或密码错误"); } // 角色集合 Set<String> roles = permissionService.getRolePermission(sysUser); // 权限集合getRolePermission Set<String> permissions = permissionService.getMenuPermission(sysUser); LoginUser sysUserVo = new LoginUser(); sysUserVo.setSysUser(sysUser); sysUserVo.setRoles(roles); sysUserVo.setPermissions(permissions); return R.ok(sysUserVo); } /** * 注册用户信息 */ @PostMapping("/register") public R<Boolean> register(@RequestBody SysUser sysUser) { String username = sysUser.getUserName(); if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { return R.fail("当前系统没有开启注册功能!"); } if (!userService.checkUserNameUnique(sysUser)) { return R.fail("保存用户'" + username + "'失败,注册账号已存在"); } return R.ok(userService.registerUser(sysUser)); } /** * 获取用户信息 * * @return 用户信息 */ @GetMapping("/getInfo") public AjaxResult getInfo() { SysUser user = userService.selectUserById(SecurityUtils.getUserId()); // 角色集合 Set<String> roles = permissionService.getRolePermission(user); // 权限集合 Set<String> permissions = permissionService.getMenuPermission(user); AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); return ajax; } /** * 重置密码 */ @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/resetPwd") @ApiOperation(value = "重置密码", tags = {"管理后台-账号管理", "门店后台-部门管理"}) public AjaxResult resetPwd(@RequestBody SysUser user) { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); user.setPassword(SecurityUtils.encryptPassword(MD5Generator.generateMD5("a123456"))); user.setUpdateBy(SecurityUtils.getUsername()); return toAjax(userService.resetPwd(user)); } /** * 状态修改 */ @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysUser user) { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); user.setUpdateBy(SecurityUtils.getUsername()); return toAjax(userService.updateUserStatus(user)); } /** * 根据用户编号获取授权角色 */ @GetMapping("/authRole/{userId}") public AjaxResult authRole(@PathVariable("userId") Long userId) { AjaxResult ajax = AjaxResult.success(); SysUser user = userService.selectUserById(userId); List<SysRole> roles = roleService.selectRolesByUserId(userId); ajax.put("user", user); ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); return ajax; } /** * 用户授权角色 */ @Log(title = "用户管理", businessType = BusinessType.GRANT) @PutMapping("/authRole") public AjaxResult insertAuthRole(Long userId, Long[] roleIds) { userService.checkUserDataScope(userId); userService.insertUserAuth(userId, roleIds); return success(); } /** * 获取部门树列表 */ @GetMapping("/deptTree") public AjaxResult deptTree(SysDept dept) { return success(deptService.selectDeptTreeList(dept)); } @PostMapping("/updateUser") public R<Boolean> updateUser(@RequestBody SysUser sysUser) { return R.ok(userService.updateById(sysUser)); } /** * 通过用户id查询角色对象 * * @param userId * @return */ @PostMapping("/queryRoleByUserId/{userId}") public R<SysRole> queryRoleByUserId(@PathVariable("userId") Long userId) { SysUserRole one = sysUserRoleService.getOne(Wrappers.lambdaQuery(SysUserRole.class) .eq(SysUserRole::getUserId, userId) .last("LIMIT 1")); System.out.println("通过用户id查询角色对象" + one); if (Objects.nonNull(one)) { SysRole byId = roleService.getOne(Wrappers.lambdaQuery(SysRole.class) .eq(SysRole::getRoleId, one.getRoleId()) .last("LIMIT 1")); return R.ok(byId); } return R.ok(); } @PostMapping("/queryRoleByRoleId/{roleId}") public R<SysRole> queryRoleByRoleId(@PathVariable("roleId") Long roleId) { return R.ok(roleService.getOne(Wrappers.lambdaQuery(SysRole.class) .eq(SysRole::getRoleId, roleId) .last("LIMIT 1"))); } /** * 通过手机号集合查询用户 * * @param phoneList * @return */ @PostMapping("/queryUserByPhoneList") public R<List<SysUser>> queryUserByPhoneList(@RequestBody List<String> phoneList) { List<SysUser> list = userService.list(Wrappers.lambdaQuery(SysUser.class) .in(SysUser::getPhonenumber, phoneList) .ne(SysUser::getDelFlag, 2)); return R.ok(list); } /** * 通过手机号查询用户 * * @param phone * @return */ @PostMapping("/queryUserByPhone") public R<SysUser> queryUserByPhone(@RequestBody String phone) { SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getPhonenumber, phone) .last("LIMIT 1")); return R.ok(user); } /** * 通过账号查询用户 * * @param userName * @return */ @ResponseBody @PostMapping("/queryUserByUserName") public R<SysUser> queryUserByUserName(@RequestBody String userName) { SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getUserName, userName) .eq(SysUser::getDelFlag, "0") .eq(SysUser::getStatus, 0) .last("LIMIT 1")); return R.ok(user); } /** * 添加管理员 * * @param user */ @ResponseBody @PostMapping("/addSysUser") @Transactional(rollbackFor = Exception.class) public R<Long> addSysUser(@RequestBody SysUser user) { if (StringUtils.isEmpty(user.getUserName())) { user.setUserName(user.getPhonenumber()); } if (!org.springframework.util.StringUtils.hasLength(user.getNickName())) { user.setNickName(user.getPhonenumber()); } // if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { // throw new RuntimeException("手机号已开通账号"); // } if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) { throw new RuntimeException("登录账号已存在"); } user.setCreateBy(SecurityUtils.getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); if(null == user.getRoleType()){ user.setRoleType(1); } userService.insertUser(user); SysUserRole sysUserRole = new SysUserRole(); sysUserRole.setRoleId(user.getRoleId()); sysUserRole.setUserId(user.getUserId()); userRoleService.insertSysUserRole(sysUserRole); return R.ok(user.getUserId()); } @ResponseBody @PostMapping("/resetPassword") public R resetPassword(@RequestBody SysUser user) { user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setUpdateBy(SecurityUtils.getUsername()); userService.resetPwd(user); return R.ok(); } @ResponseBody @PostMapping("/getSysUserById") public SysUser getSysUserById(@RequestParam("userId") Long userId){ return userService.getById(userId); } /** * 保存门店员工管理后台账号 * @param user * @return */ @ResponseBody @PostMapping("/saveShopUser") public R<Long> saveShopUser(@RequestBody SysUser user){ SysUser one = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhonenumber, user.getPhonenumber()).eq(SysUser::getDelFlag, "0") .eq(SysUser::getStatus, "0").eq(SysUser::getRoleType, 2)); if(null == one){ user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); userService.save(user); //添加用户角色数据 SysUserRole userRole = new SysUserRole(); userRole.setUserId(user.getUserId()); userRole.setRoleId(2L); userRoleService.save(userRole); } return R.ok(user.getUserId()); } /** * 删除门店管理员账号 * @param objectId * @param roleType * @return */ @PostMapping("/user/delShopUser") public R delShopUser(@RequestParam("objectId") Integer objectId, @RequestParam("roleType") Integer roleType){ List<UserShop> list2 = userShopService.list(new LambdaQueryWrapper<UserShop>().eq(UserShop::getShopId, objectId)); for (UserShop userShop : list2) { List<UserShop> list1 = userShopService.list(new LambdaUpdateWrapper<UserShop>().eq(UserShop::getUserId, userShop.getUserId())); if(list1.size() == 1 && list1.get(0).getShopId().equals(objectId)){ //删除管理员账号 userService.deleteUserById(userShop.getUserId()); }else{ //修改管理后台账号关联的门店数据 SysUser sysUser = userService.getById(userShop.getUserId()); if(sysUser.getObjectId().equals(objectId)){ Optional<UserShop> first = list1.stream().filter(s -> !s.getShopId().equals(objectId)).findFirst(); if(first.isPresent()){ sysUser.setObjectId(first.get().getShopId()); userService.updateById(sysUser); } } } userShopService.removeById(userShop.getId()); } return R.ok(); } @ResponseBody @PutMapping("/switchShop/{shopId}") @ApiOperation(value = "切换门店", tags = {"门店后台-首页"}) public R<Set<String>> switchShop(@PathVariable("shopId") Integer shopId){ Long userid = tokenService.getLoginUser().getUserid(); UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, userid).eq(UserShop::getShopId, shopId)); if(null == one){ return R.fail("切换失败"); } SysUser sysUser = userService.getById(userid); sysUser.setObjectId(shopId); userService.updateById(sysUser); //查询用户权限列表 Long roleId = one.getRoleId(); Set<String> rolePerms = menuService.selectMenuPermsByRoleId(roleId); return R.ok(rolePerms); } /** * 通过账号和账号权限查询用户 * @param userName * @return */ @PostMapping("/queryUserByUserNameAndRoleType") public R<SysUser> queryUserByUserNameAndRoleType(@RequestParam("userName") String userName, @RequestParam("roleType") Integer roleType){ SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getUserName, userName) .eq(SysUser::getDelFlag, "0") .eq(SysUser::getStatus, 0) .eq(SysUser::getRoleType, roleType) .last("LIMIT 1")); return R.ok(user); } @PostMapping("/delSysUserById") public R delSysUserById(@RequestParam("userId") Long userId){ userService.deleteUserById(userId); return R.ok(); } if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) { throw new RuntimeException("登录账号已存在"); } user.setCreateBy(SecurityUtils.getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); if (null == user.getRoleType()) { user.setRoleType(1); } userService.insertUser(user); SysUserRole sysUserRole = new SysUserRole(); sysUserRole.setRoleId(user.getRoleId()); sysUserRole.setUserId(user.getUserId()); userRoleService.insertSysUserRole(sysUserRole); return R.ok(user.getUserId()); } @ResponseBody @PostMapping("/resetPassword") public R resetPassword(@RequestBody SysUser user) { user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setUpdateBy(SecurityUtils.getUsername()); userService.resetPwd(user); return R.ok(); } @ResponseBody @PostMapping("/getSysUserById") public SysUser getSysUserById(@RequestParam("userId") Long userId) { return userService.getById(userId); } /** * 保存门店员工管理后台账号 * * @param user * @return */ @ResponseBody @PostMapping("/saveShopUser") public R<Long> saveShopUser(@RequestBody SysUser user) { SysUser one = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhonenumber, user.getPhonenumber()).eq(SysUser::getDelFlag, "0") .eq(SysUser::getStatus, "0").eq(SysUser::getRoleType, 2)); if (null == one) { user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); userService.save(user); //添加用户角色数据 SysUserRole userRole = new SysUserRole(); userRole.setUserId(user.getUserId()); userRole.setRoleId(2L); userRoleService.save(userRole); } return R.ok(user.getUserId()); } /** * 删除门店管理员账号 * * @param objectId * @param roleType * @return */ @PostMapping("/user/delShopUser") public R delShopUser(@RequestParam("objectId") Integer objectId, @RequestParam("roleType") Integer roleType) { List<UserShop> list2 = userShopService.list(new LambdaQueryWrapper<UserShop>().eq(UserShop::getShopId, objectId)); for (UserShop userShop : list2) { List<UserShop> list1 = userShopService.list(new LambdaUpdateWrapper<UserShop>().eq(UserShop::getUserId, userShop.getUserId())); if (list1.size() == 1 && list1.get(0).getShopId().equals(objectId)) { //删除管理员账号 userService.deleteUserById(userShop.getUserId()); } else { //修改管理后台账号关联的门店数据 SysUser sysUser = userService.getById(userShop.getUserId()); if (sysUser.getObjectId().equals(objectId)) { Optional<UserShop> first = list1.stream().filter(s -> !s.getShopId().equals(objectId)).findFirst(); if (first.isPresent()) { sysUser.setObjectId(first.get().getShopId()); userService.updateById(sysUser); } } } userShopService.removeById(userShop.getId()); } return R.ok(); } @ResponseBody @PutMapping("/switchShop/{shopId}") @ApiOperation(value = "切换门店", tags = {"门店后台-首页"}) public R<Set<String>> switchShop(@PathVariable("shopId") Integer shopId) { Long userid = tokenService.getLoginUser().getUserid(); UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, userid).eq(UserShop::getShopId, shopId)); if (null == one) { return R.fail("切换失败"); } SysUser sysUser = userService.getById(userid); sysUser.setObjectId(shopId); userService.updateById(sysUser); //查询用户权限列表 Long roleId = one.getRoleId(); Set<String> rolePerms = menuService.selectMenuPermsByRoleId(roleId); return R.ok(rolePerms); } /** * 通过账号和账号权限查询用户 * * @param userName * @return */ @PostMapping("/queryUserByUserNameAndRoleType") public R<SysUser> queryUserByUserNameAndRoleType(@RequestParam("userName") String userName, @RequestParam("roleType") Integer roleType) { SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class) .eq(SysUser::getUserName, userName) .eq(SysUser::getDelFlag, "0") .eq(SysUser::getStatus, 0) .eq(SysUser::getRoleType, roleType) .last("LIMIT 1")); return R.ok(user); } @PostMapping("/delSysUserById") public R delSysUserById(@RequestParam("userId") Long userId) { userService.deleteUserById(userId); return R.ok(); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/CarMapper.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.api.model.Car; /** * @author zhibing.pu * @Date 2025/3/17 11:37 */ public interface CarMapper extends BaseMapper<Car> { } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DriverMapper.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.api.model.Driver; /** * @author zhibing.pu * @Date 2025/3/17 16:25 */ public interface DriverMapper extends BaseMapper<Driver> { } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/EnterpriseMapper.java
@@ -1,11 +1,24 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.system.api.model.Enterprise; import com.ruoyi.system.api.query.GetEnterpriseListReq; import org.apache.ibatis.annotations.Param; /** * @author zhibing.pu * @Date 2025/3/4 18:30 */ public interface EnterpriseMapper extends BaseMapper<Enterprise> { /** * 获取企业列表数据 * * @param page * @param req * @return */ PageInfo<Enterprise> getEnterpriseList(PageInfo<Enterprise> page, @Param("req") GetEnterpriseListReq req); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICarService.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.api.model.Car; /** * @author zhibing.pu * @Date 2025/3/17 11:38 */ public interface ICarService extends IService<Car> { /** * 定时任务存储最新的车辆数据 */ void taskSaveNewCar(); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IDriverService.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.api.model.Driver; /** * @author zhibing.pu * @Date 2025/3/17 16:26 */ public interface IDriverService extends IService<Driver> { /** * 定时任务获取新驾驶员数据 */ void taskSaveNewDriver(); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IEnterpriseService.java
@@ -1,11 +1,22 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.system.api.model.Enterprise; import com.ruoyi.system.api.query.GetEnterpriseListReq; /** * @author zhibing.pu * @Date 2025/3/4 18:32 */ public interface IEnterpriseService extends IService<Enterprise> { /** * 获取公司列表数据 * * @param req * @return */ PageInfo<Enterprise> getEnterpriseList(GetEnterpriseListReq req); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java
New file @@ -0,0 +1,68 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRegisterClient; import com.ruoyi.dataInterchange.api.model.enums.VehicleColorEnum; import com.ruoyi.dataInterchange.api.vo.UPExgMsgRegisterVo; import com.ruoyi.system.api.model.Car; import com.ruoyi.system.api.model.Driver; import com.ruoyi.system.api.model.Enterprise; import com.ruoyi.system.mapper.CarMapper; import com.ruoyi.system.service.ICarService; import com.ruoyi.system.service.IDriverService; import com.ruoyi.system.service.IEnterpriseService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 11:38 */ @Service public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarService { @Resource private UPExgMsgRegisterClient upExgMsgRegisterClient; @Resource private IEnterpriseService enterpriseService; @Resource private IDriverService driverService; /** * 定时任务存储最新的车辆数据 */ @Override public void taskSaveNewCar() { Car car = this.getOne(new LambdaQueryWrapper<Car>().orderByDesc(Car::getCreateTime).last(" limit 0, 1")); Long startTime = -1L; if (null != car) { startTime = car.getCreateTime().toEpochSecond(ZoneOffset.ofHours(8)); } List<UPExgMsgRegisterVo> list = upExgMsgRegisterClient.getUPExgMsgRegisterListIsAfterCreateTime(startTime).getData(); List<Enterprise> list1 = enterpriseService.list(); List<Car> carList = new ArrayList<>(); for (UPExgMsgRegisterVo vo : list) { car = new Car(); car.setVehicleNumber(vo.getVehicleNo()); car.setLicensePlateColor(VehicleColorEnum.getName(vo.getVehicleColor())); Enterprise enterprise = list1.stream().filter(s -> s.getCode().equals(vo.getInferiorPlatformId().toString())).findFirst().get(); car.setEnterpriseId(enterprise.getId()); Driver driver = driverService.getOne(new LambdaQueryWrapper<Driver>().eq(Driver::getVehicleNumber, vo.getVehicleNo()).eq(Driver::getStatus, 1)); if (null != driver) { car.setDriverId(driver.getId()); } car.setGpsModel(vo.getTerminalModelType()); car.setGpsImei(vo.getTerminalSIMCode()); carList.add(car); } this.saveBatch(carList); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DriverServiceImpl.java
New file @@ -0,0 +1,66 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgReportDriverInfoClient; import com.ruoyi.dataInterchange.api.vo.UPExgMsgReportDriverInfoVo; import com.ruoyi.system.api.model.Driver; import com.ruoyi.system.api.model.Enterprise; import com.ruoyi.system.mapper.DriverMapper; import com.ruoyi.system.service.IDriverService; import com.ruoyi.system.service.IEnterpriseService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 16:26 */ @Service public class DriverServiceImpl extends ServiceImpl<DriverMapper, Driver> implements IDriverService { @Resource private UPExgMsgReportDriverInfoClient upExgMsgReportDriverInfoClient; @Resource private IDriverService driverService; @Resource private IEnterpriseService enterpriseService; /** * 定时任务获取新驾驶员数据 */ @Override public void taskSaveNewDriver() { Driver driver = driverService.getOne(new LambdaQueryWrapper<Driver>().eq(Driver::getStatus, 1).orderByDesc(Driver::getUpdateTime).last(" limit 0, 1")); Long createTime = -1L; if (null != driver) { createTime = driver.getUpdateTime().toEpochSecond(ZoneOffset.ofHours(8)); } List<UPExgMsgReportDriverInfoVo> list = upExgMsgReportDriverInfoClient.getUPExgMsgReportDriverInfoListIsAfterCreateTime(createTime).getData(); List<Enterprise> list1 = enterpriseService.list(); List<Driver> driverList = new ArrayList<>(); for (UPExgMsgReportDriverInfoVo vo : list) { driver = new Driver(); driver.setName(vo.getDriverName()); driver.setDrivingLicenseNumber(vo.getDriverId()); driver.setCertification(vo.getLicence()); driver.setOrgName(vo.getOrgName()); Enterprise enterprise = list1.stream().filter(s -> s.getCode().equals(vo.getInferiorPlatformId().toString())).findFirst().get(); driver.setEnterpriseId(enterprise.getId()); driver.setContractingCompany(enterprise.getName()); driver.setStatus(1); driver.setFlag(1); driver.setUpdateTime(LocalDateTime.now()); driverList.add(driver); } this.saveBatch(driverList); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EnterpriseServiceImpl.java
@@ -1,7 +1,9 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.system.api.model.Enterprise; import com.ruoyi.system.api.query.GetEnterpriseListReq; import com.ruoyi.system.mapper.EnterpriseMapper; import com.ruoyi.system.service.IEnterpriseService; import org.springframework.stereotype.Service; @@ -12,4 +14,17 @@ */ @Service public class EnterpriseServiceImpl extends ServiceImpl<EnterpriseMapper, Enterprise> implements IEnterpriseService { /** * 获取公司列表数据 * * @param req * @return */ @Override public PageInfo<Enterprise> getEnterpriseList(GetEnterpriseListReq req) { PageInfo<Enterprise> page = new PageInfo<>(req.getPageCurr(), req.getPageSize()); return this.baseMapper.getEnterpriseList(page, req); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java
New file @@ -0,0 +1,40 @@ package com.ruoyi.system.util; import com.ruoyi.system.service.ICarService; import com.ruoyi.system.service.IDriverService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @author zhibing.pu * @Date 2025/3/17 11:01 */ @Component public class TaskUtil { @Resource private ICarService carService; @Resource private IDriverService driverService; /** * 定时任务获取新车辆数据 */ @Scheduled(fixedRate = 1000 * 60) public void taskSaveNewCar() { carService.taskSaveNewCar(); } /** * 定时任务获取新驾驶员数据 */ @Scheduled(fixedRate = 1000 * 60) public void taskSaveNewDriver() { driverService.taskSaveNewDriver(); } } ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/EnterpriseMapper.xml
@@ -1,6 +1,27 @@ <?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.ruoyi.system.mapper.EnterpriseMapper"> <select id="getEnterpriseList" resultType="com.ruoyi.system.api.model.Enterprise"> select * from t_enterprise <where> <if test="null != req.name and '' != req.name"> and `name` like CONCAT('%', #{req.name}, '%') </if> <if test="null != req.businessScope and '' != req.businessScope"> and business_scope like CONCAT('%', #{req.businessScope}, '%') </if> <if test="null != req.mailingAddress and '' != req.mailingAddress"> and mailing_address like CONCAT('%', #{req.mailingAddress}, '%') </if> <if test="null != req.legalRepresentative and '' != req.legalRepresentative"> and legal_representative like CONCAT('%', #{req.legalRepresentative}, '%') </if> <if test="null != req.operationType and '' != req.operationType"> and operation_type like CONCAT('%', #{req.operationType}, '%') </if> </where> </select> </mapper> ruoyi-service/pom.xml
@@ -1,50 +1,49 @@ <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.6.2</version> </parent> <modelVersion>4.0.0</modelVersion> <modules> <module>ruoyi-dataInterchange</module> </modules> <artifactId>ruoyi-service</artifactId> <packaging>pom</packaging> <description> ruoyi-service </description> <dependencies> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--hutool-all--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.1.2</version> <exclusions> <exclusion> <artifactId>guava</artifactId> <groupId>com.google.guava</groupId> </exclusion> </exclusions> </dependency> </dependencies> <parent> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.6.2</version> </parent> <modelVersion>4.0.0</modelVersion> <modules> <module>ruoyi-dataInterchange</module> </modules> <artifactId>ruoyi-service</artifactId> <packaging>pom</packaging> <description> ruoyi-service </description> <dependencies> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--hutool-all--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.1.2</version> <exclusions> <exclusion> <artifactId>guava</artifactId> <groupId>com.google.guava</groupId> </exclusion> </exclusions> </dependency> </dependencies> </project> ruoyi-service/ruoyi-dataInterchange/pom.xml
@@ -114,6 +114,10 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-dataInterchange</artifactId> </dependency> </dependencies> <build> ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/RuoYiDataInterchangeApplication.java
@@ -10,7 +10,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; /** * 账户模块 * 数据交互模块 * * @author ruoyi */ ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/config/DataUpdateHandlerConfig.java
File was deleted ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/config/MybatisPlusConfig.java
File was deleted ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgRegisterController.java
New file @@ -0,0 +1,58 @@ package com.ruoyi.dataInterchange.controller; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.dataInterchange.api.vo.UPExgMsgRegisterVo; import com.ruoyi.dataInterchange.dao.UPExgMsgRegisterDao; import com.ruoyi.dataInterchange.model.UPExgMsgRegister; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 13:39 */ @RestController @RequestMapping("/UPExgMsgRegister") public class UPExgMsgRegisterController { @Resource private UPExgMsgRegisterDao upExgMsgRegisterDao; /** * 查询添加时间大于等于给定时间的车辆基础数据 * * @param startTime * @return */ @PostMapping("/getUPExgMsgRegisterListIsAfterCreateTime") public R<List<UPExgMsgRegisterVo>> getUPExgMsgRegisterListIsAfterCreateTime(@RequestParam("startTime") Long startTime) { List<UPExgMsgRegisterVo> voList = new ArrayList<>(); if (-1 == startTime) { Iterator<UPExgMsgRegister> iterator = upExgMsgRegisterDao.findAll().iterator(); while (iterator.hasNext()) { UPExgMsgRegister register = iterator.next(); UPExgMsgRegisterVo vo = new UPExgMsgRegisterVo(); BeanUtils.copyProperties(register, vo); voList.add(vo); } } else { List<UPExgMsgRegister> list = upExgMsgRegisterDao.findByCreateTimeIsAfter(startTime); for (UPExgMsgRegister register : list) { UPExgMsgRegisterVo vo = new UPExgMsgRegisterVo(); BeanUtils.copyProperties(register, vo); voList.add(vo); } } return R.ok(voList); } } ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgReportDriverInfoController.java
New file @@ -0,0 +1,58 @@ package com.ruoyi.dataInterchange.controller; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.dataInterchange.api.vo.UPExgMsgReportDriverInfoVo; import com.ruoyi.dataInterchange.dao.UPExgMsgReportDriverInfoAckDao; import com.ruoyi.dataInterchange.model.UPExgMsgReportDriverInfoAck; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/17 16:35 */ @RestController @RequestMapping("/UPExgMsgReportDriverInfo") public class UPExgMsgReportDriverInfoController { @Resource private UPExgMsgReportDriverInfoAckDao upExgMsgReportDriverInfoAckDao; /** * 查询添加时间等于或大于给定时间的数据 * * @param createTime * @return */ @PostMapping("/getUPExgMsgReportDriverInfoListIsAfterCreateTime") public R<List<UPExgMsgReportDriverInfoVo>> getUPExgMsgReportDriverInfoListIsAfterCreateTime(@RequestParam("createTime") Long createTime) { List<UPExgMsgReportDriverInfoVo> voList = new ArrayList<>(); if (-1 == createTime) { Iterator<UPExgMsgReportDriverInfoAck> iterator = upExgMsgReportDriverInfoAckDao.findAll().iterator(); while (iterator.hasNext()) { UPExgMsgReportDriverInfoAck next = iterator.next(); UPExgMsgReportDriverInfoVo vo = new UPExgMsgReportDriverInfoVo(); BeanUtils.copyProperties(next, vo); voList.add(vo); } } else { List<UPExgMsgReportDriverInfoAck> list = upExgMsgReportDriverInfoAckDao.findByCreateTimeIsAfter(createTime); for (UPExgMsgReportDriverInfoAck upExgMsgReportDriverInfoAck : list) { UPExgMsgReportDriverInfoVo vo = new UPExgMsgReportDriverInfoVo(); BeanUtils.copyProperties(upExgMsgReportDriverInfoAck, vo); voList.add(vo); } } return R.ok(voList); } } ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgTakeEwayBillController.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.dataInterchange.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author zhibing.pu * @Date 2025/3/17 17:29 */ @RestController @RequestMapping("/UPExgMsgTakeEwayBill") public class UPExgMsgTakeEwayBillController { } ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPExgMsgRegisterDao.java
@@ -4,6 +4,8 @@ import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.stereotype.Repository; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/7 16:10 @@ -18,4 +20,13 @@ * @return */ UPExgMsgRegister findByVehicleNo(String vehicleNo); /** * 查询添加时间大于等于给定时间的数据 * * @param createTime * @return */ List<UPExgMsgRegister> findByCreateTimeIsAfter(Long createTime); } ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPExgMsgReportDriverInfoAckDao.java
@@ -4,6 +4,8 @@ import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.stereotype.Repository; import java.util.List; /** * @author zhibing.pu * @Date 2025/3/7 17:12 @@ -19,4 +21,13 @@ * @return */ UPExgMsgReportDriverInfoAck findByVehicleNo(String vehicleNo); /** * 查询等于或者大于给定时间的数据 * * @param createTime * @return */ List<UPExgMsgReportDriverInfoAck> findByCreateTimeIsAfter(Long createTime); } ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/enu/WarnType.java
New file @@ -0,0 +1,36 @@ package com.ruoyi.dataInterchange.model.enu; /** * 报警类型 * * @author zhibing.pu * @Date 2025/3/13 12:02 */ public enum WarnType { OVERSPEED_ALARM(0x0001, "超速报警"), FATIGUE_DRIVING_ALARM(0x0002, "疲劳驾驶报警"), EMERGENCY_ALARM(0x0003, "紧急报警"), ENTER_THE_DESIGNATED_AREA_TO_ALERT(0x0004, "进入指定区域报警"), LEAVE_THE_DESIGNATED_AREA_TO_CALL_THE_POLICE(0x0005, "离开指定区域报警"), ROAD_BLOCKING_ALARM(0x0006, "路段堵塞报警"), DANGEROUS_ROAD_WARNING(0x0007, "危险路段报警"), CROSSING_ALARM(0x0008, "越界报警"), BURGLAR_ALARM(0x0009, "盗警"), ROBBERY_POLICE(0x000A, "劫警"), OFF_COURSE_ALARM(0x000B, "偏离路线报警"), VEHICLE_MOVEMENT_ALARM(0x000C, "车辆移动报警"), OVERTIME_DRIVING_ALARM(0x000D, "超时驾驶报警"), OTHER_ALARM(0x00FF, "其他报警"); private Integer code; private String name; WarnType(Integer code, String name) { this.code = code; this.name = name; } } ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java
@@ -144,26 +144,37 @@ if (null == register) { upExgMsgRegisterDao.save(upExgMsgRegister); } //上报驾驶员身份识别信息请求 UPExgMsgReportDriverInfoAck byVehicleNo = upExgMsgReportDriverInfoAckDao.findByVehicleNo(upExgMsgRegister.getVehicleNo()); if (null == byVehicleNo) { down_exg_msg_report_driver_info(ctx, inferiorPlatformId, upExgMsgRegister.getVehicleNo(), upExgMsgRegister.getVehicleColor()); } /** * 定时获取司机基础信息 */ public void taskReportDriverInfo() { Iterator<UPExgMsgRegister> iterator = upExgMsgRegisterDao.findAll().iterator(); while (iterator.hasNext()) { UPExgMsgRegister register = iterator.next(); //上报驾驶员身份识别信息请求 UPExgMsgReportDriverInfoAck byVehicleNo = upExgMsgReportDriverInfoAckDao.findByVehicleNo(register.getVehicleNo()); if (null == byVehicleNo) { down_exg_msg_report_driver_info(register.getInferiorPlatformId(), register.getVehicleNo(), register.getVehicleColor()); } } } /** * 上报驾驶员身份识别信息请求 * * @param ctx */ public void down_exg_msg_report_driver_info(ChannelHandlerContext ctx, int inferiorPlatformId, String vehicleNo, int VehicleColor) { public void down_exg_msg_report_driver_info(int inferiorPlatformId, String vehicleNo, int VehicleColor) { DOWNExgMsgReportDriverInfo downExgMsgReportDriverInfo = new DOWNExgMsgReportDriverInfo(); downExgMsgReportDriverInfo.setVehicleNo(vehicleNo); downExgMsgReportDriverInfo.setVehicleColor(VehicleColor); downExgMsgReportDriverInfo.setDataType(DataType.DOWN_EXG_MSG_REPORT_DRIVER_INFO.getCode()); downExgMsgReportDriverInfo.setDataLength(0); byte[] body = downExgMsgReportDriverInfo.encode(); OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG_REPORT_DRIVER_INFO.getCode(), body); OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG.getCode(), body); //获取从链路通道 Channel channel = ChannelMap.getClientChannel(inferiorPlatformId); if (null != channel && channel.isActive()) { @@ -215,7 +226,7 @@ downExgMsgTakeEwaybillReq.setDataLength(0); byte[] body = downExgMsgTakeEwaybillReq.encode(); OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG_TAKE_EWAYBILL_REQ.getCode(), body); OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG.getCode(), body); //获取从链路通道 Channel channel = ChannelMap.getClientChannel(inferiorPlatformId); if (null != channel && channel.isActive()) { ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java
@@ -152,7 +152,7 @@ downWarnMsgUrgeTodoReq.setDataType(DataType.DOWN_WARN_MSG_URGE_TODO_REQ.getCode()); downWarnMsgUrgeTodoReq.setDataLength(92); byte[] body = downWarnMsgUrgeTodoReq.encode(); OuterPacket out = new OuterPacket(DataType.DOWN_WARN_MSG_URGE_TODO_REQ.getCode(), body); OuterPacket out = new OuterPacket(DataType.DOWN_WARN_MSG.getCode(), body); //获取从链路通道 Channel channel = ChannelMap.getClientChannel(inferiorPlatformId); if (null != channel && channel.isActive()) { ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/util/TaskUtil.java
@@ -21,6 +21,14 @@ @Resource private WarnMsgService warnMsgService; /** * 定时任务获取驾驶员信息 */ @Scheduled(fixedRate = 1000 * 60) public void taskReportDriverInfo() { exgMsgService.taskReportDriverInfo(); } /** * 定时任务获取电子运单信息