基于Java+SpringBoot+Vue前后端分离常规应急物资管理系统设计和实现

news2024/9/25 13:16:44

博主介绍全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

 

系统介绍:

当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于常规应急物资信息的管理和控制,采用人工登记的方式保存相关数据,这种以人力为主的管理模式已然落后。本人结合使用主流的程序开发技术,设计了一款基于SpringBoot+Vue的常规应急物资管理系统,可以较大地减少人力、财力的损耗,方便相关人员及时更新和保存信息。本常规应急物资管理系统是建立在B/S模式的基础之上,通过使用idea平台上编写相关的Java代码,实现对系统的功能模块的设计,使用MySQL数据库设计相关的数据表,实现对系统数据资源的管理和控制,使用SSM框架创建相关的项目主流架构,实现系统的基本框架搭建,最后再通过使用Tomcat浏览器将所研发的系统发布到网上,便于相关的用户运行和使用本系统。本文对系统进行实现的可行性分析,设计的功能及数据库规划,以及设计的主要功能模块测试等内容做了较为详细的介绍,并且在本文中也展示了系统主要的功能模块设计界面和操作界面,并对其做出了必要的解释说明,方便用户对系统进行操作和使用,以及后期的相关人员对系统进行更新和维护。本系统的实现可以极大地提高相关行业的工作效率,提升用户的使用体验,因此在现实生活中运用本系统具有很大的使用价值。

系统的总体功能设计阶段,是通过结合系统分析阶段的相关内容,对系统的整体功能设计进行规划的过程。系统的总体功能设计是系统详细功能设计的一个大方向,也就是说系统的各类子功能模块的设计,都是以总体功能设计为目标而进行的。通过对系统进行需求分析可知,可以大致了解系统具体所需要的相关的主要功能模块。本系统主要的功能需求包括物资信息管理、物资运输管理等模块。管理员功能设计图如图4-1所示,用户功能设计图如图4-2所示。

 图4-1管理员功能设计图

 图4-2用户功能设计图

程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。

程序操作流程图

功能截图:

5.1管理员角色功能设计

5.1.1管理员首页

通过设计的首页功能模块,管理用户可以成功登录系统,并且选择点击相关的功能模块按钮,操作和实现自己所需要的功能,管理员首页解饿设计如图5-1所示。

 

图5-1管理员首页界面

本功能模块的核心代码如下:

/**

 * 登录

 */

@IgnoreAuth

@PostMapping(value = "/login")

public R login(String username, String password, String captcha, HttpServletRequest request) {

UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));

if(user==null || !user.getPassword().equals(password)) {

return R.error("账号或密码不正确");

}

String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());

R r = R.ok();

r.put("token", token);

r.put("role",user.getRole());

r.put("userId",user.getId());

return r;

}

/**

     * 列表

     */

    @RequestMapping("/page")

    public R page(@RequestParam Map<String, Object> params,UsersEntity user){

        EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();

     PageUtils page = usersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));

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

}

5.1.2个人中心

通过设计的个人中心功能模块,管理用户可以选择修改账号密码,查看个人资料信息,通过不定期的对个人账户密码进行更新,保障个人信息安全,修改密码界面设计如图5-1所示,个人信息界面设计如图5-2所示。

 

图5-1修改密码界面

 

图5-2个人信息界面

本功能模块的核心代码如下:

/**

     * 密码重置

     */

    @IgnoreAuth

@RequestMapping(value = "/resetPass")

    public R resetPass(String username, HttpServletRequest request){

     UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));

     if(user==null) {

     return R.error("账号不存在");

     }

     user.setPassword("123456");

        usersService.update(user,null);

        return R.ok("密码已重置为:123456");

}

/**

     * 信息

     */

    @RequestMapping("/info/{id}")

    public R info(@PathVariable("id") String id){

        UsersEntity user = usersService.selectById(id);

        return R.ok().put("data", user);

}

5.1.3健康打卡管理

通过设计的健康打卡管理功能模块,管理用户可以管理相关的健康打卡信息记录,比如进行查看健康打卡的详细信息,修改健康打卡的日期信息,删除已经失效的健康打卡信息记录等操作,健康打卡管理界面设计如图5-3所示。

 

图5-3健康打卡管理界面

