package cn.ssm.oa.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import cn.ssm.oa.mapper.DepartmentMapper;
import cn.ssm.oa.mapper.RoleMapper;
import cn.ssm.oa.mapper.UserMapper;
import cn.ssm.oa.po.Department;
import cn.ssm.oa.po.Role;
import cn.ssm.oa.po.User;
import cn.ssm.oa.service.UserService;
import tk.mybatis.mapper.entity.Example;
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private RoleMapper roleMapper;
@Override
public List<User> findAll() {
List<User> list = userMapper.findAll(); // 调用自定义有关联查询的方法
return list;
}
/**
* 单表查询自带方法(通过循环查询关联的单表方式(不推荐sql查询次数很多))
*/
// @Override
// public List<User> findAll() {
// List<User> list = userMapper.selectAll(); // 单表查询自带方法
// for (User user : list) {
// Department department = departmentMapper.selectByPrimaryKey(user.getDepartmentId());
// user.setDepartment(department);
// }
// return list;
// }
@Override
public void save(User user, Long[] roleIdList) {
List<Role> roles = new ArrayList<Role>();
if (roleIdList != null && roleIdList.length > 0) {
for (Long id : roleIdList) {
roles.add(roleMapper.selectByPrimaryKey(id));
}
user.setRoles(roles);
}
user.setPassword(DigestUtils.md5Hex("1234")); // 新增用户的默认密码为‘1234’的MD5加密
if (user.getDepartmentId() == 0) { // 没有选择所属部门
user.setDepartmentId(null);
}
userMapper.save(user);
/*
* 维护与岗位的关联关系
*/
if (user.getRoles() != null) { // 当没有进行岗位设置时,不插入关联表数据
userMapper.inserUserRole(user);
}
}
@Override
public User findById(Long id) {
return userMapper.selectByPrimaryKey(id);
}
@Override
public void update(User user) {
List<Role> roles = new ArrayList<Role>();
Long[] roleIdList = user.getRoleIdList();
if (roleIdList != null && roleIdList.length > 0) {
for (Long id : roleIdList) {
roles.add(roleMapper.selectByPrimaryKey(id));
}
user.setRoles(roles);
}
if (user.getDepartmentId() != null) {
if (0 == user.getDepartmentId()) { // 没有选择所属部门
user.setDepartmentId(null);
}
}
userMapper.updateByPrimaryKeySelective(user); // 修改user表的非空字段
/*
* 维护与岗位的关联关系
*/
if (user.getRoleIdList() != null && user.getRoleIdList().length != 0) { // 处理初始化密码用户对象的roleIdList=null而删除本已存在的岗位关联记录
userMapper.deleteUserRole(user.getId()); // 根据用户id首先删除和该用户有关的记录
}
if (user.getRoles() != null) {
userMapper.inserUserRole(user); // 如果有新的岗位设置插入新记录到关联岗位的表
}
}
@Override
public void delete(Long id) {
userMapper.deleteUserRole(id); // 根据用户的id删除关联的岗位记录
userMapper.deleteByPrimaryKey(id);
}
/**
* 自定义查询方法,根据用户的id获取拥有岗位关联关系和部门关联关系(部门关联可以省略)的用户
*/
@Override
public User getUserById(Long id) {
User user = userMapper.getUserById(id);
/*
* 将岗位对象转换成岗位Id数组
*/
List<Role> roles = user.getRoles();
Long[] roleIdList = null;
if (roles != null && roles.size() > 0) {
roleIdList = new Long[roles.size()];
for (int i = 0; i < roles.size(); i++) {
roleIdList[i] = roles.get(i).getId();
}
}
user.setRoleIdList(roleIdList); // 设置前端使用的Long[]
return user;
}
/**
* 分页查询所有用户记录,此方式不可以,因为通过外连接的数据存在问题(总记录数多于单表),
* 而且不体现一对多(多对多)关联关系,导致分页数据错误
*/
// @Override
// public PageInfo<User> findAllByPage(Integer pageNum, Integer pageSize) {
// // 如果没有传递当前页码参数或者传递为0,显示第一页数据
// if (pageNum == null || pageNum == 0) {
// pageNum = 1;
// }
// PageHelper.startPage(pageNum, pageSize);
// List<User> list = userMapper.findAll(); // 调用自定义有关联查询的方法
// int count = userMapper.selectCountByExample(null); // 查询user单表的条数
// PageInfo<User> page = new PageInfo<User>(list);
// /*
// * 给总记录数重新赋值,因为左外连接查询的记录数多于user表的count(*)数目,
// * 因为user表的基本数据重复,关联的岗位数据不重复,所以查询的记录条数方式多于单表,
// * 但是resultMap的collection集合自动将关联的一对多数据封装到List集合中
// * 注意:只要分页的pageSize!=1,一对多的属性仍然是同一条记录,但是主表user相同,关联表数据
// * 不同的记录,也算了一条记录,导致页面显示的记录少(基本表关联的记录充当了数目)
// */
// page.setTotal(count); // 实际证明此方式仍不可行
// return page;
// }
/**
* 循环set设置List<Role> roles的值
*/
@Override
public PageInfo<User> findAllByPage(Integer pageNum, Integer pageSize) {
// 如果没有传递当前页码参数或者传递为0,显示第一页数据
if (pageNum == null || pageNum == 0) {
pageNum = 1;
}
// 如果没有传递当前每页显示条数或者传递为0,每页显示10条
if (pageSize == null || pageSize == 0) {
pageSize = 10;
}
PageHelper.startPage(pageNum, pageSize);
List<User> list = userMapper.selectAll();
if (list != null && list.size() != 0) {
for (User user : list) {
// 给每个用户设置关联的岗位
List<Role> roles = userMapper.findUserRoleListByUserId(user.getId());
user.setRoles(roles);
}
}
/*
* 使用自定义页码数量的构造函数(分页导航条显示10个页码),默认显示8个页码
*/
PageInfo<User> page = new PageInfo<User>(list, 10);
return page;
}
/**
* 通过登录名和密码查询用户
*/
@Override
public User findByLoginNameAndPassword(String loginName, String password) {
User user = new User();
user.setLoginName(loginName);
user.setPassword(password);
// 调用自定义方法:根据登录名和密码查询登录用户包括关联的岗位数据及岗位所拥有的权限数据
return userMapper.findByLoginNameAndPassword(user);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringMVC+Spring3+Mybatis框架的OA项目.zip
共1232个文件
gif:742个
js:195个
png:53个
需积分: 5 0 下载量 154 浏览量
2023-08-09
21:47:39
上传
评论
收藏 3.32MB ZIP 举报
温馨提示
项目涉及到SSM( Spring + Spring MVC + MyBatis )框架、MySQL数据库、Layui、EasyUI等技术,适合毕设项目、课设作业。资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringMVC+Spring3+Mybatis框架的OA项目.zip (1232个子文件)
config.ascx 5KB
class_upload.asp 10KB
io.asp 7KB
commands.asp 6KB
config.asp 6KB
connector.asp 2KB
upload.asp 2KB
basexml.asp 2KB
util.asp 1KB
connector.aspx 1KB
upload.aspx 1KB
image.cfc 46KB
ImageObject.cfc 12KB
cf5_upload.cfm 11KB
cf5_connector.cfm 10KB
cf_io.cfm 10KB
cf_commands.cfm 8KB
config.cfm 8KB
spellchecker.cfm 5KB
cf_util.cfm 4KB
cf_connector.cfm 3KB
cf_basexml.cfm 3KB
cf_upload.cfm 2KB
connector.cfm 1005B
upload.cfm 993B
connector.cgi 4KB
upload.cgi 3KB
.classpath 1KB
org.eclipse.wst.common.component 673B
org.eclipse.wst.jsdt.ui.superType.container 49B
pageCommon.css 17KB
fck_editor.css 8KB
fck_editor.css 8KB
fck_editor.css 8KB
fck_dialog.css 6KB
fck_dialog.css 6KB
fck_dialog.css 6KB
fck_internal.css 4KB
forum.css 4KB
top.css 4KB
file.css 4KB
fck_editorarea.css 3KB
jquery.treeview.css 3KB
style.css 2KB
selectPerson.css 2KB
menu.css 2KB
login.css 2KB
fck_dialog_common.css 2KB
fck_showtableborders_gecko.css 2KB
browser.css 2KB
statusbar.css 1KB
spellerStyle.css 890B
logout.css 820B
select.css 743B
Thumbs.db 260KB
Thumbs.db 33KB
Thumbs.db 6KB
login.gif 118KB
94.gif 76KB
25.gif 39KB
44.gif 36KB
97.gif 35KB
75.gif 30KB
79.gif 30KB
19.gif 29KB
50.gif 28KB
8.gif 28KB
67.gif 26KB
12.gif 25KB
27.gif 25KB
76.gif 24KB
77.gif 24KB
9.gif 24KB
14.gif 23KB
96.gif 23KB
16.gif 22KB
15.gif 21KB
49.gif 21KB
56.gif 21KB
7.gif 20KB
35.gif 20KB
66.gif 20KB
72.gif 20KB
60.gif 19KB
6.gif 19KB
64.gif 19KB
55.gif 19KB
version_bg.gif 19KB
23.gif 18KB
31.gif 18KB
10.gif 18KB
62.gif 18KB
80.gif 17KB
43.gif 17KB
78.gif 17KB
61.gif 17KB
53.gif 17KB
4.gif 16KB
63.gif 15KB
26.gif 15KB
共 1232 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13
资源评论
独处东汉
- 粉丝: 378
- 资源: 822
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功