图书馆接口设计

时间:2022-05-16 01:51:46

任务需求:实现图书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)收藏:添加收藏,删除收藏,收藏列表

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

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

数据库相关结构:

图书馆接口设计

 

转载请附带网址:http://www.cnblogs.com/handsomecui

主要功能代码演示:

/**
* 拼装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<String, Object> 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<String, Object> 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<Map<String, Object>> putBookByIds(String bookIds) {
List
<Map<String,Object>> list = new ArrayList<Map<String, Object>>();
if(bookIds != null){
String[] ids
= bookIds.split(",");
for(String id : ids){
Book book
= bookService.selectByPrimaryKey(Long.valueOf(id));
Map
<String,Object> BOOK = new HashMap<String, Object>();
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;
}