diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index c885ce56..0840152f 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -109,9 +109,9 @@ spring: # 端口,默认为6379 port: 6379 # 数据库索引 - database: 0 + database: 1 # 密码 - password: 123456 + password: aDlasdasasdjHjasasdkqmewqe # 连接超时时间 timeout: 10s lettuce: diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/listener/GlobalEventListener.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/listener/GlobalEventListener.java index 41cf1a6e..dcb276c3 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/listener/GlobalEventListener.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/listener/GlobalEventListener.java @@ -15,6 +15,7 @@ import com.ruoyi.system.domain.SysUserOpenid; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.mapper.SysUserOpenidMapper; +import com.ruoyi.system.service.ISysConfigService; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; @@ -52,6 +53,9 @@ public class GlobalEventListener extends AbstractFlowableEngineEventListener { @Autowired private RedisCache redisCache; + @Autowired + private ISysConfigService configService; + @Autowired private TaskService taskService; @@ -245,7 +249,7 @@ public class GlobalEventListener extends AbstractFlowableEngineEventListener { /** * 模板消息开关 */ - private boolean wxSwitch = true; + private boolean wxSwitch = false; /** * 推送模板消息 @@ -253,6 +257,7 @@ public class GlobalEventListener extends AbstractFlowableEngineEventListener { */ private void send(List lsit, String messageType){ try { + wxSwitch = Convert.toBool(configService.selectConfigByKey("sys.wx.message"),false); if(wxSwitch && StringUtils.isNotEmpty(lsit)){ for(WxMpTemplateMessage message:lsit){ if(StringUtils.isNotEmpty(message.getToUser())){ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 836e1c3e..65204eae 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -1,6 +1,10 @@ package com.ruoyi.framework.web.service; import javax.annotation.Resource; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -49,6 +53,9 @@ public class SysLoginService @Autowired private ISysUserService userService; + @Autowired + private SysUserMapper sysUserMapper; + @Autowired private ISysConfigService configService; @@ -100,6 +107,56 @@ public class SysLoginService return tokenService.createToken(loginUser); } + /** + * 登录验证 + * + * @param username 用户名 + * @param openId 微信openId + * @return 结果 + */ + public String login(String username,String openId) + { + //进入这里先把用户的密码修改,登录成功后在修改回去 + SysUser sysUser = sysUserMapper.selectUserByUserName(username); + String userAuth = sysUser.getPassword(); + String password = Convert.toStr(System.currentTimeMillis()); + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUserMapper.updateUser(sysUser); + // 用户验证 + Authentication authentication = null; + try + { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + 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"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + sysUser.setPassword(userAuth); + sysUserMapper.updateUser(sysUser); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 生成token + return tokenService.createWxToken(loginUser,openId); + } + /** * 统一认证登录 * diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java index 1298083b..4fbbd6ed 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java @@ -131,6 +131,23 @@ public class TokenService return createToken(claims); } + /** + * 创建令牌 + * + * @param loginUser 用户信息 + * @return 令牌 + */ + public String createWxToken(LoginUser loginUser,String openId) + { + loginUser.setToken(openId); + setUserAgent(loginUser); + refreshToken(loginUser); + + Map claims = new HashMap<>(); + claims.put(Constants.LOGIN_USER_KEY, openId); + return createToken(claims); + } + /** * 验证令牌有效期,相差不足20分钟,自动刷新缓存 * diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml index 34f8c4b1..fc1a7626 100644 --- a/ruoyi-quartz/pom.xml +++ b/ruoyi-quartz/pom.xml @@ -39,6 +39,10 @@ org.projectlombok lombok + + com.ruoyi + ruoyi-system + diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/FlowTaskExpiredTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/FlowTaskExpiredTask.java index 2be9ddf1..e191a2cb 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/FlowTaskExpiredTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/FlowTaskExpiredTask.java @@ -7,9 +7,9 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.enums.MessageTypeEnum; import com.ruoyi.common.enums.TemplateMessageEnum; -import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.quartz.service.ITaskService; +import com.ruoyi.system.service.ISysConfigService; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; @@ -41,6 +41,9 @@ public class FlowTaskExpiredTask { @Autowired private ITaskService taskService; + @Autowired + private ISysConfigService configService; + /** * 从Flowable中查询超时数据进行消息提醒 * 分布式锁::quartz.task.flowTaskExpiredTask.notifyExpiredData @@ -396,7 +399,7 @@ public class FlowTaskExpiredTask { /** * 模板消息开关 */ - private boolean wxSwitch = true; + private boolean wxSwitch = false; /** * 推送模板消息 @@ -404,6 +407,7 @@ public class FlowTaskExpiredTask { */ private void send(List lsit, String messageType){ try { + wxSwitch = Convert.toBool(configService.selectConfigByKey("sys.wx.message"),false); if(wxSwitch && StringUtils.isNotEmpty(lsit)){ for(WxMpTemplateMessage message:lsit){ if(StringUtils.isNotEmpty(message.getToUser())){ diff --git a/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/controller/WechatUserLoginController.java b/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/controller/WechatUserLoginController.java index e0e93231..3daae7bd 100644 --- a/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/controller/WechatUserLoginController.java +++ b/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/controller/WechatUserLoginController.java @@ -5,6 +5,7 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.text.Convert; import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.web.userLogin.service.IWechatUserLoginService; @@ -79,8 +80,11 @@ public class WechatUserLoginController extends BaseController { ajax.put("data",data); return ajax; } - ajax.put(Constants.TOKEN, ""); data = wechatUserLoginService.getLoginUserByOpenId(loginBody.getOpenId()); + String token = loginService.login(Convert.toStr(data.get("userName")),loginBody.getOpenId()); + // 移动端这里刷新token有效期为长期 + tokenService.refreshMobileToken(token); + ajax.put(Constants.TOKEN, token); redisCache.setCacheObject(key, data, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); if(data!=null){ ajax.put("data",data); diff --git a/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/service/impl/WechatUserLoginServiceImpl.java b/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/service/impl/WechatUserLoginServiceImpl.java index 5e859fa3..53a3960f 100644 --- a/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/service/impl/WechatUserLoginServiceImpl.java +++ b/ruoyi-wechat/src/main/java/com/ruoyi/web/userLogin/service/impl/WechatUserLoginServiceImpl.java @@ -141,6 +141,7 @@ public class WechatUserLoginServiceImpl implements IWechatUserLoginService { wechatUserLoginMapper.addUserOpenId(map); } data.put("userinfo",userInfo); + data.put("userName",userData.get("user_name")); return data; } @@ -154,7 +155,7 @@ public class WechatUserLoginServiceImpl implements IWechatUserLoginService { if(userMap!=null){ return this.findUserInfo(userMap.get("loginName").toString(),openId); }else{ - return null; + throw new RuntimeException("用户信息异常..."); } } diff --git a/ruoyi-wechat/src/main/resources/application-prod.yml b/ruoyi-wechat/src/main/resources/application-prod.yml index ccbc557a..a1921e02 100644 --- a/ruoyi-wechat/src/main/resources/application-prod.yml +++ b/ruoyi-wechat/src/main/resources/application-prod.yml @@ -106,13 +106,13 @@ spring: # redis 配置 redis: # 地址 - host: 127.0.0.1 + host: 192.168.126.20 # 端口,默认为6379 port: 6379 # 数据库索引 - database: 0 + database: 1 # 密码 - password: 123456 + password: aDlasdasasdjHjasasdkqmewqe # 连接超时时间 timeout: 10s lettuce: diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java index 24579df8..10c5a3d6 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java @@ -16,6 +16,7 @@ import com.ruoyi.system.domain.SysUserOpenid; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.mapper.SysUserOpenidMapper; +import com.ruoyi.system.service.ISysConfigService; import com.yanzhu.jh.project.domain.*; import com.yanzhu.jh.project.mapper.SurProjectMapper; import com.yanzhu.jh.trouble.domain.SmzSspProblemmodify; @@ -44,6 +45,9 @@ import java.util.stream.Collectors; @EnableAsync public class WeChatMessageServiceImpl { + @Autowired + private ISysConfigService configService; + @Autowired private WxMpService wxMpService; @@ -643,7 +647,7 @@ public class WeChatMessageServiceImpl { /** * 模板消息开关 */ - private boolean wxSwitch=true; + private boolean wxSwitch = false; /** * 推送模板消息 @@ -651,6 +655,7 @@ public class WeChatMessageServiceImpl { */ private void send(List lsit,String messageType){ try { + wxSwitch = Convert.toBool(configService.selectConfigByKey("sys.wx.message"),false); if(wxSwitch && StringUtils.isNotEmpty(lsit)){ for(WxMpTemplateMessage message:lsit){ if(StringUtils.isNotEmpty(message.getToUser())){