本功能模块的核心代码如下:

 /**

    * 健康打卡后端修改

    */

    @RequestMapping("/update")

    public R update(@RequestBody DakaEntity daka, HttpServletRequest request){

        logger.debug("update方法:,,Controller:{},,daka:{}",this.getClass().getName(),daka.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));

//        if(false)

//            return R.error(511,"永远不会进入");

//        else if("用户".equals(role))

//            daka.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        //根据字段查询是否有相同数据

        Wrapper<DakaEntity> queryWrapper = new EntityWrapper<DakaEntity>()

            .notIn("id",daka.getId())

            .andNew()

            .eq("yonghu_id", daka.getYonghuId())

            .eq("insert_time", new SimpleDateFormat("yyyy-MM-dd").format(daka.getInsertTime()))

            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());

        DakaEntity dakaEntity = dakaService.selectOne(queryWrapper);

        if(dakaEntity==null){

            dakaService.updateById(daka);//根据id更新

            return R.ok();

        }else {

            return R.error(511,"表中有相同数据");

        }

    }

5.1.4基础数据管理

通过设计的基础数据管理功能模块,管理用户可以管理相关的物资类型信息记录,比如进行查看物资类型的详细信息,修改物资类型的名称信息,删除已经失效的物资类型信息记录等操作,物资类型管理界面设计如图5-4所示。

 

图5-4物资类型管理界面

本功能模块的核心代码如下:

 /**

    * 基础数据后端修改

    */

    @RequestMapping("/update")

    public R update(@RequestBody DictionaryEntity dictionary, HttpServletRequest request){

        logger.debug("update方法:,,Controller:{},,dictionary:{}",this.getClass().getName(),dictionary.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));

//        if(false)

//            return R.error(511,"永远不会进入");

        //根据字段查询是否有相同数据

        Wrapper<DictionaryEntity> queryWrapper = new EntityWrapper<DictionaryEntity>()

            .notIn("id",dictionary.getId())

            .eq("dic_code", dictionary.getDicCode())

            .eq("index_name", dictionary.getIndexName())

            ;

        if(dictionary.getDicCode().contains("_erji_types")){

            queryWrapper.eq("super_id",dictionary.getSuperId());

        }

        logger.info("sql语句:"+queryWrapper.getSqlSegment());

        DictionaryEntity dictionaryEntity = dictionaryService.selectOne(queryWrapper);

        if(dictionaryEntity==null){

            dictionaryService.updateById(dictionary);//根据id更新

            //如果字典表修改数据的话,把数据再重新查出,放入监听器中

            List<DictionaryEntity> dictionaryEntities = dictionaryService.selectList(new EntityWrapper<DictionaryEntity>());

            ServletContext servletContext = request.getServletContext();

            Map<String, Map<Integer,String>> map = new HashMap<>();

            for(DictionaryEntity d :dictionaryEntities){

                Map<Integer, String> m = map.get(d.getDicCode());

                if(m ==null || m.isEmpty()){

                    m = new HashMap<>();

                }

                m.put(d.getCodeIndex(),d.getIndexName());

                map.put(d.getDicCode(),m);

            }

            servletContext.setAttribute("dictionaryMap",map);

            return R.ok();

        }else {

            return R.error(511,"表中有相同数据");

        }

}

5.1.5物资管理

通过设计的物资管理功能模块,管理用户可以管理相关的物资信息记录,比如进行查看物资的详细信息,修改物资的库存信息,删除已经失效的物资信息记录等操作,物资管理界面设计如图5-5所示。

 

图5-5物资管理界面

本功能模块的核心代码如下:

/**

    * 物资后端修改

    */

    @RequestMapping("/update")

    public R update(@RequestBody WuziEntity wuzi, HttpServletRequest request){

        logger.debug("update方法:,,Controller:{},,wuzi:{}",this.getClass().getName(),wuzi.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));

//        if(false)

//            return R.error(511,"永远不会进入");

        //根据字段查询是否有相同数据

        Wrapper<WuziEntity> queryWrapper = new EntityWrapper<WuziEntity>()

            .notIn("id",wuzi.getId())

            .andNew()

            .eq("wuzi_name", wuzi.getWuziName())

            .eq("wuzi_types", wuzi.getWuziTypes())

            .eq("wuzi_kucun_number", wuzi.getWuziKucunNumber())

            .eq("wuzi_danwei", wuzi.getWuziDanwei())

            .eq("wuzi_delete", wuzi.getWuziDelete())

            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());

        WuziEntity wuziEntity = wuziService.selectOne(queryWrapper);

        if("".equals(wuzi.getWuziPhoto()) || "null".equals(wuzi.getWuziPhoto())){

                wuzi.setWuziPhoto(null);

        }

        if(wuziEntity==null){

            wuziService.updateById(wuzi);//根据id更新

            return R.ok();

        }else {

            return R.error(511,"表中有相同数据");

        }

}

