OA自动化办公管理系统(javaLayuiSSMMavenmysqlJSPhtml)
一、项目运行
环境配置:
Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)
项目技术:
JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等
用户管理控制层:/** * @author yy */ @Controller @RequestMapping("/user") public class UserController extends BaseController{ private String prefix = "system/user/"; @Autowired IUserService iUserService; @Autowired IRoleService iRoleService; @Autowired IDeptService iDeptService; @Autowired IPositionService iPositionService; @Autowired private SysPasswordService passwordService; /** * * @描述 跳转到用户页面 * * @date 2018/9/16 10:54 */ @RequestMapping("/tolist") @RequiresPermissions("user:list") public String toUserList() { return prefix + "user"; } /** * @描述 用户数据 * @date 2018/9/15 12:30 */ @RequestMapping("/tableList") @ResponseBody public TableDataInfo list(User user) { startPage(); List users = iUserService.selectByUser(user); return getDataTable(users); } /** * 编辑用户 system/user/edit/20180914-1 */ @RequiresPermissions("user:update") @RequestMapping("/edit/{userId}") public String edit(@PathVariable("userId") String userId, Model model) { // 个人信息 User user = iUserService.selectByPrimaryKey(userId); Map role_post_dept = getRole_Post_Dept(); model.addAttribute("depts", role_post_dept.get("dept")); model.addAttribute("roles", role_post_dept.get("role")); model.addAttribute("positions", role_post_dept.get("position")); model.addAttribute("user", user); return prefix + "edit"; } /** * * @描述 保存用户 * * @date 2018/9/15 18:53 */ @PostMapping("/editSave") @RequiresPermissions("user:update") @Operlog(modal = "用户管理", descr = "修改用户信息") @ResponseBody public AjaxResult save(User user) { if (StringUtils.isNotNull(user.getUid()) && User.isBoss(user.getUid())) { return error("不允许修改管理员用户"); } if(user.getPwd()!=null){ user.setSalt(ShiroUtils.randomSalt()); SimpleHash md5 = new SimpleHash("MD5", user.getPwd(), user.getSalt(), 1024); user.setPwd(md5.toHex()); } return result(iUserService.updateByPrimaryKeySelective(user)); } /** * @描述 添加用户页面 * @date 2018/9/15 18:46 */ @RequestMapping("/toAdd") @RequiresPermissions("user:add") public String toaddUser(Model model) { Map role_post_dept = getRole_Post_Dept(); model.addAttribute("depts", role_post_dept.get("dept")); model.addAttribute("roles", role_post_dept.get("role")); model.addAttribute("positions", role_post_dept.get("position")); return prefix + "add"; } /** * * @描述 添加用户 * * @date 2018/9/15 20:40 */ @RequestMapping("/addSave") @RequiresPermissions("user:add") @Operlog(modal = "用户管理", descr = "添加用户") @ResponseBody public AjaxResult addUser(User user) { user.setSalt(ShiroUtils.randomSalt()); SimpleHash md5 = new SimpleHash("MD5", user.getPwd(), user.getSalt(), 1024); user.setPwd(md5.toHex()); user.setAvatar(CsEnum.avatar.USER_AVATAR.getValue()); user.setCreateTime(new Date()); return result(iUserService.insertSelective(user)); } /** * * @描述 批量删除 * * @date 2018/9/16 9:31 */ @RequestMapping("/del") @RequiresPermissions("user:del") @Operlog(modal = "用户模块", descr = "删除用户") @ResponseBody public AjaxResult delByUserIds(String[] ids) { try { int i = iUserService.deleteByPrimaryKeys(ids); } catch (Exception e) { return error(e.getMessage()); } return success(); } /** * * @描述 编辑密码修改页面 * * @date 2018/9/16 10:25 */ @RequestMapping("/resetPwd/{userId}") @RequiresPermissions("user:update") public String editPwd(@PathVariable("userId") String id, Model model) { model.addAttribute("uid", id); return prefix + "resetPwd"; } /** * * @描述 密码修改 * * @date 2018/9/16 10:42 */ @RequestMapping("/resetPwd") @RequiresPermissions("user:update") @Operlog(modal = "用户模块", descr = "修改密码") @ResponseBody public AjaxResult resetPwd(User user) { return result(iUserService.resrtPwd(user)); } /** * 校验手机号码 */ @PostMapping("/checkPhoneUnique") @ResponseBody public String checkPhoneUnique(User user) { String uniqueFlag = "0"; if (user != null) { uniqueFlag = iUserService.checkPhoneUnique(user); } return uniqueFlag; } /** * 校验email邮箱 */ @PostMapping("/checkEmailUnique") @ResponseBody public String checkEmailUnique(User user) { String uniqueFlag = "0"; if (user != null) { uniqueFlag = iUserService.checkEmailUnique(user); } return uniqueFlag; } /** * * @描述: 校验登录名唯一性 * * @params: * @return: * @date: 2018/10/2 17:06 */ @PostMapping("/checkLoginNameUnique") @ResponseBody public String checkLoginNameUnique(User user) { String uniqueFlag = "0"; if (user != null) { uniqueFlag = iUserService.checkLoginNameUnique(user); } return uniqueFlag; } public Map getRole_Post_Dept() { Map map = new HashMap<>(); // 角色 List roles = iRoleService.selectRoleList(new Role()); // 部门信息 List depts = iDeptService.selectDeptList(new Dept()); // 岗位 List positions = iPositionService.selectPositionList(new Position()); map.put("role", roles); map.put("dept", depts); map.put("position", positions); return map; } /** * 用户个人信息查看页面 */ @RequestMapping("/myMsg") public String ToMyMsg(Model model, HttpServletRequest request) { User user = iUserService.selectByPrimaryKey(getUserId()); model.addAttribute("user", user); model.addAttribute("loginIp", HttpHeaderUtil.getIpAddr(request)); return prefix + "profile/msg"; } /** * 密码修改页面 */ @RequestMapping("/resetMyPwd") public String toResetPwd(Model model) { User user = iUserService.selectByPrimaryKey(getUserId()); model.addAttribute("user", user); return prefix + "profile/resetPwd"; } /** * 密码修改保存 */ @RequestMapping("/updateMyPwdSave") @ResponseBody @RequiresPermissions("user:update") @Operlog(modal = "个人信息", descr = "修改密码") public AjaxResult updateMyPwdSave(String password) { User user = new User(); user.setSalt(ShiroUtils.randomSalt()); SimpleHash md5 = new SimpleHash("MD5", password, user.getSalt(), 1024); user.setPwd(md5.toHex()); user.setUid(getUserId()); int i = iUserService.updateByPrimaryKeySelective(user); if (i > 0) { //更新shiro中的信息 ShiroUtils.reloadUser(iUserService.selectByPrimaryKey(getUserId())); return success(); } return error(); } /** * 编辑用户头像修改 */ @RequestMapping("/updateAvatar") public String toupdateAvatar(Model model) { model.addAttribute("user", getUser()); return prefix + "profile/avatar"; } /** * 修改保存用户头像 */ @RequestMapping("/updateAvatarSave") @RequiresPermissions("user:update") @Operlog(modal = "个人信息", descr = "修改头像") @ResponseBody public AjaxResult toupdateAvatar(MultipartFile file) { try { String imgPath = UploadFile.uploadUserImg(file); if (StringUtils.isEmpty(imgPath)) { return error("图片上传失败,稍后再试!"); } User user = new User(); user.setUid(getUserId()); user.setAvatar(imgPath); int i = iUserService.updateByPrimaryKeySelective(user); if (i > 0) { ShiroUtils.reloadUser(iUserService.selectByPrimaryKey(getUserId())); } return result(i); } catch (IOException e) { return error(); } catch (FileSizeException e) { //文件过大 return error(e.getMsg()); } catch (FileNameLengthException e) { //文件名字超长 return error(e.getMsg()); } } /** * 校验密码和原来密码是否相同 */ @RequestMapping("/checkPassword") @ResponseBody public boolean checkPassword(String password) { //加密后与数据库密码比较 User user = getUser(); SimpleHash md5 = new SimpleHash("MD5", password, user.getSalt(), 1024); String oldPassword = md5.toHex(); String pwd = getPwd(); if (pwd.equals(oldPassword)) { return true; } return false; } }部门管理控制层:/** * @author yy */ @Controller @RequestMapping("/dept") public class DeptController extends BaseController{ private String prefix = "system/dept/"; @Autowired IDeptService iDeptService; @Autowired IUserService iUserService; /** * * @描述 页面跳转到部门 * * @date 2018/9/16 10:59 */ @RequestMapping("/tolist") @RequiresPermissions("dept:list") public String tolist() { return prefix + "dept"; } /** * * @描述 ajax请求的所有部门 * * @date 2018/9/16 10:48 */ @RequestMapping("/ajaxlist") @ResponseBody public List list(Dept dept) { List depts = iDeptService.selectDeptList(dept); return depts; } /** * * @描述 部门列表页 * * @date 2018/9/16 10:52 */ @RequestMapping("/tableList") @ResponseBody public TableDataInfo listPag(Dept dept) { //开启分页 startPage(); List depts = iDeptService.selectDeptList(dept); return getDataTable(depts); } /** * * @描述 新增页面 * * @date 2018/9/16 11:37 */ @RequiresPermissions("dept:add") @RequestMapping("/toAdd") public String toAdd(Model model) { List users = iUserService.selectByUser(new User()); model.addAttribute("users", users); return prefix + "add"; } /** * * @描述: 查询所有部门下的所有用户 用户归类 树状数据 * * @date: 2018/9/27 11:25 */ @RequestMapping("/getDeptAndUserTreeData") @ResponseBody public List
复星医药与英矽智能宣布,达成1300万美元首付款的AI制药合作雷峰网消息,近日,上海复星医药与英矽智能达成合作协议,在全球范围内共同推进多个靶点的AI药物研发。这项战略合作包括针对四个指定靶点的以人工智能驱动的药物研发合作,以及双方对于英矽智
一加10Pro智能手机获TUV南德36个月流畅度A等级认证深圳2022年1月11日美通社近日,国际独立第三方检测检验和认证机构TUV南德意志集团(以下简称TUV南德)为深圳市万普拉斯科技有限公司(以下简称一加,英文缩写OnePlus)旗舰
如何挑选超高性价比的路由器1。先说现在怎么选择路由器,现在百兆宽带已经普及,那么路由器选择至少需要满足两个标准,A千兆端口B支持2。4G和5G频段。从型号上来说,温饱级别是AC1200,其中AC代表wifi
云狐J5一加10Pro参数报价对比云狐J5手机机型云狐J5一加10Pro最新价格4580元4999元屏幕尺寸4。5英寸6。7英寸屏幕类型柔性AMOLED分辨率128072032161440像素525ppi屏幕技术1
从泰康模式看保险电商的突围之路泰康人寿的保险电商模式是,借助交易频繁高粘性高流量的互联网平台来加大产品的销售力度,同时完善自身平台的交易结构,通过客户需求把握产品搭配组合和自身网站交易流程的优化来提高用户体验。
苹果2021年总共向开发者支付600亿美元品玩1月11日讯,据新浪科技消息,苹果周一表示,2021年总共向开发者支付了600亿美元,自2008年苹果应用商店AppStore推出以来总共支付了2600亿美元,这表明AppSt
国际艺术市场新风口?NFT推动数字艺术热潮警惕骗局也不少西班牙先锋报网站近日报道称,基于区块链技术的NFT(非同质化代币)推动了艺术市场的发展。在一年以前,这种营销艺术品的方式还鲜为人知,但现在正逐渐普及。1992年的第1条短信不久前在
推广数字人民币的一大难题央行从2014年就开始研究数字人民币。它被称为eCNY,旨在取代已经在流通的现金和硬币。它是由央行统一管理发行的,不同于比特币等加密货币(不受任何央行的管辖)。迄今为止,央行已经通
5390万!vivo正式打败苹果,国产手机三板斧果然有效在全球手机市场,苹果公司一直是一个特立独行的存在,它自己一家公司就攫取了手机市场70以上的利润,而三星华为小米等其他上百家手机公司瓜分剩下的30。根据知名调研机构Bloomberg
证券之星APP四川长虹(600839)01月11日在投资者关系平台上答复了投资者关心的问题。投资者董秘你好,建议宿舍不要新装电视机等多媒体产品了,优先选用按摩椅。另外公司只有美菱在开布局老式按摩
美媒元宇宙人才争夺升温,微软AR团队流失近百员工多人转投Meta华尔街日报1月11日消息,据微软前雇员和网上的工作履历透露出的信息,随着各公司对于拥有构建元宇宙技能的人才争夺升温,微软的增强现实(AR)团队在过去一年里流失约100名员工,其中许
懂电脑的人,选电脑主要看什么?如果买电脑,要看你是买整机还是自己DIY买配件组装。如果你买整机,要看你买电脑派什么用处?电脑整机一般分商用机和家用机,商用机的性能相对稳定一些,但配置上会差一点,而家用机的配置会
微信这次更新,太炸了这回不怕被王总移出群聊了!还记得拍一拍吧,这次微信又更新了!而且更新炸了,还冲上了热搜5月17日,微信发布了iOS8。0。6正式版。其中,在拍一拍基础上新增了炸一炸新功能,引发网友
微信又炸出新功能嘿微信又出新功能了你第一时间GET了吗?最近微信发布了iOS8。0。6正式版其中一个被网友称作社死进阶版的拍一拍新功能引发网友热议原来这次是在拍一拍基础上新增了炸一炸功能设置方法用
realme官宣5月24日举行狂欢夜,将发布五大新品IT之家5月19日消息realme的发布会又来了,realme副总裁中国区总裁全球营销总裁徐起今日宣布,将于5月24日举行真我618狂欢夜,届时将发布五大新品。从官方的文字描述来看
注意!明天之后,微信将不再提供这项服务日前微信开放社区宣布2021年5月20日之后不再提供小程序打开App技术服务微信称,微信小程序为开发者提供了打开App的技术服务,希望通过开发者的合理应用,能为微信用户提供更好的使
虚拟货币又遭围堵,这以后还能玩吗?中国互联网金融协会中国银行业协会中国支付清算协会5月18日发布关于防范虚拟货币交易炒作风险的公告。公告指出,近期,虚拟货币价格暴涨暴跌,虚拟货币交易炒作活动有所反弹,严重侵害人民群
RedmiNote10官宣明天见十全十美的十代小金刚来了手机中国新闻5月19日傍晚,Redmi红米手机官微宣布十全十美的第十代小金刚,明天见。这意味着RedmiNote10要来了!不过,这个消息来得有些突然,明天见不一定是指Note10
华为最新人事调整!余承东不再担任华为云CEO一职手机中国新闻5月18日晚,有消息称,华为内部发文进行了多项人事调整。根据此次调整,华为决定免去余承东华为云CEO职位,任命张平安为华为云CEO。不过,余承东仍然身兼数职,担任消费者
内行帮你选看看谁才是最强的骁龙888一路走来的高通骁龙8系高端旗舰芯片,是近几年手机极致性能的代言。2020年底,高通发布了最新骁龙8885G旗舰移动平台,在5GAI影像游戏等诸多方面都带来了极大的提升,成为新一代5
手机自带天气和墨迹天气哪个更精准?极客谈科技局,全新视角全新思路,伴你遨游神奇的科技世界。做过程序开发的人都知道,手机自带天气预报与墨迹天气之间的天气预报并没有任何的差异。无论是手机自带的天气程序还是安装三方的墨迹
带货女王薇娅身价达90亿,直播带货,缔造摄像头里的商业帝国雷军站在风口上,猪都能飞起来!当年小米董事长雷军的一席话,至今记忆犹新。随着互联网在二十一世纪快速的兴起,各种新兴行业如雨后春笋般崛起,当年互联网三大巨头BAT,分别指百度阿里巴巴