From 1bbfdfcecf243ba36512b59da80e41602ad50263 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 19 一月 2026 13:46:10 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/enums/EmailType.java                      |   18 ++++++
 zy-acs-flow/src/page/settings/SecuritySettings.jsx                                               |    8 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/service/EmailService.java                 |   74 ++++++++++++++++++++++++
 zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java                                   |   35 ++++++++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java            |   14 +++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/param/UpdatePasswordParam.java |    2 
 6 files changed, 137 insertions(+), 14 deletions(-)

diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java b/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java
index c50cb92..a484c83 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java
@@ -2,10 +2,8 @@
 
 import com.zy.acs.framework.common.Cools;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
+import java.util.concurrent.ThreadLocalRandom;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
 
@@ -292,4 +290,33 @@
         return snakeCaseField + (order.isEmpty() ? "" : " " + order);
     }
 
+    public static String processTemplate(String template, Map<String, Object> params) {
+        if (template == null || params == null) {
+            return template;
+        }
+        String processed = template;
+        for (Map.Entry<String, Object> entry : params.entrySet()) {
+            processed = processed.replace("${" + entry.getKey() + "}", entry.getValue().toString());
+        }
+        return processed;
+    }
+
+    public static String randomNumbers(int length) {
+        String baseString = "0123456789";
+
+        if (length < 1) {
+            length = 1;
+        }
+
+        StringBuilder sb = new StringBuilder(length);
+        int baseLength = baseString.length();
+
+        for(int i = 0; i < length; ++i) {
+            int number = ThreadLocalRandom.current().nextInt(baseLength);
+            sb.append(baseString.charAt(number));
+        }
+
+        return sb.toString();
+    }
+
 }
