main
tamguo 7 years ago
parent 23e5ef15a2
commit 2469d924c1

@ -4,13 +4,17 @@ import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.tamguo.config.dao.SuperMapper;
import com.tamguo.modules.sys.model.SysUserEntity;
import com.tamguo.modules.sys.model.condition.SysUserCondition;
public interface SysUserMapper extends SuperMapper<SysUserEntity>{
SysUserEntity queryByUserName(String username);
List<SysUserEntity> queryPage(@Param(value="userName")String userName , Page<SysUserEntity> page);
List<SysUserEntity> listData(SysUserCondition condition, Pagination page);
}

@ -1,6 +1,7 @@
package com.tamguo.modules.sys.model;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature;
@ -20,24 +21,26 @@ public class SysUserEntity extends SuperEntity<SysUserEntity> implements Seriali
private String userName;
private String nickName;
private String name;
private String mobile;
private String email;
private String password;
private String roleIds;
private String companyId;
private Date createDate;
private Date updateDate;
@JSONField(serialzeFeatures= SerializerFeature.WriteEnumUsingToString)
private SysUserStatusEnum status;
private String safeKeyValue;
private Long createTime;
private String courseId;
private String subjectId;
@TableField(exist=false)
private List<String> roleIdList;
@TableField(exist=false)
private String roleName;
private String companyName;
public SysUserEntity() {
}
@ -122,28 +125,44 @@ public class SysUserEntity extends SuperEntity<SysUserEntity> implements Seriali
this.status = status;
}
public String getCourseId() {
return courseId;
public String getName() {
return name;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
public void setName(String name) {
this.name = name;
}
public String getRoleName() {
return roleName;
public String getCompanyName() {
return companyName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getSubjectId() {
return subjectId;
public String getCompanyId() {
return companyId;
}
public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
public void setCompanyId(String companyId) {
this.companyId = companyId;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}

@ -0,0 +1,35 @@
package com.tamguo.modules.sys.model.condition;
public class SysUserCondition {
private String userName;
private Integer pageNo;
private Integer pageSize;
public Integer getPageNo() {
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}

@ -2,25 +2,11 @@ package com.tamguo.modules.sys.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.tamguo.modules.sys.model.SysUserEntity;
import com.tamguo.modules.sys.utils.Result;
import com.tamguo.modules.sys.model.condition.SysUserCondition;
public interface ISysUserService {
SysUserEntity queryByUserName(String username);
public SysUserEntity queryByUserName(String username);
SysUserEntity queryByUid(String uid);
void updateUserInfo(SysUserEntity user);
Result updatePassword(String oldPassword, String password, String repassword);
Page<SysUserEntity> queryPage(String userName ,Page<SysUserEntity> page);
SysUserEntity selectById(String userId);
void save(SysUserEntity user);
void update(SysUserEntity user);
void deleteBatch(String[] userIds);
public Page<SysUserEntity> listData(SysUserCondition condition);
}

@ -1,107 +1,33 @@
package com.tamguo.modules.sys.service.impl;
import java.util.Arrays;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import com.baomidou.mybatisplus.plugins.Page;
import com.tamguo.modules.sys.dao.SysUserMapper;
import com.tamguo.modules.sys.model.SysUserEntity;
import com.tamguo.modules.sys.model.condition.SysUserCondition;
import com.tamguo.modules.sys.service.ISysUserService;
import com.tamguo.modules.sys.utils.DateUtil;
import com.tamguo.modules.sys.utils.Result;
import com.tamguo.modules.sys.utils.ShaEncrypt;
import com.tamguo.modules.sys.utils.ShiroUtils;
@Service
public class SysUserServiceImpl implements ISysUserService{
@Autowired
public SysUserMapper sysUserMapper;
@Transactional(readOnly=false)
@Override
public SysUserEntity queryByUserName(String username) {
return sysUserMapper.queryByUserName(username);
}
@Override
public SysUserEntity queryByUid(String uid) {
return sysUserMapper.selectById(uid);
}
@Override
public void updateUserInfo(SysUserEntity user) {
SysUserEntity entity = sysUserMapper.selectById(user.getUid());
entity.setRoleIds(user.getRoleIds());
entity.setNickName(user.getNickName());
entity.setMobile(user.getMobile());
entity.setEmail(user.getEmail());
entity.setStatus(user.getStatus());
sysUserMapper.updateById(entity);
}
@Transactional(readOnly=false)
@Override
public Result updatePassword(String oldPassword, String password, String repassword) {
String userId = ShiroUtils.getUid();
SysUserEntity user = sysUserMapper.selectById(userId);
if(!new Sha256Hash(oldPassword).toHex().equals(user.getPassword())) {
return Result.result(1, null, "旧密码错误");
}
if(!password.equals(repassword)) {
return Result.result(2, null, "两次密码输入不一致");
}
user.setPassword(new Sha256Hash(password).toHex());
sysUserMapper.updateById(user);
return Result.successResult(null);
}
@Transactional(readOnly=true)
@Override
public Page<SysUserEntity> queryPage(String userName ,Page<SysUserEntity> page) {
if(!StringUtils.isEmpty(userName)) {
userName = "%" + userName + "%";
}
page.setRecords(sysUserMapper.queryPage(userName , page));
return page;
public Page<SysUserEntity> listData(SysUserCondition condition) {
Page<SysUserEntity> page = new Page<>(condition.getPageNo() , condition.getPageSize());
return page.setRecords(sysUserMapper.listData(condition , page));
}
@Override
public SysUserEntity selectById(String userId) {
return sysUserMapper.selectById(userId);
}
@Transactional(readOnly=false)
@Override
public void save(SysUserEntity user) {
user.setCreateTime(DateUtil.getTime());
// sha256加密
user.setPassword(ShaEncrypt.SHA256(user.getPassword()));
// 处理角色
if(!CollectionUtils.isEmpty(user.getRoleIdList())) {
user.setRoleIds(StringUtils.join(user.getRoleIdList(), ","));
}
sysUserMapper.insert(user);
}
@Override
@Transactional(readOnly=false)
public void update(SysUserEntity user) {
if (StringUtils.isEmpty(user.getPassword())) {
user.setPassword(null);
} else {
user.setPassword(ShaEncrypt.SHA256(user.getPassword()));
}
sysUserMapper.updateById(user);
}
@Transactional(readOnly=false)
@Override
public void deleteBatch(String[] userIds) {
sysUserMapper.deleteBatchIds(Arrays.asList(userIds));
}
}

@ -1,15 +1,29 @@
package com.tamguo.modules.sys.web;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.baomidou.mybatisplus.plugins.Page;
import com.tamguo.modules.sys.model.SysUserEntity;
import com.tamguo.modules.sys.model.condition.SysUserCondition;
import com.tamguo.modules.sys.service.ISysUserService;
import com.tamguo.modules.sys.utils.Result;
@Controller
@RequestMapping(path="sys/user")
public class UserController {
private final String USER_INDEX_PAGE = "modules/sys/user/index";
private final String USER_LIST_PAGE = "modules/sys/user/list";
@Autowired
private ISysUserService iSysUserService;
@RequestMapping(path="index")
public String index(ModelAndView model) {
@ -21,4 +35,11 @@ public class UserController {
return USER_LIST_PAGE;
}
@RequestMapping(path="listData",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> listData(SysUserCondition condition) {
Page<SysUserEntity> page = iSysUserService.listData(condition);
return Result.jqGridResult(page.getRecords(), page.getTotal(), page.getSize(), page.getCurrent(), page.getPages());
}
}

@ -20,7 +20,7 @@ spring.datasource.testOnReturn=false
spring.datasource.testWhileIdle=true
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://47.100.175.14:3306/tiku?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.url=jdbc:mysql://47.100.175.14:3306/tamguo?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.validationQuery=SELECT 1 FROM DUAL

@ -19,21 +19,24 @@
u.user_name = #{username}
</select>
<select id="queryPage" resultType="SysUserEntity">
<select id="listData" resultType="SysUserEntity">
SELECT
u.uid,
u.user_name,
u.name,
u.role_ids,
r.name as role_name,
u.company_id,
c.name as company_name,
u.password,
u.status,
u.nick_name,
u.mobile,
u.email,
u.course_id
u.update_date,
u.create_date
FROM
sys_user u
LEFT JOIN sys_role r ON r.uid = u.role_ids
LEFT JOIN sys_company c ON u.company_id = c.uid
<where>
<if test="userName != null and userName != ''">
u.user_name like #{userName}

@ -5,7 +5,7 @@ content="no-cache, no-store, must-revalidate"/><meta name="description" content=
content="no-cache" http-equiv="Pragma"/><meta http-equiv="Expires" content="0"/><meta
content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<title>用户管理 - JeeSite Demo</title>
<script src="/js/global.min.js?ctx=/js/a"></script>
<script src="/global.min.js?ctx=/js/a"></script>
<script src="http://localhost/jquery/jquery-1.12.4.min.js"></script>
<script src="http://localhost/jquery/jquery-migrate-1.4.1.min.js"></script>
<!--[if lt IE 9]><script src="http://localhost/common/h5fix.min.js"></script><![endif]-->
@ -26,7 +26,7 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
</div>
<div class="box-tools pull-right">
<a href="#" class="btn btn-default" id="btnSearch" title="查询"><i class="fa fa-filter"></i> 查询</a>
<a href="/js/a/sys/empUser/form?op=add" class="btn btn-default btnTool" title="新增用户"><i class="fa fa-plus"></i> 新增</a>
<a href="/js/a/sys/empUser/form?op=add" class="btn btn-default btnTool" title="新增用户"><i class="fa fa-plus"></i> 新增</a>
<div class="btn-group">
<a href="javascript:" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-navicon"></i> <span class="caret"></span>
@ -39,7 +39,7 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
</div>
</div>
<div class="box-body">
<form id="searchForm" action="/js/a/sys/empUser/listData" method="post" class="form-inline " data-page-no="" data-page-size="" data-order-by="">
<form id="searchForm" th:action="${setting.domain + 'sys/user/listData'}" method="post" class="form-inline " data-page-no="1" data-page-size="10" data-order-by="">
<div class="form-group">
<label class="control-label">账号:</label>
<div class="control-inline">
@ -64,12 +64,6 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<input type="text" id="mobile" name="mobile" value="" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-group">
<label class="control-label">电话:</label>
<div class="control-inline">
<input type="text" id="phone" name="phone" value="" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-row"></div>
<div class="form-group">
<label class="control-label">姓名:</label>
@ -77,92 +71,6 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<input type="text" id="refName" name="refName" value="" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-group">
<label class="control-label">机构:</label>
<div class="control-inline width-90">
<div class="input-group treeselect" id="officeDiv" data-url="/js/a/sys/office/treeData">
<input id="officeCode" type="hidden" name="employee.office.officeCode" value="" class="isReset"/>
<input id="officeName" type="text" name="employee.office.officeName" value=""
class="form-control " readonly="readonly"
/><span class="input-group-btn"><a id="officeButton" href="javascript:"
class="btn btn-default btn-sm"><i class="fa fa-search"></i></a>
</span>
</div>
<script>
$("#officeButton,#officeName").click(function(){
if ($("#officeButton").hasClass("disabled")){
return true;
}
var options = {
type: 2,
maxmin: true,
shadeClose: true,
title: '机构选择',
area: ['300px', '400px'],
content: '/js/tags/treeselect',
contentFormData: {
url: $('#officeDiv').attr('data-url'),
checkbox: 'false',
expandLevel: '-1',
selectCodes: $("#officeCode").val(),
isReturnValue: 'false'
},
success: function(layero, index){
if ($(js.layer.window).width() < 300
|| $(js.layer.window).height() < 400){
js.layer.full(index);
}
},
btn: ['<i class="fa fa-check"></i> 确定'],
btn1: function(index, layero){
var win = js.layer.iframeWindow(index);
win.$('#keyword').val('').change(); var codes = [], names = [], nodes;
if ("false" == "true"){
nodes = win.tree.getCheckedNodes(true);
}else{
nodes = win.tree.getSelectedNodes();
}
for(var i=0; i<nodes.length; i++) {
if (nodes[i].level == 0 && nodes[i].isParent){
js.showMessage("不能选择根节点("+nodes[i].name+")请重新选择。");
return false;
}
var code = nodes[i]['false'=='true'?'value':'id'], name = nodes[i]['name'];
codes.push(code.replace(/^u_/g,''));
names.push(name.replace(/\([0-9]*\)/g,''));
break;
}
if(typeof treeselectCheck == 'function'){
if (!treeselectCheck('office', nodes)){
return false;
}
}
$("#officeCode").val(codes.join(',')).change();
$("#officeName").val(names.join(',')).change();
try { $('#officeCode,#officeName').valid(); }catch(e){}
if(typeof treeselectCallback == 'function'){
treeselectCallback('office', 'ok', index, layero, nodes);
}
}
};
options.btn.push('<i class="fa fa-eraser"></i> 清除');
options['btn'+options.btn.length] = function(index, layero){
$("#officeCode").val('').change();
$("#officeName").val('').change();
if(typeof treeselectCallback == 'function'){
treeselectCallback('office', 'clear', index, layero);
}
};
options.btn.push('<i class="fa fa-close"></i> 关闭');
options['btn'+options.btn.length] = function(index, layero){
if(typeof treeselectCallback == 'function'){
treeselectCallback('office', 'cancel', index, layero);
}
};
js.layer.open(options);
});
</script> </div>
</div>
<div class="form-group">
<label class="control-label">公司:</label>
<div class="control-inline width-90">
@ -292,19 +200,25 @@ $("#companyButton,#companyName").click(function(){
$('#dataGrid').dataGrid({
searchForm: $("#searchForm"),
columnModel: [
{header:'登录账号', name:'loginCode', index:'a.login_code', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){
{header:'登录账号', name:'userName', index:'a.login_code', width:300, align:"center", frozen:true, formatter: function(val, obj, row, act){
return '<a href="/js/a/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" data-title="编辑用户">'+(val||row.id)+'</a>';
}},
{header:'用户昵称', name:'userName', index:'a.user_name', width:200, align:"center"},
{header:'员工姓名', name:'refName', index:'a.ref_name', width:200, align:"center"},
{header:'归属机构', name:'employee.office.officeName', index:'o.office_name', width:200, align:"center"},
{header:'归属公司', name:'employee.company.companyName', index:'c.company_name', width:200, align:"center"},
{header:'用户昵称', name:'nickName', index:'a.user_name', width:200, align:"center"},
{header:'员工姓名', name:'name', index:'a.ref_name', width:200, align:"center"},
{header:'归属公司', name:'companyName', index:'c.company_name', width:200, align:"center"},
{header:'电子邮箱', name:'email', index:'a.email', width:200, align:"center"},
{header:'手机号码', name:'mobile', index:'a.mobile', width:200, align:"center"},
{header:'办公电话', name:'phone', index:'a.phone', width:200, align:"center"},
{header:'更新时间', name:'updateDate', index:'a.update_date', width:200, align:"center"},
{header:'状态', name:'status', index:'a.status', width:140, align:"center", formatter: function(val, obj, row, act){
return js.getDictLabel([{"id":"1019065439174938624","status":"0","createBy":"system","createDate":"2018-07-17 11:45","updateDate":"2018-07-17 11:45","updateBy":"system","treeLevel":0,"parentCodes":"0,","treeSort":20,"treeSorts":"0000000020,","treeNames":"正常","treeLeaf":"1","isSys":"1","cssClass":"","dictCode":"1019065439174938624","dictLabelOrig":"正常","dictType":"sys_status","cssStyle":"","description":"","dictValue":"0","dictLabel":"正常","parentCode":"0","isRoot":true,"isTreeLeaf":true},{"id":"1019065439330127872","status":"0","createBy":"system","createDate":"2018-07-17 11:45","updateDate":"2018-07-17 11:45","updateBy":"system","treeLevel":0,"parentCodes":"0,","treeSort":30,"treeSorts":"0000000030,","treeNames":"删除","treeLeaf":"1","isSys":"1","cssClass":"","dictCode":"1019065439330127872","dictLabelOrig":"删除","dictType":"sys_status","cssStyle":"color:#f00;","description":"","dictValue":"1","dictLabel":"删除","parentCode":"0","isRoot":true,"isTreeLeaf":true},{"id":"1019065439481122816","status":"0","createBy":"system","createDate":"2018-07-17 11:45","updateDate":"2018-07-17 11:45","updateBy":"system","treeLevel":0,"parentCodes":"0,","treeSort":40,"treeSorts":"0000000040,","treeNames":"停用","treeLeaf":"1","isSys":"1","cssClass":"","dictCode":"1019065439481122816","dictLabelOrig":"停用","dictType":"sys_status","cssStyle":"color:#f00;","description":"","dictValue":"2","dictLabel":"停用","parentCode":"0","isRoot":true,"isTreeLeaf":true},{"id":"1019065439699226624","status":"0","createBy":"system","createDate":"2018-07-17 11:45","updateDate":"2018-07-17 11:45","updateBy":"system","treeLevel":0,"parentCodes":"0,","treeSort":50,"treeSorts":"0000000050,","treeNames":"冻结","treeLeaf":"1","isSys":"1","cssClass":"","dictCode":"1019065439699226624","dictLabelOrig":"冻结","dictType":"sys_status","cssStyle":"color:#fa0;","description":"","dictValue":"3","dictLabel":"冻结","parentCode":"0","isRoot":true,"isTreeLeaf":true},{"id":"1019065439875387392","status":"0","createBy":"system","createDate":"2018-07-17 11:45","updateDate":"2018-07-17 11:45","updateBy":"system","treeLevel":0,"parentCodes":"0,","treeSort":60,"treeSorts":"0000000060,","treeNames":"待审","treeLeaf":"1","isSys":"1","cssClass":"","dictCode":"1019065439875387392","dictLabelOrig":"待审","dictType":"sys_status","cssStyle":"","description":"","dictValue":"4","dictLabel":"待审","parentCode":"0","isRoot":true,"isTreeLeaf":true},{"id":"1019065440022188032","status":"0","createBy":"system","createDate":"2018-07-17 11:45","updateDate":"2018-07-17 11:45","updateBy":"system","treeLevel":0,"parentCodes":"0,","treeSort":70,"treeSorts":"0000000070,","treeNames":"驳回","treeLeaf":"1","isSys":"1","cssClass":"","dictCode":"1019065440022188032","dictLabelOrig":"驳回","dictType":"sys_status","cssStyle":"","description":"","dictValue":"5","dictLabel":"驳回","parentCode":"0","isRoot":true,"isTreeLeaf":true},{"id":"1019065440210931712","status":"0","createBy":"system","createDate":"2018-07-17 11:45","updateDate":"2018-07-17 11:45","updateBy":"system","treeLevel":0,"parentCodes":"0,","treeSort":80,"treeSorts":"0000000080,","treeNames":"草稿","treeLeaf":"1","isSys":"1","cssClass":"","dictCode":"1019065440210931712","dictLabelOrig":"草稿","dictType":"sys_status","cssStyle":"color:#aaa;","description":"","dictValue":"9","dictLabel":"草稿","parentCode":"0","isRoot":true,"isTreeLeaf":true}], val, '未知', true);
if(val == "normal"){
return '正常';
}else if(val == "locked"){
return '锁定';
}else if(val == "disable"){
return '禁用';
}else{
return '未知';
}
}},
{header:'操作', name:'actions', width:260, sortable:false, title:false, formatter: function(val, obj, row, act){
var actions = [];

Loading…
Cancel
Save