From 5bfdde942c678fd6bbab487081dcc9246f60f661 Mon Sep 17 00:00:00 2001 From: 77 <77@77.com> Date: Mon, 20 May 2024 01:18:08 +0800 Subject: [PATCH] init --- .../java/com/ruoyi/web/config/I18nConfig.java | 96 +++++++++++++++++++ .../src/main/resources/application.yml | 8 +- .../component/tenant/config/TenantConfig.java | 2 +- .../component/tenant/filter/TenantFilter.java | 4 + .../component/web/config/I18nConfig.java | 4 +- .../component/web/config/ResourcesConfig.java | 33 ++++--- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../dk/controller/DkCustomerController.java | 29 ++---- .../app/AppCustomerOpenController.java | 6 +- .../dk/controller/app/AppHomeController.java | 2 + .../controller/app/AppSettingController.java | 1 + .../dk/controller/app/LoginV2Controller.java | 5 +- .../dk/controller/app/V2CommonController.java | 9 +- .../java/com/ruoyi/dk/domain/Customer.java | 3 + .../java/com/ruoyi/dk/dto/common/IdReq.java | 8 ++ .../dk/listener/AddTenantEventListener.java | 10 ++ .../java/com/ruoyi/dk/oss/ali/StsOssKit.java | 14 ++- .../com/ruoyi/dk/service/CustomerService.java | 4 +- .../dk/service/impl/CustomerServiceImpl.java | 40 +++++++- .../main/resources/mapper/CustomerMapper.xml | 6 ++ .../system/controller/SysLoginController.java | 7 ++ .../system/controller/SysUserController.java | 22 ++++- .../service/impl/SysUserServiceImpl.java | 6 -- 23 files changed, 249 insertions(+), 71 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/config/I18nConfig.java create mode 100644 ruoyi-dk/src/main/java/com/ruoyi/dk/dto/common/IdReq.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/config/I18nConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/config/I18nConfig.java new file mode 100644 index 0000000..c315c60 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/config/I18nConfig.java @@ -0,0 +1,96 @@ +package com.ruoyi.web.config; + +import com.ruoyi.dk.service.HomeSettingService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Locale; + +/** + * i18n配置,用于处理语言本地化设置。 + * + * @author liuyanqiang + * @version 1.0.0 + * @since 2023/06/15 09:41 + **/ +@Configuration +public class I18nConfig implements LocaleResolver { + + @Autowired + private HomeSettingService homeSettingService; + + /** + * 根据请求中的Accept-Language头部解析出语言设置。 + * 如果没有指定语言或语言设置不完整,则默认为中文设置。 + * + * @param request HTTP请求对象 + * @return {@link Locale } 解析后的语言设置Locale对象 + * @author liuyanqiang + * @since 2023/06/15 09:42 + **/ + @Override + public Locale resolveLocale(HttpServletRequest request) { + // 默认语言设置为中文 + String defaultLocal = homeSettingService.getHomeSetting().getDefaultLocal(); + Locale locale = null; + // 从请求的头部获取Accept-Language标头,该标头指定了客户端期望的语言 + String language = request.getHeader("Sass-Language"); + String lang = request.getParameter("lang"); + if (StringUtils.isNotBlank(lang)) { + language = lang; + } + if(StringUtils.isBlank(language)){ + language = defaultLocal; + } + // 检查请求的语言是否非空 + if (StringUtils.isNotBlank(language)) { + // 将语言字符串拆分为语言和国家/地区代码 + String[] splitLanguage = language.split("_"); + // 检查是否有语言和国家/地区代码 + if (splitLanguage.length > 1) { + // 根据语言和国家/地区代码创建新的Locale对象 + locale = new Locale(splitLanguage[0], splitLanguage[1]); + } + } + if(locale == null){ + locale = Locale.CHINA; + } + // 返回解析得到的Locale对象作为解析后的语言设置 + return locale; + } + + /** + * 设置语言设置时的回调方法。 + * 在此实现中,不执行任何操作,忽略对语言设置的更改。 + * @param request HTTP请求对象 + * @param response HTTP响应对象 + * @param locale 语言设置的Locale对象 + * @author liuyanqiang + * @since 2023/06/15 09:43 + **/ + @Override + public void setLocale( + HttpServletRequest request, + HttpServletResponse response, + Locale locale) { + // 此方法不执行任何操作,忽略对语言设置的更改 + } + + /** + * 创建LocaleResolver bean,用于处理语言设置。 + * + * @return {@link LocaleResolver } + * @author liuyanqiang + * @since 2023/06/15 09:44 + **/ + @Bean + public LocaleResolver localeResolver() { + // 返回当前类作为LocaleResolver的实例 + return new I18nConfig(); + } +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 7c801a4..51dee46 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -195,7 +195,7 @@ mybatis-encryptor: springdoc: api-docs: # 是否开启接口文档 - enabled: true + enabled: false swagger-ui: path: /swagger-ui.html tags-sorter: alpha @@ -209,11 +209,11 @@ springdoc: # 防止XSS攻击 xss: # 过滤开关 - enabled: true + enabled: false # 排除链接(多个用逗号分隔) - excludes: /cai/agreementSetting + excludes: /app/* # 匹配链接 - urlPatterns: /system/*,/monitor/*,/tool/*,/cai/*,/api/* + urlPatterns: /system/*,/monitor/*,/tool/*,/api/* # 全局线程池相关配置 thread-pool: diff --git a/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/config/TenantConfig.java b/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/config/TenantConfig.java index 7b82be9..1ad94ed 100644 --- a/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/config/TenantConfig.java +++ b/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/config/TenantConfig.java @@ -97,7 +97,7 @@ public class TenantConfig { registration.setFilter(new TenantFilter()); registration.addUrlPatterns("/*"); registration.setName("tenantFilter"); - registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); +// registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE + 1000); return registration; } diff --git a/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/filter/TenantFilter.java b/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/filter/TenantFilter.java index 67315f7..40c3806 100644 --- a/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/filter/TenantFilter.java +++ b/ruoyi-component/ruoyi-component-tenant/src/main/java/com/ruoyi/component/tenant/filter/TenantFilter.java @@ -68,6 +68,10 @@ public class TenantFilter implements Filter { }else{ TenantHelper.setTenantId(tenantHeader); } + if(StringUtils.isBlank(TenantHelper.getTenantId())){ + ServletUtils.renderString(response, JSONUtil.toJsonStr(R.fail("未找到对应的平台"))); + return; + } filterChain.doFilter(servletRequest, servletResponse); } finally { TenantHelper.clearTenant(); diff --git a/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/I18nConfig.java b/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/I18nConfig.java index 14ee113..c191dbb 100644 --- a/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/I18nConfig.java +++ b/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/I18nConfig.java @@ -1,8 +1,6 @@ package com.ruoyi.component.web.config; import cn.hutool.core.util.StrUtil; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.web.servlet.LocaleResolver; @@ -15,7 +13,7 @@ import java.util.Locale; * * @author Lion Li */ -@AutoConfiguration(before = WebMvcAutoConfiguration.class) +//@AutoConfiguration(before = WebMvcAutoConfiguration.class) public class I18nConfig { @Bean diff --git a/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/ResourcesConfig.java b/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/ResourcesConfig.java index b0edf05..063b56c 100644 --- a/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/ResourcesConfig.java +++ b/ruoyi-component/ruoyi-component-web/src/main/java/com/ruoyi/component/web/config/ResourcesConfig.java @@ -2,7 +2,9 @@ package com.ruoyi.component.web.config; import com.ruoyi.component.web.interceptor.PlusWebInvokeTimeInterceptor; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; +import org.springframework.core.Ordered; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @@ -28,25 +30,22 @@ public class ResourcesConfig implements WebMvcConfigurer { public void addResourceHandlers(ResourceHandlerRegistry registry) { } - /** - * 跨域配置 - */ + @SuppressWarnings({"rawtypes", "unchecked"}) @Bean - public CorsFilter corsFilter() { + public FilterRegistrationBean corsFilter() { CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - // 设置访问源地址 - config.addAllowedOriginPattern("*"); - // 设置访问源请求头 - config.addAllowedHeader("*"); - // 设置访问源请求方法 - config.addAllowedMethod("*"); - // 有效期 1800秒 - config.setMaxAge(1800L); - // 添加映射路径,拦截一切请求 + config.setAllowCredentials(true); // 允许cookies跨域 + config.addAllowedOriginPattern("*");// #允许向该服务器提交请求的URI,*表示全部允许,自定义可以添加多个,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin + config.addAllowedHeader("*");// #允许访问的头信息,*表示全部,可以添加多个 + config.addAllowedMethod("*");// 允许提交请求的方法,*表示全部允许,一般OPTIONS,GET,POST三个够了 + config.setMaxAge(1800L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了 UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", config); - // 返回新的CorsFilter - return new CorsFilter(source); + source.registerCorsConfiguration("/**", config);//对所有接口都有效 + FilterRegistrationBean registration = new FilterRegistrationBean(new CorsFilter(source)); + registration.addUrlPatterns("/*"); + registration.setName("corsFilter"); + registration.setOrder(Ordered.HIGHEST_PRECEDENCE); // 优先级最高 + return registration; } + } diff --git a/ruoyi-component/ruoyi-component-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-component/ruoyi-component-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index a4a99ac..6f48ffa 100644 --- a/ruoyi-component/ruoyi-component-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-component/ruoyi-component-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,5 +1,4 @@ com.ruoyi.component.web.config.CaptchaConfig com.ruoyi.component.web.config.FilterConfig -com.ruoyi.component.web.config.I18nConfig com.ruoyi.component.web.config.ResourcesConfig com.ruoyi.component.web.config.UndertowConfig diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/DkCustomerController.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/DkCustomerController.java index 73a956b..8814aa9 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/DkCustomerController.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/DkCustomerController.java @@ -2,7 +2,7 @@ package com.ruoyi.dk.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.ruoyi.component.excel.utils.ExcelUtil; +import com.ruoyi.component.core.domain.R; import com.ruoyi.component.idempotent.annotation.RepeatSubmit; import com.ruoyi.component.log.annotation.Log; import com.ruoyi.component.log.enums.BusinessType; @@ -12,18 +12,13 @@ import com.ruoyi.component.web.core.BaseController; import com.ruoyi.dk.domain.Customer; import com.ruoyi.dk.dto.admin.req.UpdatePwdCustomerReq; import com.ruoyi.dk.dto.admin.resp.CustomerAdminResp; -import com.ruoyi.dk.dto.admin.resp.CustomerExportVo; -import com.ruoyi.dk.mapper.CustomerMapper; +import com.ruoyi.dk.dto.common.IdReq; import com.ruoyi.dk.service.CustomerService; -import com.ruoyi.component.core.domain.R; -import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; @@ -36,8 +31,6 @@ import java.util.stream.Stream; public class DkCustomerController extends BaseController { private final CustomerService customerService; - @Resource - private CustomerMapper customerMapper; @SaCheckPermission("dk:dkCustomer:list") @GetMapping("/list") @@ -46,15 +39,6 @@ public class DkCustomerController extends BaseController { return TableDataInfo.build(page); } - @Operation(summary = "导出客户列表") - @SaCheckPermission("dk:dkCustomer:export") - @Log(title = "客户", businessType = BusinessType.EXPORT) - @GetMapping("/export") - public void export(@Validated CustomerAdminResp bo, HttpServletResponse response) { - List list = customerMapper.exportAdmin(bo); - ExcelUtil.exportExcel(list, "客户", CustomerExportVo.class, response); - } - @SaCheckPermission("dk:dkCustomer:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @@ -82,6 +66,13 @@ public class DkCustomerController extends BaseController { @Log(title = "修改密码" , businessType = BusinessType.DELETE) @PostMapping("/resetPwd") public R resetPwd(@RequestBody UpdatePwdCustomerReq customer) { - return toAjax(customerService.updatePwd(customer.getCustomerId(),customer.getPassword())); + return toAjax(customerService.updatePwd(customer.getCustomerId(),customer.getPassword(),true)); + } + + @Log(title = "强制T人" , businessType = BusinessType.DELETE) + @PostMapping("/loginOut") + public R loginOut(@RequestBody IdReq id) { + customerService.loginOut(id.getId()); + return R.ok(); } } diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppCustomerOpenController.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppCustomerOpenController.java index 0cd998c..c2f1dfc 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppCustomerOpenController.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppCustomerOpenController.java @@ -1,5 +1,6 @@ package com.ruoyi.dk.controller.app; +import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.lang.UUID; import cn.hutool.core.util.RandomUtil; import com.ruoyi.component.redis.util.RedisUtils; @@ -17,9 +18,10 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -@RequestMapping("/customer/open") +@RequestMapping("/app/customer/open") @RestController @Tag(name = "用户开放接口") +@SaIgnore public class AppCustomerOpenController { @Autowired private CodeService codeService; @@ -80,7 +82,7 @@ public class AppCustomerOpenController { if(!updatePwdOpenReq.getPassword().equals(updatePwdOpenReq.getConfirmPassword())){ throw new CustomException(MessageUtils.message("dk.password.check.error")); } - customerService.updatePwd(customer.getId(),updatePwdOpenReq.getPassword()); + customerService.updatePwd(customer.getId(),updatePwdOpenReq.getPassword(),true); return R.ok(); } diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppHomeController.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppHomeController.java index 5f4a1d6..14c9fd7 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppHomeController.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppHomeController.java @@ -1,6 +1,7 @@ package com.ruoyi.dk.controller.app; +import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.util.RandomUtil; import com.ruoyi.dk.domain.HomeSetting; import com.ruoyi.dk.domain.LoansSetting; @@ -28,6 +29,7 @@ import java.util.Random; @RestController @RequestMapping("/app/home/loans") @Tag(name = "首页开放") +@SaIgnore public class AppHomeController { @Autowired diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppSettingController.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppSettingController.java index 56eaabb..8cec42a 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppSettingController.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/AppSettingController.java @@ -14,6 +14,7 @@ import com.ruoyi.component.core.util.BeanConvertUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/LoginV2Controller.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/LoginV2Controller.java index 3c623b3..b427b27 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/LoginV2Controller.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/LoginV2Controller.java @@ -1,10 +1,12 @@ package com.ruoyi.dk.controller.app; +import cn.dev33.satoken.annotation.SaIgnore; import com.ruoyi.dk.dto.app.req.LoginPhoneBody; import com.ruoyi.dk.kit.DkLoginKit; import com.ruoyi.component.core.domain.R; import io.swagger.v3.oas.annotations.Operation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -17,8 +19,9 @@ public class LoginV2Controller { @Autowired private DkLoginKit dkLoginKit; - @PostMapping("/customer/login") + @PostMapping("/app/customer/login") @Operation(summary = "用户登陆") + @SaIgnore public R> loginCustomer(@RequestBody LoginPhoneBody loginBody) { Map ajax = new HashMap<>(); String token = dkLoginKit.login(loginBody.getMobile(),loginBody.getPassword()); diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/V2CommonController.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/V2CommonController.java index bbbb67b..d3c8c78 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/V2CommonController.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/controller/app/V2CommonController.java @@ -12,9 +12,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; /** @@ -23,6 +21,7 @@ import org.springframework.web.multipart.MultipartFile; */ @RestController @Tag(name = "通用接口") +@RequestMapping("/app/v2/common") @Slf4j public class V2CommonController { @Autowired @@ -30,7 +29,7 @@ public class V2CommonController { @Autowired private ISysOssService iSysOssService; - @GetMapping("/v2/common/sts") + @GetMapping("/sts") @Operation(summary = "文件上传") public R getSts(){ StsResult stsToken = stsOssKit.getStsToken(); @@ -40,7 +39,7 @@ public class V2CommonController { return R.ok(stsToken); } - @PostMapping("/v2/common/upload") + @PostMapping("/upload") @Operation(summary = "文件上传") public R uploadFile(MultipartFile file) { if (ObjectUtil.isNull(file)) { diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/domain/Customer.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/domain/Customer.java index 81682e9..490dfa3 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/domain/Customer.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/domain/Customer.java @@ -38,6 +38,9 @@ public class Customer implements Serializable { @Schema(description = "用户名称") private String nickName; + @Schema(description = "用户编号") + private String userCode; + /** * 用户密码 */ diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/dto/common/IdReq.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/dto/common/IdReq.java new file mode 100644 index 0000000..fd78494 --- /dev/null +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/dto/common/IdReq.java @@ -0,0 +1,8 @@ +package com.ruoyi.dk.dto.common; + +import lombok.Data; + +@Data +public class IdReq { + private Long id; +} diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/listener/AddTenantEventListener.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/listener/AddTenantEventListener.java index 3211be0..74cfad7 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/listener/AddTenantEventListener.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/listener/AddTenantEventListener.java @@ -2,8 +2,10 @@ package com.ruoyi.dk.listener; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.component.core.constant.TenantConstants; +import com.ruoyi.dk.domain.AgreementSetting; import com.ruoyi.dk.domain.HomeSetting; import com.ruoyi.dk.domain.LoansSetting; +import com.ruoyi.dk.service.AgreementSettingService; import com.ruoyi.dk.service.HomeSettingService; import com.ruoyi.dk.service.LoansSettingService; import com.ruoyi.system.event.AddTenantEvent; @@ -20,6 +22,8 @@ public class AddTenantEventListener { private HomeSettingService homeSettingService; @Autowired private LoansSettingService loansSettingService; + @Autowired + private AgreementSettingService agreementSettingService; @EventListener public void event(AddTenantEvent addTenantEvent){ @@ -34,6 +38,12 @@ public class AddTenantEventListener { setting.setTenantId(addTenantEvent.getTenantId()); setting.setId(null); } + List agreementSettingList = agreementSettingService.list(Wrappers.lambdaQuery(AgreementSetting.class).eq(AgreementSetting::getTenantId, defaultTenantId)); + for (AgreementSetting setting : agreementSettingList) { + setting.setTenantId(addTenantEvent.getTenantId()); + setting.setId(null); + } + agreementSettingService.saveBatch(agreementSettingList); homeSettingService.saveBatch(homeSettingList); loansSettingService.saveBatch(loansSettingList); } diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/oss/ali/StsOssKit.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/oss/ali/StsOssKit.java index eb3a102..5034370 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/oss/ali/StsOssKit.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/oss/ali/StsOssKit.java @@ -8,6 +8,10 @@ import com.aliyuncs.auth.sts.AssumeRoleResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; +import com.ruoyi.component.core.exception.ServiceException; +import com.ruoyi.component.satoken.utils.LoginHelper; +import com.ruoyi.system.domain.vo.SysTenantVo; +import com.ruoyi.system.service.ISysTenantService; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -27,7 +31,9 @@ public class StsOssKit { @Getter private OssConfig ossConfig; @Getter - public IAcsClient acsClient = null; + private IAcsClient acsClient = null; + @Autowired + private ISysTenantService tenantService; @PostConstruct public void init(){ @@ -41,6 +47,10 @@ public class StsOssKit { public StsResult getStsToken(){ + SysTenantVo tenant = tenantService.queryByTenantId(LoginHelper.getTenantId()); + if(tenant == null){ + throw new ServiceException("平台错误"); + } // 创建API请求并设置参数 AssumeRoleRequest request = new AssumeRoleRequest(); request.setDurationSeconds(ossConfig.getDurationSeconds()); @@ -58,7 +68,7 @@ public class StsOssKit { stsResult.setRegion("oss-"+ossConfig.getEndpoint()); stsResult.setBucket(ossConfig.getBucketName()); String nowStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - stsResult.setKey(ossConfig.getKey()+nowStr+"/"); + stsResult.setKey(ossConfig.getKey()+tenant.getPrefix()+"/"+nowStr+"/"); stsResult.setCdnDomain(ossConfig.getCdnDomain()); return stsResult; } catch (ServerException e) { diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/service/CustomerService.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/service/CustomerService.java index 6d5366c..e9ee343 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/service/CustomerService.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/service/CustomerService.java @@ -14,7 +14,7 @@ public interface CustomerService extends IService { void register(CustomerRegisterReq register); - boolean updatePwd(Long id, String password); + boolean updatePwd(Long id, String password, boolean logout); void borrowAmount(Long customerId, BigDecimal totalLoanMoney,BigDecimal totalRepayment); @@ -23,4 +23,6 @@ public interface CustomerService extends IService { void dk(Long customerId); IPage pageAdmin(PageQuery pageQuery, CustomerAdminResp bo); + + void loginOut(Long id); } diff --git a/ruoyi-dk/src/main/java/com/ruoyi/dk/service/impl/CustomerServiceImpl.java b/ruoyi-dk/src/main/java/com/ruoyi/dk/service/impl/CustomerServiceImpl.java index 5325e97..45637b3 100644 --- a/ruoyi-dk/src/main/java/com/ruoyi/dk/service/impl/CustomerServiceImpl.java +++ b/ruoyi-dk/src/main/java/com/ruoyi/dk/service/impl/CustomerServiceImpl.java @@ -1,10 +1,14 @@ package com.ruoyi.dk.service.impl; import cn.dev33.satoken.secure.BCrypt; +import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.component.core.exception.ServiceException; import com.ruoyi.component.mybatis.core.page.PageQuery; +import com.ruoyi.component.satoken.utils.LoginHelper; +import com.ruoyi.component.tenant.helper.TenantHelper; import com.ruoyi.dk.domain.BorrowLog; import com.ruoyi.dk.domain.Customer; import com.ruoyi.dk.domain.CustomerInfo; @@ -16,11 +20,14 @@ import com.ruoyi.dk.service.CustomerInfoService; import com.ruoyi.dk.service.CustomerService; import com.ruoyi.component.core.exception.CustomException; import com.ruoyi.component.core.util.MessageUtils; +import com.ruoyi.system.domain.vo.SysTenantVo; +import com.ruoyi.system.service.ISysTenantService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.List; @Service public class CustomerServiceImpl extends ServiceImpl implements CustomerService { @@ -28,6 +35,8 @@ public class CustomerServiceImpl extends ServiceImpl i private CustomerInfoService customerInfoService; @Resource private BorrowLogMapper borrowLogMapper; + @Autowired + private ISysTenantService sysTenantService; @Override public Customer getCustomerByName(String mobile) { return this.getOne(Wrappers.lambdaQuery(Customer.class) @@ -42,7 +51,12 @@ public class CustomerServiceImpl extends ServiceImpl i if(customer != null){ throw new CustomException(MessageUtils.message("dk.user.already.having")); } + SysTenantVo vo = sysTenantService.queryByTenantId(TenantHelper.getTenantId()); + if(vo == null){ + throw new ServiceException("未找到对应的平台错误"); + } customer = new Customer(); + customer.setUserCode(generateUserCode(vo.getPrefix())); customer.setPhoneNumber(phoneNumber); customer.setNickName(MessageUtils.message("dk.user.name")+phoneNumber.substring(phoneNumber.length() - 4)); customer.setPassword(BCrypt.hashpw(register.getPassword())); @@ -52,11 +66,24 @@ public class CustomerServiceImpl extends ServiceImpl i customerInfoService.save(customerInfo); } + private String generateUserCode(String prefix) { + String userCode = prefix + "-" + RandomUtil.randomNumbers(6); + boolean exists = this.exists(Wrappers.lambdaQuery(Customer.class).eq(Customer::getUserCode, userCode)); + if (exists) { + this.generateUserCode(prefix); + } + return userCode; + } + @Override - public boolean updatePwd(Long id, String password) { - return this.update(Wrappers.lambdaUpdate(Customer.class) - .eq(Customer::getId,id) - .set(Customer::getPassword,BCrypt.hashpw(password))); + public boolean updatePwd(Long id, String password,boolean logout) { + boolean update = this.update(Wrappers.lambdaUpdate(Customer.class) + .eq(Customer::getId, id) + .set(Customer::getPassword, BCrypt.hashpw(password))); + if(update && logout){ + LoginHelper.logoutApp(id); + } + return update; } @Override @@ -88,4 +115,9 @@ public class CustomerServiceImpl extends ServiceImpl i public IPage pageAdmin(PageQuery pageQuery, CustomerAdminResp bo) { return baseMapper.pageAdmin(pageQuery.build(),bo); } + + @Override + public void loginOut(Long id) { + LoginHelper.logoutApp(id); + } } diff --git a/ruoyi-dk/src/main/resources/mapper/CustomerMapper.xml b/ruoyi-dk/src/main/resources/mapper/CustomerMapper.xml index a714f50..d33ee94 100644 --- a/ruoyi-dk/src/main/resources/mapper/CustomerMapper.xml +++ b/ruoyi-dk/src/main/resources/mapper/CustomerMapper.xml @@ -21,6 +21,9 @@ and t1.phone_number like concat('%',#{bo.phoneNumber},'%') + + and t1.user_code = #{bo.userCode} + and (t1.nick_name like concat('%',#{bo.nickName},'%') or t2.real_name like concat('%',#{bo.nickName},'%')) @@ -42,6 +45,9 @@ and t1.phone_number like concat('%',#{bo.phoneNumber},'%') + + and t1.user_code = #{bo.userCode} + and (t1.nick_name like concat('%',#{bo.nickName},'%') or t2.real_name like concat('%',#{bo.nickName},'%')) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginController.java index 1054334..337988b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginController.java @@ -149,6 +149,13 @@ public class SysLoginController { return R.ok(menuService.buildMenus(menus)); } + @GetMapping("auth/tenant/get") + public R getCurrentTenant(HttpServletRequest request){ + String tenantId = TenantHelper.getTenantId(); + SysTenantVo vo = tenantService.queryByTenantId(tenantId); + return R.ok(vo); + } + @GetMapping("auth/tenant/list") public R> tenantList(HttpServletRequest request){ Long userId = LoginHelper.getUserId(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java index 5d5799f..11a7f8b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java @@ -8,12 +8,14 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.component.core.constant.UserConstants; import com.ruoyi.component.core.domain.R; +import com.ruoyi.component.core.exception.ServiceException; import com.ruoyi.component.excel.core.ExcelResult; import com.ruoyi.component.excel.utils.ExcelUtil; import com.ruoyi.component.log.annotation.Log; import com.ruoyi.component.log.enums.BusinessType; import com.ruoyi.component.mybatis.core.page.PageQuery; import com.ruoyi.component.mybatis.core.page.TableDataInfo; +import com.ruoyi.component.tenant.helper.TenantHelper; import com.ruoyi.component.web.core.BaseController; import com.ruoyi.system.domain.SysDept; import com.ruoyi.system.domain.SysRole; @@ -22,13 +24,11 @@ import com.ruoyi.component.satoken.utils.LoginHelper; import com.ruoyi.component.core.util.StreamUtils; import com.ruoyi.component.core.util.StringUtils; import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.domain.vo.SysTenantVo; import com.ruoyi.system.domain.vo.SysUserExportVo; import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.listener.SysUserImportListener; -import com.ruoyi.system.service.ISysDeptService; -import com.ruoyi.system.service.ISysPostService; -import com.ruoyi.system.service.ISysRoleService; -import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.*; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; @@ -40,6 +40,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; /** * 用户信息 @@ -56,6 +57,7 @@ public class SysUserController extends BaseController { private final ISysRoleService roleService; private final ISysPostService postService; private final ISysDeptService deptService; + private final ISysTenantService sysTenantService; /** * 获取用户列表 @@ -141,8 +143,18 @@ public class SysUserController extends BaseController { @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysUser user) { + SysTenantVo vo = sysTenantService.queryByTenantId(TenantHelper.getTenantId()); + if(vo == null){ + throw new ServiceException("未找到对应的平台"); + } + user.setUserName(vo.getPrefix()+"-"+user.getUserName()); + user.setPrefix(vo.getPrefix()); deptService.checkDeptDataScope(user.getDeptId()); - if (!userService.checkUserNameUnique(user)) { + AtomicBoolean checkUserName = new AtomicBoolean(false); + TenantHelper.ignore(() -> { + checkUserName.set(userService.checkUserNameUnique(user)); + }); + if (!checkUserName.get()) { return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 12da0c0..4bc6fad 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -56,7 +56,6 @@ public class SysUserServiceImpl implements ISysUserService, UserService { private final SysPostMapper postMapper; private final SysUserRoleMapper userRoleMapper; private final SysUserPostMapper userPostMapper; - private final ISysTenantService sysTenantService; @Override public TableDataInfo selectPageUserList(SysUser user, PageQuery pageQuery) { @@ -274,11 +273,6 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override @Transactional(rollbackFor = Exception.class) public int insertUser(SysUser user) { - SysTenantVo vo = sysTenantService.queryByTenantId(TenantHelper.getTenantId()); - if(vo == null){ - throw new ServiceException("未找到对应的平台"); - } - user.setUserName(vo.getPrefix()+"-"+user.getUserName()); // 新增用户信息 int rows = baseMapper.insert(user); // 新增用户岗位关联