5.1.6物资申请管理

通过设计的物资申请管理功能模块,管理用户可以管理相关的物资申请信息记录,比如进行查看物资申请的详细信息,修改物资的申请时间信息,删除已经失效的物资申请信息记录等操作,物资申请管理界面设计如图5-6所示。

 

图5-6物资申请管理界面

本功能模块的核心代码如下:

/**

    * 物资申请后端保存

    */

    @RequestMapping("/save")

    public R save(@RequestBody WuzishenqingEntity wuzishenqing, HttpServletRequest request){

        logger.debug("save方法:,,Controller:{},,wuzishenqing:{}",this.getClass().getName(),wuzishenqing.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));

        if(false)

            return R.error(511,"永远不会进入");

        else if("用户".equals(role))

            wuzishenqing.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

            wuzishenqing.setInsertTime(new Date());

            wuzishenqing.setWuzishenqingYesnoTypes(1);

            wuzishenqing.setCreateTime(new Date());

            wuzishenqingService.insert(wuzishenqing);

            return R.ok();

    }

    /**

    * 物资申请后端修改

    */

    @RequestMapping("/update")

    public R update(@RequestBody WuzishenqingEntity wuzishenqing, HttpServletRequest request){

        logger.debug("update方法:,,Controller:{},,wuzishenqing:{}",this.getClass().getName(),wuzishenqing.toString());

            wuzishenqingService.updateById(wuzishenqing);//根据id更新

            return R.ok();

}

5.1.7物资运输管理

通过设计的物资运输管理功能模块,管理用户可以管理相关的物资运输信息记录,比如进行查看物资运输的详细信息,修改物资运输的当前状态信息,删除已经失效的物资运输信息记录等操作,物资运输管理界面设计如图5-7所示。

 

图5-7物资运输管理界面

本功能模块的核心代码如下:

 /**

    * 物资运输后端保存

    */

    @RequestMapping("/save")

    public R save(@RequestBody WuziyunshuEntity wuziyunshu, HttpServletRequest request){

        logger.debug("save方法:,,Controller:{},,wuziyunshu:{}",this.getClass().getName(),wuziyunshu.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));

        if(false)

            return R.error(511,"永远不会进入");

            wuziyunshu.setUpdateTime(new Date());

            wuziyunshu.setInsertTime(new Date());

            wuziyunshu.setCreateTime(new Date());

            wuziyunshuService.insert(wuziyunshu);

            return R.ok();

    }

    /**

    * 物资运输后端修改

    */

    @RequestMapping("/update")

    public R update(@RequestBody WuziyunshuEntity wuziyunshu, HttpServletRequest request){

        logger.debug("update方法:,,Controller:{},,wuziyunshu:{}",this.getClass().getName(),wuziyunshu.toString());

        wuziyunshu.setUpdateTime(new Date());

            wuziyunshuService.updateById(wuziyunshu);//根据id更新

            return R.ok();

}

5.1.8用户管理

通过设计的用户管理功能模块,管理用户可以管理相关的用户信息资料,比如进行查看用户的详细资料,修改用户的联系方式,删除已经注销的用户信息记录等操作,用户管理界面设计如图5-8所示。

 

图5-8用户管理界面

本功能模块的核心代码如下:

/**

    * 用户后端修改

    */

    @RequestMapping("/update")

    public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request){

        logger.debug("update方法:,,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>()

            .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,"账户或者用户手机号或者用户身份证号已经被使用");

        }

}

5.1.9部门管理

通过设计的部门管理功能模块,管理用户可以管理相关的部门信息记录,比如进行查看部门的详细信息,修改部门的职责信息,删除已经失效的部门信息记录等操作,部门管理界面设计如图5-9所示。

 

图5-9部门管理界面

本功能模块的核心代码如下:

 /**

    * 部门后端修改

    */

    @RequestMapping("/update")

    public R update(@RequestBody BumenEntity bumen, HttpServletRequest request){

        logger.debug("update方法:,,Controller:{},,bumen:{}",this.getClass().getName(),bumen.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));

