基于springboot的通知反馈系统

简介: 该系统创作于2022年4月,包含详细数据库设计。基于springboot技术,数据层为MyBatis,mysql数据库,页面使用html,具有完整的业务逻辑,适合选题:通知、消息通知、通知反馈、部门信息收集等。

项目介绍:



该系统创作于2022年4月,包含详细数据库设计。基于springboot技术,数据层为MyBatis,mysql数据库,页面使用html,具有完整的业务逻辑,适合选题:通知、消息通知、通知反馈、部门信息收集等。


项目功能:



系统共分为平台管理员,单位管理员,部门管理员,普通员工,四种角色,平台管理员由数据库内部预设,单位管理员新增员工的时候,可以新增不同角色,比如可以新增部门管理员,也可以新增普通员工
消息分为两种
1通知类消息(不需要回复和提交文件) 发布通知信息时要有标题、内容、发布时间、发布人、发送给的相关部门或小组;
2材料收集类消息(可以回复和提交文件)发布材料收集需求时要有标题、内容、发布时间、发布人、发送给的相关部门或小组、收集材料的名称和说明,截至提交时间;
平台管理员:
单位管理员管理:新增单位管理员(不能新增部门管理员),修改,查看,删除
单位管理:新建单位,删除,修改,查看
单位管理员:
个人信息管理:查看个人信息,修改
部门管理:新建,删除,修改,查看
部门管理员管理:新增部门管理员,删除部门管理员,修改,查看
通知类消息管理:发布消息,删除已发布消息,修改消息,查询消息(统计消息哪些人已读未读,并做统计)
材料收集类消息管理:发布消息,删除已发布消息,修改消息,查询消息
下载消息中提交的材料
部门管理员:
个人信息管理:查看个人信息,修改
小组管理:增加小组,删除小组,修改小组,查看小组
普通员工管理:增加本部门员工,修改员工(可以修改所在的小组),删除员工,查看员工列表
通知类消息管理:发布消息,删除已发布消息,修改消息,查询消息(统计消息哪些人已读未读,并做统计) 一个列表,谁读谁没读
材料收集类消息管理:发布消息,删除已发布消息,修改消息,查询消息
下载消息中提交的材料
普通员工:
个人信息管理:查看个人信息,部分信息修改(修改姓名年龄性别 不能修改所属部门、小组)
消息管理:查看(仅查看所属部门消息),材料收集类消息可以回复、上传文件


数据模型:



212c1bc7398c408694a8907e34e1b9a8.png


数据库表结构文档:



74efbe33ba3c4d119aeae8b72901f4de.png


系统包含技术:



后端:springboot、mybatis

前端:layui,js,css等,html页面

开发工具:idea

数据库:mysql 5.7

JDK版本:jdk1.8


部分截图说明:



系统分为多个角色,下面是登录页面


f0416cd760784381a6eb6d1072d4768c.png


下面是平台管理员首页


15ef655771aa49a8ba5d7aa91ba4afe9.png


平台管理员可以对单位管理员管理


b236352f301044d4b4396e2bd808cacc.png


平台管理员对单位管理


8393e09e38cf40309b2c597d960ed3ad.png


部门管理员对部门管理


5228127587fd4e459433172c140f3922.png


部门管理员可以对小组进行管理


059d67b4038b4faa89c1ccf78632d112.png


员工管理


37ee4d32632a4871850f49c462af6adc.png


部门管理员看通知消息


704c983447b94a76b572a8a561885654.png


部门管理员查看材料收集消息


eff457e83bb84e0ea55f25ceeb874ffd.png


员工查看通知消息


ef80f3adda134912b9aa5370c1ad4011.png


部分代码:



拦截器


@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        if(session.getAttribute("userInfo") != null){
            return true;
        }
        // 不符合条件的给出提示信息,并转发到主页面
        request.setAttribute("msg", "您还没有登录,请先登录!");
        request.getRequestDispatcher("/logout").forward(request, response);
        //返回true通过,返回false拦截
        return false;
    }


部门管理


 /**进入列表页面*/
    @GetMapping("/department")
    public String userIframe(Model model, HttpSession session){
        Organ organ = new Organ();
        String type = (String)session.getAttribute("type");
        if(type.equals("02")){
            OrganAdmin organAdmin = (OrganAdmin)session.getAttribute("userInfo");
            organ.setId(Integer.parseInt(organAdmin.getOid()));
        }
        List<Organ> organs = organService.selectByCondition(organ);
        model.addAttribute("organs",organs);
        return "DepartmentList";
    }
    /**列表数据*/
    @GetMapping("/list")
    @ResponseBody
    public PageResultVo findDepartment(Department department, Integer limit, Integer page, HttpSession session){
        String type = (String)session.getAttribute("type");
        if(type.equals("02")){
            OrganAdmin organAdmin = (OrganAdmin)session.getAttribute("userInfo");
            department.setOid(organAdmin.getOid());
        }
        PageHelper.startPage(page,limit);
        List<Department> departmentList = departmentService.selectByCondition(department);
        PageInfo<Department> pages = new PageInfo<>(departmentList);
        return JsonData.table(departmentList,pages.getTotal());
    }
    /**编辑详情*/
    @GetMapping("/edit")
    @ResponseBody
    public Department edit(Model model, String id){
        return departmentService.selectById(id);
    }
    /**编辑*/
    @PostMapping("/edit")
    @ResponseBody
    public JsonData edit(Department department){
        List<Department> all = departmentService.findAll();
        for(int i=0;i<all.size();i++){
            if(all.get(i).getName().equals(department.getName()) && all.get(i).getId()!=department.getId()  && all.get(i).getOid().equals(department.getOid())){
                return JsonData.fail("部门名称重复,请重试!");
            }
        }
        int a = departmentService.updateById(department);
        if (a > 0) {
          return JsonData.success(null,"编辑成功!");
        } else {
          return JsonData.fail("编辑失败");
        }
    }
    /**删除*/
    @PostMapping("/del")
    @ResponseBody
    public JsonData del(String id){
        try{
          departmentService.deleteById(Integer.parseInt(id));
        }catch(Exception ex){
          JsonData.fail("出现错误");
        }
        return JsonData.success(null,"删除成功");
    }



以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。


好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

相关文章
|
1月前
|
存储 安全 前端开发
springboot057洗衣店订单管理系统
springboot057洗衣店订单管理系统
|
30天前
|
小程序 Java
基于springboot的医护人员排班系统
基于springboot的医护人员排班系统
27 0
|
1天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
27 10
|
1天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
3天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
20 6
|
22天前
|
存储 监控 NoSQL
SpringBoot 后台管理系统
SpringBoot 后台管理系统
8 0
|
22天前
|
缓存 NoSQL Java
手撸的 SpringBoot缓存系统,性能杠杠的
手撸的 SpringBoot缓存系统,性能杠杠的
27 0
|
23天前
|
机器学习/深度学习 Java C++
基于SpringBoot的车牌识别系统(附项目地址)
基于SpringBoot的车牌识别系统(附项目地址)
23 0
|
29天前
|
前端开发 druid Java
基于SpringBoot+Layui的社区物业管理系统
社区物业管理系统是基于java程序开发,本系统分为业主和管理员两个角色 业主可以登陆系统,查看车位费用信息,查看物业费用信息,在线投诉,查看投诉,在线报修; 管理员可以车位收费信息,物业收费信息,投诉信息,楼宇信息,房屋信息,业主信息,车位信息,抄表信息等进行管理。
29 0
基于SpringBoot+Layui的社区物业管理系统
|
1月前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
50 1