当前位置: 首页 > news >正文

基于微信小程序图书馆管理系统

开发工具:IDEA、微信小程序

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

前端技术:vue、uniapp

服务端技术:springboot+mybatis-plus

本系统分微信小程序和管理后台两部分,项目采用前后端分离

系统主要分为两个角色:管理员和普通用户。

1.普通用户(小程序):登录、注册、首页、搜索图书、借阅、收藏、图书分类、座位查询与预订、我的收藏、借阅查询、退出登录等功能。

2.管理员(后台):登录、首页、用户管理、图书分类、借阅管理、图书管理、阅览室管理、座位管理、收藏管理、系统管理(管理员管理、角色管理、菜单管理、系统日志)、退出登录、修改密码等功能的管理

文档截图:

微信小程序截图:

后台截图:

package io.renren.modules.renren.controller;import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;import com.alibaba.druid.sql.visitor.functions.Now;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.renren.modules.renren.entity.BookManagerEntity;
import io.renren.modules.renren.service.BookManagerService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import io.renren.modules.renren.entity.BookBorrowEntity;
import io.renren.modules.renren.service.BookBorrowService;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;import javax.annotation.Resource;@RestController
@RequestMapping("renren/bookborrow")
public class BookBorrowController {@Autowiredprivate BookBorrowService bookBorrowService;@Resourceprivate BookManagerService bookManagerService;/*** 列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params){PageUtils page = bookBorrowService.queryPage(params);return R.ok().put("page", page);}@RequestMapping("/list2")public R list2(Integer userId,Integer bookState,@RequestParam Map<String, Object> params){PageUtils page = bookBorrowService.queryPage2(userId,bookState,params);return R.ok().put("page", page);}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Integer id){BookBorrowEntity bookBorrow = bookBorrowService.getById(id);return R.ok().put("bookBorrow", bookBorrow);}/*** 保存*/@RequestMapping("/save")public R save(@RequestBody BookBorrowEntity bookBorrow){BookBorrowEntity book=bookBorrowService.getById(bookBorrow.getBookId());List<BookBorrowEntity>  list=bookBorrowService.list(new QueryWrapper<BookBorrowEntity>().eq("book_id",bookBorrow.getBookId()));if (list.size()>0){if (list.get(0).getBookState()==1){return R.error();}}Date a= new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 3);SimpleDateFormat dateFormat2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String aaa=dateFormat2.format(a);bookBorrow.setBookReamrk(aaa);bookBorrowService.save(bookBorrow);BookManagerEntity bk=new BookManagerEntity();bk.setBookState(1);bookManagerService.update(bk,new QueryWrapper<BookManagerEntity>().eq("id",bookBorrow.getBookId()));return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody BookBorrowEntity bookBorrow){BookManagerEntity bk=new BookManagerEntity();bk.setBookState(0);bookManagerService.update(bk,new QueryWrapper<BookManagerEntity>().eq("id",bookBorrow.getBookId()));bookBorrow.setUpdateDate(new Date());bookBorrow.setBookState(0);//归还bookBorrowService.updateById(bookBorrow);return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids){bookBorrowService.removeByIds(Arrays.asList(ids));return R.ok();}}
package io.renren.modules.renren.controller;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import io.renren.modules.renren.entity.BookSeatEntity;
import io.renren.modules.renren.service.BookSeatService;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;

@RestController
@RequestMapping("renren/bookseat")
public class BookSeatController {
@Autowired
private BookSeatService bookSeatService;

/**
* 座位列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = bookSeatService.queryPage(params);

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


/**
* 座位列表
*/
@RequestMapping("/list2")
public R list2(@RequestParam Map<String, Object> params){
PageUtils page = bookSeatService.queryPage2(params);

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


/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Integer id){
BookSeatEntity bookSeat = bookSeatService.getById(id);

return R.ok().put("bookSeat", bookSeat);
}

/**
* 保存
*/
@RequestMapping("/save")
public R save(@RequestBody BookSeatEntity bookSeat){
bookSeat.setSeatState(0);
bookSeatService.save(bookSeat);

return R.ok();
}

/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody BookSeatEntity bookSeat){

bookSeat.setMakeDate(new Date());
bookSeatService.updateById(bookSeat);

return R.ok();
}

@RequestMapping("/update2")
public R update2(@RequestBody BookSeatEntity bookSeat){
QueryWrapper<BookSeatEntity> qw=new QueryWrapper<>();
qw.eq("user_id",bookSeat.getUserId());
qw.eq("seat_state",1);
List<BookSeatEntity> count = bookSeatService.list(qw);
if (count.size()>0){
return R.error().put("zwId",count.get(0).getSeatRemark()).put("roomId",count.get(0).getRoomId()).put("id",count.get(0).getId());

}
bookSeat.setMakeDate(new Date());
bookSeatService.updateById(bookSeat);

return R.ok();
}

/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
bookSeatService.removeByIds(Arrays.asList(ids));

return R.ok();
}

}

