liukangdong
2024-10-18 41965ca07e31a8c102dc4b704d7536769200f8cb
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
已添加1个文件
已修改9个文件
132 ■■■■ 文件已修改
server/system_service/src/main/java/com/doumee/api/BaseController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/PwdCheckUtil.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/ScientificNotationTUtil.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/dto/UpdatePwdDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/application.yml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/BaseController.java
@@ -30,8 +30,6 @@
    @Autowired
    private RedisTemplate<String,Object> stringRedisTemplate;
    @Resource
    private JwtProperties jwtProperties;
    /**
     * èŽ·å–å½“å‰ç™»å½•ç”¨æˆ·
     * @author Eva.Caesar Liu
@@ -51,9 +49,6 @@
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户登陆已失效,请重新登陆!");
        }
        return  user;
    }
    public void updateLoginUser (String token,LoginUserInfo userInfo) {
        stringRedisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(userInfo),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
    }
server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java
@@ -38,9 +38,10 @@
    public ApiResponse updatePwd (@RequestHeader(Constants.HEADER_USER_TOKEN) String token, @Validated @RequestBody UpdatePwdDto dto) {
        LoginUserInfo userInfo = this.getLoginUser(token);
        dto.setUserId(userInfo.getId());
        dto.setToken(token);
        dto.setLoginUserInfo(userInfo);
        systemUserBiz.updatePwd(dto);
        userInfo.setNeedChangePwd(Constants.ONE);
        updateLoginUser(token,userInfo);//更新登录token中绑定的用户信息为已更新密码
        return ApiResponse.success(null);
    }
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -1,9 +1,11 @@
package com.doumee.biz.system.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.system.SystemUserBiz;
import com.doumee.config.jwt.JwtProperties;
import com.doumee.core.annotation.excel.ExcelImporter;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.constants.ResponseStatus;
@@ -16,23 +18,31 @@
import com.doumee.dao.system.dto.UpdatePwdDto;
import com.doumee.dao.system.model.*;
import com.doumee.service.system.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
@Slf4j
public class SystemUserBizImpl implements SystemUserBiz {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Autowired
    private JwtProperties jwtProperties;
    @Autowired
    private SystemUserService systemUserService;
@@ -86,7 +96,7 @@
        if(StringUtils.isBlank(dto.getNewPwd())
                ||dto.getNewPwd().length()>20
                ||dto.getNewPwd().length()<6
                ||PwdCheckUtil.checkPassword(dto.getNewPwd())){
                ||!PwdCheckUtil.checkPassword(dto.getNewPwd())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,密码复杂度不满足要求:6-20个字符,至少包含字母、数字及特殊字符2种");
        }
        SystemUser user = systemUserService.findById(dto.getUserId());
@@ -103,6 +113,19 @@
        newUser.setPassword(Utils.Secure.encryptPassword(dto.getNewPwd(), user.getSalt()));
        newUser.setNeedChangePwd(Constants.ONE);
        systemUserService.updateById(newUser);
        log.info("===================更新信息");
        try {
//            log.error("redisTemplate:["+redisTemplate+"]\njwtProperties=:["+jwtProperties+"]\n"+"token:["+dto.getToken()+"]\nuser:"+dto.getLoginUserInfo());
            if(redisTemplate!=null&&dto.getToken() !=null &&dto.getLoginUserInfo()!=null && jwtProperties!=null){
                dto.getLoginUserInfo().setNeedChangePwd(Constants.ONE);
                redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+dto.getToken(),JSONObject.toJSONString(dto.getLoginUserInfo()),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
            }
        }catch (Exception e){
//            log.error("redisTemplate:["+redisTemplate+"]\njwtProperties=:["+jwtProperties+"]\n"+"token:["+dto.getToken()+"]\nuser:"+dto.getLoginUserInfo());
            e.printStackTrace();
        }
    }
    @Override
server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -150,6 +150,7 @@
        return token;
    }
    /**
     * ä»Žä»¤ç‰Œä¸­èŽ·å–æ•°æ®å£°æ˜Ž,验证JWT签名
     *
server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -1,5 +1,6 @@
package com.doumee.core.model;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.system.model.SystemPermission;
import com.doumee.dao.system.model.SystemRole;
@@ -66,6 +67,7 @@
                rs.add(role.getCode());
            }
        }
        loginUserInfo.setNeedChangePwd(Constants.formatIntegerNum(user.getNeedChangePwd()));
        loginUserInfo.setSessionId(sessionId);
        loginUserInfo.setRoles(rs);
        // è®¾ç½®æƒé™ä¿¡æ¯
server/system_service/src/main/java/com/doumee/core/utils/PwdCheckUtil.java
@@ -65,14 +65,14 @@
    }
    public static void main(String[] args) {
        checkPassword("fasdagd");
        checkPassword("41234123");
        checkPassword("#$%^&&*(");
        checkPassword("fasd$$");
        checkPassword("41234%%%");
        checkPassword("fasd41^(324");
        checkPassword("fa413%^&*");
        checkPassword("&%fa413%^&*");
        checkPassword("123456a");
//        checkPassword("41234123");
//        checkPassword("#$%^&&*(");
//        checkPassword("fasd$$");
//        checkPassword("41234%%%");
//        checkPassword("fasd41^(324");
//        checkPassword("fa413%^&*");
//        checkPassword("&%fa413%^&*");
    }
}
server/system_service/src/main/java/com/doumee/core/utils/ScientificNotationTUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.doumee.core.utils;
import java.util.regex.Pattern;
/**
 * Java正则校验密码至少包含:字母数字特殊符号中的2种
 */
