基于springboot小区疫苗接种管理系统

博主介绍:专注于Java vue  .net  php phython  小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
 

开篇系统运行截图 开始

本小区疫苗接种管理采用Java技术,Mysql数据库开发,充分保证了系统稳定性、完整性。

小区疫苗接种管理的设计与实现的设计思想如下:

操作简单方便、系统界面安全良好:简单明了的页面布局,方便查询小区疫苗接种管理管理的相关信息。

2、即时可见:对小区疫苗接种管理信息的处理将立马在对应地点可以查询到,从而实现“即时发布、即时见效”的系统功能。

3、功能的完善性:可以管理首页、个人中心、用户管理、接种预约、公告栏、接种信息、疫苗信息、系统维护、用户留言、报表统计管理、系统管理模块的修改和维护操作。

3.5系统流程和逻辑

系统业务流程图,如图所示:

图3-1登录流程图

图3-2添加信息流程图

图3-3注册信息流程图

4系统概要设计

4.1 概述

小区疫苗接种管理基于Web服务模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在不受时间、地点的限制来使用这个系统。小区疫苗接种管理工作原理图,如图4-1所示:

图4-1  系统工作原理图

4.2 系统结构

本系统架构网站系统,本系统的具体功能如下:

图4-2系统功能结构图

整个系统是由多个功能模块组合而成的,要将所有的功能模块都一一列举出来,然后进行逐个的功能设计,使得每一个模块都有相对应的功能设计,然后进行系统整体的设计。

系统功能结构图,如图4-3所示:

图4-3 管理员功能结构图

4.3. 数据库设计

4.3.1 数据库实体

管理员信息结构图,如图4-5所示:

 图4-5 管理员信息实体结构图

用户信息实体属性图,如图4-6所示:

图4-6用户信息实体属性图

疫苗管理实体属性图如图4-7所示。

图4-7疫苗管理实体属性图

接种地点管理实体属性图如图4-8所示。

图4-8接种地点管理实体属性图

4.3.2 数据库设计表

4.4 数据表

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

report_statistics

字段名称

类型

长度

不是null

主键

字段说明

report_statistics_id

int

11

主键

报表统计ID

vaccinated_population

varchar

64

接种人群

inoculation_quantity

varchar

64

接种数量

date

date

0

日期

statistician

varchar

64

统计人

remarks

varchar

64

备注

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

system_maintenance

字段名称

类型

长度

不是null

主键

字段说明

system_maintenance_id

int

11

主键

系统维护ID

maintenance_time

date

0

维护时间

maintenance_reason

varchar

64

维护原因

operator

varchar

64

操作人

remarks

varchar

64

备注

maintenance_log

text

0

维护日志

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

vaccination_appointment

字段名称

类型

长度

不是null

主键

字段说明

vaccination_appointment_id

int

11

主键

接种预约ID

vaccine_name

varchar

64

疫苗名称

manufacturer

varchar

64

生产厂家

adaptive_population

varchar

64

适应人群

taboo

varchar

64

禁忌

time_of_appointment

datetime

0

预约时间

number_of_people_who_can_make_an_appointment

varchar

64

可预约人数

vaccine_effect

text

0

疫苗作用

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

vaccination_information

字段名称

类型

长度

不是null

主键

字段说明

vaccination_information_id

int

11

主键

接种信息ID

user_name

int

11

用户名

full_name

varchar

64

姓名

contact_information

varchar

64

联系方式

vaccine_name

varchar

64

疫苗名称

time_of_appointment

datetime

0

预约时间

examine_state

varchar

16

审核状态

examine_reply

varchar

255

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

vaccine_information

字段名称

类型

长度

不是null

主键

字段说明

vaccine_information_id

int

11

主键

疫苗信息ID

vaccine_number

varchar

64

疫苗编号

vaccine_name

varchar

64

疫苗名称

vaccine_effect

varchar

64

疫苗作用

adaptive_population

varchar

64

适应人群

taboo

varchar

64

禁忌

manufacturer

varchar

64

生产厂家

date_of_manufacture

date

0

生产日期

expiration_date_

date

0

过期日期

inventory_quantity

varchar

64

库存数量

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

bulletin_board

字段名称

类型

长度

不是null

主键

字段说明

bulletin_board_id

int

11

主键

公告栏ID

announcement_title

varchar

64

公告标题

date

date

0

日期

publisher

varchar

64

发布人

remarks

varchar

64

备注

