From e02a3eee8217ae6bff5890d1ece6ee1f342e03dd Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期二, 21 一月 2025 14:36:21 +0800
Subject: [PATCH] 1.管理端:修改密码 2.阿里云oss

---
 ruoyi-modules/ruoyi-file/pom.xml                                                                            |    6 
 ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/OssConfig.java                                 |   59 +++++++
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java                                        |   40 +++-
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/query/MgtCompanyQuery.java           |    2 
 ruoyi-auth/src/main/java/com/ruoyi/auth/form/MgtPasswordDTO.java                                            |   22 ++
 ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssServiceImpl.java                           |  103 ++++++++++++
 pom.xml                                                                                                     |    8 
 ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssService.java                               |   28 +++
 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java |    2 
 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java                                     |   44 +++--
 ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java                     |   38 ++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java                 |   55 ++++--
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SpringDocConfig.java                                   |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java        |    5 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java                        |   17 ++
 15 files changed, 374 insertions(+), 57 deletions(-)

diff --git a/pom.xml b/pom.xml
index e6775b9..a3e5dbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,7 @@
         <logback.version>1.2.13</logback.version>
         <spring-framework.version>5.3.39</spring-framework.version>
         <fastexcel.version>1.0.0</fastexcel.version>
+        <aliyun-oss.version>3.17.4</aliyun-oss.version>
     </properties>
 
     <!-- 依赖声明 -->
@@ -317,7 +318,12 @@
                 <artifactId>ocr_api20210707</artifactId>
                 <version>3.1.2</version>
             </dependency>
-
+            <!--aliyun-oss-->
+            <dependency>
+                <groupId>com.aliyun.oss</groupId>
+                <artifactId>aliyun-sdk-oss</artifactId>
+                <version>${aliyun-oss.version}</version>
+            </dependency>
 
 
         </dependencies>
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/query/MgtCompanyQuery.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/query/MgtCompanyQuery.java
index 8c79b30..dfb0001 100644
--- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/query/MgtCompanyQuery.java
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/query/MgtCompanyQuery.java
@@ -3,12 +3,14 @@
 import com.ruoyi.common.core.page.BasePage;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * @author mitao
  * @date 2025/1/20
  */
 @Data
