ソースを参照

Merge branch 'dev' of http://git.ycjcjy.com/SpaceOfCheng/services into dev

胡轶钦 6 年 前
コミット
60c0fa336f
共有4 個のファイルを変更した87 個の追加8 個の削除を含む
  1. 11
    1
      controllers/book/book.go
  2. 25
    4
      models/book/book.go
  3. 1
    0
      routers/wechat.go
  4. 50
    3
      service/book/book.go

+ 11
- 1
controllers/book/book.go ファイルの表示

@@ -53,7 +53,8 @@ func (c *BookController) GetBookList() {
53 53
 	page, _ := c.GetInt("page")
54 54
 	pagesize, _ := c.GetInt("pagesize")
55 55
 	name := c.GetString("name")
56
-	list, err := c.serv.GetBookList(bookType, name, barcode, caseIDs, page, pagesize)
56
+	showzero := c.GetString("showzero")
57
+	list, err := c.serv.GetBookList(bookType, name, barcode, showzero, caseIDs, page, pagesize)
57 58
 	if err != nil {
58 59
 		c.ResponseError(err)
59 60
 	}
@@ -130,6 +131,15 @@ func (c *BookController) ReturnBook() {
130 131
 	c.ResponseJSON("归还成功")
131 132
 }
132 133
 
134
+// ReserveBook 图书预约
135
+func (c *BookController) ReserveBook() {
136
+	bookid := c.GetString(":bookid")
137
+	record, err := c.serv.ReserveBook(bookid)
138
+	if err != nil {
139
+		c.ResponseError(err)
140
+	}
141
+	c.ResponseJSON(record)
142
+}
133 143
 func (c *BookController) GetCustomerReturnList() {
134 144
 	customerInfo := c.GetString(":customerInfo")
135 145
 	caseIDs := c.GetString("caseid")

+ 25
- 4
models/book/book.go ファイルの表示

@@ -1,6 +1,7 @@
1 1
 package book
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/models"
5 6
 	"spaceofcheng/services/models/model"
6 7
 	"spaceofcheng/services/utils"
@@ -25,7 +26,7 @@ func NewBookDAO(ctx *utils.Context) *BookDAO {
25 26
 	}
26 27
 }
27 28
 
28
-func (m *BookDAO) GetBookList(bookType, name, barcode, caseid string, page, pageSize int) ([]model.TaBook, error) {
29
+func (m *BookDAO) GetBookList(bookType, name, barcode, showzero, caseid string, page, pageSize int) ([]model.TaBook, error) {
29 30
 	var book []model.TaBook
30 31
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
31 32
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
@@ -38,12 +39,15 @@ func (m *BookDAO) GetBookList(bookType, name, barcode, caseid string, page, page
38 39
 	if barcode != "" {
39 40
 		sql += ` and barcode = '` + barcode + `'`
40 41
 	}
42
+	if showzero == "0" {
43
+		sql += ` and left_num>0`
44
+	}
41 45
 	sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
42 46
 	err := m.db.Sql(sql).Find(&book)
43 47
 	return book, err
44 48
 
45 49
 }
46
-func (m *BookDAO) GetBookListCount(bookType, name, barcode, caseid string) (int, error) {
50
+func (m *BookDAO) GetBookListCount(bookType, name, showzero, barcode, caseid string) (int, error) {
47 51
 	var book []model.TaBook
48 52
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
49 53
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
@@ -56,6 +60,9 @@ func (m *BookDAO) GetBookListCount(bookType, name, barcode, caseid string) (int,
56 60
 	if name != "" {
57 61
 		sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
58 62
 	}
63
+	if showzero == "0" {
64
+		sql += ` and left_num>0`
65
+	}
59 66
 	sql += ` order by create_date desc`
60 67
 	err := m.db.Sql(sql).Find(&book)
61 68
 	return len(book), err
@@ -154,7 +161,7 @@ func (m *BookDAO) GetBookRecommendList(caseid string, page, pageSize int) ([]mod
154 161
 	var book []model.TaBook
155 162
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
156 163
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
157
-	and is_recommend = '` + strconv.Itoa(models.RECOMMEND_YES) + `'`
164
+	and is_recommend = '` + strconv.Itoa(models.RECOMMEND_YES) + `' and left_num>0`
158 165
 	sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
159 166
 	err := m.db.Sql(sql).Find(&book)
160 167
 	return book, err
@@ -247,13 +254,27 @@ func (m *BookDAO) ReserveBook(record model.TaBookBorrowRecord) (model.TaBookBorr
247 254
 // CheckUserReserveBook 判断用户书籍预约状态
248 255
 func (m *BookDAO) CheckUserReserveBook(customerid, bookid string) (bool, error) {
249 256
 	var records []model.TaBookBorrowRecord
250
-	err := m.db.Where("customer_id=?", customerid).And("book_id=?", bookid).And("status in ('" + models.BORROW_TYPE_RESERVE + "','" + models.BORROW_TYPE_BORROWED + "','" + models.BORROW_TYPE_LATE + "')").Find(&records)
257
+	err := m.db.Where("customer_id=?", customerid).And("book_id=?", bookid).And("borrow_status in ('" + models.BORROW_TYPE_RESERVE + "','" + models.BORROW_TYPE_BORROWED + "','" + models.BORROW_TYPE_LATE + "')").Find(&records)
251 258
 	if err != nil {
252 259
 		return false, err
253 260
 	}
254 261
 	return len(records) == 0, nil
255 262
 }
256 263
 
264
+// BookLeftNumDel 图书库存减少
265
+func (m *BookDAO) BookLeftNumDel(bookid string) error {
266
+	sql := `update ta_book set left_num = left_num - 1 where book_id=? and left_num > 0`
267
+	req, err := m.db.Exec(sql, bookid)
268
+	if err != nil {
269
+		return err
270
+	}
271
+	row, _ := req.RowsAffected()
272
+	if row == 0 {
273
+		return errors.New("预约失败,库存不足")
274
+	}
275
+	return nil
276
+}
277
+
257 278
 //
258 279
 func (m *BookDAO) CustomerReservedBook(bookId, customerId string) (*model.TaBookBorrowRecord, error) {
259 280
 	var book []model.TaBookBorrowRecord

+ 1
- 0
routers/wechat.go ファイルの表示

@@ -125,5 +125,6 @@ func getWechatRoutes(prefix string) beego.LinkNamespace {
125 125
 		beego.NSRouter("/booktype/:caseid", &booktype.BooktypeController{}, "get:GetList"),
126 126
 		beego.NSRouter("/book", &book.BookController{}, "get:GetBookList"),
127 127
 		beego.NSRouter("/customer/book", &book.BookController{}, "get:GetMineRecord"),
128
+		beego.NSRouter("/book/reserve/:bookid", &book.BookController{}, "post:ReserveBook"),
128 129
 	)
129 130
 }

+ 50
- 3
service/book/book.go ファイルの表示

@@ -45,16 +45,16 @@ func (s *BookServ) GetBookRecommendList(caseid string, page, pageSize int) (map[
45 45
 	}, nil
46 46
 }
47 47
 
48
-func (s *BookServ) GetBookList(bookType, name, barcode, caseid string, page, pageSize int) (map[string]interface{}, error) {
48
+func (s *BookServ) GetBookList(bookType, name, barcode, showzero, caseid string, page, pageSize int) (map[string]interface{}, error) {
49 49
 	if pageSize == 0 {
50 50
 		pageSize = service.PAGENUM
51 51
 	}
52
-	list, err := s.dao.GetBookList(bookType, name, barcode, caseid, page, pageSize)
52
+	list, err := s.dao.GetBookList(bookType, name, barcode, showzero, caseid, page, pageSize)
53 53
 	if err != nil {
54 54
 		utils.LogError("获取图书列表失败: " + err.Error())
55 55
 		return nil, errors.New("获取图书列表失败")
56 56
 	}
57
-	total, err := s.dao.GetBookListCount(bookType, name, barcode, caseid)
57
+	total, err := s.dao.GetBookListCount(bookType, name, showzero, barcode, caseid)
58 58
 	if err != nil {
59 59
 		utils.LogError("获取图书列表失败: " + err.Error())
60 60
 		return nil, errors.New("获取图书列表失败")
@@ -290,3 +290,50 @@ func (s *BookServ) GetCustomerReturnList(customerInfo, caseId string, page, page
290 290
 		"page":     page,
291 291
 	}, nil
292 292
 }
293
+
294
+// ReserveBook 图书预约
295
+func (s *BookServ) ReserveBook(bookid string) (*model.TaBookBorrowRecord, error) {
296
+	book, err := s.dao.GetBookById(bookid)
297
+	if err != nil {
298
+		utils.LogError("获取图书信息失败:", err.Error())
299
+		return nil, errors.New("获取图书信息失败")
300
+	}
301
+	if book == nil || book.BookId == "" {
302
+		return nil, errors.New("没有对应的图书信息")
303
+	}
304
+	if book.LeftNum < 1 {
305
+		return nil, errors.New("预约失败,库存不足")
306
+	}
307
+	customer := s.ctx.Get("customer").(model.TaCustomer)
308
+	if customer.Phone == "" {
309
+		return nil, errors.New("请先绑定您的手机号,再进行预约!")
310
+	}
311
+	isok, err := s.dao.CheckUserReserveBook(customer.CustomerId, bookid)
312
+	if err != nil {
313
+		utils.LogError("判断用户是否已借阅此图书失败:", err.Error())
314
+		return nil, errors.New("判断失败,请刷新后重试!")
315
+	}
316
+	if !isok {
317
+		return nil, errors.New("您已预约或借阅此图书!")
318
+	}
319
+	var record = model.TaBookBorrowRecord{
320
+		BookId:        book.BookId,
321
+		CustomerId:    customer.CustomerId,
322
+		CustomerName:  customer.Name,
323
+		CustomerPhone: customer.Phone,
324
+		OrgId:         book.OrgId,
325
+		CaseId:        book.CaseId,
326
+	}
327
+	info, err := s.dao.ReserveBook(record)
328
+	if err != nil {
329
+		utils.LogError("预约失败:", err.Error())
330
+		return nil, errors.New("预约失败")
331
+	}
332
+	// 减库存
333
+	err = s.dao.BookLeftNumDel(book.BookId)
334
+	if err != nil {
335
+		utils.LogError("减库存失败:", err.Error())
336
+		return nil, err
337
+	}
338
+	return &info, err
339
+}