基于springboot和vue.js 养老院管理系统设计与实现

news2024/10/10 19:13:20

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

系统预览

系统设计

4.1系统概要设计

养老院管理系统并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构,图4.1就是开发出来的程序工作原理图。

图4.1 程序工作的原理图

4.2系统功能结构设计

养老院管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理老人健康信息,管理公告信息等内容。

养老院管理系统针对用户设置的功能有:查看并修改个人信息,查看老人健康信息,查看公告信息等内容。

4.3数据库设计

4.3.1数据库E-R图设计

程序设计是离不开对应数据库的设计操作的,这样的做法就是减少数据对程序的依赖性,所以数据库的设计也是需要花费大量的日常时间来进行设计的,在设计中对程序开发需要存储的数据信息进行实体划分,先确认实体,然后设计实体的属性等操作,这种设计就是数据库设计里面不能少的必须有的E-R模型设计。为了降低程序设计的对应的数据库设计难度,开发人员也可以使用相应的工具来进行E-R模型设计,现在市面上设计E-R模型的工具有PowerDesigner建模工具,Navicat制作工具,还有微软的Visio绘图工具。为了简便起见,本程序在设计E-R模型的时候,就选用了微软的Visio这款功能强大,操作便利的绘图工具。

(1)下图是疫情防控信息实体和其具备的属性。

疫情防控信息实体属性图

(2)下图是用户实体和其具备的属性。

用户实体属性图

(3)下图是志愿者实体和其具备的属性。

志愿者实体属性图

(4)下图是生活信息实体和其具备的属性。

生活信息实体属性图

(5)下图是客服聊天实体和其具备的属性。

客服聊天实体属性图

(6)下图是留言板实体和其具备的属性。

留言板实体属性图

(7)下图是医疗信息实体和其具备的属性。

医疗信息实体属性图

(8)下图是安全实体和其具备的属性。

安全实体属性图

(9)下图是公告实体和其具备的属性。

公告实体属性图

(10)下图是设备实体和其具备的属性。

设备实体属性图

(11)下图是健康信息实体和其具备的属性。

健康信息实体属性图

(12)下图是入住退房信息实体和其具备的属性。

入住退房信息实体属性图

(13)下图是用户表实体和其具备的属性。

用户表实体属性图

4.3.2 数据库结构设计

本次程序开发选用的数据库管理工具是Mysql数据管理工具,使用它存放数据也需要创建程序对应的数据库文件,并命名刚创建的数据库文件,有了数据库也需要创建各种数据表来充实数据库,在数据表的创建中,不仅需要对数据表命名,也需要对数据表的字段进行设计,包括每个数据表里面需要设置的字段名称,字段对应的数据类型信息,字段的主键设置这个也是不可缺少的,因为每个数据表里面的主键就是标记着这个数据表跟其他数据表相区分的唯一标志。就相当于生活中的每个人都有姓名,但是上网搜索自己的名字,会发现全国上下有很多人的名字跟自己的名字一模一样,包括姓氏以及名字,区分每个人的唯一信息就是每个人的身份证号信息,主键在数据表里面也是起着这样的重要作用。下面就介绍本次开发的程序养老院管理系统的数据表结构信息。

表4.1安全表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

anquan_uuid_number

String

巡检编号

3

anquan_name

String

巡检标题

4

anquan_types

Integer

巡检类型

5

anquan_content

String

巡检详情

6

zhixing_time

Date

执行时间

7

insert_time

Date

录入时间

8

create_time

Date

创建时间

表4.2客服聊天表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_id

Integer

提问用户

3

chat_issue

String

问题

4

issue_time

Date

问题时间

5

chat_reply

String

回复

6

reply_time

Date

回复时间

7

zhuangtai_types

Integer

状态

8

chat_types

Integer

数据类型

9

insert_time

Date

创建时间

表4.3字典表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

dic_code

String

字段

3

dic_name

String

字段名

4

code_index

Integer

编码

5

index_name

String

编码名字

6

super_id

Integer

父字段id

7

beizhu

String

备注

8

create_time

Date

创建时间

表4.4公告表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

gonggao_name

String

公告名称

3

gonggao_photo

String

公告图片

4

gonggao_types

Integer

公告类型

5

insert_time

Date

公告发布时间

