All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.benma666.sjsj.ljq.qxgl.YhdlLjq Maven / Gradle / Ivy

/**
 * Project Name:sjgl
 * Date:2018年12月16日
 * Copyright (c) 2018, jingma All Rights Reserved.
 */

package cn.benma666.sjsj.ljq.qxgl;

import cn.benma666.constants.UtilConst;
import cn.benma666.dict.Cllx;
import cn.benma666.dict.LjqType;
import cn.benma666.domain.SysQxYhxx;
import cn.benma666.exception.NotFindUserException;
import cn.benma666.iframe.*;
import cn.benma666.myutils.DateUtil;
import cn.benma666.myutils.HttpUtil;
import cn.benma666.json.JsonUtil;
import cn.benma666.myutils.StringUtil;
import cn.benma666.sjsj.web.LjqInterface;
import cn.benma666.sjsj.web.LjqManager;
import cn.benma666.sjsj.web.UserManager;
import cn.benma666.sjzt.MyLambdaQuery;
import com.alibaba.fastjson.JSONObject;
import org.beetl.sql.core.SqlId;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Scope;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;

/**
 * 用户登录拦截器 
* date: 2018年12月16日
* * @author jingma */ @Component("SYS_QX_YHXX_MRDL") @Scope("prototype") @ConditionalOnProperty(value = "benma666.login.default-login") public class YhdlLjq extends BasicObject implements LjqInterface { public static final String BASIC = "basic"; public Result save(MyParams myParams) { myParams.sys().setLjqType(LjqType.dzmrlqj); Result r = LjqManager.save(myParams); DictManager.clearDict("SYS_QX_YHXX"); return r; } /** * 用户登陆 * @return 处理结果 */ public Result yhdl(MyParams myParams) { SysQxYhxx yobj = myParams.yobj(SysQxYhxx.class); //失败次数 SysQxYhxx user = myParams.user(); int dlsbcs = user.getDlsbcs(); if(dlsbcs>=valByDef(Conf.getUtilConfig().getLogin().getDlsbcs(),5)){ //限制时长为会话时长,关闭浏览器重新进入其实是可以的,这好像不太好样,后续考虑采用ip限制 return failed("你登录失败次数过多,请稍后再试"); } //用户账户密码登陆 if (DateUtil.getGabDate().compareTo(Conf.getVal("sys.yxq")) > 0 && !UtilConst.SYS.equals(yobj.getYhdm())) { return failed("系统版本过旧,请升级后使用"); } if (StringUtil.isBlank(yobj.getYhmm()) || StringUtil.isBlank(yobj.getYhdm())) { return dlsb(failed("用户名或密码为空"),myParams); } if(user.getYhdm().equals(yobj.getYhdm())){ return xtjcxx(myParams, user,false); } JSONObject jsonObj = db().findFirst(SqlId.of("sjsj", "findUser"), myParams); if (jsonObj == null) { return dlsb(failed("没有找到该用户" , yobj.getYhdm()),myParams); } SysQxYhxx yhxx = jsonObj.toJavaObject(SysQxYhxx.class); String yhmm; // 获取用户信息基础参数对象 MyParams yhxxParams = LjqManager.jcxxByDxdm("SYS_QX_YHXX"); //将用户输入的密码加密 yhmm = StringUtil.desEnByField(yobj.getYhmm(),yhxxParams.fields().get("yhmm")); if (!yhxx.getYhmm().equals(yhmm)) { return dlsb(failed("密码不正确"),myParams); } if (StringUtil.isNotBlank(yhxx.getXzip()) && !user.getClientIp().matches(yhxx.getXzip())) { return dlsb(failed("你未不在授权的ip范围内登录"),myParams); } user = UserManager.findUser(myParams,false); if(StringUtil.isNotBlank(yobj.getProjectCode())){ //传了项目代码,进行微信绑定操作 //微信登陆 JSONObject r = HttpUtil.doJosnByFrom(Conf.getVal("wx.api-base-url") + "/sns/jscode2session", Conf.getVal("wx.api-login-params." + yobj.getProjectCode()) + myParams.sys().getToken()); if (r.getIntValue("errcode") != 0) { return failed("微信接口异常:"+r.getString("errmsg")); } log.debug("从微信获取的用户信息:"+r.toJSONString()); //取消该微信用户之前绑定的记录 MyLambdaQuery sysQxYhxxMyLambdaQuery = LjqManager.getDb().lambdaQuery(SysQxYhxx.class); sysQxYhxxMyLambdaQuery.andEq(SysQxYhxx::getWxyhid,r.getString("openid")); sysQxYhxxMyLambdaQuery.updateSelectiveGeneral(SysQxYhxx.builder() .wxyhid("").build()); //设置新的绑定关系 sysQxYhxxMyLambdaQuery.andEq(SysQxYhxx::getId,user.getId()) .updateSelective(SysQxYhxx.builder() .wxyhid(r.getString("openid")) .wxyhxx(r.toJSONString()).build()); } return xtjcxx(myParams, user); } public Result dlsb(Result r,MyParams myParams){ SysQxYhxx user = myParams.getObject(KEY_USER, SysQxYhxx.class); user.setDlsbcs(user.getDlsbcs()+1); return r; } /** * 转发用户信息,用于第三方系统自动登录 */ public Result zfyhxx(MyParams myParams){ String url = UserManager.doDesEncryptUrl(myParams.getString("$.yobj.url"), myParams.getString("$.yobj.projectCode"), myParams.getString("$.user.sfzh")); Result r = success("成功", url); r.setCode(HttpStatus.FOUND.value()); return r; } /** * 微信登陆 * @return 处理结果 */ public Result wxdl(MyParams myParams) { SysQxYhxx oldUser = myParams.user(); SysQxYhxx yobj = myParams.yobj(SysQxYhxx.class); SysQxYhxx user; //微信登陆 JSONObject r = HttpUtil.doJosnByFrom(Conf.getVal("wx.api-base-url", "https://api.weixin.qq.com") + "/sns/jscode2session",Conf.getVal("wx.api-login-params." + yobj.getProjectCode()) + oldUser.getToken()); if (r.getIntValue("errcode") != 0) { return failed("微信接口异常:"+r.getString("errmsg")); } log.debug("从微信获取的用户信息:"+r.toJSONString()); //微信用户唯一标志 String wxyhid = r.getString("openid"); if(wxyhid.equals(oldUser.getWxyhid())){ return xtjcxx(myParams, oldUser,false); } yobj.setWxyhid(wxyhid); try { user = UserManager.findUser(myParams,false); user.setWxLogin(r); return xtjcxx(myParams, user); } catch (NotFindUserException e) { //系统中还没有该微信用户 if(valByDef(yobj.getZdcjZh(),false)){ //自动创建账号 yobj.setWxyhxx(r.toJSONString()); yobj.setYhdm(wxyhid); yobj.setYhmm(wxyhid); yobj.setId(wxyhid); yobj.setYhxm("微信用户"); yobj.setLxdh("123"); LjqManager.getDb().lambdaQuery(SysQxYhxx.class) .insertSelective(yobj); user = UserManager.findUser(myParams,false); return xtjcxx(myParams, user); }else{ //返回临时用户 oldUser.setWxLogin(r); return xtjcxx(myParams, oldUser,false); } } } /** * 用户退出 * @return 处理结果 */ public Result yhtc(MyParams myParams) { SysQxYhxx oldUser = myParams.getObject(KEY_USER,SysQxYhxx.class); return UserManager.removeUser(oldUser); } private Result xtjcxx(MyParams myParams, SysQxYhxx user) { return xtjcxx(myParams,user,true); } /** * @param myParams 参数 * @param user 最新用户信息 * @return 系统基础信息 */ private Result xtjcxx(MyParams myParams, SysQxYhxx user,boolean adduser) { if(adduser){ myParams.put(KEY_USER, user); UserManager.addUser(myParams.sys().getToken(), user); } String model = valByDef(myParams.getString("$.yobj.model"), BASIC); if(BASIC.equals(model)){ JSONObject data = new JSONObject(); JsonUtil.copy(data, myParams, $_SYS_TOKEN); return success("登陆成功",data); }else { return LjqManager.data(myParams, Cllx.xtjcxx.name()); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy