From 89a72db182bc4312caf4abfa60969c325cbb98bb Mon Sep 17 00:00:00 2001
From: huangzhen <867217663@qq.com>
Date: 星期日, 04 二月 2024 10:29:05 +0800
Subject: [PATCH] bug修复

---
 src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java                                |   31 +++++++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java |    9 +
 src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java      |   49 +++++++++---
 src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java                         |  127 +++++++++++++++----------------
 src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java                    |    2 
 src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java                       |    4 
 src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java                                |    2 
 src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java                             |    4 
 8 files changed, 143 insertions(+), 85 deletions(-)

diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java
index be9a045..ae2ada3 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/application/account/service/impl/AccountAppServiceImpl.java
@@ -30,12 +30,14 @@
 import com.gkhy.fourierSpecialGasMonitor.domain.account.service.UserDomainService;
 import com.gkhy.fourierSpecialGasMonitor.domain.account.model.dto.UserInfoDomainDTO;
 import com.gkhy.fourierSpecialGasMonitor.domain.account.service.UserRoleDomainService;
+import com.gkhy.fourierSpecialGasMonitor.utils.PasswordCheckUtil;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -289,9 +291,12 @@
         CreateUserBO createUserBO = new CreateUserBO();
         createUserBO.setName(createNewUserAppReqDTO.getName());
         createUserBO.setRealName(createNewUserAppReqDTO.getRealName());
-        //如果没有提供密码,初始密码为“123456”
+        //如果没有提供密码,初始密码为“Gkhy@c413”
         if(createNewUserAppReqDTO.getPwd() == null || createNewUserAppReqDTO.getPwd().isEmpty()){
-            createNewUserAppReqDTO.setPwd("123456");
+            createNewUserAppReqDTO.setPwd("Gkhy@c413");
+        }
+        if (!StringUtils.isEmpty(createNewUserAppReqDTO.getPwd())){
+            PasswordCheckUtil.passwordIsValid(createNewUserAppReqDTO.getPwd());
         }
         createUserBO.setPwd(createNewUserAppReqDTO.getPwd());
         createUserBO.setPhone(createNewUserAppReqDTO.getPhone());
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java
index 883a378..a29057e 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DataReceiveController.java
@@ -50,8 +50,8 @@
 
     @PostMapping("/upload/gasFlux")
     public ForeignResult uploadGasFlux(@RequestBody UploadGasFluxReqDTO reqDto){
-        UploadGasFluxReqDTO uploadGasFluxReqDTO = reqDto.expansionFactor();
-        ForeignResult result = dataReceiveService.uploadGasFlux(uploadGasFluxReqDTO);
+        //UploadGasFluxReqDTO uploadGasFluxReqDTO = reqDto.expansionFactor();
+        ForeignResult result = dataReceiveService.uploadGasFlux(reqDto);
         return result;
     }
 
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java
index 23ff624..283d527 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/domain/account/service/impl/UserDomainServiceImpl.java
@@ -7,6 +7,7 @@
 import com.gkhy.fourierSpecialGasMonitor.commons.domain.SearchResult;
 import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode;
 import com.gkhy.fourierSpecialGasMonitor.commons.enums.SystemCacheKeyEnum;
+import com.gkhy.fourierSpecialGasMonitor.commons.enums.UserRoleEnum;
 import com.gkhy.fourierSpecialGasMonitor.commons.exception.BusinessException;
 import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery;
 import com.gkhy.fourierSpecialGasMonitor.commons.utils.BeanCopyUtils;
@@ -25,6 +26,8 @@
 import com.gkhy.fourierSpecialGasMonitor.domain.account.service.SysDepartmentDomainService;
 import com.gkhy.fourierSpecialGasMonitor.domain.account.service.UserDomainService;
 import com.gkhy.fourierSpecialGasMonitor.domain.account.model.dto.UserInfoDomainDTO;
+import com.gkhy.fourierSpecialGasMonitor.utils.PasswordCheckUtil;
+import com.gkhy.fourierSpecialGasMonitor.utils.ThreadLocalUtil;
 import com.google.common.collect.Range;
 import com.google.common.hash.Hashing;
 import org.redisson.api.RMapCache;
@@ -67,6 +70,14 @@
 
     @Autowired
     private SysDepartmentDomainService departmentDomainService;
+
+    private User getCurrentUser(){
+        Long userId = ThreadLocalUtil.get().getId();
+        User user = userRepository.findUserByIdAndStatus(userId, UserStatusEnum.STATUS_ACTIVE.getStatus());
+        if (user == null)
+            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(),"未成功获取用户信息");
+        return user;
+    }
 
     @Override
     @Transactional
