wangfei 6 gadus atpakaļ
vecāks
revīzija
a1b7a57ba2
4 mainītis faili ar 273 papildinājumiem un 21 dzēšanām
  1. 43
    1
      controllers/book/book.go
  2. 92
    4
      models/book/book.go
  3. 11
    9
      models/model/ta_in_stock_change.go
  4. 127
    7
      service/book/book.go

+ 43
- 1
controllers/book/book.go Parādīt failu

@@ -4,6 +4,7 @@ import (
4 4
 	"spaceofcheng/services/controllers"
5 5
 	"spaceofcheng/services/models/model"
6 6
 	"spaceofcheng/services/service/book"
7
+	"strings"
7 8
 )
8 9
 
9 10
 // CaseController 信息
@@ -48,10 +49,11 @@ func (c *BookController) GetBookList() {
48 49
 		caseIDs = c.GetCaseIDs(cases)
49 50
 	}
50 51
 	bookType := c.GetString("bookType")
52
+	barcode := c.GetString("barcode")
51 53
 	page, _ := c.GetInt("page")
52 54
 	pagesize, _ := c.GetInt("pagesize")
53 55
 	name := c.GetString("name")
54
-	list, err := c.serv.GetBookList(bookType, name, caseIDs, page, pagesize)
56
+	list, err := c.serv.GetBookList(bookType, name, barcode, caseIDs, page, pagesize)
55 57
 	if err != nil {
56 58
 		c.ResponseError(err)
57 59
 	}
@@ -72,6 +74,19 @@ func (c *BookController) GetMineRecord() {
72 74
 	c.ResponseJSON(list)
73 75
 }
74 76
 
77
+func (c *BookController) GetInStockChangeByBookId() {
78
+	page, _ := c.GetInt("page")
79
+	pagesize, _ := c.GetInt("pagesize")
80
+	bookId := c.GetString(":bookId")
81
+	list, err := c.serv.GetInStockChangeByBookId(bookId, page, pagesize)
82
+	if err != nil {
83
+		c.ResponseError(err)
84
+	}
85
+
86
+	c.ResponseJSON(list)
87
+
88
+}
89
+
75 90
 // 新增库存盘点
