From de8b6e50653a9b774d1512e55a94d7b2084f0566 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期二, 21 一月 2025 16:59:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdCard.java                                      |   28 +++
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java                        |    3 
 doc/aa.json                                                                                                          |  116 ++++++++++++
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java                                                 |    5 
 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/CompanyController.java                  |   15 +
 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java                     |   16 +
 pom.xml                                                                                                              |    6 
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java                                     |    3 
 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/Sample.java                             |   13 +
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UserDetail.java                                |    4 
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePhone.java                               |   21 ++
 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java                                              |    3 
 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java                     |   74 ++++++++
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java                        |    3 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UrlDownloader.java                          |   47 +++++
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java |    3 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java                 |    5 
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java                  |    8 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/orc/OcrUtils.java                           |   97 ++++++++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CommonController.java                           |   34 +++
 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePassword.java                            |   10 +
 ruoyi-common/ruoyi-common-core/pom.xml                                                                               |   10 +
 22 files changed, 514 insertions(+), 10 deletions(-)

diff --git a/doc/aa.json b/doc/aa.json
new file mode 100644
index 0000000..2c69925
--- /dev/null
+++ b/doc/aa.json
@@ -0,0 +1,116 @@
+{
+  "headers": {
+    "access-control-allow-origin": "*",
+    "date": "Tue, 21 Jan 2025 07:22:51 GMT",
+    "keep-alive": "timeout=25",
+    "transfer-encoding": "chunked",
+    "vary": "Accept-Encoding",
+    "x-acs-request-id": "4545720F-58C2-579E-A1CE-08FDDFDF3296",
+    "connection": "keep-alive",
+    "content-type": "application/json;charset=utf-8",
+    "access-control-expose-headers": "*",
+    "x-acs-trace-id": "2a95d25064c13621b98f3883185aadc1"
+  },
+  "body": {
+    "RequestId": "4545720F-58C2-579E-A1CE-08FDDFDF3296",
+    "Data": {
+      "SubImages": [
+        {
+          "FigureInfo": {
+            "face": {
+              "FigureCount": 1,
+              "FigureDetails": [
+                {
+                  "FigurePoints": [
+                    {
+                      "X": 672,
+                      "Y": 289
+                    },
+                    {
+                      "X": 949,
+                      "Y": 288
+                    },
+                    {
+                      "X": 950,
+                      "Y": 624
+                    },
+                    {
+                      "X": 672,
+                      "Y": 624
+                    }
+                  ],
+                  "FigureAngle": 0
+                }
+              ]
+            }
+          },
+          "SubImageId": 0,
+          "KvInfo": {
+            "KvCount": 6,
+            "Data": {
+              "address": "黑龙江省宁安市渤海镇玄武大街35号",
+              "ethnicity": "汉",
+              "sex": "女",
+              "name": "陆佳欣",
+              "idNumber": "231084200002060822",
+              "birthDate": "2000年2月6日"
+            },
+            "KvDetails": {
+              "address": {
+                "KeyName": "address",
+                "ValueAngle": 1,
+                "Value": "黑龙江省宁安市渤海镇玄武大街35号",
+                "KeyConfidence": 100,
+                "ValueConfidence": 100
+              },
+              "ethnicity": {
+                "KeyName": "ethnicity",
+                "ValueAngle": 0,
+                "Value": "汉",
+                "KeyConfidence": 100,
+                "ValueConfidence": 100
+              },
+              "sex": {
+                "KeyName": "sex",
+                "ValueAngle": 0,
+                "Value": "女",
+                "KeyConfidence": 100,
+                "ValueConfidence": 100
+              },
+              "name": {
+                "KeyName": "name",
+                "ValueAngle": 0,
+                "Value": "陆佳欣",
+                "KeyConfidence": 100,
+                "ValueConfidence": 100
+              },
+              "idNumber": {
+                "KeyName": "idNumber",
+                "ValueAngle": 1,
+                "Value": "231084200002060822",
+                "KeyConfidence": 100,
+                "ValueConfidence": 100
+              },
+              "birthDate": {
+                "KeyName": "birthDate",
+                "ValueAngle": 0,
+                "Value": "2000年2月6日",
+                "KeyConfidence": 100,
+                "ValueConfidence": 100
+              }
+            }
+          },
+          "QualityInfo": {
+            "IsCopy": false
+          },
+          "Type": "身份证正面",
+          "Angle": 0
+        }
+      ],
+      "Height": 852,
+      "SubImageCount": 1,
+      "Width": 1136
+    }
+  },
+  "statusCode": 200
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 377e70a..81e8034 100644
--- a/pom.xml
+++ b/pom.xml
@@ -319,6 +319,12 @@
                 <artifactId>ocr_api20210707</artifactId>
                 <version>3.1.2</version>
             </dependency>
+
+            <dependency>
+                <groupId>com.aliyun</groupId>
+                <artifactId>darabonba-stream</artifactId>
+                <version>0.0.1</version>
+            </dependency>
             <!--aliyun-oss-->
             <dependency>
                 <groupId>com.aliyun.oss</groupId>
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java
index e65828b..2aade52 100644
--- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/RemoteCompanyUserService.java
@@ -4,6 +4,7 @@
         import com.ruoyi.common.core.constant.ServiceNameConstants;
         import com.ruoyi.common.core.domain.R;
         import com.ruoyi.company.api.domain.User;
+        import com.ruoyi.company.api.domain.dto.MgtCompanyDTO;
         import com.ruoyi.company.api.factory.RemoteCompanyUserServiceFallbackFactory;
         import com.ruoyi.company.api.model.RegisterUser;
         import org.springframework.cloud.openfeign.FeignClient;
@@ -12,7 +13,7 @@
 @FeignClient(contextId = "remoteCompanyUserService", value = ServiceNameConstants.COMPANY_SERVICE, fallbackFactory = RemoteCompanyUserServiceFallbackFactory.class)
 public interface RemoteCompanyUserService {
     @PostMapping("/front/user/register")
-    R<Boolean> registerUser(@RequestBody RegisterUser registerUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+    R<Boolean> registerUser(@RequestBody MgtCompanyDTO registerUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
     @GetMapping("/front/user/getUserByAccountName")
     R<User> getUserByAccountName(@RequestParam("accountName") String accountName, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java
index d27e813..a87283e 100644
--- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java
@@ -23,6 +23,9 @@
     /** 手机号 */
     private String phone;
 
+    /** 头像 */
+    private String avatar;
+
     /** 状态:1-激活 2-禁用 */
     private Integer status;
 
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java
index 9bc681e..9745423 100644
--- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java
@@ -108,7 +108,8 @@
     private String phone;
 
     @Schema(description = "登录密码")
-    @NotBlank(message = "登录密码不能为空")
     private String password;
 
+    private String smsCode;
+
 }
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java
index 763d59c..2e71fda 100644
--- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/factory/RemoteCompanyUserServiceFallbackFactory.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.company.api.RemoteCompanyUserService;
 import com.ruoyi.company.api.domain.User;
+import com.ruoyi.company.api.domain.dto.MgtCompanyDTO;
 import com.ruoyi.company.api.model.RegisterUser;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -18,7 +19,7 @@
         return new RemoteCompanyUserService() {
 
             @Override
-            public R<Boolean> registerUser(RegisterUser registerUser, String source) {
+            public R<Boolean> registerUser(MgtCompanyDTO registerUser, String source) {
                 return R.fail("用户注册失败:"+cause.getMessage());
             }
 
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePassword.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePassword.java
new file mode 100644
index 0000000..d43bd6b
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePassword.java
@@ -0,0 +1,10 @@
+package com.ruoyi.company.api.model;
+
+import lombok.Data;
+
+@Data
+public class UpdatePassword {
+    private String oldPassword;
+    private String newPassword;
+    private String confirmPassword;
+}
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePhone.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePhone.java
new file mode 100644
index 0000000..a3e24a4
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePhone.java
@@ -0,0 +1,21 @@
+package com.ruoyi.company.api.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(name = "修改手机号参数")
+public class UpdatePhone {
+
+    @Schema(description = "旧手机号", example = "13800138000")
+    private String oldPhone;
+
+    @Schema(description = "新手机号", example = "13800138000")
+    private String newPhone;
+
+    @Schema(description = "验证码", example = "123456")
+    private String code;
+
+    @Schema(description = "登录密码", example = "123456")
+    private String password;
+}
diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UserDetail.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UserDetail.java
index b2bcf33..d21569c 100644
--- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UserDetail.java
+++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UserDetail.java
@@ -39,6 +39,10 @@
     @Schema(description = "用户名称")
     private String userName;
 
+    /** 头像 */
+    @Schema(description = "头像")
+    private String avatar;
+
     /** 注册时间 */
     @Schema(description = "注册时间")
     private LocalDateTime registerTime;
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 ceba746..c68955d 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
@@ -47,6 +47,11 @@
             public R<SysUser> getUserById(Long userId, String source) {
                 return R.fail("获取用户信息失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<?> updateUser(SysUser sysUser, String source) {
+                return R.fail("更新用户信息");
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdCard.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdCard.java
new file mode 100644
index 0000000..c9fb9fe
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdCard.java
@@ -0,0 +1,28 @@
+package com.ruoyi.system.api.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+@Schema(description = "身份证信息")
+public class IdCard {
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "性别")
+    private String sex;
+
+    @Schema(description = "身份证号码")
+    private String idNumber;
+
+    @Schema(description = "出生日期")
+    private LocalDate birthDate;
+
+    @Schema(description = "民族")
+    private String ethnicity;
+
+    @Schema(description = "地址")
+    private String address;
+}
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 77d4a9a..d308e59 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
@@ -19,6 +19,7 @@
 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.domain.dto.MgtCompanyDTO;
 import com.ruoyi.company.api.model.RegisterUser;
 import com.ruoyi.system.api.model.AppUser;
 import com.ruoyi.system.api.model.LoginUser;
@@ -109,7 +110,7 @@
 
     @PostMapping("companyRegister")
     @Operation(summary = "用户注册接口",description = "用户注册接口")
-    public R<?> companyRegister(@RequestBody RegisterUser registerUser)
+    public R<?> companyRegister(@RequestBody MgtCompanyDTO registerUser)
     {
         // 用户注册
         sysLoginService.companyRegister(registerUser);
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 37d3960..2e2395c 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
@@ -19,6 +19,7 @@
 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.domain.dto.MgtCompanyDTO;
 import com.ruoyi.company.api.model.RegisterUser;
 import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.domain.SysUser;
@@ -148,7 +149,7 @@
         recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
     }
 
-    public void companyRegister(RegisterUser registerUser) {
+    public void companyRegister(MgtCompanyDTO registerUser) {
         String accountName = registerUser.getAccountName();
         String password = registerUser.getPassword();
         // 用户名或密码为空 错误
@@ -196,7 +197,7 @@
         if (r.getData() == null) {
             throw new ServiceException("账号不存在");
         }
-        if (!SecurityUtils.matchesPassword(password, r.getData().getPassword())) {
+        if (!SecurityUtils.matchesPassword(r.getData().getPassword(), password)) {
             throw new ServiceException("密码错误");
         }
         return r.getData();
diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml
index 6aa0b7d..68ec16f 100644
--- a/ruoyi-common/ruoyi-common-core/pom.xml
+++ b/ruoyi-common/ruoyi-common-core/pom.xml
@@ -141,6 +141,16 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>ocr_api20210707</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>darabonba-stream</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UrlDownloader.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UrlDownloader.java
new file mode 100644
index 0000000..9b7a776
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UrlDownloader.java
@@ -0,0 +1,47 @@
+package com.ruoyi.common.core.utils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class UrlDownloader {
+
+    /**
+     * 将指定的URL内容下载为输入流
+     *
+     * @param urlString 要下载的URL
+     * @return 包含URL内容的输入流
+     * @throws IOException 如果发生I/O错误
+     */
+    public static InputStream downloadAsStream(String urlString) throws IOException {
+        URL url = new URL(urlString);
+        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+        connection.setRequestMethod("GET");
+        connection.connect();
+
+        // 检查HTTP响应码
+        int responseCode = connection.getResponseCode();
+        if (responseCode != HttpURLConnection.HTTP_OK) {
+            throw new IOException("HTTP response code: " + responseCode);
+        }
+
+        return connection.getInputStream();
+    }
+
+    public static void main(String[] args) {
+        String urlString = "https://example.com/file.txt"; // 替换为你要下载的URL
+
+        try (InputStream inputStream = downloadAsStream(urlString)) {
+            // 这里你可以处理输入流,例如将其写入文件或进行其他操作
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = inputStream.read(buffer)) != -1) {
+                // 处理读取的数据,例如写入文件或打印到控制台
+                System.out.write(buffer, 0, bytesRead);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/orc/OcrUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/orc/OcrUtils.java
new file mode 100644
index 0000000..6e0d145
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/orc/OcrUtils.java
@@ -0,0 +1,97 @@
+package com.ruoyi.common.core.utils.orc;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.aliyun.ocr_api20210707.models.RecognizeAllTextRequest;
+import com.aliyun.ocr_api20210707.models.RecognizeAllTextResponse;
+import com.aliyun.tea.TeaException;
+import com.aliyun.tea.TeaModel;
+import com.aliyun.teautil.Common;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.ruoyi.common.core.utils.UrlDownloader;
+
+import java.io.InputStream;
+import java.util.Map;
+
+public class OcrUtils {
+
+    /**
+     * <b>description</b> :
+     * <p>使用AK&amp;SK初始化账号Client</p>
+     *
+     * @return Client
+     * @throws Exception
+     */
+    public static com.aliyun.ocr_api20210707.Client createClient() throws Exception {
+        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
+                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+                .setAccessKeyId("LTAI5tFSeci96NRF6p6UN69G")
+                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+                .setAccessKeySecret("25t5zmWkueoQd81Zka70uPKRPgaMiV");
+        // Endpoint 请参考 https://api.aliyun.com/product/ocr-api
+        config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
+        return new com.aliyun.ocr_api20210707.Client(config);
+    }
+
+    /**
+     * 证件识别
+     */
+    public static JSONObject idCard(InputStream bodyStream) throws Exception {
+        com.aliyun.ocr_api20210707.Client client = createClient();
+        // 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
+        RecognizeAllTextRequest recognizeAllTextRequest = new RecognizeAllTextRequest()
+                .setBody(bodyStream)
+                .setType("IdCard")
+                .setOutputFigure(true);
+        RuntimeOptions runtime = new RuntimeOptions();
+        try {
+            // 复制代码运行请自行打印 API 的返回值
+            RecognizeAllTextResponse recognizeAllTextResponse = client.recognizeAllTextWithOptions(recognizeAllTextRequest, runtime);
+            String jsonString = Common.toJSONString(TeaModel.buildMap(recognizeAllTextResponse));
+            JSONObject jsonObject = JSONObject.parseObject(jsonString);
+            Integer statusCode = jsonObject.getInteger("statusCode");
+            if (statusCode != 200) {
+                throw new RuntimeException("识别失败");
+            }
+            JSONObject body = jsonObject.getJSONObject("body");
+            JSONObject data = body.getJSONObject("Data");
+            JSONArray subImages = body.getJSONArray("SubImages");
+            if (subImages != null && !subImages.isEmpty()){
+                JSONObject subImage = subImages.getJSONObject(0);
+                JSONObject kvInfo = subImage.getJSONObject("KvInfo");
+                return kvInfo.getJSONObject("Data");
+            }
+            return null;
+        } catch (TeaException error) {
+            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+            // 错误 message
+            System.out.println(error.getMessage());
+            // 诊断地址
+            System.out.println(error.getData().get("Recommend"));
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+            // 错误 message
+            System.out.println(error.getMessage());
+            // 诊断地址
+            System.out.println(error.getData().get("Recommend"));
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        }
+        return null;
+    }
+
+
+    public static void main(String[] args) {
+        try {
+            InputStream inputStream = UrlDownloader.downloadAsStream("https://ai.bdstatic.com/file/3C8C5B451BB4445697730217EC8648E3");
+            idCard(inputStream);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
index b0563b1..687348e 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -130,4 +130,12 @@
         BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
         return passwordEncoder.matches(rawPassword, encodedPassword);
     }
+
+    public static void main(String[] args) {
+        String password1 = "$2a$10$qB8arbbFx4mevJzCOoChhebLS/ULjY7BCBNMNk9CoSJHAUM/Ixr2K";
+        for (int i = 0; i < 5; i++) {
+            String password = encryptPassword("123");
+            System.out.println(matchesPassword("123",password1));
+        }
+    }
 }
diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/CompanyController.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/CompanyController.java
index e6201f4..76af8bf 100644
--- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/CompanyController.java
+++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/CompanyController.java
@@ -12,6 +12,7 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -40,4 +41,18 @@
                 .eq(Company::getUserId, userId));
         return R.ok(company);
     }
+
+    /**
+     * 修改企业信息
+     */
+    @Operation(summary = "修改企业信息", tags = {"企业端"})
+    @PutMapping("/updateCompany")
+    public R<Void> updateCompany(Company company){
+        Long userId = SecurityUtils.getAppLoginUser().getUserId();
+        Company companyDb = companyService.getOne(new LambdaQueryWrapper<Company>()
+                .eq(Company::getUserId, userId));
+        company.setId(companyDb.getId());
+        companyService.updateById(company);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/Sample.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/Sample.java
new file mode 100644
index 0000000..f0a0ad1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/Sample.java
@@ -0,0 +1,13 @@
+package com.ruoyi.company.controller.front;
+
+import com.aliyun.ocr_api20210707.models.RecognizeAllTextResponse;
+import com.aliyun.tea.*;
+
+public class Sample {
+
+
+
+    public static void main(String[] args_) throws Exception {
+
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java
index 0160c77..e44e2e9 100644
--- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java
+++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java
@@ -1,13 +1,20 @@
 package com.ruoyi.company.controller.front;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.CaptchaException;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.annotation.InnerAuth;
 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.domain.dto.MgtCompanyDTO;
 import com.ruoyi.company.api.model.RegisterUser;
+import com.ruoyi.company.api.model.UpdatePassword;
+import com.ruoyi.company.api.model.UpdatePhone;
 import com.ruoyi.company.api.model.UserDetail;
 import com.ruoyi.company.service.CompanyService;
 import com.ruoyi.company.service.UserService;
@@ -15,6 +22,7 @@
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.experimental.StandardException;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.*;
 
@@ -26,6 +34,7 @@
 public class UserController {
     private final UserService userService;
     private final CompanyService companyService;
+    private final RedisService redisService;
 
     @PostMapping("/register")
     public R register(@RequestBody MgtCompanyDTO mgtCompanyDTO) {
@@ -38,8 +47,11 @@
     public R<UserDetail> getUserDetail() {
         AppUser appLoginUser = SecurityUtils.getAppLoginUser();
         User user = userService.getById(appLoginUser.getUserId());
+        Company company = companyService.getOne(new LambdaQueryWrapper<Company>()
+                .eq(Company::getUserId, user.getUserId()));
         UserDetail userDetail = new UserDetail();
         BeanUtils.copyProperties(user, userDetail);
+        BeanUtils.copyProperties(company, userDetail);
         return R.ok(userDetail);
     }
 
@@ -58,9 +70,71 @@
     }
 
     @PutMapping("/updateUser")
+    @InnerAuth
     public R<Void> updateUser(@RequestBody User user){
         user.setUpdateTime(LocalDateTime.now());
         userService.updateById(user);
         return R.ok();
     }
+
+    /**
+     * 编辑联系人信息
+     */
+    @PutMapping("/updateUserDetail")
+    @Operation(summary = "编辑联系人信息",tags = {"企业端"})
+    public R<Void> updateUserDetail(@RequestBody UserDetail userDetail) {
+        User user = userService.getById(userDetail.getUserId());
+        BeanUtils.copyProperties(userDetail, user);
+        userService.updateById(user);
+        return R.ok();
+    }
+
+    /**
+     * 修改手机号
+     */
+    @PutMapping("/updatePhone")
+    @Operation(summary = "修改手机号",tags = {"企业端"})
+    public R<Void> updatePhone(@RequestBody UpdatePhone updatePhone) {
+        AppUser appLoginUser = SecurityUtils.getAppLoginUser();
+        User user = userService.getById(appLoginUser.getUserId());
+        if (!user.getPhone().equals(updatePhone.getOldPhone())) {
+            return R.fail("旧手机号错误");
+        }
+        String verifyKey = CacheConstants.PHONE_CODE_KEY + StringUtils.nvl(user.getPhone(), "");
+        String captcha = redisService.getCacheObject(verifyKey);
+        if (captcha == null) {
+            throw new CaptchaException("验证码已失效");
+        }
+        redisService.deleteObject(verifyKey);
+        if (!updatePhone.getCode().equalsIgnoreCase(captcha)) {
+            throw new CaptchaException("验证码错误");
+        }
+
+        String password = SecurityUtils.encryptPassword(updatePhone.getPassword());
+        if (!user.getPassword().equals(password)) {
+            return R.fail("密码错误");
+        }
+        user.setPhone(updatePhone.getNewPhone());
+        userService.updateById(user);
+        return R.ok();
+    }
+
+    /**
+     * 修改密码
+     */
+    @PutMapping("/updatePassword")
+    @Operation(summary = "修改密码",tags = {"企业端"})
+    public R<Void> updatePassword(@RequestBody UpdatePassword updatePassword) {
+        AppUser appLoginUser = SecurityUtils.getAppLoginUser();
+        User user = userService.getById(appLoginUser.getUserId());
+        if (!SecurityUtils.matchesPassword(updatePassword.getOldPassword(), user.getPassword())) {
+            return R.fail("旧密码错误");
+        }
+        if (!updatePassword.getNewPassword().equals(updatePassword.getConfirmPassword())){
+            return R.fail("两次密码不一致");
+        }
+        user.setPassword(SecurityUtils.encryptPassword(updatePassword.getNewPassword()));
+        userService.updateById(user);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
index 77a4a96..d2764db 100644
--- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
+++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
@@ -34,9 +34,11 @@
 public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyService {
     private final UserService userService;
     private final HttpServletResponse response;
+
     private final AliyunCloudAuthUtil aliyunCloudAuthUtil;
     /**
      * 获取企业列表
+     *
      * @param query
      * @return
      */
@@ -65,6 +67,7 @@
 
     /**
      * 获取企业详情
+     *
      * @param id
      * @return
      */
@@ -86,6 +89,7 @@
 
     /**
      * 新增企业
+     *
      * @param dto
      * @return
      */
@@ -118,11 +122,12 @@
 
     /**
      * 编辑企业
+     *
      * @param dto
      */
     @Override
     public void editCompany(MgtCompanyDTO dto) {
-        if (Objects.isNull(dto.getId())){
+        if (Objects.isNull(dto.getId())) {
             throw new ServiceException("企业id不能为空");
         }
         //查询企业
@@ -141,12 +146,14 @@
         }
         //用户信息
         User userUpd = BeanUtils.copyBean(dto, User.class);
-        userUpd.setPassword(SecurityUtils.encryptPassword(dto.getPassword()));
+        if (StringUtils.isNotBlank(dto.getPassword())) {
+            userUpd.setPassword(SecurityUtils.encryptPassword(dto.getPassword()));
+        }
         userUpd.setUserId(user.getUserId());
         userUpd.setUpdateBy(SecurityUtils.getUserId());
         userService.updateById(userUpd);
         //根据公司名称查询数据库
-        Long count = this.lambdaQuery().ne(Company::getId,dto.getId()).eq(Company::getCompanyName, company.getCompanyName()).count();
+        Long count = this.lambdaQuery().ne(Company::getId, dto.getId()).eq(Company::getCompanyName, company.getCompanyName()).count();
         if (count > 0) {
             throw new ServiceException("该公司账号已存在");
         }
@@ -162,6 +169,7 @@
 
     /**
      * 删除企业
+     *
      * @param id
      */
     @Override
@@ -172,7 +180,7 @@
             throw new ServiceException("删除失败,该企业不存在");
         }
         //删除企业账号
-         userService.removeById(company.getUserId());
+        userService.removeById(company.getUserId());
 
         //删除企业信息
         this.removeById(id);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CommonController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CommonController.java
new file mode 100644
index 0000000..fddfde9
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CommonController.java
@@ -0,0 +1,34 @@
+package com.ruoyi.system.controller;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.UrlDownloader;
+import com.ruoyi.common.core.utils.orc.OcrUtils;
+import com.ruoyi.system.api.model.IdCard;
+import io.swagger.v3.oas.annotations.Parameter;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.InputStream;
+
+@RestController
+@RequestMapping("/common")
+public class CommonController {
+
+    /**
+     * ocr提取身份证信息
+     */
+    @GetMapping("/idCard")
+    public R<IdCard> idCard(@Parameter(name = "url", description = "图片地址") String url) {
+        InputStream inputStream;
+        try {
+            inputStream = UrlDownloader.downloadAsStream(url);
+            JSONObject jsonObject = OcrUtils.idCard(inputStream);
+            IdCard idCard = JSONObject.parseObject(jsonObject.toJSONString(), IdCard.class);
+            return R.ok(idCard);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

--
Gitblit v1.7.1