6

gonggao_content

String

公告详情

7

create_time

Date

创建时间

表4.5健康信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_id

Integer

用户

3

zhiyuanzhe_id

Integer

志愿者

4

jiankangguanli_uuid_number

String

健康管理编号

5

jiankangguanli_name

String

健康管理名称

6

jiankangguanli_types

Integer

健康状态类型

7

jiankangguanli_content

String

健康管理备注

8

zhixing_time

Date

测量日期

9

insert_time

Date

录入时间

10

create_time

Date

创建时间

表4.6留言板表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_id

Integer

用户

3

liuyan_name

String

留言标题

4

liuyan_text

String

留言内容

5

insert_time

Date

留言时间

6

reply_text

String

回复内容

7

update_time

Date

回复时间

8

create_time

Date

创建时间

表4.7入住退房信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_id

Integer

用户

3

zhiyuanzhe_id

Integer

志愿者

4

ruzhutuifang_uuid_number

String

入住退房信息编号

5

fangwu_name

String

房屋名称

6

fangwu_address

String

房屋位置

7

fangwu_danjia

BigDecimal

房屋单价/天

8

ruzhutuifang_types

Integer

入住状态

9

ruzhu_time

Date

入住时间

10

tuifang_time

Date

退房时间

11

fangwu_zonghuafei

BigDecimal

总花费

12

ruzhutuifang_content

String

入住退房备注

13

insert_time

Date

录入时间

14

create_time

Date

创建时间

表4.8设备表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

shebei_name

String

设备名称

3

shebei_photo

String

设备照片

4

shebei_types

Integer

设备类型

5

shebei_number

Integer

设备数量

6

shebei_content

String

设备详细介绍

7

caigou_time

Date

采购时间

8

insert_time

Date

录入时间

9

create_time

Date

创建时间

表4.9生活信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_id

Integer

用户

3

zhiyuanzhe_id

Integer

志愿者

4

shenghuoguanli_uuid_number

String

生活管理编号

5

shenghuoguanli_name

String

生活管理名称

6

shenghuoguanli_types

Integer

生活管理类型

7

huafei_money

BigDecimal

花费金额

8

shenghuoguanli_content

String

生活管理详情

9

zhixing_time

Date

执行时间

10

insert_time

Date

录入时间

11

create_time

Date

创建时间

表4.10医疗信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_id

Integer

用户

3

zhiyuanzhe_id

Integer

志愿者

4

yiliao_uuid_number

String

医疗管理编号

5

yiliao_name

String

医疗管理名称

6

yiliao_types

Integer

医疗类型

7

yiliao_money

BigDecimal

花费金额

8

yiliao_content

String

医疗管理备注

9

caozuo_time

Date

操作时间

10

insert_time

Date

录入时间

11

create_time

Date

创建时间

表4.11疫情防控信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

zhiyuanzhe_id

Integer

志愿者

3

yiqingfangkong_uuid_number

String

疫情防控编号

4

yiqingfangkong_name

String

疫情防控名称

5

yiqingfangkong_types

Integer

疫情防控状态类型

6

quezhenrenshu

Integer

确诊人数

7

mijierenshu

Integer

密接人数

8

yiqingfangkong_content

String

疫情防控管理备注

9

suoshu_time

Date

所属日期

10

insert_time

Date

录入时间

11

create_time

Date

创建时间

表4.12用户表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_name

String

用户姓名

3

yonghu_phone

String

用户手机号

4

yonghu_id_number

String

用户身份证号

5

yonghu_photo

String

用户头像

6

yonghu_email

String

电子邮箱

7

new_money

BigDecimal

余额

8

create_time

Date

创建时间

表4.13志愿者表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

zhiyuanzhe_name

String

志愿者姓名

3

zhiyuanzhe_phone

String

志愿者手机号

4

zhiyuanzhe_id_number

String

志愿者身份证号

5

zhiyuanzhe_photo

String

志愿者头像

6

zhiyuanzhe_email

String

电子邮箱

7

create_time

Date

创建时间

表4.14用户表表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

username

String

用户名

3

password

String

密码

4

role

String

角色

5

addtime

Date

新增时间


5 系统实现

5.1管理员功能介绍

5.1.1管理员登录

系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。下图就是管理员登录页面。