76 91
 func (c *BookController) AddChangeRecord() {
77 92
 	change := model.TaInStockChange{}
@@ -80,6 +95,7 @@ func (c *BookController) AddChangeRecord() {
80 95
 	}
81 96
 	user := c.Context.Get("user").(model.SysUser)
82 97
 	change.ChangeUser = user.UserId
98
+	change.ChangeUserName = user.RealName
83 99
 	err := c.serv.AddChangeRecord(change)
84 100
 	if err != nil {
85 101
 		c.ResponseError(err)
@@ -87,3 +103,29 @@ func (c *BookController) AddChangeRecord() {
87 103
 
88 104
 	c.ResponseJSON("添加成功")
89 105
 }
106
+func (c *BookController) BorrowBook() {
107
+	bookIds := c.GetString(":bookIds")
108
+	customerId := c.GetString(":customerId")
109
+	cases := c.Context.Get("cases").([]model.SysUserCase)
110
+	caseIDs := c.GetCaseIDs(cases)
111
+	org := c.Context.Get("org").(model.SysOrg)
112
+	bookId := strings.Split(bookIds, ",")
113
+	for i := 0; i < len(bookId); i++ {
114
+		_, err := c.serv.BorrowBook(bookId[i], customerId, caseIDs, org.OrgId)
115
+		if err != nil {
116
+			c.ResponseError(err)
117
+		}
118
+	}
119
+	c.ResponseJSON("借阅成功")
120
+}
121
+func (c *BookController) ReturnBook() {
122
+	bookIds := c.GetString(":borrowIds")
123
+	bookId := strings.Split(bookIds, ",")
124
+	for i := 0; i < len(bookId); i++ {
125
+		err := c.serv.ReturnBook(bookId[i])
126
+		if err != nil {
127
+			c.ResponseError(err)
128
+		}
129
+	}
130
+	c.ResponseJSON("归还成功")
131
+}

+ 92
- 4
models/book/book.go Parādīt failu

@@ -25,7 +25,7 @@ func NewBookDAO(ctx *utils.Context) *BookDAO {
25 25
 	}
26 26
 }
27 27
 
28
-func (m *BookDAO) GetBookList(bookType, name, caseid string, page, pageSize int) ([]model.TaBook, error) {
28
+func (m *BookDAO) GetBookList(bookType, name, barcode, caseid string, page, pageSize int) ([]model.TaBook, error) {
29 29
 	var book []model.TaBook
30 30
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
31 31
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
@@ -35,18 +35,24 @@ func (m *BookDAO) GetBookList(bookType, name, caseid string, page, pageSize int)
35 35
 	if name != "" {
36 36
 		sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
37 37
 	}
38
+	if barcode != "" {
39
+		sql += ` and barcode = '` + barcode + `'`
40
+	}
38 41
 	sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
39 42
 	err := m.db.Sql(sql).Find(&book)
40 43
 	return book, err
41 44
 
42 45
 }
43
-func (m *BookDAO) GetBookListCount(bookType, name, caseid string) (int, error) {
46
+func (m *BookDAO) GetBookListCount(bookType, name, barcode, caseid string) (int, error) {
44 47
 	var book []model.TaBook
45 48
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
46 49
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
47 50
 	if bookType != "" {
48 51
 		sql += ` and book_type_id = '` + bookType + `'`
49 52
 	}
53
+	if barcode != "" {
54
+		sql += ` and barcode = '` + barcode + `'`
55
+	}
50 56
 	if name != "" {
51 57
 		sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
52 58
 	}
@@ -88,10 +94,11 @@ func (m *BookDAO) EditBook(book model.TaBook) error {
88 94
 }
89 95
 func (m *BookDAO) AddBookRecord(record model.TaBookBorrowRecord) (*model.TaBookBorrowRecord, error) {
90 96
 	record.BookBorrowRecordId = utils.GetGUID()
97
+	record.CreateDate = time.Now()
91 98
 	_, err := m.db.Insert(record)
92 99
 	return &record, err
93 100
 }
94
-func (m *BookDAO) UpdateBookRecord(record model.TaBookBorrowRecord) error {
101
+func (m *BookDAO) UpdateBookRecord(record *model.TaBookBorrowRecord) (*model.TaBookBorrowRecord, error) {
95 102
 	var cols = []string{
96 103
 		"borrow_date",
97 104
 		"return_date",
@@ -99,12 +106,13 @@ func (m *BookDAO) UpdateBookRecord(record model.TaBookBorrowRecord) error {
99 106
 		"end_date",
100 107
 	}
101 108
 	_, err := m.db.Cols(cols...).Where("book_borrow_record_id = ?", record.BookBorrowRecordId).Update(record)
102
-	return err
109
+	return record, err
103 110
 }
104 111
 func (m *BookDAO) UpdateInStockBook(book *model.TaBook) error {
105 112
 	var cols = []string{
106 113
 		"in_stock",
107 114
 		"left_num",
115
+		"borrow_num",
108 116
 	}
109 117
 	_, err := m.db.Cols(cols...).Where("book_id = ?", book.BookId).Update(book)
110 118
 	return err
@@ -252,3 +260,83 @@ func (m *BookDAO) CheckUserReserveBook(customerid, bookid string) (bool, error)
252 260
 }
253 261
 
254 262
 //
263
+func (m *BookDAO) CustomerReservedBook(bookId, customerId string) (*model.TaBookBorrowRecord, error) {
264
+	var book []model.TaBookBorrowRecord
265
+	sql := `SELECT
266
+	a.* 
267
+FROM
268
+	ta_book_borrow_record a
269
+WHERE
270
+	a.borrow_status = '` + models.BORROW_TYPE_RESERVE + `' 
271
+	AND a.customer_id = '` + customerId + `' 
272
+	AND a.book_id = '` + bookId + `'`
273
+	err := m.db.Sql(sql).Find(&book)
274
+	if len(book) <= 0 {
275
+		return nil, err
276
+	}
277
+	return &book[0], err
278
+}
279
+
280
+func (m *BookDAO) GetBorrowById(borrowId string) (*model.TaBookBorrowRecord, error) {
281
+	var book []model.TaBookBorrowRecord
282
+	sql := `SELECT
283
+	a.* 
284
+FROM
285
+	ta_book_borrow_record a
286
+WHERE
287
+	a.book_borrow_record_id = '` + borrowId + `'`
288
+	err := m.db.Sql(sql).Find(&book)
289
+	if len(book) <= 0 {
290
+		return nil, err
291
+	}
292
+	return &book[0], err
293
+}
294
+
295
+type ReturnList struct {
296
+	model.TaBookBorrowRecord `xorm:"extends"`
297
+	BookName                 string
298
+	BookBarcode              string
299
+	BookTypeName             string
300
+	LateDays                 string
301
+}
302
+
303
+func (m *BookDAO) GetCustomerReturnList(customerInfo, caseId string, page, pageSize int) ([]ReturnList, error) {
304
+	var record []ReturnList
305
+	sql := `SELECT
306
+	a.*,
307
+	b.book_name,
308
+	b.book_barcode,
309
+	c.book_type_name 
310
+FROM
311
+	ta_book_borrow_record a
312
+	INNER JOIN ta_book b ON a.book_id = b.book_id
313
+	INNER JOIN ta_book_type c ON b.book_type_id = c.book_type_id
314
+	INNER JOIN ta_customer d ON a.customer_id = d.customer_id 
315
+WHERE
316
+	a.borrow_status IN ( '` + models.BORROW_TYPE_BORROWED + `', '` + models.BORROW_TYPE_LATE + `' ) 
317
+	AND ( a.customer_phone = '` + customerInfo + `' OR d.barcode = '` + customerInfo + `' )
318
+	and a.case_id in('` + strings.Replace(caseId, ",", "','", -1) + `')`
319
+	sql += ` order by a.borrow_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
320
+	err := m.db.Sql(sql).Find(&record)
321
+	return record, err
322
+}
323
+
324
+func (m *BookDAO) GetCustomerReturnListCount(customerInfo, caseId string) (int, error) {
325
+	var record []ReturnList
326
+	sql := `SELECT
327
+	a.*,
328
+	b.book_name,
329
+	b.book_barcode,
330
+	c.book_type_name 
331
+FROM
332
+	ta_book_borrow_record a
333
+	INNER JOIN ta_book b ON a.book_id = b.book_id
334
+	INNER JOIN ta_book_type c ON b.book_type_id = c.book_type_id
335
+	INNER JOIN ta_customer d ON a.customer_id = d.customer_id 
336
+WHERE
337
+	a.borrow_status IN ( '` + models.BORROW_TYPE_BORROWED + `', '` + models.BORROW_TYPE_LATE + `' ) 
338
+	AND ( a.customer_phone = '` + customerInfo + `' OR d.barcode = '` + customerInfo + `' )
339
+	and a.case_id in('` + strings.Replace(caseId, ",", "','", -1) + `')`
340
+	err := m.db.Sql(sql).Find(&record)
341
+	return len(record), err
342
+}

+ 11
- 9
models/model/ta_in_stock_change.go Parādīt failu

@@ -5,13 +5,15 @@ import (
5 5
 )
6 6
 
7 7
 type TaInStockChange struct {
8
-	RecordId      string    `xorm:"not null pk VARCHAR(64)"`
9
-	BookId        string    `xorm:"VARCHAR(64)"`
10
-	InStockBefore int       `xorm:"INT(11)"`
11
-	InStockAfter  int       `xorm:"INT(11)"`
12
-	ChangeReason  string    `xorm:"TEXT"`
13
-	ChangeDate    time.Time `xorm:"DATETIME"`
14
-	ChangeUser    string    `xorm:"VARCHAR(64)"`
15
-	CaseId        string    `xorm:"VARCHAR(64)"`
16
-	OrgId         string    `xorm:"VARCHAR(64)"`
8
+	RecordId       string    `xorm:"not null pk VARCHAR(64)"`
9
+	BookId         string    `xorm:"VARCHAR(64)"`
10
+	InStockBefore  int       `xorm:"INT(11)"`
11
+	InStockAfter   int       `xorm:"INT(11)"`
12
+	InStockTotal   int       `xorm:"INT(11)"`
13
+	ChangeReason   string    `xorm:"TEXT"`
14
+	ChangeDate     time.Time `xorm:"DATETIME"`
15
+	ChangeUser     string    `xorm:"VARCHAR(64)"`
16
+	ChangeUserName string    `xorm:"VARCHAR(64)"`
17
+	CaseId         string    `xorm:"VARCHAR(64)"`
18
+	OrgId          string    `xorm:"VARCHAR(64)"`
17 19
 }

+ 127
- 7
service/book/book.go Parādīt failu

@@ -2,23 +2,28 @@ package book
2 2
 
3 3
 import (
4 4
 	"errors"
5
+	"spaceofcheng/services/models"
5 6
 	"spaceofcheng/services/models/book"
7
+	"spaceofcheng/services/models/customer"
6 8
 	"spaceofcheng/services/models/model"
7 9
 	"spaceofcheng/services/service"
8 10
 	"spaceofcheng/services/utils"
11
+	"time"
9 12
 )
10 13
 
11 14
 // BookServ 系统处理
12 15
 type BookServ struct {
13
-	ctx *utils.Context
14
-	dao *book.BookDAO
16
+	ctx  *utils.Context
17
+	dao  *book.BookDAO
18
+	cdao *customer.CustomerDAO
15 19
 }
16 20
 
17 21
 // NewBookServ 初始化
18 22
 func NewBookServ(ctx *utils.Context) *BookServ {
19 23
 	return &BookServ{
20
-		ctx: ctx,
21
-		dao: book.NewBookDAO(ctx),
24
+		ctx:  ctx,
25
+		dao:  book.NewBookDAO(ctx),
26
+		cdao: customer.NewCustomerDAO(ctx),
22 27
 	}
23 28
 }
24 29
 
@@ -40,16 +45,16 @@ func (s *BookServ) GetBookRecommendList(caseid string, page, pageSize int) (map[
40 45
 	}, nil
41 46
 }
42 47
 
43
-func (s *BookServ) GetBookList(bookType, name, caseid string, page, pageSize int) (map[string]interface{}, error) {
48
+func (s *BookServ) GetBookList(bookType, name, barcode, caseid string, page, pageSize int) (map[string]interface{}, error) {
44 49
 	if pageSize == 0 {
45 50
 		pageSize = service.PAGENUM
46 51
 	}
47
-	list, err := s.dao.GetBookList(bookType, name, caseid, page, pageSize)
52
+	list, err := s.dao.GetBookList(bookType, name, barcode, caseid, page, pageSize)
48 53
 	if err != nil {
49 54
 		utils.LogError("获取图书列表失败: " + err.Error())
50 55
 		return nil, errors.New("获取图书列表失败")
51 56
 	}
52
-	total, err := s.dao.GetBookListCount(bookType, name, caseid)
57
+	total, err := s.dao.GetBookListCount(bookType, name, barcode, caseid)
53 58
 	if err != nil {
54 59
 		utils.LogError("获取图书列表失败: " + err.Error())
55 60
 		return nil, errors.New("获取图书列表失败")
@@ -143,6 +148,7 @@ func (s *BookServ) AddChangeRecord(change model.TaInStockChange) error {
143 148
 	bookAdd := change.InStockAfter - change.InStockBefore
144 149
 	book.InStock = book.InStock + bookAdd
145 150
 	book.LeftNum = change.InStockAfter
151
+	change.InStockTotal = book.InStock
146 152
 	err = s.dao.AddChangeRecord(change)
147 153
 	if err != nil {
148 154
 		utils.LogError("库存盘点失败: " + err.Error())
@@ -155,3 +161,117 @@ func (s *BookServ) AddChangeRecord(change model.TaInStockChange) error {
155 161
 	}
156 162
 	return nil
157 163
 }
164
+
165
+func (s *BookServ) BorrowBook(bookId, customerId, caseId, orgId string) (*model.TaBookBorrowRecord, error) {
166
+	reserveRecord, err := s.dao.CustomerReservedBook(bookId, customerId)
167
+	if err != nil {
168
+		utils.LogError("借阅失败: " + err.Error())
169
+		return nil, errors.New("借阅失败")
170
+	}
171
+	dd, _ := time.ParseDuration("168h")
172
+	book, err := s.dao.GetBookById(bookId)
173
+	if err != nil {
174
+		utils.LogError("借阅失败: " + err.Error())
175
+		return nil, errors.New("借阅失败")
176
+	}
177
+	if reserveRecord == nil {
178
+		customer, err := s.cdao.GetCustomerByID(customerId)
179
+		if err != nil {
180
+			utils.LogError("借阅失败: " + err.Error())
181
+			return nil, errors.New("借阅失败")
182
+		}
183
+		var borrowRecord = model.TaBookBorrowRecord{
184
+			BookId:        bookId,
185
+			BorrowStatus:  models.BORROW_TYPE_BORROWED,
186
+			CustomerId:    customerId,
187
+			CustomerName:  customer.Name,
188
+			CustomerPhone: customer.Phone,
189
+			BorrowDate:    time.Now(),
190
+			EndDate:       time.Now().Add(dd),
191
+			CaseId:        caseId,
192
+			OrgId:         orgId,
193
+		}
194
+		newBorrow, err := s.dao.AddBookRecord(borrowRecord)
195
+		if err != nil {
196
+			utils.LogError("借阅失败: " + err.Error())
197
+			return nil, errors.New("借阅失败")
198
+		}
199
+		book.BorrowNum = book.BorrowNum + 1
200
+		book.LeftNum = book.LeftNum - 1
201
+		err = s.dao.UpdateInStockBook(book)
202
+		if err != nil {
203
+			utils.LogError("借阅失败: " + err.Error())
204
+			return nil, errors.New("借阅失败")
205
+		}
206
+		return newBorrow, nil
207
+	}
208
+	reserveRecord.BorrowDate = time.Now()
209
+	reserveRecord.BorrowStatus = models.BORROW_TYPE_BORROWED
210
+	reserveRecord.EndDate = time.Now().Add(dd)
211
+	newBorrow, err := s.dao.UpdateBookRecord(reserveRecord)
212
+	if err != nil {
213
+		utils.LogError("借阅失败: " + err.Error())
214
+		return nil, errors.New("借阅失败")
215
+	}
216
+	book.BorrowNum = book.BorrowNum + 1
217
+	err = s.dao.UpdateInStockBook(book)
218
+	if err != nil {
219
+		utils.LogError("借阅失败: " + err.Error())
220
+		return nil, errors.New("借阅失败")
221
+	}
222
+	return newBorrow, nil
223
+
224
+}
225
+
226
+func (s *BookServ) ReturnBook(borrowId string) error {
227
+	record, err := s.dao.GetBorrowById(borrowId)
228
+	if err != nil {
229
+		utils.LogError("归还失败: " + err.Error())
230
+		return errors.New("归还失败")
231
+	}
232
+	book, err := s.dao.GetBookById(record.BookId)
233
+	if err != nil {
234
+		utils.LogError("归还失败: " + err.Error())
235
+		return errors.New("归还失败")
236
+	}
237
+	if record == nil {
238
+		return errors.New("不存在的借阅信息")
239
+	}
240
+	record.BorrowStatus = models.BORROW_TYPE_RETURN
241
+	record.ReturnDate = time.Now()
242
+	_, err = s.dao.UpdateBookRecord(record)
243
+	if err != nil {
244
+		utils.LogError("归还失败: " + err.Error())
245
+		return errors.New("归还失败")
246
+	}
247
+	book.BorrowNum = book.BorrowNum - 1
248
+	book.LeftNum = book.LeftNum + 1
249
+	err = s.dao.UpdateInStockBook(book)
250
+	if err != nil {
251
+		utils.LogError("归还失败: " + err.Error())
252
+		return errors.New("归还失败")
253
+	}
254
+	return nil
255
+}
256
+
257
+func (s *BookServ) GetCustomerReturnList(customerInfo, caseId string, page, pageSize int) (map[string]interface{}, error) {
258
+	if pageSize == 0 {
259
+		pageSize = service.PAGENUM
260
+	}
261
+	list, err := s.dao.GetCustomerReturnList(customerInfo, caseId, page, pageSize)
262
+	if err != nil {
263
+		utils.LogError("获取库存盘点列表失败: " + err.Error())
264
+		return nil, errors.New("获取库存盘点列表失败")
265
+	}
266
+	total, err := s.dao.GetCustomerReturnListCount(customerInfo, caseId)
267
+	if err != nil {
268
+		utils.LogError("获取库存盘点列表失败: " + err.Error())
269
+		return nil, errors.New("获取库存盘点列表失败")
270
+	}
271
+	return map[string]interface{}{
272
+		"list":     list,
273
+		"pageSize": pageSize,
274
+		"pagenum":  total,
275
+		"page":     page,
276
+	}, nil
277
+}