图书租借系统V0.0.2

举报
赵KK日常技术记录 发表于 2023/06/24 13:38:40 2023/06/24
【摘要】 从这篇文章的名字不难看出,我是真的没有东西可写了,想看的多,能写的不多,上周的图书租借也因为临时群里讨论才想到的,但讨论到netty一对一聊天实现聊天框倒是有了新的东西可以看。 在用户登录服务端时,获取用户ip与id绑定,放入channelgroup,每次循环遍历这个ip对应的channel,否则返回false,在用户状态取到是否在线,离线之后的消息/留言还不知道怎么处理。1.上传图书...

从这篇文章的名字不难看出,我是真的没有东西可写了

,想看的多,能写的不多,上周的图书租借也因为临时群里讨论才想到的,但讨论到netty一对一聊天实现聊天框倒是有了新的东西可以看。

    在用户登录服务端时,获取用户ip与id绑定,放入channelgroup,每次循环遍历这个ip对应的channel,否则返回false,在用户状态取到是否在线,离线之后的消息/留言还不知道怎么处理。

1.上传图书审核通过后展示在页面

2.图片存储位置:暂时用服务器存储即可

3.审核后还要通知上传人信息,站内信形式通知

4.页面有我要租书 我要出租

5.上传判断书名重复

6.上传后保存信息到book表,审核读取此表信息,筛选审核通过的展示

后台审核功能

7.审核上传图书 改变上传状态为已通过后可显示在前端

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50617
 Source Host           : localhost:3306
 Source Schema         : borrowbook

 Target Server Type    : MySQL
 Target Server Version : 50617
 File Encoding         : 65001

 Date: 19/12/2019 11:13:31
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`  (
  `id` int(11) NOT NULL COMMENT '主键',
  `userId` int(11) DEFAULT NULL COMMENT '关联拥有人',
  `bookname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '书名',
  `status` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '状态0:闲置 1:已借出3:预约',
  `backTime` datetime(0) DEFAULT NULL COMMENT '归还时间',
  `cover_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '图书封面',
  `verifystatus` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '审核状态,审核通过展示',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
  `language` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '书籍所属语言  java,python,大数据等',
  `price` decimal(10, 2) DEFAULT NULL COMMENT '租用价格/天',
  `borrowtime` datetime(0) DEFAULT NULL COMMENT '借出时间',
  `upload_time` datetime(0) DEFAULT NULL COMMENT '上传时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL COMMENT '主键',
  `uuid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '关联id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名字',
  `nick_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '昵称',
  `sex` int(2) DEFAULT NULL COMMENT '性别 0:女  1:男',
  `concat_phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系电话',
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',
  `status` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '是否在线',
  `user_ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户ip',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

用户请求登录后获取用户的ip

public String getUserIp(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        try {
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
                if (ip.equals("127.0.0.1") || ip.equals("0:0:0:0:0:0:0:1")) {
                    // 根据网卡取本机配置的IP
                    InetAddress inet = InetAddress.getLocalHost();
                    ip = inet.getHostAddress();

                    // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
                    if (ip != null && ip.length() > 15) { // "***.***.***.***".length()
                        // = 15
                        if (ip.indexOf(",") > 0) {
                            ip = ip.substring(0, ip.indexOf(","));
                        }
                    }
                }
            }
            if (ip != null && ip.length() > 15) { // "***.***.***.***".length()
            // = 15
                if (ip.indexOf(",") > 0) {
                    ip = ip.substring(0, ip.indexOf(","));
                }
            }
            System.out.println("ip" + ip);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ip;
    }

用户上传的数据保存到template表中

    @RequestMapping("/upload")
    public Result userLogin(User user){
        String loginname = user.getLoginname();
        try {
            Assert.isNull(loginname, MessageCode.LOGIN_NAME_NOT_NULL);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.fail();
        }
        userService.addUserTemplate(user);
        return Result.success();
    }

现在除了页面,逻辑其实就是聊天功能要稍微复杂一些,暂时考虑的点就这么多,目前没写到页面实现,至于离线消息的存储也需要考虑,一个小系统描述起来简单,实际写起来还是需要点时间的,尽快能完成吧!下周的年终总结已经提前写好了,等待下周发出来吧。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。