SpringCloud:(图书预约的操作)

news2024/11/23 15:38:38

借阅图书的操作主要是添加借阅记录:

在这张表上添加记录并在t_book这张表上扣除库存的操作

下面我们开始进行操作:

首先我们创建t_borrow表的实体类在book项目中:

package com.laosan.book.entity;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
 * 借阅图书实体类
 */
@Data
@Entity
@Table(name="t_borrow")
public class Borrow implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long brid;
    private Long bid;
    private Long mid;
    private Date takedate;
    private Date returndate;
    private Date createtime;
}

然后在Dao层添加一个接口:

package com.laosan.book.repository;

import com.laosan.book.entity.Borrow;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BorrowRepository extends JpaRepository<Borrow, Long> {
}

然后打开book项目的service层进行操作,写一个借阅图书的方法:

BookService

  /**
     * 借阅图书方法
     * @param bid
     * @param mobile
     * @param takeDate
     * @param returnDate
     */
    void takeBookBookrow(Long bid, String mobile, Date takeDate, Date returnDate);

再写ServiceImpl先完成:

//库存是否为0的异常:
/**
 * 库存不足自定义  异常处理
 */
public class BookLessException extends RuntimeException{
    public BookLessException(String message) {
        super(message);
    }
}
//开始插入借书的记录 ,有个数据要先处理一下  mid
MemberDTO memberDTO=null;

所以在boot项目中也要有vo  dto  和mamber的一样

引入依赖;

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
@EnableFeignClients    //开启feign

vo:

package com.pb.vo;

import lombok.Data;

import java.io.Serializable;

/**
 * 格式化数据的封装类
 */
@Data
public class ResultVo<T>  implements Serializable {
    private int code;
    private String message;
    private T data;
}

dto

package com.pb.dto;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
* 用来存放Member对象的视图
*/
@Data
public class MemberDTO implements Serializable {
        private Long mid;
        private String name;
        private String idno;
        private String mobile;
        private Date regdate;
        private Date expdate;
}

clien:

package com.pb.client;

import com.pb.dto.MemberDTO;
import com.pb.vo.ResultVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

@FeignClient(name="member")
public interface MemberClient {
        //调用member的服务请求为selectMemberByMobile的
        @RequestMapping("/selectMemberByMobile")
        ResultVo<MemberDTO> selectMemberByMobile(@RequestParam("mobile") String mobile);
}

 serviceImpl


}

package com.ff.test.service.impl;
import com.ff.test.client.MemberClient;
import com.ff.test.dto.MemberDTO;
import com.ff.test.entity.Book;
import com.ff.test.entity.Borrow;
import com.ff.test.exception.BookLessException;
import com.ff.test.exception.BookNotFoundException;
import com.ff.test.respository.BookRespository;
import com.ff.test.respository.BorrowRespository;
import com.ff.test.service.BookService;
import com.ff.test.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Optional;

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookRespository bookRespository;

    @Autowired
    private MemberClient memberClient;

    @Autowired
    private BorrowRespository borrowRespository;

    @Override
    public List<Book> selectBookAll() {
        List<Book> list = bookRespository.findAll();
        return list;
    }

    /**
     * 根据Id查询图书信息
     * @param bid
     * @return
     */
    @Override
    public Book findById(Long bid) {
        Book book = null;
        Optional<Book> option = bookRespository.findById(bid);
        if(option.isPresent()) {
            book = option.get();
        }
        else {
            throw new BookNotFoundException("图书未找到");
        }
        return book;
    }

    /**
     * 借书操作
     * @param mobile
     * @param bid
     * @param takedate
     * @param returndate
     */
    @Transactional
    @Override
    public void takeBookBorrow(String mobile, Long bid, Date takedate, Date returndate) {
        Book book = null;
        Optional<Book> option = bookRespository.findById(bid);
        if(option.isPresent()) {
            book = option.get();
        }
        else {
            throw new BookNotFoundException("图书未找到");
        }

        //想想库存是否为0
        if(book.getStock() <=0) {
            throw new BookLessException("库粗不足");
        }

        MemberDTO memberDTO = null;
        //开始插入借书的记录,有个数据先得处理下,mid
        ResultVO<MemberDTO> result = memberClient.selectMemberByMobile(mobile);
        if(result.getCode() == 200) {
            memberDTO = result.getData();
        }

        //借书记录操作插入
        Borrow borrow = new Borrow();
        borrow.setBid(bid);
        borrow.setMid(memberDTO.getMid());
        borrow.setCreatetime(new Date());
        borrow.setTakedate(takedate);
        borrow.setReturndate(returndate);

        borrowRespository.save(borrow);

        //修改库存
        book.setStock(book.getStock()-1);
        bookRespository.saveAndFlush(book);
    }

}

 

 

