wangfei 6 年前
父节点
当前提交
a1b7a57ba2
共有 4 个文件被更改,包括 273 次插入21 次删除
  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 查看文件

4
 	"spaceofcheng/services/controllers"
4
 	"spaceofcheng/services/controllers"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service/book"
6
 	"spaceofcheng/services/service/book"
7
+	"strings"
7
 )
8
 )
8
 
9
 
9
 // CaseController 信息
10
 // CaseController 信息
48
 		caseIDs = c.GetCaseIDs(cases)
49
 		caseIDs = c.GetCaseIDs(cases)
49
 	}
50
 	}
50
 	bookType := c.GetString("bookType")
51
 	bookType := c.GetString("bookType")
52
+	barcode := c.GetString("barcode")
51
 	page, _ := c.GetInt("page")
53
 	page, _ := c.GetInt("page")
52
 	pagesize, _ := c.GetInt("pagesize")
54
 	pagesize, _ := c.GetInt("pagesize")
53
 	name := c.GetString("name")
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
 	if err != nil {
57
 	if err != nil {
56
 		c.ResponseError(err)
58
 		c.ResponseError(err)
57
 	}
59
 	}
72
 	c.ResponseJSON(list)
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
 func (c *BookController) AddChangeRecord() {
91
 func (c *BookController) AddChangeRecord() {
77
 	change := model.TaInStockChange{}
92
 	change := model.TaInStockChange{}
80
 	}
95
 	}
81
 	user := c.Context.Get("user").(model.SysUser)
96
 	user := c.Context.Get("user").(model.SysUser)
82
 	change.ChangeUser = user.UserId
97
 	change.ChangeUser = user.UserId
98
+	change.ChangeUserName = user.RealName
83
 	err := c.serv.AddChangeRecord(change)
99
 	err := c.serv.AddChangeRecord(change)
84
 	if err != nil {
100
 	if err != nil {
85
 		c.ResponseError(err)
101
 		c.ResponseError(err)
87
 
103
 
88
 	c.ResponseJSON("添加成功")
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 查看文件

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
 	var book []model.TaBook
29
 	var book []model.TaBook
30
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
30
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
31
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
31
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
35
 	if name != "" {
35
 	if name != "" {
36
 		sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
36
 		sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
37
 	}
37
 	}
38
+	if barcode != "" {
39
+		sql += ` and barcode = '` + barcode + `'`
40
+	}
38
 	sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
41
 	sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
39
 	err := m.db.Sql(sql).Find(&book)
42
 	err := m.db.Sql(sql).Find(&book)
40
 	return book, err
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
 	var book []model.TaBook
47
 	var book []model.TaBook
45
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
48
 	sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
46
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
49
 	and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
47
 	if bookType != "" {
50
 	if bookType != "" {
48
 		sql += ` and book_type_id = '` + bookType + `'`
51
 		sql += ` and book_type_id = '` + bookType + `'`
49
 	}
52
 	}
53
+	if barcode != "" {
54
+		sql += ` and barcode = '` + barcode + `'`
55
+	}
50
 	if name != "" {
56
 	if name != "" {
51
 		sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
57
 		sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
52
 	}
58
 	}
88
 }
94
 }
89
 func (m *BookDAO) AddBookRecord(record model.TaBookBorrowRecord) (*model.TaBookBorrowRecord, error) {
95
 func (m *BookDAO) AddBookRecord(record model.TaBookBorrowRecord) (*model.TaBookBorrowRecord, error) {
90
 	record.BookBorrowRecordId = utils.GetGUID()
96
 	record.BookBorrowRecordId = utils.GetGUID()
97
+	record.CreateDate = time.Now()
91
 	_, err := m.db.Insert(record)
98
 	_, err := m.db.Insert(record)
92
 	return &record, err
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
 	var cols = []string{
102
 	var cols = []string{
96
 		"borrow_date",
103
 		"borrow_date",
97
 		"return_date",
104
 		"return_date",
99
 		"end_date",
106
 		"end_date",
100
 	}
107
 	}
101
 	_, err := m.db.Cols(cols...).Where("book_borrow_record_id = ?", record.BookBorrowRecordId).Update(record)
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
 func (m *BookDAO) UpdateInStockBook(book *model.TaBook) error {
111
 func (m *BookDAO) UpdateInStockBook(book *model.TaBook) error {
105
 	var cols = []string{
112
 	var cols = []string{
106
 		"in_stock",
113
 		"in_stock",
107
 		"left_num",
114
 		"left_num",
115
+		"borrow_num",
108
 	}
116
 	}
109
 	_, err := m.db.Cols(cols...).Where("book_id = ?", book.BookId).Update(book)
117
 	_, err := m.db.Cols(cols...).Where("book_id = ?", book.BookId).Update(book)
110
 	return err
118
 	return err
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 查看文件

5
 )
5
 )
6
 
6
 
7
 type TaInStockChange struct {
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 查看文件

2
 
2
 
3
 import (
3
 import (
4
 	"errors"
4
 	"errors"
5
+	"spaceofcheng/services/models"
5
 	"spaceofcheng/services/models/book"
6
 	"spaceofcheng/services/models/book"
7
+	"spaceofcheng/services/models/customer"
6
 	"spaceofcheng/services/models/model"
8
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/service"
9
 	"spaceofcheng/services/service"
8
 	"spaceofcheng/services/utils"
10
 	"spaceofcheng/services/utils"
11
+	"time"
9
 )
12
 )
10
 
13
 
11
 // BookServ 系统处理
14
 // BookServ 系统处理
12
 type BookServ struct {
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
 // NewBookServ 初始化
21
 // NewBookServ 初始化
18
 func NewBookServ(ctx *utils.Context) *BookServ {
22
 func NewBookServ(ctx *utils.Context) *BookServ {
19
 	return &BookServ{
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
 	}, nil
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
 	if pageSize == 0 {
49
 	if pageSize == 0 {
45
 		pageSize = service.PAGENUM
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
 	if err != nil {
53
 	if err != nil {
49
 		utils.LogError("获取图书列表失败: " + err.Error())
54
 		utils.LogError("获取图书列表失败: " + err.Error())
50
 		return nil, errors.New("获取图书列表失败")
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
 	if err != nil {
58
 	if err != nil {
54
 		utils.LogError("获取图书列表失败: " + err.Error())
59
 		utils.LogError("获取图书列表失败: " + err.Error())
55
 		return nil, errors.New("获取图书列表失败")
60
 		return nil, errors.New("获取图书列表失败")
143
 	bookAdd := change.InStockAfter - change.InStockBefore
148
 	bookAdd := change.InStockAfter - change.InStockBefore
144
 	book.InStock = book.InStock + bookAdd
149
 	book.InStock = book.InStock + bookAdd
145
 	book.LeftNum = change.InStockAfter
150
 	book.LeftNum = change.InStockAfter
151
+	change.InStockTotal = book.InStock
146
 	err = s.dao.AddChangeRecord(change)
152
 	err = s.dao.AddChangeRecord(change)
147
 	if err != nil {
153
 	if err != nil {
148
 		utils.LogError("库存盘点失败: " + err.Error())
154
 		utils.LogError("库存盘点失败: " + err.Error())
155
 	}
161
 	}
156
 	return nil
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
+}