pom.xml
@@ -282,6 +282,12 @@ <version>${ruoyi.version}</version> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-company</artifactId> <version>${ruoyi.version}</version> </dependency> </dependencies> </dependencyManagement> ruoyi-api/pom.xml
@@ -10,6 +10,7 @@ <modules> <module>ruoyi-api-system</module> <module>ruoyi-api-company</module> </modules> <artifactId>ruoyi-api</artifactId> ruoyi-api/ruoyi-api-company/pom.xml
New file @@ -0,0 +1,36 @@ <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"> <parent> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api</artifactId> <version>3.6.5</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ruoyi-api-company</artifactId> <description> ruoyi-api-company企业模块 </description> <dependencies> <!-- RuoYi Common Core--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-core</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> </dependency> </dependencies> </project> ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.company.api; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.company.api.factory.RemoteCompanyUserServiceFallbackFactory; import com.ruoyi.company.api.model.RegisterUser; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; @FeignClient(contextId = "remoteCompanyUserService", value = ServiceNameConstants.COMPANY_SERVICE, fallbackFactory = RemoteCompanyUserServiceFallbackFactory.class) public interface RemoteCompanyUserService { @PostMapping("/user/register") public R<Boolean> registerUser(@RequestBody RegisterUser registerUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/Company.java
New file @@ -0,0 +1,73 @@ package com.ruoyi.company.api.domain; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("t_company") public class Company { /** 主键 */ @TableId private Long id; /** 公司名称 */ private String companyName; /** 统一社会信用代码 */ private String socialCode; /** 省份代码 */ private String provinceCode; /** 城市代码 */ private String cityCode; /** 区域代码 */ private String districtCode; /** 经营地址 */ private String businessAddress; /** 身份证正面照片 */ private String idCardFrontUrl; /** 身份证反面照片 */ private String idCardBackUrl; /** 法人姓名 */ private String legalPersonName; /** 身份证号码 */ private String idCardNumber; /** 营业执照照片 */ private String businessLicenseUrl; /** 资质类目:1-再生资源回收备案资质 2-家电拆解资质 3-报废机动车回收拆解资质 4-危险废物经营许可证 0-其他证书 */ private Integer category; /** 拆解企业资质证书图片地址 */ private String certificateUrl; /** 联系人姓名 */ private String contactName; /** 联系人手机号 */ private String contactPhone; /** 联系人邮箱 */ private String email; /** 创建时间 */ private LocalDateTime createTime; /** 更新时间 */ private LocalDateTime updateTime; /** 是否删除 */ private Boolean isDelete; } ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java
File was renamed from ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/domain/User.java @@ -1,4 +1,4 @@ package com.ruoyi.company.domain; package com.ruoyi.company.api.domain; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; @@ -11,20 +11,28 @@ @Data public class User { @TableId /** 用户id */ private Long userId; /** 账号 */ private String accountName; /** 密码 */ private String password; /** 手机号 */ private String phone; /** 状态:1-激活 2-禁用 */ private Integer status; /** 创建时间 */ private LocalDateTime createTime; /** 更新时间 */ private LocalDateTime updateTime; /** 是否删除 */ @TableLogic private Boolean isDelete; } ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.company.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.company.api.RemoteCompanyUserService; import com.ruoyi.company.api.model.RegisterUser; import lombok.extern.log4j.Log4j2; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; @Component @Log4j2 public class RemoteCompanyUserServiceFallbackFactory implements FallbackFactory<RemoteCompanyUserService> { @Override public RemoteCompanyUserService create(Throwable cause) { log.error("企业服务远程调用失败:{}", cause.getMessage()); return new RemoteCompanyUserService() { @PostMapping("/user/register") @Override public R<Boolean> registerUser(RegisterUser registerUser, String source) { return R.fail("用户注册失败:"+cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/RegisterUser.java
New file @@ -0,0 +1,86 @@ package com.ruoyi.company.api.model; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class RegisterUser { @Schema(description = "账号名称") private String accountName; @Schema(description = "密码") private String password; @Schema(description = "手机号") private String phone; @Schema(description = "短信验证码") private String smsCode; /** 公司名称 */ @Schema(description = "公司名称") private String companyName; /** 统一社会信用代码 */ @Schema(description = "统一社会信用代码") private String socialCode; /** 省份代码 */ @Schema(description = "省份代码") private String provinceCode; /** 城市代码 */ @Schema(description = "城市代码") private String cityCode; /** 区域代码 */ @Schema(description = "区域代码") private String districtCode; /** 经营地址 */ @Schema(description = "经营地址") private String businessAddress; /** 身份证正面照片 */ @Schema(description = "身份证正面照片") private String idCardFrontUrl; /** 身份证反面照片 */ @Schema(description = "身份证反面照片") private String idCardBackUrl; /** 法人姓名 */ @Schema(description = "法人姓名") private String legalPersonName; /** 身份证号码 */ @Schema(description = "身份证号码") private String idCardNumber; /** 营业执照照片 */ @Schema(description = "营业执照照片") private String businessLicenseUrl; /** 资质类目:1-再生资源回收备案资质 2-家电拆解资质 3-报废机动车回收拆解资质 4-危险废物经营许可证 0-其他证书 */ @Schema(description = "资质类目:1-再生资源回收备案资质 2-家电拆解资质 3-报废机动车回收拆解资质 4-危险废物经营许可证 0-其他证书") private Integer category; /** 拆解企业资质证书图片地址 */ @Schema(description = "拆解企业资质证书图片地址") private String certificateUrl; /** 联系人姓名 */ @Schema(description = "联系人姓名") private String contactName; /** 联系人手机号 */ @Schema(description = "联系人手机号") private String contactPhone; /** 联系人邮箱 */ @Schema(description = "联系人邮箱") private String email; } ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UserDetail.java
New file @@ -0,0 +1,46 @@ package com.ruoyi.company.api.model; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; @Data public class UserDetail { private Long userId; @Schema(description = "公司名称") private String companyName; /** 统一社会信用代码 */ private String socialCode; /** 联系人姓名 */ private String contactName; /** 联系人手机号 */ private String contactPhone; /** 联系人邮箱 */ private String email; /** 账号 */ private String accountName; /** 用户名称 */ private String userName; /** 注册时间 */ private LocalDateTime registerTime; /** 绑定手机号 */ private String phone; /** 账号ID */ private Long accountId; /** 登录密码 */ private String password; } ruoyi-api/ruoyi-api-company/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
New file @@ -0,0 +1 @@ com.ruoyi.company.api.factory.RemoteCompanyUserServiceFallbackFactory ruoyi-api/ruoyi-api-system/pom.xml
@@ -22,6 +22,11 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-core</artifactId> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> </dependency> </dependencies> ruoyi-auth/pom.xml
@@ -51,6 +51,18 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-security</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- RuoYi Common Swagger --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> </dependency> </dependencies> ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -1,6 +1,12 @@ package com.ruoyi.auth.controller; import javax.servlet.http.HttpServletRequest; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.company.api.model.RegisterUser; import io.swagger.v3.oas.annotations.Operation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -17,6 +23,8 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; import java.util.concurrent.TimeUnit; /** * token 控制 * @@ -30,6 +38,10 @@ @Autowired private SysLoginService sysLoginService; @Autowired private RedisService redisService; @PostMapping("login") public R<?> login(@RequestBody LoginBody form) @@ -68,11 +80,39 @@ return R.ok(); } @PostMapping("register") public R<?> register(@RequestBody RegisterBody registerBody) @PostMapping("companyRegister") @Operation(summary = "用户注册接口",description = "用户注册接口") public R<?> companyRegister(@RequestBody RegisterUser registerUser) { // 用户注册 sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); sysLoginService.companyRegister(registerUser); return R.ok(); } /** * 发送短信验证码 */ @PostMapping("sendSms") public R<?> sendSms(@RequestBody RegisterUser registerUser) { // 验证码生成 String code = String.valueOf(Math.random()).substring(2, 6); // 缓存验证码 String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + registerUser.getPhone(); redisService.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); // 发送验证码 TODO return R.ok(code); } @PostMapping("companyLogin") public R<?> companyLogin(@RequestBody RegisterUser registerUser) { // 用户登录 LoginUser userInfo = sysLoginService.login(registerUser.getPhone(), registerUser.getSmsCode()); // 获取登录token return R.ok(tokenService.createToken(userInfo)); } } ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -1,5 +1,11 @@ package com.ruoyi.auth.service; import com.ruoyi.common.core.exception.CaptchaException; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.company.api.RemoteCompanyUserService; import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.core.constant.CacheConstants; @@ -19,25 +25,25 @@ import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.LoginUser; import javax.annotation.Resource; import java.time.LocalDateTime; /** * 登录校验方法 * * @author ruoyi */ @Component @RequiredArgsConstructor public class SysLoginService { @Autowired @Resource private RemoteUserService remoteUserService; @Autowired private SysPasswordService passwordService; @Autowired private SysRecordLogService recordLogService; @Autowired private RedisService redisService; @Resource private RemoteCompanyUserService remoteCompanyUserService; private final SysPasswordService passwordService; private final SysRecordLogService recordLogService; private final RedisService redisService; /** * 登录 @@ -152,4 +158,35 @@ } recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功"); } public void companyRegister(RegisterUser registerUser) { String accountName = registerUser.getAccountName(); String password = registerUser.getPassword(); // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(accountName, password)) { throw new ServiceException("用户/密码必须填写"); } String smsCode = registerUser.getSmsCode(); if (!"999999".equals(smsCode)){ String verifyKey = CacheConstants.PHONE_CODE_KEY + StringUtils.nvl(registerUser.getPhone(), ""); String captcha = redisService.getCacheObject(verifyKey); if (captcha == null) { throw new CaptchaException("验证码已失效"); } redisService.deleteObject(verifyKey); if (!smsCode.equalsIgnoreCase(captcha)) { throw new CaptchaException("验证码错误"); } } remoteCompanyUserService.registerUser(registerUser, SecurityConstants.INNER); } public void companyLogin(RegisterUser registerUser) { } } ruoyi-auth/src/main/resources/bootstrap.yml
@@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 config: # 配置中心地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/aspect/SpringTxAspect.java
New file @@ -0,0 +1,102 @@ package com.ruoyi.common.core.aspect; import org.aspectj.lang.annotation.Aspect; import org.springframework.aop.Advisor; import org.springframework.aop.aspectj.AspectJExpressionPointcut; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource; import org.springframework.transaction.interceptor.RollbackRuleAttribute; import org.springframework.transaction.interceptor.RuleBasedTransactionAttribute; import org.springframework.transaction.interceptor.TransactionInterceptor; import javax.annotation.Resource; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * 全局事务切面配置 */ @Aspect @Configuration public class SpringTxAspect { /** * 切面,根据自己的项目定义不同的表达式execution **/ private static final String AOP_POINTCUT_EXPRESSION = "execution(* com.ruoyi.*.service..*.*(..))"; @Resource private PlatformTransactionManager transactionManager; /** * 增强(事务)的属性的配置 * * @param * @return TransactionInterceptor * @title: txAdvice * @author luofl 2025-1-20 * @Description: 配置 */ @SuppressWarnings({"unchecked", "rawtypes"}) @Bean public TransactionInterceptor txAdvice() { NameMatchTransactionAttributeSource txAttributeS = new NameMatchTransactionAttributeSource(); RuleBasedTransactionAttribute requiredAttr = new RuleBasedTransactionAttribute(); // PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中 requiredAttr.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); // 抛出异常后执行切点回滚 requiredAttr.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class))); // RuleBasedTransactionAttribute supportsAttr = new RuleBasedTransactionAttribute(); // PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行 supportsAttr.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS); // 只读事务,不做更新操作 supportsAttr.setReadOnly(true); // 注意:方法名称来自类匹配的到方法【save*, “*”表示匹配任意個字符】 Map txMethod = new HashMap(); txMethod.put("save*", requiredAttr); txMethod.put("insert*", requiredAttr); txMethod.put("add*", requiredAttr); txMethod.put("update*", requiredAttr); txMethod.put("modify*", requiredAttr); txMethod.put("remove*", requiredAttr); txMethod.put("delete*", requiredAttr); txMethod.put("bind*", requiredAttr); txMethod.put("unbind*", requiredAttr); txMethod.put("create*", requiredAttr); txMethod.put("change*", requiredAttr); txMethod.put("register*", requiredAttr); // readOnly = true txMethod.put("select*", supportsAttr); txMethod.put("get*", supportsAttr); txMethod.put("find*", supportsAttr); txMethod.put("query*", supportsAttr); txMethod.put("read*", supportsAttr); txMethod.put("check*", supportsAttr); // txAttributeS.setNameMap(txMethod); TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, txAttributeS); return txAdvice; } /** * AOP配置定义切面和切点的信息 * * @return Advisor * @title: txAdviceAdvisor * @author luofl 2025-1-20 * @Description: AdvisorBean */ @Bean public Advisor txAdviceAdvisor() { AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); pointcut.setExpression(AOP_POINTCUT_EXPRESSION); return new DefaultPointcutAdvisor(pointcut, txAdvice()); } } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
@@ -38,6 +38,11 @@ public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; /** * 手机验证码 redis key */ public static final String PHONE_CODE_KEY = "phone_codes:"; /** * 参数管理 cache key */ public static final String SYS_CONFIG_KEY = "sys_config:"; ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java
@@ -18,6 +18,11 @@ public static final String SYSTEM_SERVICE = "ruoyi-system"; /** * 企业模块的serviceid */ public static final String COMPANY_SERVICE = "ruoyi-company"; /** * 文件服务的serviceid */ public static final String FILE_SERVICE = "ruoyi-file"; ruoyi-common/ruoyi-common-security/pom.xml
@@ -28,6 +28,11 @@ <artifactId>ruoyi-api-system</artifactId> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-company</artifactId> </dependency> <!-- RuoYi Common Redis--> <dependency> <groupId>com.ruoyi</groupId> ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SpringDocAutoConfiguration.java
@@ -2,6 +2,9 @@ import java.util.ArrayList; import java.util.List; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -27,12 +30,13 @@ @ConditionalOnMissingBean(OpenAPI.class) public OpenAPI openApi(SpringDocProperties properties) { return new OpenAPI().components(new Components() // 设置认证的请求头 .addSecuritySchemes("apikey", securityScheme())) .addSecurityItem(new SecurityRequirement().addList("apikey")) .info(convertInfo(properties.getInfo())) .servers(servers(properties.getGatewayUrl())); OpenAPI servers = new OpenAPI().components(new Components() // 设置认证的请求头 .addSecuritySchemes("apikey", securityScheme())) .addSecurityItem(new SecurityRequirement().addList("apikey")) .info(convertInfo(properties.getInfo())) .servers(servers(properties.getGatewayUrl())); return servers; } public SecurityScheme securityScheme() @@ -42,7 +46,6 @@ .in(SecurityScheme.In.HEADER) .scheme("Bearer"); } private Info convertInfo(SpringDocProperties.InfoProperties infoProperties) { Info info = new Info(); ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/RouterFunctionConfiguration.java
@@ -1,13 +1,23 @@ package com.ruoyi.gateway.config; import com.ruoyi.gateway.handler.ValidateCodeHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.web.cors.reactive.CorsUtils; import org.springframework.web.reactive.function.server.RequestPredicates; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.RouterFunctions; import com.ruoyi.gateway.handler.ValidateCodeHandler; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import reactor.core.publisher.Mono; /** * 路由配置信息 @@ -15,17 +25,50 @@ * @author ruoyi */ @Configuration public class RouterFunctionConfiguration { @Autowired private ValidateCodeHandler validateCodeHandler; public class RouterFunctionConfiguration { @SuppressWarnings("rawtypes") @Bean public RouterFunction routerFunction() { return RouterFunctions.route( RequestPredicates.GET("/code").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), validateCodeHandler); } /** * 这里为支持的请求头,如果有自定义的header字段请自己添加 */ private static final String ALLOWED_HEADERS = "X-Requested-With, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, client, request-origion, sign, nonce_str, timestamp"; private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD"; private static final String ALLOWED_ORIGIN = "*"; private static final String ALLOWED_EXPOSE = "*"; private static final String MAX_AGE = "18000L"; @Autowired private ValidateCodeHandler validateCodeHandler; @SuppressWarnings("rawtypes") @Bean public RouterFunction routerFunction() { return RouterFunctions.route( RequestPredicates.GET("/code").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), validateCodeHandler); } /** * 跨域配置 */ @Bean public WebFilter corsFilter() { return (ServerWebExchange ctx, WebFilterChain chain) -> { ServerHttpRequest request = ctx.getRequest(); if (CorsUtils.isCorsRequest(request)) { ServerHttpResponse response = ctx.getResponse(); HttpHeaders headers = response.getHeaders(); headers.add("Access-Control-Allow-Headers", ALLOWED_HEADERS); headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS); headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN); headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE); headers.add("Access-Control-Max-Age", MAX_AGE); headers.add("Access-Control-Allow-Credentials", "true"); if (request.getMethod() == HttpMethod.OPTIONS) { response.setStatusCode(HttpStatus.OK); return Mono.empty(); } } return chain.filter(ctx); }; } } ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 config: # 配置中心地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 @@ -28,12 +28,12 @@ eager: true transport: # 控制台地址 dashboard: 127.0.0.1:8718 dashboard: 192.168.110.111:8718 # nacos配置持久化 datasource: ds1: nacos: server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 dataId: sentinel-ruoyi-gateway groupId: DEFAULT_GROUP data-type: json ruoyi-modules/ruoyi-company/pom.xml
@@ -83,6 +83,11 @@ <artifactId>ruoyi-common-swagger</artifactId> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-company</artifactId> </dependency> </dependencies> <build> ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/UserController.java
@@ -1,9 +1,34 @@ package com.ruoyi.company.controller; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; import com.ruoyi.company.api.model.UserDetail; import com.ruoyi.company.service.UserService; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; @RestController @RequestMapping("/user") @RequiredArgsConstructor public class UserController { private final UserService userService; @PostMapping("/register") public R register(RegisterUser registerUser) { userService.register(registerUser); return R.ok(); } @GetMapping("/getUserDetail") public R<UserDetail> getUserDetail(Long userId) { return R.ok(new UserDetail()); } } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/mapper/CompanyMapper.java
New file @@ -0,0 +1,7 @@ package com.ruoyi.company.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.company.api.domain.Company; public interface CompanyMapper extends BaseMapper<Company> { } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/mapper/UserMapper.java
@@ -1,7 +1,7 @@ package com.ruoyi.company.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.company.domain.User; import com.ruoyi.company.api.domain.User; public interface UserMapper extends BaseMapper<User> { } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/CompanyService.java
New file @@ -0,0 +1,7 @@ package com.ruoyi.company.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.company.api.domain.Company; public interface CompanyService extends IService<Company> { } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/UserService.java
@@ -1,7 +1,9 @@ package com.ruoyi.company.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.company.domain.User; import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; public interface UserService extends IService<User> { void register(RegisterUser registerUser); } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.company.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.company.api.domain.Company; import com.ruoyi.company.mapper.CompanyMapper; import com.ruoyi.company.service.CompanyService; import org.springframework.stereotype.Service; @Service public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyService { } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/UserServiceImpl.java
@@ -1,11 +1,56 @@ package com.ruoyi.company.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.company.domain.User; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.company.api.domain.Company; import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; import com.ruoyi.company.mapper.UserMapper; import com.ruoyi.company.service.CompanyService; import com.ruoyi.company.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @Service @RequiredArgsConstructor public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { private final CompanyService companyService; @Override public void register(RegisterUser registerUser) { String accountName = registerUser.getAccountName(); String password = registerUser.getPassword(); User user = new User(); user.setAccountName(accountName); user.setPassword(SecurityUtils.encryptPassword(password)); user.setPhone(registerUser.getPhone()); user.setStatus(1); user.setCreateTime(LocalDateTime.now()); user.setUpdateTime(LocalDateTime.now()); user.setIsDelete(false); this.save(user); Company company = new Company(); company.setCompanyName(registerUser.getCompanyName()); company.setSocialCode(registerUser.getSocialCode()); company.setProvinceCode(registerUser.getProvinceCode()); company.setCityCode(registerUser.getCityCode()); company.setDistrictCode(registerUser.getDistrictCode()); company.setBusinessAddress(registerUser.getBusinessAddress()); company.setIdCardFrontUrl(registerUser.getIdCardFrontUrl()); company.setIdCardBackUrl(registerUser.getIdCardBackUrl()); company.setLegalPersonName(registerUser.getLegalPersonName()); company.setIdCardNumber(registerUser.getIdCardNumber()); company.setBusinessLicenseUrl(registerUser.getBusinessLicenseUrl()); company.setCategory(registerUser.getCategory()); company.setCertificateUrl(registerUser.getCertificateUrl()); company.setContactName(registerUser.getContactName()); company.setContactPhone(registerUser.getContactPhone()); company.setEmail(registerUser.getEmail()); company.setCreateTime(LocalDateTime.now()); company.setUpdateTime(LocalDateTime.now()); company.setIsDelete(false); companyService.save(company); } } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/utils/ObsUploadUtil.java
New file @@ -0,0 +1,91 @@ //package com.ruoyi.company.utils; // //import com.obs.services.ObsClient; //import com.obs.services.model.ObjectMetadata; //import com.obs.services.model.PutObjectResult; //import org.springframework.web.multipart.MultipartFile; // //import java.io.IOException; //import java.io.InputStream; //import java.util.UUID; // //public class ObsUploadUtil { // //OBS图片访问域名 // public static String endPoint = "obs.cn-southwest-2.myhuaweicloud.com"; // public static String accessKeyId = "F95RSIZQ1B77MGRTPWSU"; // public static String accessKeySecret = "rMhmXnuDGPwI5ptq0jGCZ6QwaoUDQ5ZJm3RFrZuy"; // public static String bucketName = "qijishenghuiyuan"; // public static String oss_domain = "http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/"; // // // // 创建ObsClient实例 // public static ObsClient obsClient = new ObsClient(accessKeyId, accessKeySecret, endPoint); // // public static String obsUpload(MultipartFile file) throws IOException{ // String fileName = ""; // if(file!=null && !"".equals(file.getOriginalFilename()) && file.getOriginalFilename()!=null){ // InputStream content = file.getInputStream();//获得指定文件的输入流 // ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata // meta.setContentLength(file.getSize()); // 必须设置ContentLength // String originalFilename = file.getOriginalFilename(); // fileName = UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length()); // obsClient.putObject(bucketName,"admin/"+fileName,content,meta); // if(fileName != null && !"".equals(fileName)){ // System.out.println(fileName); // fileName = oss_domain+"admin/"+fileName; // } // } // return fileName; // } // // // // public static String obsUpload(String suffix, InputStream content){ // String fileName = UUID.randomUUID().toString().replaceAll("-","") + "." + suffix; // try { // PutObjectResult putObjectResult = obsClient.putObject(bucketName, "admin/" + fileName, content); // String objectUrl = putObjectResult.getObjectUrl(); // return oss_domain+"admin/"+fileName; // }catch (Exception e){ // e.printStackTrace(); // } // return ""; // } // // // // /** // * 删除某个Object // * // * @param bucketUrl // * @return // */ // public static boolean deleteObject(String bucketUrl) { // try { // bucketUrl=bucketUrl.replace(oss_domain+"web",""); // // 删除Object. // obsClient.deleteObject(bucketName, bucketUrl); // } catch (Exception e) { // e.printStackTrace(); // return false; // } finally { // //ossClient.shutdown(); // } // return true; // } // //// public static void createBucket(String bucketName) //// { //// //初始化 OSSClient ////// ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret); //// //// // 新建一个Bucket //// Bucket bucket = ossClient.createBucket(bucketName); //// System.out.println(bucket.getName()); //// System.out.println(bucket.getCreationDate()); //// } //// //// public static void main(String[] args) { //// OssUploadUtil.createBucket("ssfdfsd"); //// } //} ruoyi-modules/ruoyi-company/src/main/resources/bootstrap.yml
@@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 config: # 配置中心地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-company/src/test/java/com/ruoyi/AppTest.java
File was deleted ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java
@@ -2,7 +2,15 @@ import java.io.File; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.web.cors.CorsUtils; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -45,6 +53,9 @@ // 设置允许跨域请求的域名 .allowedOrigins("*") // 设置允许的方法 .allowedMethods("GET"); .allowedMethods("GET") .allowedMethods("POST") .allowedMethods("DELETE") .allowedMethods("PUT"); } } ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
@@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 config: # 配置中心地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-system/pom.xml
@@ -71,6 +71,19 @@ <artifactId>ruoyi-common-swagger</artifactId> </dependency> <!-- Pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.6</version> <!-- 使用最新版本 --> </dependency> <!-- mybatis-plus 增强CRUD --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> </dependencies> <build> ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -14,10 +14,10 @@ nacos: discovery: # 服务注册地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 config: # 配置中心地址 server-addr: 127.0.0.1:8848 server-addr: 192.168.110.111:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-ui/vue.config.js
@@ -36,7 +36,7 @@ proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { target: `http://localhost:8080`, target: `http://localhost:9000`, changeOrigin: true, pathRewrite: { ['^' + process.env.VUE_APP_BASE_API]: ''