浏览代码

update instock

胡轶钦 6 年前
父节点
当前提交
6f708c79cd
共有 4 个文件被更改,包括 275 次插入21 次删除
  1. 43
    1
      controllers/book/book.go
  2. 94
    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
 	}
71
 	c.ResponseJSON(list)
73
 	c.ResponseJSON(list)
72
 }
74
 }
73
 
75
 
76
+func (c *BookController) GetInStockChangeByBookId() {
77
+	page, _ := c.GetInt("page")
78
+	pagesize, _ := c.GetInt("pagesize")
79
+	bookId := c.GetString(":bookId")
80
+	list, err := c.serv.GetInStockChangeByBookId(bookId, page, pagesize)
81
+	if err != nil {
82
+		c.ResponseError(err)
83
+	}
84
+
85
+	c.ResponseJSON(list)
86
+
87
+}
88
+
74
 // 新增库存盘点
89
 // 新增库存盘点
75
 func (c *BookController) AddChangeRecord() {
90
 func (c *BookController) AddChangeRecord() {
76
 	change := model.TaInStockChange{}
91
 	change := model.TaInStockChange{}
79
 	}
94
 	}
80
 	user := c.Context.Get("user").(model.SysUser)
95
 	user := c.Context.Get("user").(model.SysUser)
81
 	change.ChangeUser = user.UserId
96
 	change.ChangeUser = user.UserId
97
+	change.ChangeUserName = user.RealName
82
 	err := c.serv.AddChangeRecord(change)
98
 	err := c.serv.AddChangeRecord(change)
83
 	if err != nil {
99
 	if err != nil {
84
 		c.ResponseError(err)
100
 		c.ResponseError(err)
86
 
102
 
87
 	c.ResponseJSON("添加成功")
103
 	c.ResponseJSON("添加成功")
88
 }
104
 }
105
+func (c *BookController) BorrowBook() {
106
+	bookIds := c.GetString(":bookIds")
107
+	customerId := c.GetString(":customerId")
108
+	cases := c.Context.Get("cases").([]model.SysUserCase)
109
+	caseIDs := c.GetCaseIDs(cases)
110
+	org := c.Context.Get("org").(model.SysOrg)
111
+	bookId := strings.Split(bookIds, ",")
112
+	for i := 0; i < len(bookId); i++ {
113
+		_, err := c.serv.BorrowBook(bookId[i], customerId, caseIDs, org.OrgId)
114
+		if err != nil {
115
+			c.ResponseError(err)
116
+		}
117
+	}
118
+	c.ResponseJSON("借阅成功")
119
+}
120
+func (c *BookController) ReturnBook() {
121
+	bookIds := c.GetString(":borrowIds")
122
+	bookId := strings.Split(bookIds, ",")
123
+	for i := 0; i < len(bookId); i++ {
124
+		err := c.serv.ReturnBook(bookId[i])
125
+		if err != nil {
126
+			c.ResponseError(err)
127
+		}
128
+	}
129
+	c.ResponseJSON("归还成功")
130
+}

+ 94
- 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
219
 	err := m.db.Where("customer_id=?", customerid).Find(&records)
227
 	err := m.db.Where("customer_id=?", customerid).Find(&records)
220
 	return len(records), err
228
 	return len(records), err
221
 }
229
 }
230
+
231
+//
232
+func (m *BookDAO) CustomerReservedBook(bookId, customerId string) (*model.TaBookBorrowRecord, error) {
233
+	var book []model.TaBookBorrowRecord
234
+	sql := `SELECT
235
+	a.* 
236
+FROM
237
+	ta_book_borrow_record a
238
+WHERE
239
+	a.borrow_status = '` + models.BORROW_TYPE_RESERVE + `' 
240
+	AND a.customer_id = '` + customerId + `' 
241
+	AND a.book_id = '` + bookId + `'`
242
+	err := m.db.Sql(sql).Find(&book)
243
+	if len(book) <= 0 {
244
+		return nil, err
245
+	}
246
+	return &book[0], err
247
+}
248
+
249
+func (m *BookDAO) GetBorrowById(borrowId string) (*model.TaBookBorrowRecord, error) {
250
+	var book []model.TaBookBorrowRecord
251
+	sql := `SELECT
252
+	a.* 
253
+FROM
254
+	ta_book_borrow_record a
255
+WHERE
256
+	a.book_borrow_record_id = '` + borrowId + `'`
257
+	err := m.db.Sql(sql).Find(&book)
258
+	if len(book) <= 0 {
259
+		return nil, err
260
+	}
261
+	return &book[0], err
262
+}
263
+
264
+type ReturnList struct {
265
+	model.TaBookBorrowRecord `xorm:"extends"`
266
+	BookName                 string
267
+	BookBarcode              string
268
+	BookTypeName             string
269
+	LateDays                 string
270
+}
271
+
272
+func (m *BookDAO) GetCustomerReturnList(customerInfo, caseId string, page, pageSize int) ([]ReturnList, error) {
273
+	var record []ReturnList
274
+	sql := `SELECT
275
+	a.*,
276
+	b.book_name,
277
+	b.book_barcode,
278
+	c.book_type_name 
279
+FROM
280
+	ta_book_borrow_record a
281
+	INNER JOIN ta_book b ON a.book_id = b.book_id
282
+	INNER JOIN ta_book_type c ON b.book_type_id = c.book_type_id
283
+	INNER JOIN ta_customer d ON a.customer_id = d.customer_id 
284
+WHERE
285
+	a.borrow_status IN ( '` + models.BORROW_TYPE_BORROWED + `', '` + models.BORROW_TYPE_LATE + `' ) 
286
+	AND ( a.customer_phone = '` + customerInfo + `' OR d.barcode = '` + customerInfo + `' )
287
+	and a.case_id in('` + strings.Replace(caseId, ",", "','", -1) + `')`
288
+	sql += ` order by a.borrow_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
289
+	err := m.db.Sql(sql).Find(&record)
290
+	return record, err
291
+}
292
+
293
+func (m *BookDAO) GetCustomerReturnListCount(customerInfo, caseId string) (int, error) {
294
+	var record []ReturnList
295
+	sql := `SELECT
296
+	a.*,
297
+	b.book_name,
298
+	b.book_barcode,
299
+	c.book_type_name 
300
+FROM
301
+	ta_book_borrow_record a
302
+	INNER JOIN ta_book b ON a.book_id = b.book_id
303
+	INNER JOIN ta_book_type c ON b.book_type_id = c.book_type_id
304
+	INNER JOIN ta_customer d ON a.customer_id = d.customer_id 
305
+WHERE
306
+	a.borrow_status IN ( '` + models.BORROW_TYPE_BORROWED + `', '` + models.BORROW_TYPE_LATE + `' ) 
307
+	AND ( a.customer_phone = '` + customerInfo + `' OR d.barcode = '` + customerInfo + `' )
308
+	and a.case_id in('` + strings.Replace(caseId, ",", "','", -1) + `')`
309
+	err := m.db.Sql(sql).Find(&record)
310
+	return len(record), err
311
+}

+ 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
+}