图5.1 管理员登录页面

部分代码

r
@Controller
@RequestMapping("/yonghu")
public class YonghuController {
    private static final Logger logger = LoggerFactory.getLogger(YonghuController.class);

    private static final String TABLE_NAME = "yonghu";

    @Autowired
    private YonghuService yonghuService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    @Autowired
    private ZhiyuanzheService zhiyuanzheService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        else if("志愿者".equals(role))
            params.put("zhiyuanzheId",request.getSession().getAttribute("userId"));
        CommonUtil.checkMap(params);
        PageUtils page = yonghuService.queryPage(params);

        //字典表数据转换
        List<YonghuView> list =(List<YonghuView>)page.getList();
        for(YonghuView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        YonghuEntity yonghu = yonghuService.selectById(id);
        if(yonghu !=null){
            //entity转view
            YonghuView view = new YonghuView();
            BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>()
            .eq("username", yonghu.getUsername())
            .or()
            .eq("yonghu_phone", yonghu.getYonghuPhone())
            .or()
            .eq("yonghu_id_number", yonghu.getYonghuIdNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);
        if(yonghuEntity==null){
            yonghu.setCreateTime(new Date());
            yonghu.setPassword("123456");
            yonghuService.insert(yonghu);

            return R.ok();
        }else {
            return R.error(511,"账户或者varchar(200)或者varchar(200)已经被使用");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
        logger.debug("update方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());
        YonghuEntity oldYonghuEntity = yonghuService.selectById(yonghu.getId());//查询原先数据

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>()
            .notIn("id",yonghu.getId())
            .andNew()
            .eq("username", yonghu.getUsername())
            .or()
            .eq("yonghu_phone", yonghu.getYonghuPhone())
            .or()
            .eq("yonghu_id_number", yonghu.getYonghuIdNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);
        if("".equals(yonghu.getYonghuPhoto()) || "null".equals(yonghu.getYonghuPhoto())){
                yonghu.setYonghuPhoto(null);
        }
        if(yonghuEntity==null){
            yonghuService.updateById(yonghu);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"账户或者varchar(200)或者varchar(200)已经被使用");
        }
    }



    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        List<YonghuEntity> oldYonghuList =yonghuService.selectBatchIds(Arrays.asList(ids));//要删除的数据
        yonghuService.deleteBatchIds(Arrays.asList(ids));

        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<YonghuEntity> yonghuList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            YonghuEntity yonghuEntity = new YonghuEntity();
//                            yonghuEntity.setUsername(data.get(0));                    //账户 要改的
//                            //yonghuEntity.setPassword("123456");//密码
//                            yonghuEntity.setYonghuName(data.get(0));                    //用户姓名 要改的
//                            yonghuEntity.setYonghuPhone(data.get(0));                    //用户手机号 要改的
//                            yonghuEntity.setYonghuIdNumber(data.get(0));                    //用户身份证号 要改的
//                            yonghuEntity.setYonghuPhoto("");//详情和图片
//                            yonghuEntity.setSexTypes(Integer.valueOf(data.get(0)));   //性别 要改的
//                            yonghuEntity.setYonghuEmail(data.get(0));                    //电子邮箱 要改的
//                            yonghuEntity.setNewMoney(data.get(0));                    //余额 要改的
//                            yonghuEntity.setCreateTime(date);//时间
                            yonghuList.add(yonghuEntity);


                            //把要查询是否重复的字段放入map中
                                //账户
                                if(seachFields.containsKey("username")){
                                    List<String> username = seachFields.get("username");
                                    username.add(data.get(0));//要改的
                                }else{
                                    List<String> username = new ArrayList<>();
                                    username.add(data.get(0));//要改的
                                    seachFields.put("username",username);
                                }
                                //用户手机号
                                if(seachFields.containsKey("yonghuPhone")){
                                    List<String> yonghuPhone = seachFields.get("yonghuPhone");
                                    yonghuPhone.add(data.get(0));//要改的
                                }else{
                                    List<String> yonghuPhone = new ArrayList<>();
                                    yonghuPhone.add(data.get(0));//要改的
                                    seachFields.put("yonghuPhone",yonghuPhone);
                                }
                                //用户身份证号
                                if(seachFields.containsKey("yonghuIdNumber")){
                                    List<String> yonghuIdNumber = seachFields.get("yonghuIdNumber");
                                    yonghuIdNumber.add(data.get(0));//要改的
                                }else{
                                    List<String> yonghuIdNumber = new ArrayList<>();
                                    yonghuIdNumber.add(data.get(0));//要改的
                                    seachFields.put("yonghuIdNumber",yonghuIdNumber);
                                }
                        }

                        //查询是否重复
                         //账户
                        List<YonghuEntity> yonghuEntities_username = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("username", seachFields.get("username")));
                        if(yonghuEntities_username.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(YonghuEntity s:yonghuEntities_username){
                                repeatFields.add(s.getUsername());
                            }
                            return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                         //用户手机号
                        List<YonghuEntity> yonghuEntities_yonghuPhone = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("yonghu_phone", seachFields.get("yonghuPhone")));
                        if(yonghuEntities_yonghuPhone.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(YonghuEntity s:yonghuEntities_yonghuPhone){
                                repeatFields.add(s.getYonghuPhone());
                            }
                            return R.error(511,"数据库的该表中的 [用户手机号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                         //用户身份证号
                        List<YonghuEntity> yonghuEntities_yonghuIdNumber = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("yonghu_id_number", seachFields.get("yonghuIdNumber")));
                        if(yonghuEntities_yonghuIdNumber.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(YonghuEntity s:yonghuEntities_yonghuIdNumber){
                                repeatFields.add(s.getYonghuIdNumber());
                            }
                            return R.error(511,"数据库的该表中的 [用户身份证号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                        yonghuService.insertBatch(yonghuList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }


    /**
    * 登录
    */
    @IgnoreAuth
    @RequestMapping(value = "/login")
    public R login(String username, String password, String captcha, HttpServletRequest request) {
        YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));
        if(yonghu==null || !yonghu.getPassword().equals(password))
            return R.error("账号或密码不正确");
        //  // 获取监听器中的字典表
        // ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
        // Map<String, Map<Integer, String>> dictionaryMap= (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
        // Map<Integer, String> role_types = dictionaryMap.get("role_types");
        // role_types.get(.getRoleTypes());
        String token = tokenService.generateToken(yonghu.getId(),username, "yonghu", "用户");
        R r = R.ok();
        r.put("token", token);
        r.put("role","用户");
        r.put("username",yonghu.getYonghuName());
        r.put("tableName","yonghu");
        r.put("userId",yonghu.getId());
        return r;
    }

    /**
    * 注册
    */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody YonghuEntity yonghu, HttpServletRequest request) {
//    	ValidatorUtils.validateEntity(user);
        Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>()
            .eq("username", yonghu.getUsername())
            .or()
            .eq("yonghu_phone", yonghu.getYonghuPhone())
            .or()
            .eq("yonghu_id_number", yonghu.getYonghuIdNumber())
            ;
        YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);
        if(yonghuEntity != null)
            return R.error("账户或者varchar(200)或者varchar(200)已经被使用");
        yonghu.setNewMoney(0.0);
        yonghu.setCreateTime(new Date());
        yonghuService.insert(yonghu);