相关文章:

基于微信小程序图书馆管理系统

开发工具&#xff1a;IDEA、微信小程序服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8项目构建&#xff1a;maven数据库&#xff1a;mysql5.7前端技术&#xff1a;vue、uniapp服务端技术&#xff1a;springbootmybatis-plus本系统分微信小程序和管理后台两部分&#xff0c;项…...

将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码

之前遇到过“镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for field “intensity“ 问题”&#xff0c; 当时确定了是镭神C32雷达缺少相应字段&#xff0c;并记录博客【学习记录】镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for fi…...

高级前端一面面试题集锦

详细说明 Event loop 众所周知 JS 是门非阻塞单线程语言&#xff0c;因为在最初 JS 就是为了和浏览器交互而诞生的。如果 JS 是门多线程的语言话&#xff0c;我们在多个线程中处理 DOM 就可能会发生问题&#xff08;一个线程中新加节点&#xff0c;另一个线程中删除节点&#…...

Java基础 -- List集合

Java基础 -- List集合1. Introduction1.1 好处1.2 常用泛型2. 交集&#xff0c;差集等2.1 自身的方法2.2 1.8jdk stream 新特性2.3 Apache的CollectionUtils工具类&#xff08;推荐&#xff09;3. 限定泛型范围4. Awakening1. Introduction 1.1 好处 代码复用&#xff0c;多种…...

【Linux】网络编程 - Socket套接字/基于UDP的网络通信

目录 一.套接字 1.什么是套接字/Socket套接字 2.套接字的分类 3.Socket套接字的常见API 二.网络字节序 1.什么是网络字节序 2.网络字节序和主机字节序的转换接口 三.IP地址形式上的转换 四.客户端的套接字不由程序员bind 1.为什么客户端套接字不能由程序员bind 2.OS…...

流程引擎之Camunda简介

背景Camunda 是支持 BPMN&#xff08;工作流和流程自动化&#xff09;、CMMN&#xff08;案例管理&#xff09; 和 DMN&#xff08;业务决策管理&#xff09; java 框架。Camunda 基于Activiti5 保留了 PVM&#xff0c;其开发团队也是从 activiti 中分裂出来的。Camunda 来自拉…...

Mybatis笔记整理

1. 相关文档地址 中文文档 https://mybatis.org/mybatis-3/zh/index.htmlMybatis可以配置成适应多种环境&#xff0c;不过每个SqlSessionFactory实例只能选择一种环境。Mybatis默认事务管理器是JDBC&#xff0c;连接池&#xff1a;POOLEDMaven仓库:下载地址<dependency>…...

【react全家桶】面向组件编程

文章目录02 【面向组件编程】1.组件的使用1.1 函数式组件1.2 类式组件1.3 组合组件1.4 提取组件组件实例的三大属性 state props refs2.state2.1 基本使用2.2 setState()2.3 简化版本2.4 State 的更新可能是异步的2.5 异步更新解决方案2.6 数据是向下流动的3.props3.1 基本使用…...

Django框架之模型视图-使用 PostMan 对请求进行测试

使用 PostMan 对请求进行测试 PostMan 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件&#xff0c;可以直接去对我们写出来的路由和视图函数进行调试&#xff0c;作为后端程序员是必须要知道的一个工具。 安装方式1&#xff1a;去 Chrome 商店直接搜索 PostMan…...