上面的服务我们做完了,那么现在我们来对客户端前端页面进行处理:

最后再html页面我们完成借书的操作:

//进行提交操作
$("#btnSubmit").click(function () {
    //获得图书的编号放到隐藏域id为bid的input标签里面
    $("#bid").val($("#name").attr("data-values"));
    var params = $("#frmBorrow").serialize();   //把表单中的所有数据记性序列化传给后台
    //进行测试打印在控制台
    //console.log(params);
    //控制台会有index.html?_ijt=sk4v02vbh5676k7vt6687cfljr:128 mobile=13834567543&name=java%E5%9F%BA%E7%A1%80&bid=1&takedate=2020-04-01&returndate=2020-04-15
    //利用ajax进行访问后台的操作
    $.ajax({
        url: "http://localhost:9000/book/borrow",
        type: "post",
        data: params,
        dataType: "json",
        success: function(json) {
            //进行数据的测试操作
            //console.log("book:" + json);
            //进行判断操作
            if(json.code == "0") {
                $.alert("借书成功");
            }
            else {
                $.alert(json.message);
            }
        }
    });
})

具体的返回为:

失败信息为:

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

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

相关文章

成都PMP培训机构有推荐的吗?

PMP考试是不是必须要报班&#xff1f;自学可以考试吗&#xff1f;不需要报班的话&#xff0c;自学难度大吗&#xff1f;成都PMP培训机构有推荐的吗&#xff1f; 首先&#xff0c;PMP考试并非必须要报班&#xff0c;自学也可以考试。但是需要注意的是&#xff0c;PMP考试难度较大…

Centos7.9基于Kubeasz部署k8s 1.27.1高可用集群

一&#xff1a;kubeasz 的介绍 kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书&#xff1b; 基于二进制方式部署和利用ansible-playbook实现自动化&#xff1b;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。 kubea…

简单分享在微信上扫码点餐小程序怎么做

目前市场上有很多扫码点餐的小程序系统&#xff0c;制作方法有三种&#xff1a; 1、使用微信商家推出的扫码点餐小程序&#xff0c;上传营业执照和食品经营许可证就可以开通使用&#xff0c;然后上传自己的菜品信息就可以了&#xff0c;功能相对比较简单。 2、购买餐饮系统公司…

java链表——LinkList详解

LinkList详解 注&#xff1a;在学习LinkList之前可以先去看一下我的另一篇博客单链表的定义及其模拟实现——java https://editor.csdn.net/md/?articleId130642627&#xff0c;有助于本博客的理解 ArrayList和LinkedList的区别 LinkList模拟实现 定义三个类&#xff1a;MyL…

数据中台建设浪费,数据分析系统如何设计,听听 Gartner 怎么说

2023 年数据分析趋势&#xff1a;数据即业务、从平台到生态、以人为中心 作者 | 宋慧 出品 | CSDN 云计算 数据的价值被越来越多的行业用户看到。不过各种数据系统百花齐放&#xff0c;前几年关于数据中台的讨论仍然众说纷纭。国际研究机构 Gartner 持续对数据分析市场做了调研…

动态规划-数位DP

数字游戏 题目 链接&#xff1a;https://www.acwing.com/problem/content/1084/ 科协里最近很流行数字游戏。 某人命名了一种不降数&#xff0c;这种数字必须满足从左到右各位数字呈非下降关系&#xff0c;如 123 123 123&#xff0c; 446 446 446。 现在大家决定玩一个游…

杂记阅读(三)

目录 校徽和校训 权杖 学术竞赛与荣誉 香港罗德学人 中国大陆罗德学者 富布赖特项目 海外 学友 本土发展 海外扩展 史匹爾財富管理調查 880年&#xff0c;悉尼大学获得了一笔可观的捐赠。富商和慈善家约翰亨利查雷斯在遗嘱中将他的大部分遗产赠予悉尼大学。经过身为…