        return R.ok();
    }

    /**
     * 重置密码
     */
    @GetMapping(value = "/resetPassword")
    public R resetPassword(Integer  id, HttpServletRequest request) {
        YonghuEntity yonghu = yonghuService.selectById(id);
        yonghu.setPassword("123456");
        yonghuService.updateById(yonghu);
        return R.ok();
    }


    /**
     * 忘记密码
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request) {
        YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));
        if(yonghu!=null){
            yonghu.setPassword("123456");
            boolean b = yonghuService.updateById(yonghu);
            if(!b){
               return R.error();
            }
            return R.ok();
        }else{
           return R.error("账号不存在");
        }
    }


    /**
    * 获取用户的session用户信息
    */
    @RequestMapping("/session")
    public R getCurrYonghu(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        YonghuEntity yonghu = yonghuService.selectById(id);
        if(yonghu !=null){
            //entity转view
            YonghuView view = new YonghuView();
            BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }
    }


    /**
    * 退出
    */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }



    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        CommonUtil.checkMap(params);
        PageUtils page = yonghuService.queryPage(params);

        //字典表数据转换
        List<YonghuView> list =(List<YonghuView>)page.getList();
        for(YonghuView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段

        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        YonghuEntity yonghu = yonghuService.selectById(id);
            if(yonghu !=null){


                //entity转view
                YonghuView view = new YonghuView();
                BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中

                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());
        Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>()
            .eq("username", yonghu.getUsername())
            .or()
            .eq("yonghu_phone", yonghu.getYonghuPhone())
            .or()
            .eq("yonghu_id_number", yonghu.getYonghuIdNumber())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);
        if(yonghuEntity==null){
            yonghu.setCreateTime(new Date());
        yonghu.setPassword("123456");
        yonghuService.insert(yonghu);

            return R.ok();
        }else {
            return R.error(511,"账户或者varchar(200)或者varchar(200)已经被使用");
        }
    }