@@ -291,22 +302,37 @@
     @Override
     @Transactional
     public boolean updateUserPwd(Long uid, String oldPwd, String newPwd) {
-        if(uid == null || oldPwd == null || newPwd == null || oldPwd.isEmpty() || newPwd.isEmpty())
+        User currentUser = getCurrentUser();
+        Boolean flag = false;
+        for (SysUserRoleBind sysUserRoleBind : currentUser.getSysUserRoleBinds()) {
+            if ("超级管理员".equals(sysUserRoleBind.getRole().getName())){
+                flag = true;
+            }
+        }
+        if(uid == null || oldPwd == null || newPwd == null || newPwd.isEmpty())
             throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失");
         Optional<User> userOptional = userRepository.findById(uid);
         if(!userOptional.isPresent()){
             throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_ACCOUNT_NOT_EXIST.getCode(), "用户不存在");
         }
         User user = userOptional.get();
-        //验证旧密码
-        String hash = String.valueOf(Hashing.hmacMd5(user.getSalt().getBytes(StandardCharsets.UTF_8)).hashString(oldPwd,
-                StandardCharsets.UTF_8));
-        if(!hash.equals(user.getHash()))
-            throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "旧密码错误");
-        String newSalt = String.valueOf(Hashing.hmacMd5("".getBytes()).hashString(""+uid+Range.atLeast(1)+System.nanoTime(),
-                StandardCharsets.UTF_8));
-        String newHash = String.valueOf(Hashing.hmacMd5(newSalt.getBytes(StandardCharsets.UTF_8)).hashString(newPwd,
-                StandardCharsets.UTF_8));
+        PasswordCheckUtil.passwordIsValid(newPwd.trim());
+        if (!flag){
+            if(oldPwd.isEmpty()) {
+                throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失");
+            }
+            //验证旧密码
+            String hash = String.valueOf(Hashing.hmacMd5(user.getSalt().getBytes(StandardCharsets.UTF_8)).hashString(oldPwd,
+                    StandardCharsets.UTF_8));
+            if(!hash.equals(user.getHash()))
+                throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "旧密码错误");
+        }
+        String newSalt = genPasswordSalt();
+        String newHash = genPasswordHash(newPwd, newSalt);
+        //String newSalt = String.valueOf(Hashing.hmacMd5("".getBytes()).hashString(""+uid+Range.atLeast(1)+System.nanoTime(),
+        //        StandardCharsets.UTF_8));
+        //String newHash = String.valueOf(Hashing.hmacMd5(newSalt.getBytes(StandardCharsets.UTF_8)).hashString(newPwd,
+        //        StandardCharsets.UTF_8));
         if(userRepository.updatePassword(uid,newHash,newSalt, LocalDateTime.now()) == 1){
 //            deleteUserCache(uid);
             return true;
@@ -641,7 +667,4 @@
         String hash = Hashing.hmacMd5(salt.getBytes(StandardCharsets.UTF_8)).hashBytes(password.getBytes(StandardCharsets.UTF_8)).toString();
         return hash;
     }
-
-
-
 }
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java
index ad3afe8..7c5ff4e 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/req/UploadGasFluxReqDTO.java
@@ -63,68 +63,67 @@
     private Double gasValue19;
     private int gasName20;
     private Double gasValue20;
