From c6a78cee309fdc17b96e69f75cab275e98844544 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期二, 21 一月 2025 15:37:00 +0800 Subject: [PATCH] 1 --- ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/Sample.java | 50 ------ ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/UpdatePhone.java | 21 +++ ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java | 38 +++++ ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/UrlDownloader.java | 47 ++++++ ruoyi-modules/ruoyi-company/pom.xml | 10 - doc/aa.json | 116 ++++++++++++++++ ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/orc/OcrUtils.java | 79 +++++++++++ ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/CompanyController.java | 4 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java | 4 ruoyi-common/ruoyi-common-core/pom.xml | 10 + 10 files changed, 321 insertions(+), 58 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/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-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..36f8a37 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/orc/OcrUtils.java @@ -0,0 +1,79 @@ +package com.ruoyi.common.core.utils.orc; + +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.models.RuntimeOptions; +import com.ruoyi.common.core.utils.UrlDownloader; + +import java.io.InputStream; + +public class OcrUtils { + + /** + * <b>description</b> : + * <p>使用AK&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 String 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); + System.out.println(com.aliyun.teautil.Common.toJSONString(TeaModel.buildMap(recognizeAllTextResponse))); + } 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-modules/ruoyi-company/pom.xml b/ruoyi-modules/ruoyi-company/pom.xml index faef65c..90543e2 100644 --- a/ruoyi-modules/ruoyi-company/pom.xml +++ b/ruoyi-modules/ruoyi-company/pom.xml @@ -89,16 +89,6 @@ </dependency> <dependency> - <groupId>com.aliyun</groupId> - <artifactId>ocr_api20210707</artifactId> - </dependency> - - <dependency> - <groupId>com.aliyun</groupId> - <artifactId>darabonba-stream</artifactId> - </dependency> - - <dependency> <groupId>cn.idev.excel</groupId> <artifactId>fastexcel</artifactId> </dependency> 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 117074d..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 @@ -48,6 +48,10 @@ @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 index fe44574..f0a0ad1 100644 --- 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 @@ -1,57 +1,13 @@ package com.ruoyi.company.controller.front; +import com.aliyun.ocr_api20210707.models.RecognizeAllTextResponse; import com.aliyun.tea.*; public class Sample { - /** - * <b>description</b> : - * <p>使用AK&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(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); - // 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 void main(String[] args_) throws Exception { - java.util.List<String> args = java.util.Arrays.asList(args_); - com.aliyun.ocr_api20210707.Client client = Sample.createClient(); - // 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。 - java.io.InputStream bodyStream = com.aliyun.darabonba.stream.Client.readFromFilePath("<your-file-path>"); - com.aliyun.ocr_api20210707.models.RecognizeAllTextRequest recognizeAllTextRequest = new com.aliyun.ocr_api20210707.models.RecognizeAllTextRequest() - .setBody(bodyStream) - .setType("IdCard") - .setOutputFigure(true); - com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); - try { - // 复制代码运行请自行打印 API 的返回值 - client.recognizeAllTextWithOptions(recognizeAllTextRequest, runtime); - } 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); - } + } } \ 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 09c83e0..22df23c 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,14 +1,19 @@ 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.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; @@ -16,6 +21,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.*; @@ -27,6 +33,8 @@ public class UserController { private final UserService userService; private final CompanyService companyService; + private final RedisService redisService; + @PostMapping("/register") public R register(@RequestBody MgtCompanyDTO mgtCompanyDTO) { @@ -79,6 +87,36 @@ } /** + * 修改手机号 + */ + @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") 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 91ffd48..22bd4ca 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 @@ -124,7 +124,9 @@ } //用户信息 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); -- Gitblit v1.7.1