5.1.2 老人健康管理

项目管理页面提供的功能操作有:查看老人健康,删除老人健康操作,新增老人健康操作,修改老人健康操作。下图就是老人健康管理页面。

图5.2  老人健康管理页面

5.1.3 公告信息管理

公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。下图就是公告信息管理页面。

图5.3 公告信息管理页面

5.1.4公告类型管理

公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。下图就是公告类型管理页面。

图5.4 公告类型列表页面

文档代码下载地址

springboot养老院管理系统.zip资源-CSDN文库

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM-RAG相关常见面试题

#############【持续更新】############## LLM-RAG相关常见面试题 1. RAG技术体系的总体思路 RAG可分为5个基本流程&#xff1a;知识文档的准备&#xff1b;嵌入模型&#xff08;embedding model&#xff09;&#xff1b;向量数据库&#xff1b;查询检索和生产回答。 参考&a…

山西省中小学生学籍照片手机拍照集中采集指南

随着山西省教育信息化的持续发展&#xff0c;学校管理的数字化转型中&#xff0c;学籍信息的精确记录变得尤为关键。在这一背景下&#xff0c;学籍管理系统的优化升级显得尤为重要。为了保障学生资料的精确无误&#xff0c;山西省对中小学生学籍系统中的照片采集和上传流程提出…

5本一投就中的极速期刊,性价比高,1周-1个月录用,见刊极快!

在当今快节奏的学术界&#xff0c;研究者们不仅追求高质量的研究成果&#xff0c;还希望能够迅速地将这些成果分享给全球的同行。为此&#xff0c;科检易学术精心挑选了10本以高效审稿流程著称的期刊&#xff0c;这些期刊不仅性价比高&#xff0c;而且从投稿到录用的时间极短&a…

使用API有效率地管理Dynadot域名,设置域名服务器(NS)的ip信息

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

决策树(descision tree)

一&#xff1a;决策树的基础介绍 决策树(descision tree)是一种基本的分类与回归的方法。决策树是一种对实例进行预测的树型结构。 下面是一个完整的二叉决策树&#xff0c;根据西瓜的几个特征判断西瓜的好坏。 纹理<1.5代表第一个判断条件&#xff0c;根据纹理<1.5是…

【JDK17 | 16】Java 17 深入剖析:密封类(二)

一、密封类的使用场景和优势 什么是密封类&#xff1f; 密封类&#xff08;sealed class&#xff09;是 Java 17 引入的一种新特性&#xff0c;允许开发者控制哪些类可以继承或实现某个类或接口。通过使用密封类&#xff0c;开发者可以定义一组特定的子类&#xff0c;从而提供…

【springboot9733】基于springboot+vue的藏区特产销售平台

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 “互联网”的战略实施后&#xff0c;很多行业的信息化水…

好用的AI工具

目录 1.常用AI工具 1.1.语音助手 1.1.1. 华为小艺 1.1.2. 小米小爱同学 1.2.智能客服 1.2.1. 银行客服 1.2.2. 酒店语音电话 1.3.编程助手 1.3.1. 百度Comate 1.3.2. 华为CodeArts 2.创新AI应用 2.1. 生成式AI 2.2. 自动驾驶技术 2.3. 医疗AI 2.4. 智能客服机器…

简单的maven nexus私服学习