//        if(false)

//            return R.error(511,"永远不会进入");

        //根据字段查询是否有相同数据

        Wrapper<BumenEntity> queryWrapper = new EntityWrapper<BumenEntity>()

            .notIn("id",bumen.getId())

            .andNew()

            .eq("bumen_name", bumen.getBumenName())

            .eq("bumen_zhize", bumen.getBumenZhize())

            .eq("bumen_number", bumen.getBumenNumber())

            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());

        BumenEntity bumenEntity = bumenService.selectOne(queryWrapper);

        if(bumenEntity==null){

            bumenService.updateById(bumen);//根据id更新

            return R.ok();

        }else {

            return R.error(511,"表中有相同数据");

        }

    }

5.2用户功能设计

5.2.1用户首页

通过设计的首页功能模块,管理用户可以成功登录系统,并且选择点击相关的功能模块按钮,操作和实现自己所需要的功能,管理员首页解饿设计如图5-10所示。

 

图5-10用户首页界面

本功能模块的核心代码如下:

/**

    * 首页后端保存

    */

    @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,"账户或者用户手机号或者用户身份证号已经被使用");

        }

    }

5.2.2个人中心

通过设计的个人中心管理功能模块,用户可以选择查看个人资料信息,选择更新个人相关的资料信息记录;也可以选择修改账号密码,通过不定期的对个人账户密码进行更新,保障个人信息安全,修改密码界面设计如图5-11所示,个人信息界面设计如图5-12所示。

 

图5-11修改密码界面

 

图5-12个人信息界面

本功能模块的核心代码如下:

//查询是否重复

                         //账户

                        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();

                    }

5.2.3健康打卡管理

通过设计的健康打卡管理功能模块,用户可以管理相关的健康打卡信息记录,比如进行查看健康打卡的详细信息,修改健康打卡的日期信息,删除已经失效的健康打卡信息记录等操作,健康打卡管理界面设计如图5-13所示。

 

图5-13健康打卡管理界面

本功能模块的核心代码如下:

/**

    * 健康打卡后端详情

    */

    @RequestMapping("/info/{id}")

    public R info(@PathVariable("id") Long id, HttpServletRequest request){

        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

        DakaEntity daka = dakaService.selectById(id);

        if(daka !=null){

            //entity转view

            DakaView view = new DakaView();

            BeanUtils.copyProperties( daka , view );//把实体数据重构到view中

                //级联表

                YonghuEntity yonghu = yonghuService.selectById(daka.getYonghuId());

                if(yonghu != null){

                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段

                    view.setYonghuId(yonghu.getId());

                }

            //修改对应字典表字段

            dictionaryService.dictionaryConvert(view, request);

            return R.ok().put("data", view);

        }else {

            return R.error(511,"查不到数据");

        }

}

5.2.4物资管理

通过设计的物资管理功能模块,管理用户可以查看相关的物资信息记录,可以查到物资名称、物资图片、物资类型、物资库存等详细信息,物资管理界面设计如图5-14所示。

 

图5-14物资管理界面

本功能模块的核心代码如下:

/**

    * 物资后端详情

    */

    @RequestMapping("/info/{id}")

    public R info(@PathVariable("id") Long id, HttpServletRequest request){

        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

        WuziEntity wuzi = wuziService.selectById(id);

        if(wuzi !=null){

            //entity转view

            WuziView view = new WuziView();

            BeanUtils.copyProperties( wuzi , view );//把实体数据重构到view中

            //修改对应字典表字段

            dictionaryService.dictionaryConvert(view, request);

            return R.ok().put("data", view);

        }else {

            return R.error(511,"查不到数据");

        }

}

5.2.5物资申请管理

通过设计的物资申请管理功能模块,用户可以管理相关的物资申请信息记录,比如进行查看物资申请的详细信息,新增相关的物资申请信息记录,物资申请管理界面设计如图5-15所示。

 

图5-15物资申请管理界面

本功能模块的核心代码如下:

/**

    * 物资申请后端详情

    */

    @RequestMapping("/info/{id}")

    public R info(@PathVariable("id") Long id, HttpServletRequest request){

        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);

        WuzishenqingEntity wuzishenqing = wuzishenqingService.selectById(id);

        if(wuzishenqing !=null){

            //entity转view

            WuzishenqingView view = new WuzishenqingView();

            BeanUtils.copyProperties( wuzishenqing , view );//把实体数据重构到view中

                //级联表

                WuziEntity wuzi = wuziService.selectById(wuzishenqing.getWuziId());

                if(wuzi != null){

                    BeanUtils.copyProperties( wuzi , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段

                    view.setWuziId(wuzi.getId());

                }

                //级联表

                YonghuEntity yonghu = yonghuService.selectById(wuzishenqing.getYonghuId());

                if(yonghu != null){

                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段

                    view.setYonghuId(yonghu.getId());

                }

            //修改对应字典表字段

            dictionaryService.dictionaryConvert(view, request);

            return R.ok().put("data", view);

        }else {

            return R.error(511,"查不到数据");

        }

}

5.2.6物资运输管理

通过设计的物资运输管理功能模块,用户可以查看相关的物资运输信息记录,比如查到物资名称、物资图片、单位、运输数量、当前状态等详细信息,物资运输管理界面设计如图5-16所示。

 

 图5-16物资运输管理界面

