公众号登录

This commit is contained in:
zhanglipeng
2021-04-22 16:34:49 +08:00
parent 2870de3d22
commit 2758850d1f
17 changed files with 909 additions and 447 deletions

View File

@ -1,82 +1,97 @@
import request from '@/utils/request' import request from "@/utils/request";
import { praseStrEmpty } from "@/utils/ruoyi"; import { praseStrEmpty } from "@/utils/ruoyi";
// 查询用户列表 // 查询用户列表
export function listUser(query) { export function listUser(query) {
return request({ return request({
url: '/system/user/list', url: "/system/user/list",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询用户列表 // 查询用户列表
export function listlrrUser(query) { export function listlrrUser(query) {
return request({ return request({
url: '/system/user/lrrlist', url: "/system/user/lrrlist",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 查询用户详细 // 查询用户详细
export function getUser(userId) { export function getUser(userId) {
return request({ return request({
url: '/system/user/' + praseStrEmpty(userId), url: "/system/user/" + praseStrEmpty(userId),
method: 'get' method: "get"
}) });
} }
// 查询用户列表根据roleId // 查询用户列表根据roleId
export function getUsersByRoleId() { export function getUsersByRoleId() {
return request({ return request({
url: '/system/user/listbyroleid', url: "/system/user/listbyroleid",
method: 'get' method: "get"
}) });
} }
// 根据roleid查询用户列表 // 根据roleid查询用户列表
export function getUserOnlyByRoleId(roleId) { export function getUserOnlyByRoleId(roleId) {
return request({ return request({
url: '/system/user/onlybyroleid/' + roleId, url: "/system/user/onlybyroleid/" + roleId,
method: 'get' method: "get"
}) });
} }
// 新增用户 // 新增用户
export function addUser(data) { export function addUser(data) {
return request({ return request({
url: '/system/user', url: "/system/user",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 修改用户 // 修改用户
export function updateUser(data) { export function updateUser(data) {
return request({ return request({
url: '/system/user', url: "/system/user",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 删除用户 // 删除用户
export function delUser(userId) { export function delUser(userId) {
return request({ return request({
url: '/system/user/' + userId, url: "/system/user/" + userId,
method: 'delete' method: "delete"
}) });
}
// 绑定微信
export function bindwx(code) {
return request({
url: "/system/user/bindwx/" + code,
method: "post"
});
}
// 是否已经绑定微信
export function isbindwx() {
return request({
url: "/system/user/isbindwx",
method: "get"
});
} }
// 导出用户 // 导出用户
export function exportUser(query) { export function exportUser(query) {
return request({ return request({
url: '/system/user/export', url: "/system/user/export",
method: 'get', method: "get",
params: query params: query
}) });
} }
// 用户密码重置 // 用户密码重置
@ -84,12 +99,12 @@ export function resetUserPwd(userId, password) {
const data = { const data = {
userId, userId,
password password
} };
return request({ return request({
url: '/system/user/resetPwd', url: "/system/user/resetPwd",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 用户状态修改 // 用户状态修改
@ -97,29 +112,29 @@ export function changeUserStatus(userId, status) {
const data = { const data = {
userId, userId,
status status
} };
return request({ return request({
url: '/system/user/changeStatus', url: "/system/user/changeStatus",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 查询用户个人信息 // 查询用户个人信息
export function getUserProfile() { export function getUserProfile() {
return request({ return request({
url: '/system/user/profile', url: "/system/user/profile",
method: 'get' method: "get"
}) });
} }
// 修改用户个人信息 // 修改用户个人信息
export function updateUserProfile(data) { export function updateUserProfile(data) {
return request({ return request({
url: '/system/user/profile', url: "/system/user/profile",
method: 'put', method: "put",
data: data data: data
}) });
} }
// 用户密码重置 // 用户密码重置
@ -127,27 +142,35 @@ export function updateUserPwd(oldPassword, newPassword) {
const data = { const data = {
oldPassword, oldPassword,
newPassword newPassword
} };
return request({ return request({
url: '/system/user/profile/updatePwd', url: "/system/user/profile/updatePwd",
method: 'put', method: "put",
params: data params: data
}) });
} }
// 用户头像上传 // 用户头像上传
export function uploadAvatar(data) { export function uploadAvatar(data) {
return request({ return request({
url: '/system/user/profile/avatar', url: "/system/user/profile/avatar",
method: 'post', method: "post",
data: data data: data
}) });
} }
// 下载用户导入模板 // 下载用户导入模板
export function importTemplate() { export function importTemplate() {
return request({ return request({
url: '/system/user/importTemplate', url: "/system/user/importTemplate",
method: 'get' method: "get"
}) });
}
// 登录方法
export function wxlogin(code) {
return request({
url: "/wxlogin/" + code,
method: "post"
});
} }

View File

@ -42,6 +42,9 @@
<el-dropdown-item @click.native="setting = true"> <el-dropdown-item @click.native="setting = true">
<span>布局设置</span> <span>布局设置</span>
</el-dropdown-item> </el-dropdown-item>
<!-- <router-link to="/user/bind/wx">
<el-dropdown-item>绑定微信</el-dropdown-item>
</router-link> -->
<el-dropdown-item divided @click.native="logout"> <el-dropdown-item divided @click.native="logout">
<span>退出登录</span> <span>退出登录</span>
</el-dropdown-item> </el-dropdown-item>

View File

@ -22,7 +22,7 @@ NProgress.configure({
}) })
//const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] //const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
const whiteList = ['/login', '/experience/apply/', '/experience/result/', '/experience/content/', '/benyi_child/child_preserve'] const whiteList = ['/login','/wxlogin', '/experience/apply/', '/experience/result/', '/experience/content/', '/benyi_child/child_preserve']
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
NProgress.start() NProgress.start()

View File

@ -41,6 +41,12 @@ export const constantRoutes = [{
import ('@/views/login'), import ('@/views/login'),
hidden: true hidden: true
}, },
{
path: '/wxlogin',
component: () =>
import ('@/views/wxlogin'),
hidden: true
},
{ {
path: '/404', path: '/404',
component: () => component: () =>
@ -153,6 +159,22 @@ export const constantRoutes = [{
} }
}] }]
}, },
{
path: '/user/bind',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [{
path: 'wx',
component: () =>
import ('@/views/system/user/wx/index'),
name: 'Wx',
meta: {
title: '绑定微信',
icon: ''
}
}]
},
{ {
path: '/user/change', path: '/user/change',
component: Layout, component: Layout,
@ -165,7 +187,7 @@ export const constantRoutes = [{
name: 'Changedept', name: 'Changedept',
meta: { meta: {
title: '切换岗位', title: '切换岗位',
icon: 'user' icon: ''
} }
}] }]
}, },

View File

@ -55,6 +55,7 @@ import RaddarChart from "./dashboard/RaddarChart";
import PieChart from "./dashboard/PieChart"; import PieChart from "./dashboard/PieChart";
import BarChart from "./dashboard/BarChart"; import BarChart from "./dashboard/BarChart";
import LineChart from "./dashboard/LineChart"; import LineChart from "./dashboard/LineChart";
import { bindwx, isbindwx, wxlogin } from "@/api/system/user";
//import { getSchoolCalendars } from "@/api/benyi/schoolcalendar"; //import { getSchoolCalendars } from "@/api/benyi/schoolcalendar";
//备用进行班级园历显示操作import { getSchoolCalendarsClass } from "@/api/benyi/schoolcalendarclass"; //备用进行班级园历显示操作import { getSchoolCalendarsClass } from "@/api/benyi/schoolcalendarclass";
@ -69,6 +70,7 @@ export default {
}, },
data() { data() {
return { return {
code: "",
calendarData: [], calendarData: [],
value: new Date(), value: new Date(),
// 查询参数 // 查询参数
@ -77,9 +79,31 @@ export default {
}; };
}, },
created() { created() {
this.code = this.$route.query.code;
//console.log(this.code);
this.bindWxInfo();
//this.getSchoolCalendarList(); //this.getSchoolCalendarList();
}, },
methods: { methods: {
async bindWxInfo() {
await isbindwx().then((res) => {
if (this.code != "" && this.code != null && res.msg == "1") {
//console.log("绑定微信");
this.$confirm("当前账号要绑定微信登录吗?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return bindwx(this.code);
})
.then(() => {
this.msgSuccess("绑定成功");
})
.catch(function () {});
}
});
},
/** 查询园历列表 */ /** 查询园历列表 */
// getSchoolCalendarList() { // getSchoolCalendarList() {
// getSchoolCalendars(this.queryParams).then(response => { // getSchoolCalendars(this.queryParams).then(response => {

View File

@ -0,0 +1,86 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="8">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>个人信息</span>
</div>
<div>
<ul class="list-group list-group-striped">
<li class="list-group-item">
<svg-icon icon-class="user" />用户名称
<div class="pull-right">{{ user.userName }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="phone" />手机号码
<div class="pull-right">{{ user.phonenumber }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="email" />用户邮箱
<div class="pull-right">{{ user.email }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="tree" />所属部门
<div class="pull-right" v-if="user.dept">
{{ user.dept.deptName }} / {{ postGroup }}
</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="peoples" />所属角色
<div class="pull-right">{{ roleGroup }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="date" />创建日期
<div class="pull-right">{{ user.createTime }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="star" />是否绑定微信
<div class="pull-right">{{ wxOpenId }}</div>
</li>
</ul>
<el-button
v-if="!wxOpenId"
type="primary"
size="mini"
@click="submit"
>绑定</el-button
>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import { getUserProfile } from "@/api/system/user";
export default {
name: "Profile",
data() {
return {
code: "",
user: {},
roleGroup: {},
postGroup: {},
wxOpenId: "",
};
},
created() {
this.getUser();
},
methods: {
getUser() {
getUserProfile().then((response) => {
this.user = response.data;
// console.log(this.user);
this.wxOpenId = this.user.openId;
this.roleGroup = response.roleGroup;
this.postGroup = response.postGroup;
});
},
submit() {},
},
};
</script>

View File

@ -0,0 +1,39 @@
<template>
<div class="dashboard-editor-container"></div>
</template>
<script>
import { wxlogin } from "@/api/system/user";
import { getToken, setToken, removeToken } from "@/utils/auth";
export default {
name: "wxLogin",
data() {
return {
code: "",
};
},
created() {
this.code = this.$route.query.code;
this.wxLogin();
},
methods: {
wxLogin() {
if(getToken()){
this.$router.push({ path: "/index?code="+this.code });
return;
}
if (this.code != "" && this.code != null) {
//console.log("zhixing");
wxlogin(this.code).then((res) => {
console.log(res);
if (res.code == "200") {
setToken(res.token);
this.$router.push({ path: "/index" });
}
});
}
},
},
};
</script>

View File

@ -86,7 +86,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 过滤请求 // 过滤请求
.authorizeRequests() .authorizeRequests()
// 对于登录login 验证码captchaImage 允许匿名访问 // 对于登录login 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/captchaImage").anonymous() .antMatchers("/login","/wxlogin/**", "/captchaImage").anonymous()
.antMatchers( .antMatchers(
HttpMethod.GET, HttpMethod.GET,
"/*.html", "/*.html",

View File

@ -102,4 +102,53 @@ public class SysLoginService {
// 生成token // 生成token
return tokenService.createToken(loginUser); return tokenService.createToken(loginUser);
} }
/**
* 登录验证
*
* @param username 用户名
* @param password 密码
* @return 结果
*/
public String wxlogin(String username, String password) {
// 用户验证
Authentication authentication = null;
try {
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
authentication = authenticationManager
.authenticate(new UsernamePasswordAuthenticationToken(username, password));
} 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 CustomException(e.getMessage());
}
}
Collection<String> keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*");
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
for (String key : keys) {
try {
LoginUser user = redisCache.getCacheObject(key);
if (StringUtils.isNotEmpty(username) && StringUtils.isNotNull(user.getUser())) {
if (StringUtils.equals(username, user.getUsername())) {
//存在已经登录用户,抛出异常
// CustomException alreadyLoginExcep = new CustomException("该账号已在别处登陆", HttpStatus.ALREADY_LOGIN);
// alreadyLoginExcep.setObj(username);
// throw alreadyLoginExcep;
redisCache.deleteObject(key);
}
}
} catch (Exception e) {
}
}
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
// 生成token
return tokenService.createToken(loginUser);
}
} }

View File

@ -3,14 +3,15 @@ package com.ruoyi.project.system.controller;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.framework.redis.RedisCache; import com.ruoyi.framework.redis.RedisCache;
import com.ruoyi.project.system.domain.BySchool; import com.ruoyi.project.system.domain.BySchool;
import com.ruoyi.project.system.service.IBySchoolService; import com.ruoyi.project.system.service.IBySchoolService;
import com.ruoyi.project.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.framework.security.LoginBody; import com.ruoyi.framework.security.LoginBody;
@ -29,8 +30,16 @@ import com.ruoyi.project.system.service.ISysMenuService;
* @author ruoyi * @author ruoyi
*/ */
@RestController @RestController
public class SysLoginController public class SysLoginController {
{ @Value("${wx.appid}")
private String appid;
@Value("${wx.secret}")
private String secret;
@Value("${wx.domain}")
private String domain;
@Autowired @Autowired
private SysLoginService loginService; private SysLoginService loginService;
@ -43,6 +52,10 @@ public class SysLoginController
@Autowired @Autowired
private TokenService tokenService; private TokenService tokenService;
@Autowired
private ISysUserService userService;
// @Autowired // @Autowired
// private RedisCache redisCache; // private RedisCache redisCache;
@ -56,8 +69,7 @@ public class SysLoginController
* @return 结果 * @return 结果
*/ */
@PostMapping("/login") @PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody) public AjaxResult login(@RequestBody LoginBody loginBody) {
{
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
// 生成令牌 // 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
@ -66,6 +78,36 @@ public class SysLoginController
return ajax; return ajax;
} }
/**
* 登录方法
*
* @return 结果
*/
@PostMapping("/wxlogin/{code}")
public AjaxResult wxlogin(@PathVariable String code) {
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String token = "";
String url = domain;
String parmas = "appid=" + appid + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";
System.out.println(parmas);
String strResult = HttpUtils.sendGet(url, parmas);
JSONObject jsonObject = JSONObject.parseObject(strResult);
try {
String openId = jsonObject.get("openid").toString();
SysUser sysUser = userService.selectUserByWxId(openId);
if (sysUser != null) {
token = loginService.wxlogin(sysUser.getUserName(), sysUser.getPw());
} else {
return AjaxResult.error("登录失败");
}
} catch (Exception e) {
return AjaxResult.error("登录失败");
}
ajax.put(Constants.TOKEN, token);
return ajax;
}
// /** // /**
// * 将在其他地方登陆的账号强退 // * 将在其他地方登陆的账号强退
// * // *
@ -86,8 +128,7 @@ public class SysLoginController
* @return 用户信息 * @return 用户信息
*/ */
@GetMapping("getInfo") @GetMapping("getInfo")
public AjaxResult getInfo() public AjaxResult getInfo() {
{
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
SysUser user = loginUser.getUser(); SysUser user = loginUser.getUser();
// 角色集合 // 角色集合
@ -108,8 +149,7 @@ public class SysLoginController
* @return 路由信息 * @return 路由信息
*/ */
@GetMapping("getRouters") @GetMapping("getRouters")
public AjaxResult getRouters() public AjaxResult getRouters() {
{
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
// 用户信息 // 用户信息
SysUser user = loginUser.getUser(); SysUser user = loginUser.getUser();

View File

@ -3,11 +3,15 @@ package com.ruoyi.project.system.controller;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.project.common.SchoolCommon; import com.ruoyi.project.common.SchoolCommon;
import com.ruoyi.project.system.domain.ByTeacherJbxx; import com.ruoyi.project.system.domain.ByTeacherJbxx;
import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.service.*; import com.ruoyi.project.system.service.*;
import org.aspectj.weaver.loadtime.Aj;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
@ -41,6 +45,16 @@ import com.ruoyi.project.system.domain.SysUser;
@RestController @RestController
@RequestMapping("/system/user") @RequestMapping("/system/user")
public class SysUserController extends BaseController { public class SysUserController extends BaseController {
@Value("${wx.appid}")
private String appid;
@Value("${wx.secret}")
private String secret;
@Value("${wx.domain}")
private String domain;
@Autowired @Autowired
private ISysUserService userService; private ISysUserService userService;
@ -329,4 +343,52 @@ public class SysUserController extends BaseController {
user.setUpdateBy(SecurityUtils.getUsername()); user.setUpdateBy(SecurityUtils.getUsername());
return toAjax(userService.updateUserStatus(user)); return toAjax(userService.updateUserStatus(user));
} }
@Log(title = "用户管理-绑定微信", businessType = BusinessType.UPDATE)
@PostMapping("/bindwx/{code}")
public AjaxResult bindWx(@PathVariable String code) {
String url = domain;
String parmas = "appid=" + appid + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";
System.out.println(parmas);
String strResult = HttpUtils.sendGet(url, parmas);
JSONObject jsonObject = JSONObject.parseObject(strResult);
try {
String openId = jsonObject.get("openid").toString();
System.out.println(openId);
//首先判断当前用户是否绑定微信
SysUser sysUser = userService.selectUserById(SecurityUtils.getLoginUser().getUser().getUserId());
if (schoolCommon.isStringEmpty(sysUser.getOpenId())) {
//其次查询当前微信是否被绑定
SysUser sysUserNew = new SysUser();
sysUserNew.setOpenId(openId);
List<SysUser> list = userService.selectUserList(sysUserNew);
if (list != null && list.size() > 0) {
return AjaxResult.error("当前微信已绑定其他账号");
} else {
//绑定
sysUser.setOpenId(openId);
int iCount = userService.updateUserWx(sysUser);
return AjaxResult.success(iCount);
}
} else {
return AjaxResult.error("当前账户已绑定微信");
}
} catch (Exception e) {
return AjaxResult.error("获取信息失败");
}
}
@GetMapping("/isbindwx")
public AjaxResult isbindWx() {
//首先判断当前用户是否绑定微信
SysUser sysUser = userService.selectUserById(SecurityUtils.getLoginUser().getUser().getUserId());
if (schoolCommon.isStringEmpty(sysUser.getOpenId())) {
return AjaxResult.success("1");
} else {
return AjaxResult.success("0");
}
}
} }

View File

@ -5,6 +5,7 @@ import java.util.List;
import javax.validation.constraints.Email; import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
@ -19,300 +20,324 @@ import com.ruoyi.framework.web.domain.BaseEntity;
* *
* @author ruoyi * @author ruoyi
*/ */
public class SysUser extends BaseEntity public class SysUser extends BaseEntity {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 用户ID */ /**
* 用户ID
*/
@Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
private Long userId; private Long userId;
/** 部门ID */ /**
* 部门ID
*/
@Excel(name = "部门编号", type = Type.IMPORT) @Excel(name = "部门编号", type = Type.IMPORT)
private Long deptId; private Long deptId;
/** 用户账号 */ /**
* 用户账号
*/
@Excel(name = "登录名称") @Excel(name = "登录名称")
private String userName; private String userName;
/** 用户昵称 */ /**
* 用户昵称
*/
@Excel(name = "用户名称") @Excel(name = "用户名称")
private String nickName; private String nickName;
/** 用户邮箱 */ /**
* 用户邮箱
*/
@Excel(name = "用户邮箱") @Excel(name = "用户邮箱")
private String email; private String email;
/** 手机号码 */ /**
* 手机号码
*/
@Excel(name = "手机号码") @Excel(name = "手机号码")
private String phonenumber; private String phonenumber;
/** 用户性别 */ /**
* 用户性别
*/
@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
private String sex; private String sex;
/** 用户头像 */ /**
* 用户头像
*/
private String avatar; private String avatar;
/** 密码 */ /**
* 密码
*/
private String password; private String password;
/** 盐加密 */ /**
* 盐加密
*/
private String salt; private String salt;
/** 帐号状态0正常 1停用 */ /**
* 帐号状态0正常 1停用
*/
@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
private String status; private String status;
/** 删除标志0代表存在 2代表删除 */ /**
* 删除标志0代表存在 2代表删除
*/
private String delFlag; private String delFlag;
/** 最后登陆IP */ /**
* 最后登陆IP
*/
@Excel(name = "最后登陆IP", type = Type.EXPORT) @Excel(name = "最后登陆IP", type = Type.EXPORT)
private String loginIp; private String loginIp;
/** 最后登陆时间 */ /**
* 最后登陆时间
*/
@Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) @Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
private Date loginDate; private Date loginDate;
/** 部门对象 */ /**
* 部门对象
*/
@Excels({ @Excels({
@Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
@Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
}) })
private SysDept dept; private SysDept dept;
/** 角色对象 */ /**
* 角色对象
*/
private List<SysRole> roles; private List<SysRole> roles;
/** 角色组 */ /**
* 角色组
*/
private Long[] roleIds; private Long[] roleIds;
/** 岗位组 */ /**
* 岗位组
*/
private Long[] postIds; private Long[] postIds;
/** 部门组 */ /**
* 部门组
*/
private Long[] deptIds; private Long[] deptIds;
/**教师对象*/ /**
* 教师对象
*/
private ByTeacherJbxx byTeacherJbxx; private ByTeacherJbxx byTeacherJbxx;
public SysUser() /**
{ * 微信openid
*/
private String openId;
/**
* pw
*/
private String pw;
public SysUser() {
} }
public SysUser(Long userId) public SysUser(Long userId) {
{
this.userId = userId; this.userId = userId;
} }
public Long getUserId() public Long getUserId() {
{
return userId; return userId;
} }
public void setUserId(Long userId) public void setUserId(Long userId) {
{
this.userId = userId; this.userId = userId;
} }
public boolean isAdmin() public boolean isAdmin() {
{
return isAdmin(this.userId); return isAdmin(this.userId);
} }
public static boolean isAdmin(Long userId) public static boolean isAdmin(Long userId) {
{
return userId != null && 1L == userId; return userId != null && 1L == userId;
} }
public Long getDeptId() public Long getDeptId() {
{
return deptId; return deptId;
} }
public void setDeptId(Long deptId) public void setDeptId(Long deptId) {
{
this.deptId = deptId; this.deptId = deptId;
} }
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
public String getNickName() public String getNickName() {
{
return nickName; return nickName;
} }
public void setNickName(String nickName) public void setNickName(String nickName) {
{
this.nickName = nickName; this.nickName = nickName;
} }
@NotBlank(message = "用户账号不能为空") @NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
public String getUserName() public String getUserName() {
{
return userName; return userName;
} }
public void setUserName(String userName) public void setUserName(String userName) {
{
this.userName = userName; this.userName = userName;
} }
@Email(message = "邮箱格式不正确") @Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail() public String getEmail() {
{
return email; return email;
} }
public void setEmail(String email) public void setEmail(String email) {
{
this.email = email; this.email = email;
} }
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
public String getPhonenumber() public String getPhonenumber() {
{
return phonenumber; return phonenumber;
} }
public void setPhonenumber(String phonenumber) public void setPhonenumber(String phonenumber) {
{
this.phonenumber = phonenumber; this.phonenumber = phonenumber;
} }
public String getSex() public String getSex() {
{
return sex; return sex;
} }
public void setSex(String sex) public void setSex(String sex) {
{
this.sex = sex; this.sex = sex;
} }
public String getAvatar() public String getAvatar() {
{
return avatar; return avatar;
} }
public void setAvatar(String avatar) public void setAvatar(String avatar) {
{
this.avatar = avatar; this.avatar = avatar;
} }
@JsonProperty @JsonProperty
public String getPassword() public String getPassword() {
{
return password; return password;
} }
public void setPassword(String password) public void setPassword(String password) {
{
this.password = password; this.password = password;
} }
public String getSalt() public String getSalt() {
{
return salt; return salt;
} }
public void setSalt(String salt) public void setSalt(String salt) {
{
this.salt = salt; this.salt = salt;
} }
public String getStatus() public String getStatus() {
{
return status; return status;
} }
public void setStatus(String status) public void setStatus(String status) {
{
this.status = status; this.status = status;
} }
public String getDelFlag() public String getDelFlag() {
{
return delFlag; return delFlag;
} }
public void setDelFlag(String delFlag) public void setDelFlag(String delFlag) {
{
this.delFlag = delFlag; this.delFlag = delFlag;
} }
public String getLoginIp() public String getLoginIp() {
{
return loginIp; return loginIp;
} }
public void setLoginIp(String loginIp) public void setLoginIp(String loginIp) {
{
this.loginIp = loginIp; this.loginIp = loginIp;
} }
public Date getLoginDate() public Date getLoginDate() {
{
return loginDate; return loginDate;
} }
public void setLoginDate(Date loginDate) public void setLoginDate(Date loginDate) {
{
this.loginDate = loginDate; this.loginDate = loginDate;
} }
public SysDept getDept() public SysDept getDept() {
{
return dept; return dept;
} }
public void setDept(SysDept dept) public void setDept(SysDept dept) {
{
this.dept = dept; this.dept = dept;
} }
public List<SysRole> getRoles() public List<SysRole> getRoles() {
{
return roles; return roles;
} }
public void setRoles(List<SysRole> roles) public void setRoles(List<SysRole> roles) {
{
this.roles = roles; this.roles = roles;
} }
public Long[] getRoleIds() public Long[] getRoleIds() {
{
return roleIds; return roleIds;
} }
public void setRoleIds(Long[] roleIds) public void setRoleIds(Long[] roleIds) {
{
this.roleIds = roleIds; this.roleIds = roleIds;
} }
public Long[] getPostIds() public Long[] getPostIds() {
{
return postIds; return postIds;
} }
public void setPostIds(Long[] postIds) public void setPostIds(Long[] postIds) {
{
this.postIds = postIds; this.postIds = postIds;
} }
public Long[] getDeptIds()
{ public Long[] getDeptIds() {
return deptIds; return deptIds;
} }
public void setDeptIds(Long[] deptIds) public void setDeptIds(Long[] deptIds) {
{
this.deptIds = deptIds; this.deptIds = deptIds;
} }
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@ -337,6 +362,8 @@ public class SysUser extends BaseEntity
.append("remark", getRemark()) .append("remark", getRemark())
.append("dept", getDept()) .append("dept", getDept())
.append("byTeacherJbxx", getByTeacherJbxx()) .append("byTeacherJbxx", getByTeacherJbxx())
.append("openId", getOpenId())
.append("pw", getPw())
.toString(); .toString();
} }

View File

@ -53,6 +53,14 @@ public interface SysUserMapper
*/ */
public SysUser selectUserById(Long userId); public SysUser selectUserById(Long userId);
/**
* 通过用户ID查询用户
*
* @param openId 用户ID
* @return 用户对象信息
*/
public SysUser selectUserByWxId(String openId);
/** /**
* 根据roleId查询用户列表 * 根据roleId查询用户列表
* *
@ -85,6 +93,14 @@ public interface SysUserMapper
*/ */
public int updateUser(SysUser user); public int updateUser(SysUser user);
/**
* 修改用户状态
*
* @param user 用户信息
* @return 结果
*/
public int updateUserWx(SysUser user);
/** /**
* 修改用户头像 * 修改用户头像
* *

View File

@ -51,6 +51,14 @@ public interface ISysUserService
*/ */
public SysUser selectUserById(Long userId); public SysUser selectUserById(Long userId);
/**
* 通过用户ID查询用户
*
* @param openId 用户ID
* @return 用户对象信息
*/
public SysUser selectUserByWxId(String openId);
/** /**
* 根据roleId查询用户列表 * 根据roleId查询用户列表
* *
@ -138,6 +146,14 @@ public interface ISysUserService
*/ */
public int updateUserStatus(SysUser user); public int updateUserStatus(SysUser user);
/**
* 修改用户状态
*
* @param user 用户信息
* @return 结果
*/
public int updateUserWx(SysUser user);
/** /**
* 修改用户基本信息 * 修改用户基本信息
* *

View File

@ -103,6 +103,17 @@ public class SysUserServiceImpl implements ISysUserService {
return userMapper.selectUserById(userId); return userMapper.selectUserById(userId);
} }
/**
* 通过用户ID查询用户
*
* @param openId 用户ID
* @return 用户对象信息
*/
@Override
public SysUser selectUserByWxId(String openId) {
return userMapper.selectUserByWxId(openId);
}
/** /**
* 根据roleId查询用户列表 * 根据roleId查询用户列表
* *
@ -126,7 +137,6 @@ public class SysUserServiceImpl implements ISysUserService {
} }
/** /**
* 查询用户所属角色组 * 查询用户所属角色组
* *
@ -279,6 +289,17 @@ public class SysUserServiceImpl implements ISysUserService {
return userMapper.updateUser(user); return userMapper.updateUser(user);
} }
/**
* 修改用户状态
*
* @param user 用户信息
* @return 结果
*/
@Override
public int updateUserWx(SysUser user) {
return userMapper.updateUserWx(user);
}
/** /**
* 修改用户基本信息 * 修改用户基本信息
* *

View File

@ -129,3 +129,9 @@ file:
# domain: https://files.benyiedu.com/ # domain: https://files.benyiedu.com/
domain: http://video.benyiedu.com/ domain: http://video.benyiedu.com/
bucket: bywebfile bucket: bywebfile
#wx
wx:
appid: wx0370c4756118456a
secret: f57143e81f3c95b0d909d91b3116cc82
domain: https://api.weixin.qq.com/sns/oauth2/access_token

View File

@ -23,6 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by"/> <result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/> <result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/> <result property="remark" column="remark"/>
<result property="openId" column="open_id"/>
<result property="pw" column="pw"/>
<association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/> <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
<collection property="roles" javaType="java.util.List" resultMap="RoleResult"/> <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
</resultMap> </resultMap>
@ -52,7 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<sql id="selectUserVo"> <sql id="selectUserVo">
select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.open_id, u.pw,
d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status, d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
from sys_user u from sys_user u
@ -62,12 +64,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql> </sql>
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0' where u.del_flag = '0'
<if test="userName != null and userName != ''"> <if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%') AND u.user_name like concat('%', #{userName}, '%')
</if> </if>
<if test="openId != null and openId != ''">
AND u.open_id = #{openId}
</if>
<if test="status != null and status != ''"> <if test="status != null and status != ''">
AND u.status = #{status} AND u.status = #{status}
</if> </if>
@ -81,14 +88,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d') AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
</if> </if>
<if test="deptId != null and deptId != 0"> <if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (#{deptId},ancestors) )) AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET
(#{deptId},ancestors) ))
</if> </if>
<!-- 数据范围过滤 --> <!-- 数据范围过滤 -->
${dataScope} ${dataScope}
</select> </select>
<select id="selectUserListAll" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectUserListAll" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0' where u.del_flag = '0'
<if test="userName != null and userName != ''"> <if test="userName != null and userName != ''">
@ -107,7 +117,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d') AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
</if> </if>
<if test="deptId != null and deptId != 0"> <if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (#{deptId},ancestors) )) AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET
(#{deptId},ancestors) ))
</if> </if>
</select> </select>
@ -121,8 +132,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where u.user_id = #{userId} where u.user_id = #{userId}
</select> </select>
<select id="selectUserByWxId" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.open_id = #{openId}
</select>
<select id="selectUserListByRoleId" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectUserListByRoleId" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id left join sys_user_role ur on u.user_id = ur.user_id
@ -132,7 +149,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and r.role_id = #{userId} and r.role_id = #{userId}
</if> </if>
<if test="deptId != null and deptId != 0"> <if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (#{deptId},ancestors) )) AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET
(#{deptId},ancestors) ))
</if> </if>
</select> </select>
@ -167,6 +185,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="status != null and status != ''">status,</if> <if test="status != null and status != ''">status,</if>
<if test="createBy != null and createBy != ''">create_by,</if> <if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if> <if test="remark != null and remark != ''">remark,</if>
<if test="openId != null and openId != ''">open_id,</if>
<if test="pw != null and pw != ''">pw,</if>
create_time create_time
)values( )values(
<if test="userId != null and userId != ''">#{userId},</if> <if test="userId != null and userId != ''">#{userId},</if>
@ -181,6 +201,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="status != null and status != ''">#{status},</if> <if test="status != null and status != ''">#{status},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if> <if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if> <if test="remark != null and remark != ''">#{remark},</if>
<if test="openId != null and openId != ''">#{openId},</if>
<if test="pw != null and pw != ''">#{pw},</if>
sysdate() sysdate()
) )
</insert> </insert>
@ -201,6 +223,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="loginDate != null">login_date = #{loginDate},</if> <if test="loginDate != null">login_date = #{loginDate},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},</if> <if test="remark != null">remark = #{remark},</if>
<if test="openId != null and openId != ''">open_id = #{openId},</if>
<if test="pw != null and pw != ''">open_id = #{pw},</if>
update_time = sysdate() update_time = sysdate()
</set> </set>
where user_id = #{userId} where user_id = #{userId}
@ -210,12 +234,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update sys_user set status = #{status} where user_id = #{userId} update sys_user set status = #{status} where user_id = #{userId}
</update> </update>
<update id="updateUserWx" parameterType="SysUser">
update sys_user set open_id = #{openId} where user_id = #{userId}
</update>
<update id="updateUserAvatar" parameterType="SysUser"> <update id="updateUserAvatar" parameterType="SysUser">
update sys_user set avatar = #{avatar} where user_name = #{userName} update sys_user set avatar = #{avatar} where user_name = #{userName}
</update> </update>
<update id="resetUserPwd" parameterType="SysUser"> <update id="resetUserPwd" parameterType="SysUser">
update sys_user set password = #{password} where user_name = #{userName} update sys_user set password = #{password},pw=#{pw} where user_name = #{userName}
</update> </update>
<delete id="deleteUserById" parameterType="Long"> <delete id="deleteUserById" parameterType="Long">