博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图书馆接口设计
阅读量:6330 次
发布时间:2019-06-22

本文共 4828 字,大约阅读时间需要 16 分钟。

任务需求:实现图书1.预定2.下单3.准备4.借书5.还书6.收藏几个相关功能接口;

一。需要的几个实体:

1.图书:本数据库中没有图书,每当预定或者收藏以及借书的时候,从数据库中看是否有,没有的话就往数据库中添加一本书。

2.借书卡:借书卡里面主要有userid,还有自身主键id,数据是从一卡通添加时添加(主要userID以及cardid)预定收藏以及其他的时候是通过userid获取的借书卡

3.订单:订单是下单后也就是提交预定时生成的订单。

4.预定:相当于购物车,在提交预定的时候购物车状态设为失效

5.借书:维护当前正在出借尚未归还的书,主要是一个cardID一个bookID

6.还书:当还书时,删除借书表对应信息,还书表中插入对应字段

没有用收藏表,直接把收藏的书id拼串到借书卡表里了

二。具体实现

(1)预定:分为1.添加预定。2.删除预定。3.预定列表。

添加预定:初始化购物车状态生效,书籍信息拼装id串放入购物车表也就是预定表中,可重复,考虑到借多本同一样书情况

预定列表:直接将书串查到对应信息拼装成接口需要的信息,传出;

(2)下单:就是提交预定,具体作用:生成订单,插入订单表,失效购物车。判断订单书数目与已借书数量和是否大于5

(3)准备:准备书的过程,管理员操作,当订单所有书籍都准备状态改为已处理,有的书籍可能馆藏没有(未准备好),未处理状态的订单也可提交借书,只不过没有准备好的书籍不能出借,但是订单状态改为已借出。具体策略:书本id前加标识位,想了想为方便用0。

(4)借书:两种状态,一种提交订单号借书,另外一种状态管理员直接提交书籍信息借书,订单要判断id有标识位的出借,没有的不借。每个借书卡最多只能借5本,需要效验。

(5)还书:从借书表移除,还书表添加。

(6)收藏:添加收藏,删除收藏,收藏列表

添加收藏:注意判断重复添加。

注:模糊查询均查最新一条数据。

数据库相关结构:

 

转载请附带网址:

主要功能代码演示:

/**     * 拼装id去重     * @param bookIds     * @param s     * @return     */    private String handleBookIds(String bookIds, String s) {        if(bookIds == null || "".equals(bookIds)){            bookIds = s;        }else{            String[] needAdds = s.split(",");            String[] bs = bookIds.split(",");            for(int i = 0; i < needAdds.length; i++){                boolean flag = true;                for(int j = 0; j < bs.length; j++){                    if(needAdds[i].equals(bs[j])){                        flag = false;                        break;                    }                }                if(flag){                    bookIds += needAdds[i]+",";                }            }        }        return bookIds;    }        /**     * 获取借书卡id     * @return     */    private String getCardId() {        Card card = new Card();        String user_ID = this.user.getUserId();        card.setUserId(user_ID);        Card card2 = cardService.selectBySelective(card);        if(card2 == null){            return null;        }        else{            return card2.getId();        }    }        /**     * 拼装Book为book对象     * @param bookMap     * @return     */    private Book getBookObject(Map
bookMap) { String title = (String)bookMap.get("title"); String author = (String)bookMap.get("author"); String number = (String)bookMap.get("number"); String hold = (String)bookMap.get("hold"); Book book = new Book(); book.setAuther(author); book.setTitle(title); book.setNumber(number); book.setHold(hold); Book book2 = bookService.selectBySelective(book); return book2; } /** * 处理图书馆是否有这本书 * @param bookMap */ private void handleIsHaveBook(Map
bookMap) { String title = (String)bookMap.get("title"); String author = (String)bookMap.get("author"); String number = (String)bookMap.get("number"); String hold = (String)bookMap.get("hold"); Book book = new Book(); book.setAuther(author); book.setTitle(title); book.setNumber(number); book.setHold(hold); Book book2 = bookService.selectBySelective(book); if(book2 != null){
//有书 book2.setHold(hold); bookService.updateByPrimaryKey(book2); }else{
//没 bookService.insert(book); } } /** * 通过借书卡号获取预定信息 * @param cardId * @return */ private Reserve getReservebyCardId(String cardId) { Reserve reserve = new Reserve(); reserve.setCardId(cardId); Reserve reserve2 = reserveService.selectBySelective(reserve); return reserve2; } /** * 通过id封装Book * @param bookIds * @return */ private List
> putBookByIds(String bookIds) { List
> list = new ArrayList
>(); if(bookIds != null){ String[] ids = bookIds.split(","); for(String id : ids){ Book book = bookService.selectByPrimaryKey(Long.valueOf(id)); Map
BOOK = new HashMap
(); BOOK.put("title", book.getTitle()); BOOK.put("author", book.getAuther()); BOOK.put("number", book.getNumber()); BOOK.put("hold", book.getHold()); list.add(BOOK); } } return list; } /** * 添加标识位,判断是否全部准备 * @param order * @param bookId * @return 未准备书数量 */ private int addFlagToBookIdsAndJudgeIsFinish(Order order, Long bookId) { String bookIds = order.getBookIds(); String[] split = bookIds.split(","); String newBookIds = ""; int num = 0; boolean isFinish = true; if(split != null){ boolean flag = false; for(String e : split){ if(e.length() <= 1 || e.charAt(0) != '0'){ num++; isFinish = false; } String bookid = e; if(!flag&&(e.length() <= 1 || e.charAt(0) != '0')){ Long bid = Long.valueOf(e); if(bid == bookId){ bookid = "0"+bookid; flag = true; } } newBookIds += bookid+","; } order.setBookIds(newBookIds); } if(isFinish){ order.setType("1"); } orderService.updateByPrimaryKeyWithBLOBs(order); return num; }

 

你可能感兴趣的文章
UOJ#179. 线性规划(线性规划)
查看>>
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
查看>>
Isolation Forest原理总结
查看>>
windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
redis 安装
查看>>
SQL some any all
查看>>
电子书下载:Programming Windows Identity Foundation
查看>>
有理想的程序员必须知道的15件事
查看>>
用于测试的字符串
查看>>
财付通和支付宝资料收集
查看>>
PHPCMS V9数据库表结构分析
查看>>
『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
查看>>
理解 IEnumerable 与 IEnumerator
查看>>
NHibernate 2.0 Beta 1 Released和一些工具
查看>>
【每天一个Linux命令】12. Linux中which命令的用法
查看>>
软件接口数据一致性机制
查看>>
微服务架构介绍和RPC框架对比
查看>>
Debian下使用OpenLDAP 管理端
查看>>
泛型排序器TComparer
查看>>