JavaScript WebAPI 实战

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章为大家带来JavaScript WebAPI的使用&#xff0c;请各位过目~~ 目录 文章目录 一、什么是JavaScript WebAPI 1.1 什么是DOM 二、常用的DOM API 2.1 获取元素 2.2 什么是事件 2.2.1 …

Hive数据分层有哪些优点?具体每一层含义是什么?

为什么要分层? 作为一名数据的规划者&#xff0c;我们肯定希望自己的数据能够有秩序地流转&#xff0c;数据的整个生命周期能够清晰明确被设计者和使用者感知到。直观来讲就是如图这般层次清晰、依赖关系直观。 但是&#xff0c;大多数情况下&#xff0c;我们完成的数据体系却…

深度学习基础知识-误差反向传播+训练技巧(无代码仅用来理解)

参考书籍&#xff1a;&#xff08;找不到资源可以后台私信我&#xff09; 《深度学习入门&#xff1a;基于Python的理论与实现 (斋藤康毅)》 《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 神经网络…

Delphi日薄西山?不仅用户300万,还大佬无数,转身就风靡全球

主人公名叫David Vacanti&#xff0c;是Delphi的长期开发人员&#xff0c;已有接近30年以上的编程经验。 我之所以注意到他&#xff0c;一是因为Delphi属实一波回忆杀。 二是不可思议&#xff1a;他在1983年&#xff0c;便开启了自己的副业。 开了一家叫做“Vacanti Yacht D…

成功加冕!用友大易获评2023最佳招聘管理软件供应商

人力资源服务业旗帜性商业奖项2023金帜奖(HRFLAG AWARDS)颁奖典礼于近日隆重举行。经过3个月的评选&#xff0c;用友大易从615家人力资源服务机构中脱颖而出&#xff0c;最终荣获「2023最佳招聘管理软件供应商」奖项。 2023金帜奖(HRFLAG AWARDS)是人力资源服务行业旗帜性的商业…

STM32cubemx配置驱动DHT11模块

文章目录 前言一、DHT11模块介绍二、DHT11引脚连接及cubemx配置三、DHT11时序分析四、DHT11代码编写总结 前言 本篇文章将带大家学习使用DHT11湿温度模块&#xff0c;使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居&#xff0c;蔬菜大棚等项目当中适用范围…

SpringBoot+layUI实现表格的某一列数据刷新功能案例分享

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

mysql执行计划explain

mysql 执行计划 explain 介绍 mysql8.0为例&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/explain-output.html EXPLAIN为语句中使用的每个表返回一行信息 SELECT。它按照 MySQL 在处理语句时读取它们的顺序列出输出中的表。这意味着 MySQL 从第一个表中读取一行&…

四维轻云平台常见问题及解决方法

1、在地图中看不见加载的点云或倾斜摄影模型数据&#xff1f; 若点云或模型数据加载后&#xff0c;在地图中看不见&#xff0c;可能是地形的高度高于倾斜模型的高度&#xff0c;导致数据漂浮在空中或者在地形以下&#xff0c;可通过增加数据的移动值Y来调整点云或者模型数据的…

《Java并发编程实战》课程笔记(一)

并发领域的全景图 并发编程的三个核心问题 并发编程可以总结为三个核心问题&#xff1a;分工、同步、互斥。 分工指的是如何高效地拆解任务并分配给线程&#xff1b; Java SDK 并发包里的 Executor、Fork/Join、Future 本质上都是⼀种分工方法。除此之外&#xff0c;并发编程…

吉时利 Keithley 2700数据采集器技术参数

概述&#xff1a; 每个 2700 系列系统均将精密测量、开关和控件集于一个紧凑集成的机箱中&#xff0c;适用于机架安装或台式应用。虽然所有三个系统的核心功能和编程是相同的&#xff0c;但各个主机都具有独特的功能。例如&#xff0c;2701 型具有 10/100BaseTX 以太网接口&am…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月24日论文合集)

文章目录 一、检测相关(7篇)1.1 Learning Remote Sensing Object Detection with Single Point Supervision1.2 Online Open-set Semi-supervised Object Detection via Semi-supervised Outlier Filtering1.3 Generalizable Synthetic Image Detection via Language-guided Co…

代码随想录训练营Day51| 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结

目录 目录 学习目标 学习内容 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 学习目标 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结 学习内容 309.最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 - 力扣&#xff0…