diff --git a/zy-acs-flow/src/page/settings/SecuritySettings.jsx b/zy-acs-flow/src/page/settings/SecuritySettings.jsx
index 42aeaad..c8ad8d0 100644
--- a/zy-acs-flow/src/page/settings/SecuritySettings.jsx
+++ b/zy-acs-flow/src/page/settings/SecuritySettings.jsx
@@ -114,10 +114,10 @@
                         defaultValue=""
                         rules={{
                             required: translate('ra.validation.required'),
-                            pattern: {
-                                value: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d\.]{6,13}$/,
-                                message: translate('page.settings.resetPwd.tip.pwdInputLimit'),
-                            },
+                            // pattern: {
+                            //     value: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d\.]{6,13}$/,
+                            //     message: translate('page.settings.resetPwd.tip.pwdInputLimit'),
+                            // },
                             validate: (value) => {
                                 if (value === oldPasswordVal) {
                                     return translate('page.settings.resetPwd.tip.pwdNotSameAsOld');
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/service/EmailService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/service/EmailService.java
new file mode 100644
index 0000000..f7a6162
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/service/EmailService.java
@@ -0,0 +1,74 @@
+package com.zy.acs.manager.common.service;
+
+import com.alibaba.fastjson.JSON;
+import com.zy.acs.common.utils.Utils;
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.manager.system.enums.EmailType;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Slf4j
+@Service
+public class EmailService {
+
+    private static final String EMAIL_REGEX = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
+
+//    @Value("${spring.mail.username}")
+    private String from;
+
+//    @Autowired
+//    @SuppressWarnings("all")
+//    private JavaMailSender mailSender;
+
+    public boolean sendEmail(String to, EmailType emailType, Map<String, Object> param) {
+
+        String subject = emailType.subject;
+        String content = emailType.content;
+        if (!Cools.isEmpty(param) && !param.isEmpty()) {
+            content = Utils.processTemplate(content, param);
+        }
+
+        boolean sendRes = this.send(this.from, to, subject, content);
+        if (sendRes) {
+            log.info("Email sent successfully. To: {}, Subject: {}, Parameter: {}"
+                    , to
+                    , subject
+                    , JSON.toJSONString(param));
+        }
+        return sendRes;
+    }
+
+    public boolean send(String from, String to, String subject, String content) {
+//        try {
+//            MimeMessage message = mailSender.createMimeMessage();
+//            message.setFrom(from);
+//
+//            MimeMessageHelper helper = new MimeMessageHelper(message, true);
+//            helper.setTo(to);
+//            helper.setSubject(subject);
+//            helper.setText(content);
+//
+//            mailSender.send(message);
+//            return true;
+//        } catch (MailException | MessagingException e) {
+//            log.error(this.getClass().getSimpleName(), e);
+//            return false;
+//        }
+
+        return true;
+    }
+
+    public boolean isValid(String email) {
+        if (Cools.isEmpty(email)) {
+            return false;
+        }
+        Pattern pattern = Pattern.compile(EMAIL_REGEX);
+        Matcher matcher = pattern.matcher(email);
+        return matcher.matches();
+    }
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java
index c2a021c..5338bf9 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java
@@ -1,12 +1,14 @@
 package com.zy.acs.manager.system.controller;
 
 import com.zy.acs.common.utils.Utils;
+import com.zy.acs.framework.common.BaseRes;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.R;
 import com.zy.acs.manager.common.annotation.OperationLog;
 import com.zy.acs.manager.common.config.ConfigProperties;
 import com.zy.acs.manager.common.domain.BusinessRes;
 import com.zy.acs.manager.common.security.JwtSubject;
+import com.zy.acs.manager.common.service.EmailService;
 import com.zy.acs.manager.common.utils.JwtUtil;
 import com.zy.acs.manager.manager.enums.StatusType;
 import com.zy.acs.manager.system.controller.param.LoginParam;
@@ -21,7 +23,7 @@
 import com.zy.acs.manager.system.service.TenantService;
 import com.zy.acs.manager.system.service.UserLoginService;
 import com.zy.acs.manager.system.service.UserService;
-import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -48,6 +50,8 @@
     private RoleMenuService roleMenuService;
     @Resource
     private TenantService tenantService;
+    @Autowired
+    private EmailService emailService;
 
     @GetMapping("/system/info")
     public R systemInfo() {
@@ -106,10 +110,10 @@
             if (!emailService.isValid(user.getEmail())) {
                 return R.parse(BusinessRes.INVALID_EMAIL);
             }
-            User one = userService.getByEmail(user.getEmail(), null);
-            if (null != one  && !one.getId().equals(user.getId())) {
-                return R.parse(BusinessRes.EMAIL_EXIT);
-            }
+//            User one = userService.getByEmail(user.getEmail(), null);
+//            if (null != one  && !one.getId().equals(user.getId())) {
+//                return R.parse(BusinessRes.EMAIL_EXIT);
+//            }
         }
         if (userService.updateById(user)) {
             return R.ok("Save Success").add(userService.getById(user.getId()));
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/param/UpdatePasswordParam.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/param/UpdatePasswordParam.java
index 17b15a6..f6c6819 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/param/UpdatePasswordParam.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/param/UpdatePasswordParam.java
@@ -11,6 +11,6 @@
 
     private String oldPassword;
 
-    private String password;
+    private String newPassword;
 
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/enums/EmailType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/enums/EmailType.java
new file mode 100644
index 0000000..7891865
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/enums/EmailType.java
@@ -0,0 +1,18 @@
+package com.zy.acs.manager.system.enums;
+
+public enum EmailType {
+
+    LOGIN_VERIFY("Email Verification Code", "Your verification code is: ${code}."),
+    REGISTER_VERIFY("Email Verification Code", "Your verification code is: ${code}."),
+    FORGET_PASSWORD("Email Verification Code", "Your verification code is: ${code}."),
+    ;
+
+    public final String subject;
+    public final String content;
+
+    EmailType(String subject, String content) {
+        this.subject = subject;
+        this.content = content;
+    }
+
+}

--
Gitblit v1.9.1