-
-    public UploadGasFluxReqDTO expansionFactor(){
-        if (gasValue01 != null) {
-            gasValue01 = Math.round(gasValue01 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue02 != null) {
-            gasValue02 = Math.round(gasValue02 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue03 != null) {
-            gasValue03 = Math.round(gasValue03 * 3.6 * 100.0) / 100.0;
-        }
-        if (gasValue04 != null) {
-            gasValue04 = Math.round(gasValue04 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue05 != null) {
-            gasValue05 = Math.round(gasValue05 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue06 != null) {
-            gasValue06 = Math.round(gasValue06 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue07 != null) {
-            gasValue07 = Math.round(gasValue07 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue08 != null) {
-            gasValue08 = Math.round(gasValue08 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue09 != null) {
-            gasValue09 = Math.round(gasValue09 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue10 != null) {
-            gasValue10 = Math.round(gasValue10 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue11 != null) {
-            gasValue11 = Math.round(gasValue11 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue12 != null) {
-            gasValue12 = Math.round(gasValue12 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue13 != null) {
-            gasValue13 = Math.round(gasValue13 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue14 != null) {
-            gasValue14 = Math.round(gasValue14 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue15 != null) {
-            gasValue15 = Math.round(gasValue15 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue16 != null) {
-            gasValue16 = Math.round(gasValue16 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue17 != null) {
-            gasValue17 = Math.round(gasValue17 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue18 != null) {
-            gasValue18 = Math.round(gasValue18 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue19 != null) {
-            gasValue19 = Math.round(gasValue19 * 3600 * 100.0) / 100.0;
-        }
-        if (gasValue20 != null) {
-            gasValue20 = Math.round(gasValue20 * 3600 * 100.0) / 100.0;
-        }
-        return this;
-    }
+    //public UploadGasFluxReqDTO expansionFactor(){
+    //    if (gasValue01 != null) {
+    //        gasValue01 = Math.round(gasValue01 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue02 != null) {
+    //        gasValue02 = Math.round(gasValue02 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue03 != null) {
+    //        gasValue03 = Math.round(gasValue03 * 3.6 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue04 != null) {
+    //        gasValue04 = Math.round(gasValue04 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue05 != null) {
+    //        gasValue05 = Math.round(gasValue05 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue06 != null) {
+    //        gasValue06 = Math.round(gasValue06 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue07 != null) {
+    //        gasValue07 = Math.round(gasValue07 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue08 != null) {
+    //        gasValue08 = Math.round(gasValue08 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue09 != null) {
+    //        gasValue09 = Math.round(gasValue09 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue10 != null) {
+    //        gasValue10 = Math.round(gasValue10 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue11 != null) {
+    //        gasValue11 = Math.round(gasValue11 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue12 != null) {
+    //        gasValue12 = Math.round(gasValue12 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue13 != null) {
+    //        gasValue13 = Math.round(gasValue13 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue14 != null) {
+    //        gasValue14 = Math.round(gasValue14 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue15 != null) {
+    //        gasValue15 = Math.round(gasValue15 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue16 != null) {
+    //        gasValue16 = Math.round(gasValue16 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue17 != null) {
+    //        gasValue17 = Math.round(gasValue17 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue18 != null) {
+    //        gasValue18 = Math.round(gasValue18 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue19 != null) {
+    //        gasValue19 = Math.round(gasValue19 * 3600 * 100.0) / 100.0;
+    //    }
+    //    if (gasValue20 != null) {
+    //        gasValue20 = Math.round(gasValue20 * 3600 * 100.0) / 100.0;
+    //    }
+    //    return this;
+    //}
 }
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java
index f031625..10f1c55 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/HeartbeatExecEnum.java
@@ -7,7 +7,7 @@
  */
 public enum HeartbeatExecEnum {
 
-    GAS_CONCENTRATION((byte)1,"【气体浓度】实时推送心跳监测异常 ---> 1分钟内未收到远端数据"),
+    GAS_CONCENTRATION((byte)1,"【气体浓度】实时推送心跳监测异常 ---> 5分钟内未收到远端数据"),
     GAS_FLUX((byte)2,"【气体通量】实时推送心跳监测异常 ---> 30分钟内未收到远端数据"),
     ;
 
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
index f0c9d01..5fe51a5 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
@@ -50,12 +50,12 @@
 
 
 
-    @Scheduled(cron = "0 0/1 * * * ?")
+    @Scheduled(cron = "0 0/5 * * * ?")
     @Async(value = "SocketTaskExecutor")
     public void gasConcentrationStatus() {
         GasConcentration gasConcentration = gasConcentrationService.getLastData();
         if (gasConcentration != null){
-            LocalDateTime lastReceiveTime = gasConcentration.getDataReceivingTime().plusMinutes(2);
+            LocalDateTime lastReceiveTime = gasConcentration.getDataReceivingTime().plusMinutes(5);
             if (LocalDateTime.now().compareTo(lastReceiveTime) > 0){
                 try {
                     heartbeatExcWebsocketServer.sendInfo(HeartbeatExecEnum.GAS_CONCENTRATION.getStatus()+"",null);
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java
index dd91e79..872d073 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java
@@ -76,7 +76,7 @@
     }
 
     @Override
-    public Result createGasCategory(CreateGasCategoryReqDTO reqDto) {
+    public synchronized Result createGasCategory(CreateGasCategoryReqDTO reqDto) {
         if (reqDto == null)
             throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(),"参数不能为空");
         if (StringUtils.isBlank(reqDto.getMolecularFormula()))
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java
new file mode 100644
index 0000000..5703a81
--- /dev/null
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/utils/PasswordCheckUtil.java
@@ -0,0 +1,31 @@
+package com.gkhy.fourierSpecialGasMonitor.utils;
+
+import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode;
+import com.gkhy.fourierSpecialGasMonitor.commons.exception.BusinessException;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2024/1/4 10:44
+ */
+public class PasswordCheckUtil {
+
+    public static void passwordIsValid(String pwd){
+        if (pwd.length() < 8){
+            throw new BusinessException(PasswordCheckUtil.class, ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码长度不够");
+        }
+        if (!pwd.matches(".*[A-Z].*")){
+            throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符");
+        }
+        if (!pwd.matches(".*[a-z].*")){
+            throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符");
+        }
+        if (!pwd.matches(".*\\d.*")){
+            throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符");
+        }
+        if (!pwd.matches(".*[!@#$%^&*.()?+`~<>,-].*")){
+            throw new BusinessException(PasswordCheckUtil.class,ResultCode.PARAM_ERROR_ILLEGAL.getCode(),"密码至少包含大小写字母、数字、特殊字符");
+        }
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.2