简单的maven nexus私服学习 1.需求 我们现在使用的maven私服是之前同事搭建的&#xff0c;是在公司的一台windows电脑上面&#xff0c;如果出问题会比较难搞&#xff0c;所以现在想将私服迁移到我们公司的测试服务器上&#xff0c;此处简单了解一下私服的一些配置记录一下&am…

conda新建环境中存在大量ros相关python包

1 问题现象 新建的conda环境&#xff0c;执行pip list&#xff0c;出现了大量的ros相关包&#xff0c;环境不纯净。重新安装anaconda没有用。 2 问题原因 2.1 执行python -m site 执行python -m site获得以下结果 其中sys.path包含了’/opt/ros/noetic/lib/python3/dist-…

想要项目顺利进行,企业如何做好节点计划管理?

项目的成功实施对于企业的发展和竞争力提升至关重要。然而&#xff0c;要确保项目顺利进行并非易事&#xff0c;其中做好节点计划管理是关键所在。一个精心策划和有效执行的节点计划&#xff0c;能够为项目的推进提供清晰的路线图&#xff0c;帮助企业合理分配资源、控制进度、…

VR虚拟场景:重塑沉浸式购物体验的新篇章

在科技日新月异的今天&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正以前所未有的速度改变着我们的生活方式&#xff0c;特别是在消费领域&#xff0c;它正引领着一场前所未有的购物体验革命。通过构建高度逼真的虚拟场景&#xff0c;VR技术为消费者打造了一个超越现实…

修改 antd a-popover气泡卡片弹窗背景颜色

antdv 中 a-popover 样式修改不生效的问题 因为 popover 元素添加到了 body 下面&#xff0c;增加下面这几行代码&#xff0c;将 popover 添加到它原本的父级下面&#xff0c;然后用 ::v-deep 去修改样式就可以 1.效果图 2.代码 主要的代码就是 :getPopupContainer"(tri…

【笔记】Day2.4表设计说明

主键ID一般使用bigint类型 运送类型 使用比int更小的tinyint类型 eg&#xff1a;普快代表1 特快代表2&#xff08;没写反&#xff09; 关联城市 varchar 2代表京津冀 3代表江浙沪 4代表川渝 首重和续重都有小数点 故使用double 轻抛系数都为整数 故使用int 创建时间和修改…

Perforce静态分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改进和安全增强

Perforce Helix QAC和Klocwork的最新版本对静态分析工具进行了重大改进&#xff0c;通过尽早修复错误、降低开发成本和加快发布速度&#xff0c;使开发团队实现左移。 本文中&#xff0c;我们将概述2024.2版本的新特性和新功能。 CI/CD和左移以实现持续合规性 现代软件开发实…

《Programming from the Ground Up》阅读笔记:p217-p238

《Programming from the Ground Up》学习第11天&#xff0c;p217-p238总结&#xff0c;总计22页。 一、技术总结 1.C compiling p216, C compiling is split into two stages - the preprocessor and the main compiler。 注&#xff1a;感觉这个写法不好&#xff0c;因为p…

开源AI智能名片链动2+1模式S2B2C商城小程序源码与工业4.0的融合发展:机遇与挑战

摘要&#xff1a;本文探讨了工业4.0的三大主题&#xff0c;即智能工厂、智能生产和智能物流&#xff0c;分析在各主题下开源AI智能名片链动21模式S2B2C商城小程序源码与之融合的可能性、带来的机遇以及面临的挑战&#xff0c;旨在为相关产业的协同发展提供理论参考。 一、引言 …

计算机网络:计算机网络概述 —— 描述计算机网络的参数

文章目录 数据量性能指标速率带宽数据传输速率 吞吐量时延分析时延问题 时延带宽积往返时间利用率丢包率丢包的情况 抖动可用性可靠性安全性 计算机网络是现代信息社会的基础设施&#xff0c;其性能和可靠性对各类应用至关重要。为了理解和优化计算机网络&#xff0c;我们需要深…

uniapp学习(004-1 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

手撕数据结构 —— 单链表(C语言讲解)

目录 1.为什么要有链表 2.什么是链表 3.链表的分类 4.无头单向非循环链表的实现 SList.h中接口总览 具体实现 链表节点的定义 打印链表 申请结点 尾插 头插 尾删 头删 查找 在pos位置之前插入 在pos位置之后插入 删除pos位置 删除pos位置之后的值 5.完整代码…