import java.math.BigDecimal;
import java.util.regex.Pattern;
    public class ScientificNotationTUtil {
        private static final Pattern SCIENTIFIC_NOTATION_PATTERN =
                Pattern.compile("[+-]?\\d*(\\.\\d+)?[eE][+-]?\\d+");
        public static boolean isScientificNotation(String value) {
            return SCIENTIFIC_NOTATION_PATTERN.matcher(value).matches();
        }
        public static double convertScientificNotationToDouble(String scientificNotation) {
            if (isScientificNotation(scientificNotation)) {
                return (Double.parseDouble(scientificNotation));
            } else {
                throw new IllegalArgumentException("The string is not in scientific notation.");
            }
        }
        public static String convertToString(String numberStr) {
            try {
                // å°è¯•直接将字符串转换为BigDecimal
                return new BigDecimal(numberStr)+"";
            } catch (NumberFormatException e) {
                // å¦‚果转换失败,则尝试解析科学计数法
                String[] parts = numberStr.split("E");
                if (parts.length == 2) {
                    // è¿™æ˜¯ç§‘学计数法,需要转换
                    BigDecimal number = new BigDecimal(parts[0]);
                    int exponent = Integer.parseInt(parts[1]);
                    return number.scaleByPowerOfTen(exponent)+"";
                }
            }
            return  numberStr;
        }
        public static BigDecimal convertScientificNotationToBigDecimal(String scientificNotation) {
            if (isScientificNotation(scientificNotation)) {
                return new BigDecimal(scientificNotation);
            } else {
                throw new IllegalArgumentException("The string is not in scientific notation.");
            }
        }
        public static void main(String[] args) {
//            String scientificNotation = "1.23e+3";
//            String scientificNotation = "1.5345690888E10";
            String scientificNotation = "15345690888";
            System.out.println("Is scientific notation: " + isScientificNotation(scientificNotation));
            System.out.println("Converted to String: " + convertToString(scientificNotation));
//            System.out.println("Converted to BigDecimal: " + convertScientificNotationToBigDecimal(scientificNotation));
        }
    }
server/system_service/src/main/java/com/doumee/dao/system/dto/UpdatePwdDto.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.dto;
import com.doumee.core.model.LoginUserInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -16,6 +17,10 @@
@ApiModel("修改密码参数")
public class UpdatePwdDto implements Serializable {
    @ApiModelProperty(value = "loginUserInfo", hidden = true)
    private LoginUserInfo loginUserInfo;
    @ApiModelProperty(value = "token", hidden = true)
    private String token;
    @ApiModelProperty(value = "用户ID", hidden = true)
    private Integer userId;
server/visits/dmvisit_admin/src/main/resources/application.yml
@@ -74,5 +74,14 @@
  servlet:
    session:
      timeout: PT3H  #表示12小时
auth:
  jwt:
    enabled: true   #是否开启JWT登录认证功能
    secret: fjkfaf;afa  # JWT私钥,用于校验JWT令牌的合法性
    expiration: 36000000 #JWT令牌的有效期,用于校验JWT令牌的合法性
    header: JWTHeaderName #HTTP请求的Header名称,该Header作为参数传递JWT令牌
    userParamName: username  #用户登录认证用户名参数名称
    pwdParamName: password  #用户登录认证密码参数名称
    useDefaultController: true # æ˜¯å¦ä½¿ç”¨é»˜è®¤çš„JwtAuthController
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -167,6 +167,7 @@
        // ç”Ÿæˆå¯†ç 
        user.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode(), salt));
        user.setSalt(salt);
        user.setNeedChangePwd(Constants.ZERO);
        // åˆ›å»ºç”¨æˆ·è®°å½•
        user.setType(insert.getType());
        user.setAvatar(insert.getFaceImg());
@@ -202,7 +203,7 @@
        insert.setCode(member.getCode());
        insert.setType(Constants.TWO);
        insert.setHkDate(new Date());
        insert.setWorkStatus(Constants.ONE);//默认在职
        insert.setWorkStatus(Constants.ZERO);//默认在职
        insert.setCanVisit(Constants.ZERO);//默认不可访问
        insert.setAuthStatus(Constants.ZERO);
        insert.setName(member.getName());
@@ -1856,6 +1857,8 @@
            List<Member> newList = new ArrayList<>();
            for(int i=0;i<dataList.size();i++){
                MemberImport model = dataList.get(i);
                model.setPhone(ScientificNotationTUtil.convertToString(model.getPhone()));
                model.setIdcardNo(ScientificNotationTUtil.convertToString(model.getIdcardNo()));
                if(StringUtils.isBlank(model.getName())
                       &&StringUtils.isBlank(model.getIdcardNo())
                        &&StringUtils.isBlank(model.getPhone())