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 | 60 ++++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 44 insertions(+), 16 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 0d94bde..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 @@ -1,6 +1,5 @@ package cn.huge.module.ctuser.service; -import cn.huge.base.common.bo.R; import cn.huge.base.common.bo.ReturnBO; import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.*; @@ -10,32 +9,27 @@ import cn.huge.module.ctuser.domain.po.*; import cn.huge.module.ctuser.dto.*; import cn.huge.module.cust.constant.UserBaseConsts; -import cn.huge.module.rsoper.domain.po.RsRole; import cn.huge.module.sys.dto.GridTokenBaseDTO; import cn.huge.module.sys.dto.GridUserBaseDTO; import cn.huge.module.sys.dto.GridUserRoleDTO; -import cn.huge.module.sys.vo.GridRoleMenuVo; import cn.huge.module.sys.vo.GridUserRoleVo; import cn.huge.module.utils.JwtUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; 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 @@ -204,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"); @@ -238,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()) + "后重试,或者请联系管理员解锁!"); @@ -248,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()); @@ -265,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()); @@ -274,6 +276,7 @@ // } } else { userLoginDTO.setUnit(ctUnit.getUnitName()); + userLoginDTO.setUnitType(ctUnit.getUnitType()); } } else { userLoginDTO.setUnit(ctUser.getUnitName()); @@ -308,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("账号或密码错误,请确认后重试!"); @@ -498,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; @@ -581,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); @@ -629,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; // 或抛出异常 } @@ -642,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()); @@ -677,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(); @@ -733,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