+@EqualsAndHashCode(callSuper = true)
 @Schema(name = "管理端企业列表查询对象")
 public class MgtCompanyQuery extends BasePage {
     private static final long serialVersionUID = 5429160619805017277L;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
index 95cb91d..017960a 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
@@ -51,4 +51,21 @@
      */
     @PutMapping("/user/recordlogin")
     public R<Boolean> recordUserLogin(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    /**
+     * 根据用户id查询用户信息
+     * @param userId
+     * @param source
+     * @return
+     */
+    @GetMapping("/user/get-by-id/{userId}")
+    R<SysUser> getUserById(@PathVariable("userId") Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    /**
+     * 更新用户信息
+     * @param sysUser
+     * @param source
+     */
+    @PostMapping("/user/update")
+    R<?> updateUser(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
index 5972b3f..ceba746 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
@@ -42,6 +42,11 @@
             {
                 return R.fail("记录用户登录信息失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<SysUser> getUserById(Long userId, String source) {
+                return R.fail("获取用户信息失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
index a07dc6e..d60dbe4 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -1,46 +1,42 @@
 package com.ruoyi.auth.controller;
 
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-
+import com.ruoyi.auth.form.LoginBody;
+import com.ruoyi.auth.form.MgtPasswordDTO;
+import com.ruoyi.auth.service.SysLoginService;
 import com.ruoyi.auth.utils.SmsUtils;
 import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.CaptchaException;
 import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.JwtUtils;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.auth.AuthUtil;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.company.api.RemoteCompanyUserService;
 import com.ruoyi.company.api.domain.User;
 import com.ruoyi.company.api.model.RegisterUser;
 import com.ruoyi.system.api.model.AppUser;
+import com.ruoyi.system.api.model.LoginUser;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
-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;
-import com.ruoyi.common.core.utils.StringUtils;
-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.model.LoginUser;
 
-import java.time.LocalDateTime;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
-
-import static com.alibaba.nacos.api.common.Constants.ACCESS_TOKEN;
-
 /**
  * token 控制
  * 
@@ -62,7 +58,7 @@
 
     @Resource
     private RemoteCompanyUserService remoteCompanyUserService;
-
+    @Operation(summary = "管理端-登录")
     @PostMapping("login")
     public R<?> login(@RequestBody LoginBody form)
     {
@@ -72,6 +68,16 @@
         return R.ok(tokenService.createToken(userInfo));
     }
 
+    @Operation(summary = "管理端-修改密码")
+    @GetMapping("/modify-pwd")
+    public R<?> modifyPwd(@Valid @RequestBody MgtPasswordDTO dto) {
+        try {
+            sysLoginService.modifyPwd(dto);
+            return R.ok();
+        } catch (ServiceException e) {
+            return R.fail(e.getMessage());
+        }
+    }
     @DeleteMapping("logout")
     public R<?> logout(HttpServletRequest request)
     {
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/MgtPasswordDTO.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/MgtPasswordDTO.java
new file mode 100644
index 0000000..e20c4d0
--- /dev/null
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/MgtPasswordDTO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.auth.form;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author mitao
+ * @date 2025/1/21
+ */
+@Data
+@Schema(name = "修改密码数据传输对象")
+public class MgtPasswordDTO {
+    @NotBlank(message = "原密码不能为空")
+    @Schema(description = "原密码", example = "1")
+    private String oldPassword;
+
+    @NotBlank(message = "新密码不能为空")
+    @Schema(description = "新密码",example = "12345678")
+    private String newPassword;
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
index d0f82e2..7e4c896 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -1,23 +1,13 @@
 package com.ruoyi.auth.service;
 
-import com.ruoyi.common.core.exception.CaptchaException;
-import com.ruoyi.common.security.annotation.RequiresPermissions;
-import com.ruoyi.company.api.RemoteCompanyService;
-import com.ruoyi.company.api.RemoteCompanyUserService;
-import com.ruoyi.company.api.domain.Company;
-import com.ruoyi.company.api.domain.User;
-import com.ruoyi.company.api.model.RegisterUser;
-import lombok.RequiredArgsConstructor;
-import org.jacoco.agent.rt.internal_43f5073.core.internal.flow.IFrame;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
+import com.ruoyi.auth.form.MgtPasswordDTO;
 import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.constant.UserConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.enums.UserStatus;
+import com.ruoyi.common.core.exception.CaptchaException;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.text.Convert;
 import com.ruoyi.common.core.utils.DateUtils;
@@ -25,13 +15,21 @@
 import com.ruoyi.common.core.utils.ip.IpUtils;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.company.api.RemoteCompanyService;
+import com.ruoyi.company.api.RemoteCompanyUserService;
+import com.ruoyi.company.api.domain.Company;
+import com.ruoyi.company.api.domain.User;
+import com.ruoyi.company.api.model.RegisterUser;
 import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.model.LoginUser;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 登录校验方法
@@ -256,4 +254,20 @@
         return false;
     }
 
+    /**
+     * 管理端-修改密码
+     * @param dto
+     */
+    public void modifyPwd(MgtPasswordDTO dto) {
+        Long userId = SecurityUtils.getUserId();
+        SysUser sysUser = remoteUserService.getUserById(userId, SecurityConstants.INNER).getData();
+        if (Objects.isNull(sysUser)){
+            throw new ServiceException("用户不存在");
+        }
+        if (!SecurityUtils.matchesPassword(SecurityUtils.encryptPassword(dto.getOldPassword()), sysUser.getPassword())){
+            throw new ServiceException("原密码错误");
+        }
+        sysUser.setPassword(SecurityUtils.encryptPassword(dto.getNewPassword()));
+        remoteUserService.updateUser(sysUser,SecurityConstants.INNER);
+    }
 }
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SpringDocConfig.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SpringDocConfig.java
index e6e564f..eda1030 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SpringDocConfig.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SpringDocConfig.java
@@ -52,7 +52,7 @@
     @Autowired
     private DiscoveryClient discoveryClient;
 
-    private final static String[] EXCLUDE_ROUTES = new String[] { "ruoyi-gateway", "ruoyi-auth", "ruoyi-file", "ruoyi-monitor" };
+    private final static String[] EXCLUDE_ROUTES = new String[] { "ruoyi-gateway", /*"ruoyi-auth",*/ "ruoyi-file", "ruoyi-monitor" };
 
     public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient)
     {
diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java
index dc8925a..cdb3823 100644
--- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java
+++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java
@@ -30,7 +30,7 @@
 @Validated
 @RestController
 @RequestMapping("/mgt/company")
-@Tag(name = "管理端企业列表相关接口")
+@Tag(name = "管理端-企业列表相关接口")
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class MgtCompanyController {
     private final CompanyService companyService;
diff --git a/ruoyi-modules/ruoyi-file/pom.xml b/ruoyi-modules/ruoyi-file/pom.xml
index b4d5c62..3749cb2 100644
--- a/ruoyi-modules/ruoyi-file/pom.xml
+++ b/ruoyi-modules/ruoyi-file/pom.xml
@@ -65,7 +65,11 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-api-system</artifactId>
         </dependency>
-        
+        <!--aliyun-oss-->
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/OssConfig.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/OssConfig.java
new file mode 100644
index 0000000..cb0cee2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/OssConfig.java
@@ -0,0 +1,59 @@
+package com.ruoyi.file.config;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 存储-配置
+ *
+ * @author mitao
+ */
+@ConfigurationProperties(prefix = "oss")
+@Component
+@Slf4j
+@Data
+public class OssConfig {
+
+    private String folder = "dev";
+
+    private String accessKeyId;
+
+    private String accessKeySecret;
+
+    private String uploadEndpoint;
+
+    private String downloadEndpoint;
+
+    private String bucketName;
+
+    public static String FOLDER;
+    public static String ACCESS_KEY_ID;
+    public static String ACCESS_KEY_SECRET;
+    public static String UPLOAD_ENDPOINT;
+    public static String DOWNLOAD_ENDPOINT;
+    public static String BUCKET_NAME;
+
+
+    @PostConstruct
+    public void init() {
+
+        log.debug("OSS配置信息:" + JSONObject.toJSONString(this));
+        FOLDER = folder;
+        ACCESS_KEY_ID = accessKeyId;
+        ACCESS_KEY_SECRET = accessKeySecret;
+        UPLOAD_ENDPOINT = uploadEndpoint;
+        DOWNLOAD_ENDPOINT = downloadEndpoint;
+        BUCKET_NAME = bucketName;
+    }
+
+    public String getStoreFolder() {
+
+        return getFolder();
+    }
+
+}
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
index 45f86b0..6bc7d21 100644
--- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
+++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
@@ -1,15 +1,22 @@
 package com.ruoyi.file.controller;
 
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.file.FileUtils;
+import com.ruoyi.file.service.ISysFileService;
+import com.ruoyi.file.service.OssService;
+import com.ruoyi.system.api.domain.SysFile;
+import io.swagger.v3.oas.annotations.Operation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.utils.file.FileUtils;
-import com.ruoyi.file.service.ISysFileService;
-import com.ruoyi.system.api.domain.SysFile;
+
+import java.io.IOException;
+import java.util.Objects;
 
 /**
  * 文件请求处理
@@ -23,6 +30,29 @@
 
     @Autowired
     private ISysFileService sysFileService;
+    @Autowired
+    private OssService ossService;
+    /**
+     * 上传文件
+     *
+     * @param file
+     * @return
+     */
+    @Operation(summary = "上传文件")
+    @PostMapping("/oss/upload")
+    public R<String> uploadOss(@RequestPart("file") MultipartFile file) {
+
+        if (Objects.isNull(file)) {
+            throw new ServiceException("文件不能为空");
+        }
+        String fileUrl;
+        try {
+            fileUrl = ossService.uploadFile(file);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return R.ok(fileUrl);
+    }
 
     /**
      * 文件上传请求
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssService.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssService.java
new file mode 100644
index 0000000..21b08e7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.file.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * @author mitao
+ * @date 2024/12/23
+ */
+public interface OssService {
+    /**
+     * 文件上传
+     *
+     * @param file
+     * @return
+     */
+    String uploadFile(MultipartFile file) throws IOException;
+
+    /**
+     * 文件上传,指定上传路径
+     *
+     * @param storagePath
+     * @param file
+     * @return
+     */
+    String upload(String storagePath, MultipartFile file) throws IOException;
+}
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssServiceImpl.java
new file mode 100644
index 0000000..77a3098
--- /dev/null
+++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/OssServiceImpl.java
@@ -0,0 +1,103 @@
+package com.ruoyi.file.service;
+
+
+import com.aliyun.oss.ClientBuilderConfiguration;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.common.auth.CredentialsProvider;
+import com.aliyun.oss.common.auth.DefaultCredentialProvider;
+import com.aliyun.oss.common.comm.SignVersion;
+import com.aliyun.oss.model.PutObjectRequest;
+import com.aliyun.oss.model.PutObjectResult;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.file.config.OssConfig;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Objects;
+import java.util.UUID;
+
+/**
+ * @author mitao
+ * @date 2024/12/23
+ */
+@Service
+public class OssServiceImpl implements OssService {
+    /**
+     * 文件上传
+     *
+     * @param file
+     * @return
+     */
+    @Override
+    public String uploadFile(MultipartFile file) throws IOException {
+        return upload(OssConfig.FOLDER, file);
+    }
+
+    /**
+     * 文件上传,指定上传路径
+     *
+     * @param storagePath
+     * @param file
+     * @return
+     */
+    @Override
+    public String upload(String storagePath, MultipartFile file) throws IOException {
+        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(OssConfig.ACCESS_KEY_ID, OssConfig.ACCESS_KEY_SECRET);
+        String region = "cn-chengdu";
+        // 创建OSSClient实例。
+        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
+        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
+        OSS ossClient = OSSClientBuilder.create()
+                .endpoint(OssConfig.UPLOAD_ENDPOINT)
+                .credentialsProvider(credentialsProvider)
+                .clientConfiguration(clientBuilderConfiguration)
+                .region(region)
+                .build();
+        InputStream inputStream = file.getInputStream();
+
+        String originFileName = file.getOriginalFilename();
+        String fileExt = Objects.requireNonNull(originFileName).substring(originFileName.lastIndexOf(".") + 1);
+        String fileName = originFileName.substring(0, originFileName.lastIndexOf("."));
+        // 设置文件名
+        String filePathName = generateRelativeStoragePath(storagePath, fileExt, fileName);
+        // 创建PutObjectRequest对象。
+        PutObjectRequest putObjectRequest = new PutObjectRequest(OssConfig.BUCKET_NAME, filePathName, inputStream);
+        // 创建PutObject请求。
+        PutObjectResult result = ossClient.putObject(putObjectRequest);
+
+        return OssConfig.DOWNLOAD_ENDPOINT + filePathName;
+    }
+    
+    /**
+     * <pre>
+     * 获取存储的相对路径
+     * 规则path + / + yyyyMMddHH  + uuid
+     * </pre>
+     *
+     * @param storagePath
+     * @return
+     */
+    private static String generateRelativeStoragePath(String storagePath, String fileType, String fileName) {
+
+        String time = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
+        String uuid = UUID.randomUUID().toString();
+        StringBuilder sb = new StringBuilder();
+        if (StringUtils.isNotBlank(storagePath)) {
+            sb.append(storagePath).append("/");
+        }
+        if (fileName == null) {
+            sb.append(time).append(uuid);
+        } else {
+            sb.append(fileName).append(time);
+        }
+        if (StringUtils.isNotBlank(fileType)) {
+            sb.append(".").append(fileType);
+        }
+        return sb.toString();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index a43361c..c37477c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -1,22 +1,5 @@
 package com.ruoyi.system.controller;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.poi.ExcelUtil;
@@ -39,6 +22,24 @@
 import com.ruoyi.system.service.ISysPostService;
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 用户信息
@@ -348,4 +349,24 @@
     {
         return success(deptService.selectDeptTreeList(dept));
     }
+
+    /**
+     * 根据用户id获取用户信息
+     * @param userId
+     * @return
+     */
+    @InnerAuth
+    @GetMapping("/get-by-id/{userId}")
+    R<SysUser> getUserById(@PathVariable("userId") Long userId){
+        return R.ok(userService.selectUserById(userId));
+    }
+    /**
+     * 更新用户信息
+     * @param sysUser
+     */
+    @InnerAuth
+    @PostMapping("/update")
+    R<?> updateUser(@RequestBody SysUser sysUser){
+        return R.ok(userService.resetPwd(sysUser));
+    }
 }

--
Gitblit v1.7.1