zjh
2025-06-09 0832f385234a8a2f3b69a5c3fc1e1c95e3c4849e
ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java
@@ -7,12 +7,15 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ltkj.common.constant.CacheConstants;
import com.ltkj.common.core.domain.entity.SysDept;
import com.ltkj.common.enums.DataSourceType;
import com.ltkj.common.exception.CustomException;
import com.ltkj.common.exception.user.CaptchaException;
import com.ltkj.common.exception.user.CaptchaExpireException;
import com.ltkj.common.exception.user.SecretKeyException;
import com.ltkj.common.utils.*;
import com.ltkj.common.utils.sign.RsaUtils;
import com.ltkj.db.DataSourceConfig;
import com.ltkj.db.DataSourceContextHolder;
import com.ltkj.framework.config.JwtUtils;
import com.ltkj.framework.config.UserHoder;
import com.ltkj.hosp.domain.DictHosp;
@@ -37,6 +40,7 @@
import com.ltkj.framework.manager.AsyncManager;
import com.ltkj.framework.manager.factory.AsyncFactory;
import com.ltkj.framework.security.context.AuthenticationContextHolder;
import org.springframework.util.DigestUtils;
import java.util.Date;
import java.util.HashMap;
@@ -84,6 +88,8 @@
    @Value("${token.secret_key_login}")
    private boolean secretKeyLogin;
    @Autowired
    private DataSourceConfig dataSourceConfig;
    /**
@@ -93,9 +99,14 @@
     * @param password 密码
     * @return 结果
     */
    public String login(String username, String password, Boolean type,String code,String uuid) {
    public String login(String username, String password, Boolean type,String code,String uuid,String hospId) {
        DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
        LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DictHosp::getCode,hospId);
        DictHosp hosp = hospService.getOne(wrapper);
        DataSourceContextHolder.setDataSourceKey(hosp.getDbname());
        String aSwitch = configService.selectConfigByKey("captcha_switch");
        if(null !=aSwitch && aSwitch.equalsIgnoreCase("Y")){
            String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
@@ -103,12 +114,14 @@
            redisCache.deleteObject(verifyKey);
            if (captcha == null)
            {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"),hosp.getDbname()));
//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
                throw new CaptchaExpireException();
            }
            if (!code.equalsIgnoreCase(captcha))
            {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"),hosp.getDbname()));
//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
                throw new CaptchaException();
            }
        }
@@ -128,17 +141,25 @@
            authentication = authenticationManager.authenticate(authenticationToken);
        } catch (Exception e) {
            if (e instanceof BadCredentialsException) {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"),hosp.getDbname()));
//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"));
                throw new UserPasswordNotMatchException();
            } else {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage(),hosp.getDbname()));
//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage());
                throw new ServiceException(e.getMessage());
            }
        } finally {
            AuthenticationContextHolder.clearContext();
        }
        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
//        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
//       AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname());
//       AsyncFactory.recordLogininforord(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname());
        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname()));
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        loginUser.setHospDB(hosp.getDbname());
        loginUser.setHospId(hospId);
        tokenService.setLoginUser(loginUser);
        recordLoginInfo(Long.valueOf(loginUser.getUserId()));
        //校验商家过期否
@@ -217,7 +238,14 @@
     * @param password 密码
     * @return 结果
     */
    public String Cuslogin(String username, String password, Boolean type,String code,String uuid) {
    public String Cuslogin(String username,String sfzh, String password, Boolean type,String code,String uuid, String hospId) {
        DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
        LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DictHosp::getCode,hospId);
        DictHosp hosp = hospService.getOne(wrapper);
        DataSourceContextHolder.setDataSourceKey(hosp.getDbname());
        String aSwitch = configService.selectConfigByKey("captcha_switch");
        if(null !=aSwitch && aSwitch.equalsIgnoreCase("Y")){
@@ -226,18 +254,19 @@
            redisCache.deleteObject(verifyKey);
            if (captcha == null)
            {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"),hosp.getDbname()));
//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
                throw new CaptchaExpireException();
            }
            if (!code.equalsIgnoreCase(captcha))
            {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"),hosp.getDbname());
                throw new CaptchaException();
            }
        }
        LoginUser loginUser = loadCusByCusname(username, password);
        LoginUser loginUser = loadCusByCusname(username,sfzh, password);
        if (loginUser == null) {
            return "用户名或密码错误";
        }
@@ -259,19 +288,24 @@
        return tokenService.createToken(loginUser);
    }
    public LoginUser loadCusByCusname(String username, String password) {
    public LoginUser loadCusByCusname(String username,String sfzh, String password) {
        LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>();
        wq.eq(TjCustomer::getCusPhone, username);
        wq.eq(TjCustomer::getCusIdcard, sfzh);
        List<TjCustomer> customerList = customerService.list(wq);
        if (null == customerList || customerList.size() == 0) {
        if (null == customerList || customerList.isEmpty()) {
            //throw new ServiceException("登录用户:" + username + " 不存在");
            throw new ServiceException("账号或密码错误,请检查!");
        }
        for (TjCustomer tjCustomer : customerList) {
            try {
                password = RsaUtils.decryptByPrivateKey(password);
                boolean b = SecurityUtils.matchesPassword(password, tjCustomer.getCusPassword());
                if (b) {
//                password = RsaUtils.decryptByPrivateKey(password);
//                boolean b = SecurityUtils.matchesPassword(password, tjCustomer.getCusPassword());
//                if (b) {
//                    return createLoginCus(tjCustomer);
//                }
                password = DigestUtils.md5DigestAsHex(password.getBytes());
                if (password.equals(tjCustomer.getCusPassword())){
                    return createLoginCus(tjCustomer);
                }
            } catch (Exception e) {