From e9de6064cc94d6bc63685c5e62046ff810b96dab Mon Sep 17 00:00:00 2001
From: xusd <330628789@qq.com>
Date: Sat, 05 Jul 2025 17:17:52 +0800
Subject: [PATCH] Merge branch 'gzdyh_prod'

---
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java |   53 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java
index da0c79b..6fd2eb4 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java
@@ -29,10 +29,7 @@
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author liyj
@@ -201,7 +198,7 @@
     public Boolean checkCredential(String cipher, CtAccount ctAccount) {
         String credentialMd5 = DigestUtils.md5DigestAsHex(cipher.getBytes());
         log.info("xsd:{}", credentialMd5);
-        if (StringUtils.equals(credentialMd5, ctAccount.getCipher())) {
+        if (StringUtils.equals(cipher, ctAccount.getCipher())) {
             return true;
         } else {
 //            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -235,9 +232,9 @@
             // 判断账号是否存在
             CtAccount ctAccount = this.getByAccAndType(ctAccountLoginDTO.getAcc(), UserBaseConsts.ACC_TYPE_1);
             if (ObjectUtils.isNotEmpty(ctAccount)) {
+                Date nowDate = new Date();
                 // 判断账号是否被锁定
                 if (ObjectUtils.isNotEmpty(ctAccount.getLimitTime())) {
-                    Date nowDate = new Date();
                     if (nowDate.before(ctAccount.getLimitTime())) {
                         SimpleDateFormat sdf = new SimpleDateFormat("HH点mm分");
                         return ReturnFailUtils.getRepInfo("账号已锁定,请于" + sdf.format(ctAccount.getLimitTime()) + "后重试,或者请联系管理员解锁!");
@@ -245,6 +242,13 @@
                 }
                 // 判断密码是否正确
                 if (checkCredential(ctAccountLoginDTO.getCipher(), ctAccount)) {
+                    // 密码正确:重置错误次数
+                    UpdateWrapper<CtAccount> resetPwdErr = new UpdateWrapper<>();
+                    resetPwdErr.set("pwd_error_count", 0)
+                            .set("limit_time", null)
+                            .set("login_time", DateUtils.getNowDate())
+                            .eq("id", ctAccount.getId());
+                    this.update(resetPwdErr);
                     //返回结果
                     UserLoginDTO userLoginDTO = new UserLoginDTO();
                     CtUser ctUser = ctUserService.getById(ctAccount.getUserId());
@@ -262,7 +266,8 @@
                     CtUnit ctUnit = ctUnitService.getById(ctUser.getUnitId());
                     if (ObjectUtils.isNotEmpty(ctUnit)) {
                         if (ctUnit.getUnitGrade() == UserBaseConsts.UNIT_GRADE_3 && ctUnit.getUnitType() == UserBaseConsts.UNIT_TYPE_102) {
-                            userLoginDTO.setUnit(ctUnit.getUnitDes());
+                            userLoginDTO.setUnit(ctUnit.getUnitName());
+                            userLoginDTO.setUnitType(ctUnit.getUnitType());
 //                            CtUnit parentCtUnit = ctUnitService.getById(ctUnit.getParentId());
 //                            if (ObjectUtils.isNotEmpty(parentCtUnit)) {1
 //                                userLoginDTO.setUnit(parentCtUnit.getUnitName());
@@ -271,6 +276,7 @@
 //                            }
                         } else {
                             userLoginDTO.setUnit(ctUnit.getUnitName());
+                            userLoginDTO.setUnitType(ctUnit.getUnitType());
                         }
                     } else {
                         userLoginDTO.setUnit(ctUser.getUnitName());
@@ -305,7 +311,25 @@
                     this.update(accountUpdateWrapper);
                     return ReturnSucUtils.getRepInfo(userLoginDTO);
                 } else {
-                    return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!");
+                    // 密码错误:增加错误次数,必要时冻结
+                    int currentErrCount = ctAccount.getPwdErrorCount() == null ? 0 : ctAccount.getPwdErrorCount();
+                    currentErrCount++;
+
+                    UpdateWrapper<CtAccount> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.set("pwd_error_count", currentErrCount).eq("id", ctAccount.getId());
+
+                    if (currentErrCount >= 5) {
+                        // 冻结5分钟
+                        Calendar cal = Calendar.getInstance();
+                        cal.setTime(nowDate);
+                        cal.add(Calendar.MINUTE, 5);
+                        updateWrapper.set("limit_time", cal.getTime());
+                        this.update(updateWrapper);
+                        return ReturnFailUtils.getRepInfo("密码错误已达5次,账号已锁定5分钟,请稍后再试!");
+                    } else {
+                        this.update(updateWrapper);
+                        return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!(" + currentErrCount + "/5)");
+                    }
                 }
             } else {
                 return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!");
@@ -495,8 +519,10 @@
                 CtUnit ctUnit = ctUnitService.selectUnitByGridId(userRoleDTO.getOrgId());
                 if (ctUnit != null) {
                     userLoginDTO.setUnit(ctUnit.getUnitName());
+                    userLoginDTO.setUnitType(ctUnit.getUnitType());
                     ctUser.setUnitName(ctUnit.getUnitName());
                     ctUser.setUnitId(ctUnit.getId());
+
                     ctUserService.updateCtUser(ctUser);
                 } else {
                     int grade = userRoleDTO.getGrade() - 1;
@@ -578,6 +604,7 @@
                     log.info("xsdctUnit:{}", ctUnit);
                     ctUnitService.saveCtUnit(ctUnit);
                     userLoginDTO.setUnit(ctUnit.getUnitName());
+                    userLoginDTO.setUnitType(ctUnit.getUnitType());
                     ctUser.setUnitName(ctUnit.getUnitName());
                     ctUser.setUnitId(ctUnit.getId());
                     ctUserService.updateCtUser(ctUser);
@@ -626,7 +653,7 @@
         } else if (parts.length >= 4) {
             return parts[0] + parts[1] + parts[2] + "-" + parts[3];
         } else if (parts.length >= 5) {
-            return parts[0] + parts[1] + parts[2] + "-" + parts[3]+"-" + parts[4];
+            return parts[0] + parts[1] + parts[2] + "-" + parts[3] + "-" + parts[4];
         } else {
             return input; // 或抛出异常
         }
@@ -639,6 +666,10 @@
         userLoginDTO.setUserId(ctUser.getId());
         userLoginDTO.setTrueName(ctUser.getTrueName());
         userLoginDTO.setUnit(ctUser.getUnitName());
+        CtUnit byId = ctUnitService.getById(ctUser.getUnitId());
+        if (byId != null) {
+            userLoginDTO.setUnitType(byId.getUnitType());
+        }
         userLoginDTO.setDept(ctUser.getDeptName());
         userLoginDTO.setPhone(ctUser.getMobile());
         userLoginDTO.setCustId(ctUser.getCustId());
@@ -674,7 +705,7 @@
         GridUserRoleVo gridUserRoleVo = new GridUserRoleVo();
         gridUserRoleVo.setUserId(userId);
         GridUserRoleDTO userRoleDTO = sysClient.getUserRoleList(gridUserRoleVo);
-        if (StringUtils.isEmpty(userRoleDTO.getRoleName()) || !userRoleDTO.getRoleName().contains("(M)")) {
+        if (StringUtils.isEmpty(userRoleDTO.getRoleName()) || (!userRoleDTO.getRoleName().contains("(M)") && !userRoleDTO.getRoleName().contains("领导") && !userRoleDTO.getRoleName().contains("调度干部"))) {
             return ReturnFailUtils.getRepInfo("该用户没有矛调系统的权限");
         }
         CtUserole ctUserole = new CtUserole();
@@ -730,7 +761,7 @@
             switch (grade) {
                 case 1:
                     //市级级
-                    ctUnit.setLevel(grade );
+                    ctUnit.setLevel(grade);
                     ctUnit.setUnitGrade(grade);
                     ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
                     ctUnit.setParentId("2024000000000001");

--
Gitblit v1.8.0