代码实现:

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private TokenService tokenService;

    /**
     * 登录
     */
    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String role, HttpServletRequest request) {
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user != null){
            if(!user.getRole().equals(role)){
                return R.error("权限不正常");
            }
            if(user==null || !user.getPassword().equals(password)) {
                return R.error("账号或密码不正确");
            }
            String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
            return R.ok().put("token", token);
        }else{
            return R.error("账号或密码或权限不对");
        }

    }
    
    /**
     * 注册
     */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 退出
     */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user==null) {
            return R.error("账号不存在");
        }
        user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
    
    /**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
        PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

论文参考:

源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

 精彩专栏推荐订阅下方专栏👇🏻

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

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

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

相关文章

理解图傅里叶变换和图卷积

图神经网络&#xff08;GNN&#xff09;代表了一类强大的深度神经网络架构。在一个日益互联的世界里&#xff0c;因为信息的联通性&#xff0c;大部分的信息可以被建模为图。例如&#xff0c;化合物中的原子是节点&#xff0c;它们之间的键是边。 图神经网络的美妙之处在于它们…

CSS 属性值计算过程

目录 例子1&#xff0c;确定声明值2&#xff0c;层叠冲突2.1&#xff0c;比较源重要性2.2&#xff0c;比较优先级2.3&#xff0c;比较源次序 3&#xff0c;使用继承4&#xff0c;使用默认值其他 例子 我们来举例说明<h1> 标签最终的样式&#xff1a; <div><h1…

Hugo·Stack主题·杂记

运行环境 hugo版本&#xff1a;v0.117.0&#xff08;扩展版&#xff09; go&#xff1a;1.21.0 PowerShell 7&#xff08;x64&#xff09; Windows10 添加主题 git submodule add https://github.com/CaiJimmy/hugo-theme-stack/ themes/hugo-theme-stack修改配置文件 m…

C语言入门 Day_10 判断的进阶

目录 前言 1.多重判断 2.代码块 3.条件运算符 3.易错点 4.思维导图 前言 if和else能够处理两种不同的情况&#xff0c;如果&#xff08;if&#xff09;满足条件&#xff0c;我们就执行这几行代码&#xff1b;否则&#xff08;else&#xff09;的话&#xff0c;我们就执行…

快速排序三种思路详解!

一、快速排序的介绍 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;…

电脑excel文件误删怎么恢复?分享6种有效方法

在日常办公中&#xff0c;电脑中存储的Excel文件可能会遭遇误删的意外情况&#xff0c;如何快速恢复误删的Excel文件成为许多人关注的热点。本文将介绍几种有效的方法&#xff0c;希望能够帮助您恢复误删的Excel文件。 方法1、从回收站恢复 检查电脑的回收站&#xff0c;如果E…

数字孪生是什么?工厂数字孪生实例分析

数字孪生是建筑物或城市等物理实体的 3D 模型&#xff0c;数字孪生具有实时、连续的数据&#xff0c;可实时更新其功能和流程&#xff0c;从而为工程师提供分析和优化生产流程的数据支撑。简单来说&#xff0c;数字孪生是物理实体的 3D 模型&#xff0c;3D 模型的动画由真实实体…

行业冠军NANK南卡再添新高度,打造百元级开放式蓝牙耳机新标杆!

​最近&#xff0c;国内最受欢迎的开放式耳机品牌NANK南卡推出了一款名为OE CC的产品&#xff0c;它以0感0压为卖点。不断根据用户的反馈进行优化&#xff0c;现如今这款耳机正式在各大平台上架销售。它采用了先进的技术&#xff0c;重新定义了百元级别开放式耳机的三个标准。这…

GD32-舵机的原理

GD32-舵机的原理 舵机的现一脉宽与舵机转动角度 旋转编码器的原理 顺时针&#xff1a;A的下降沿时&#xff0c;B处于高电平&#xff1b; 逆时针&#xff1a;A的下降沿时&#xff0c;B处于低电平&#xff1b; #ifndef _ENCODER_DRIVE_H #define _ENCODER_DRIVE_H#include &quo…

Matlab图像处理运算方法-非线性点运算

常见的非线性灰度变换为对数变换和幂次变换。 对数变换 对数变换的一般表达式为&#xff1a; tclog(1s) 其中c为尺度比例常数&#xff0c;s为输入图像灰度值&#xff0c;t为变换后的输出图像灰度值。在如下图所示的对数曲线上&#xff0c;函数…

node-red - 读写操作redis

node-red - 读写操作redis 一、前期准备二、node-red安装redis节点三、node-red操作使用redis节点3.1 redis-out节点 - 存储数据到redis3.2 redis-in节点 - 查询redis数据 附录附录1&#xff1a;redis -out节点示例代码附录2&#xff1a;redis -in节点示例代码 一、前期准备 安…

ensp-IPsec vpn配置

ensp-IPsec vpn配置 &#x1f4ce;IPsec VPN配置.docx&#x1f4ce;IPSec.zip

Windows和Linux卸载anaconda的完整解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

drag handle是什么意思?

Drag handle" 是一个术语&#xff0c;通常用于描述在用户界面&#xff08;如软件应用程序、网页等&#xff09;中用于拖拽或调整元素的小型图标、区域或手柄。它是一种交互式设计元素&#xff0c;用户可以通过拖拽它来改变界面上的元素的位置、大小或其他属性。 “Drag h…

数字孪生技术在3大行业的重点应用

数字孪生技术是利用模拟仿真技术将实体对象数字化的技术。它基于虚拟现实、人工智能和云计算等技术&#xff0c;能够创建与真实物体相同的数字模型&#xff0c;并通过实时监测和分析手段&#xff0c;提供关于该物体的全面数据&#xff0c;从而优化产品开发和生产过程。数字孪生…

熊猫:完整的初学者指南

pandas&#xff1a;完整的初学者指南 一、说明 在你的Python开发人员或数据科学之旅中&#xff0c;你可能已经多次遇到“熊猫”这个词&#xff0c;但仍然需要弄清楚它的作用。以及数据和熊猫之间的关系。所以让我向你解释一下。 根据最新估计&#xff0c;每天创建 328.77 亿 TB…

二分查找逻辑

目录 二分查找 查找逻辑 题目练习 题目描述 代码示例 总结 二分查找 二分查找是我们经常使用的一种算法&#xff0c;他的逻辑是 在升序或者降序且无重复元素的数组中&#xff0c;比较目标值和数组中间值的方法&#xff0c;每次缩小一半的搜索范围&#xff0c;相比遍历可…

Unity Alembic闪烁问题

最近在做项目时&#xff0c;发现Clo3D导出的服装abc动画&#xff0c;导入到Unity中后(已提前导入Alembic插件)&#xff0c;运行时屏幕会闪烁(变黑)。 经过几轮测试&#xff0c;发现是切线的问题。解决办法很简单。将abc文件上的Tangents属性值改为None即可。

一篇关于CPU的硬核知识分享

不管你玩硬件还是做软件&#xff0c;你的世界都少不了计算机最核心的 —— CPU。 01CPU是什么&#xff1f; CPU与计算机的关系就相当于大脑和人的关系&#xff0c;它是一种小型的计算机芯片&#xff0c;通常嵌入在电脑的主板上。 CPU的构建是通过在单个计算机芯片上放置数十亿…

app.js和页面.js 实现全局传参

实现全局传参的几个步骤&#xff1a;1. 在页面.js文件中 输入 const appgetApp() 2.便可以在页面中引用app.js中的globalData中的数据。 注意点&#xff1a;app.js中是使用的是this.globalData (调用自身的数据&#xff09; 页面.js中使用的是app.globalData&#xff08;引用ap…