(考研湖科大教书匠计算机网络)第五章传输层-第四节:TCP流量控制

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;流量控制概述二&#xff1a;流量控制举例三&#xff1a;拓展阅读&#xff08;可不看&#xff09;&#xff08;1&#xff09;TCP流量控制完整例子&a…...

使用Docker-Compose搭建Redis集群

1. 集群配置3主3从由于仅用于测试&#xff0c;故我这里只用1台服务器进行模拟redis列表2.编写redis.conf在server上创建一个目录用于存放redis集群部署文件。这里我放的路径为/root/redis-cluster 在/opt/docker/redis-cluster目录下创建redis-1,redis-2,redis-3,redis-4,redis…...

华为OD机试 -计算网络信号(Js)

计算网络信号 题目 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。 注意:网络信号可以绕过阻隔物 array[m][n] 的二维数组代表网格地图,array[i][j] = 0代表 i 行 j 列是空旷位置;array[i][j] = x(x 为正整数)代表 i 行 …...

【数据结构】————栈

文章目录前言栈是什么&#xff0c;栈的特点实现栈的基本操作栈的相关操作声明1.创建栈2.对栈进行初始化3.销毁栈4.判断栈是否为空5.压栈操作6.删除栈顶元素7.取出栈顶元素8.计算栈内存放多少个数据总结前言 本文主要讲述特殊的线性表——栈&#xff1a; 栈是什么&#xff0c;栈…...

从零编写linux0.11 - 第十一章 可执行文件

从零编写linux0.11 - 第十一章 可执行文件 编程环境&#xff1a;Ubuntu 20.04、gcc-9.4.0 代码仓库&#xff1a;https://gitee.com/AprilSloan/linux0.11-project linux0.11源码下载&#xff08;不能直接编译&#xff0c;需进行修改&#xff09; 本章目标 本章会加载并运行…...

Win10上通过nginx代理配置远程非445端口SMB

引言 家里架了一个SMB文件服务器&#xff0c;想要远程访问&#xff0c;开了445端口&#xff0c;但仅限某些特殊网络可以远程访问&#xff0c;其他网络全部拒绝445端口&#xff0c;因此网上找了很多将Win10的SMB指向别的端口的教程&#xff0c;但所有教程均使用环回网卡解决&am…...

Allegro如何快速清除多余的规则设置操作指导

Allegro如何快速清除多余的规则设置操作指导 在用Allegro做PCB设计的时候,会给PCB设置一些规则,在PCB设计完成之后,可能会有一些没有使用到的规则,如下图 Physical规则中的45OHM的规则是多余的 单独某个规则可以直接在规则管理器中删除,如果比较多可以用下面方法批量删除…...

ROS2 入门应用 引用自定义消息(Python)

ROS2 入门应用 引用自定义消息&#xff08;Python&#xff09;1. 查看自定义消息2. 修改话题发布3. 修改话题订阅4. 修改依赖关系5. 编译和运行1. 查看自定义消息 引用在《ROS2 入门应用 创建自定义接口》中自定义的消息Sphere.msg ros2 interface show tutorial_interfaces/…...

SmS-Activate一款好用的短信验证码接收工具

前言 有些国外应用在使用应用上的功能时需要注册账号&#xff0c;由于某种不可抗因素&#xff0c;我们的手机号一般不支持注册&#xff0c;接收不到信息验证码&#xff0c;于是我们可以使用SmS-Activate提供的服务&#xff0c;使用$实现我们的需求&#xff08;大概一次验证1-5…...

SpringBoot+Elasticsearch按日期实现动态创建索引(分表)

&#x1f60a; 作者&#xff1a; 一恍过去&#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390&#x1f38a; 社区&#xff1a; Java技术栈交流&#x1f389; 主题&#xff1a; SpringBootElasticsearch按日期实现动态创建索引(分表)⏱️ 创作时间&…...

Terraform基础入门 (Infrastructure as Code)

文章目录前言介绍Terraform 术语Terraform 如何工作关于provider安装开启本地缓存demo1(dockernginx)demo2(dockerzookeeperkafka)参考资料前言 像写代码一样管理基础设施。 Terraform 使用较为高级的配置文件语法来描述基础设施&#xff0c;这个特性让你对配置文件进行版本化…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...