announcement_content

text

0

公告内容

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

5 系统详细设计

   

5.1管理员功能模块

管理员登录,管理员通过输入用户,密码,角色等信息进行系统登录,如图5-1所示。

图5-1管理员登录界面图

管理员登录进入小区疫苗接种管理可以查看管理员:首页、用户管理、接种预约、公告栏、接种信息、疫苗信息、系统维护、用户留言、报表统计等内容,如图5-2所示。

图5-2管理员功能界面图

用户管理,在用户管理页面可以查看等索引、用户账号、密码、用户姓名、性别、年龄、联系电话、电子邮箱、身份证号、家庭住址、个人照片等信息,并可根据需要进行修改或删除等操作,如图5-3所示。

图5-3用户管理界面图

疫苗信息,在疫苗信息页面可以查看索引、疫苗编号、疫苗名称、疫苗作用、生产厂家等信息,并可根据需要进行修改或删除等操作,如图5-4所示。

图5-4疫苗信息界面图

5.2用户后台功能模块

用户注册,在用户注册页面通过填写用户账号、密码、用户姓名、年龄、联系电话、电子邮箱、身份证号、家庭地址等信息完成用户注册,如图5-8所示。

图5-8用户注册界面图

主要代码:

   * 服务对象
     */
    @Autowired
    public UserController(UserService service) {
        setService(service);
    }

    /**
     * Token服务
     */
    @Autowired
    private AccessTokenService tokenService;

    @Autowired
    private UserGroupService userGroupService;

    /**
     * 注册
     * @param user
     * @return
     */
    @PostMapping("register")
    public Map<String, Object> signUp(@RequestBody User user) {
        // 查询用户
        Map<String, String> query = new HashMap<>();
        query.put("username",user.getUsername());
        List list = service.select(query, new HashMap<>()).getResultList();
        if (list.size()>0){
            return error(30000, "用户已存在");
        }
        user.setUserId(null);
        user.setPassword(service.encryption(user.getPassword()));
        service.save(user);
        return success(1);
    }

    /**
     * 找回密码
     * @param form
     * @return
     */
    @PostMapping("forget_password")
    public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
        JSONObject ret = new JSONObject();
        String username = form.getUsername();
        String code = form.getCode();
        String password = form.getPassword();
        // 判断条件
        if(code == null || code.length() == 0){
            return error(30000, "验证码不能为空");
        }
        if(username == null || username.length() == 0){
            return error(30000, "用户名不能为空");
        }
        if(password == null || password.length() == 0){
            return error(30000, "密码不能为空");
        }

        // 查询用户
        Map<String, String> query = new HashMap<>();
        query.put("username",username);
        Query select = service.select(query, service.readConfig(request));
        List list = select.getResultList();
        if (list.size() > 0) {
            User o = (User) list.get(0);
            JSONObject query2 = new JSONObject();
            JSONObject form2 = new JSONObject();
            // 修改用户密码
            query2.put("user_id",o.getUserId());
            form2.put("password",service.encryption(password));
            service.update(query, service.readConfig(request), form2);
            return success(1);
        }
        return error(70000,"用户不存在");
    }

    /**
     * 登录
     * @param data
     * @param httpServletRequest
     * @return
     */
    @PostMapping("login")
    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
        log.info("[执行登录接口]");

        String username = data.get("username");
        String email = data.get("email");
        String phone = data.get("phone");
        String password = data.get("password");

        List resultList = null;
        Map<String, String> map = new HashMap<>();
        if(username != null && "".equals(username) == false){
            map.put("username", username);
            resultList = service.select(map, new HashMap<>()).getResultList();
        }
        else if(email != null && "".equals(email) == false){
            map.put("email", email);
            resultList = service.select(map, new HashMap<>()).getResultList();
        }
        else if(phone != null && "".equals(phone) == false){
            map.put("phone", phone);
            resultList = service.select(map, new HashMap<>()).getResultList();
        }else{
            return error(30000, "账号或密码不能为空");
        }
        if (resultList == null || password == null) {
            return error(30000, "账号或密码不能为空");
        }
        //判断是否有这个用户
        if (resultList.size()<=0){
            return error(30000,"用户不存在");
        }

        User byUsername = (User) resultList.get(0);


        Map<String, String> groupMap = new HashMap<>();
        groupMap.put("name",byUsername.getUserGroup());
        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
        if (groupList.size()<1){
            return error(30000,"用户组不存在");
        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态
        if (!StringUtils.isEmpty(userGroup.getSourceTable())){
            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
            String res = String.valueOf(service.runCountSql(sql).getSingleResult());
            if (res==null){
                return error(30000,"用户不存在");
            }
            if (!res.equals("已通过")){
                return error(30000,"该用户审核未通过");
            }
        }

        //查询用户状态
        if (byUsername.getState()!=1){
            return error(30000,"用户非可用状态,不能登录");
        }

        String md5password = service.encryption(password);
        if (byUsername.getPassword().equals(md5password)) {
            // 存储Token到数据库
            AccessToken accessToken = new AccessToken();
            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
            accessToken.setUser_id(byUsername.getUserId());
            tokenService.save(accessToken);

            // 返回用户信息
            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
            user.put("token", accessToken.getToken());
            JSONObject ret = new JSONObject();
            ret.put("obj",user);
            return success(ret);
        } else {
            return error(30000, "账号或密码不正确");
        }
    }

    /**
     * 修改密码
     * @param data
     * @param request
     * @return
     */
    @PostMapping("change_password")
    public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
        // 根据Token获取UserId
        String token = request.getHeader("x-auth-token");
        Integer userId = tokenGetUserId(token);
        // 根据UserId和旧密码获取用户
        Map<String, String> query = new HashMap<>();
        String o_password = data.get("o_password");
        query.put("user_id" ,String.valueOf(userId));
        query.put("password" ,service.encryption(o_password));
        Query ret = service.count(query, service.readConfig(request));
        List list = ret.getResultList();
        Object s = list.get(0);
        int count = Integer.parseInt(list.get(0).toString());
        if(count > 0){
            // 修改密码
            Map<String,Object> form = new HashMap<>();
            form.put("password",service.encryption(data.get("password")));
            service.update(query,service.readConfig(request),form);
            return success(1);
        }
        return error(10000,"密码修改失败!");
    }

    /**
     * 登录态
     * @param request
     * @return
     */
    @GetMapping("state")
    public Map<String, Object> state(HttpServletRequest request) {
        JSONObject ret = new JSONObject();
        // 获取状态
        String token = request.getHeader("x-auth-token");

        // 根据登录态获取用户ID
        Integer userId = tokenGetUserId(token);

        log.info("[返回userId] {}",userId);
        if(userId == null || userId == 0){
            return error(10000,"用户未登录!");
        }

        // 根据用户ID获取用户
        Map<String,String> query = new HashMap<>();
        query.put("user_id" ,String.valueOf(userId));

        // 根据用户ID获取
        Query select = service.select(query,service.readConfig(request));
        List resultList = select.getResultList();
        if (resultList.size() > 0) {
            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));
            user.put("token",token);
            ret.put("obj",user);
            return success(ret);
        } else {
            return error(10000,"用户未登录!");
        }
    }

    /**
     * 登录态
     * @param request
     * @return
     */
    @GetMapping("quit")
    public Map<String, Object> quit(HttpServletRequest request) {
        String token = request.getHeader("x-auth-token");
        JSONObject ret = new JSONObject();
        Map<String, String> query = new HashMap<>(16);
        query.put("token", token);
        try{
            tokenService.delete(query,service.readConfig(request));
        }catch (Exception e){
            e.printStackTrace();
        }
        return success("退出登录成功!");
    }

    /**
     * 获取登录用户ID
     * @param token
     * @return
     */
    public Integer tokenGetUserId(String token) {
        log.info("[获取的token] {}",token);
        // 根据登录态获取用户ID
        if(token == null || "".equals(token)){
            return 0;
        }
        Map<String, String> query = new HashMap<>(16);
        query.put("token", token);
        AccessToken byToken = tokenService.findOne(query);
        if(byToken == null){
            return 0;
        }
        return byToken.getUser_id();
    }

    /**
     * 重写add
     * @return
     */
    @PostMapping("/add")
    @Transactional
    public Map<String, Object> add(HttpServletRequest request) throws IOException {
        Map<String,Object> map = service.readBody(request.getReader());
        map.put("password",service.encryption(String.valueOf(map.get("password"))));
        service.insert(map);
        return success(1);
    }

用户登录进入后台可以查看首页、接种登记、接种记录等内容,如图5-9所示。

图5-9用户功能界面图

文档源码下载获取地址

(springboot+mysql)小区疫苗接种管理系统.zip资源-CSDN文库

大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_251836457

你的鼓励 是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值