123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572 |
- package book
-
- import (
- "errors"
- "spaceofcheng/services/models"
- "spaceofcheng/services/models/book"
- "spaceofcheng/services/models/customer"
- "spaceofcheng/services/models/model"
- "spaceofcheng/services/service"
- "spaceofcheng/services/utils"
- "strconv"
- "time"
- )
-
- // BookServ 系统处理
- type BookServ struct {
- ctx *utils.Context
- dao *book.BookDAO
- cdao *customer.CustomerDAO
- }
-
- // NewBookServ 初始化
- func NewBookServ(ctx *utils.Context) *BookServ {
- return &BookServ{
- ctx: ctx,
- dao: book.NewBookDAO(ctx),
- cdao: customer.NewCustomerDAO(ctx),
- }
- }
-
- // GetBookRecommendList 获取推荐图书信息
- func (s *BookServ) GetBookRecommendList(caseid string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page <= 0 {
- page = 1
- }
- list, err := s.dao.GetBookRecommendList(caseid, page, pageSize)
- if err != nil {
- utils.LogError("获取图书列表失败: " + err.Error())
- return nil, errors.New("获取图书列表失败")
- }
-
- return map[string]interface{}{
- "list": list,
- "pageSize": pageSize,
- "page": page,
- }, nil
- }
-
- func (s *BookServ) GetBookList(bookType, name, barcode, showzero, caseid string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page <= 0 {
- page = 1
- }
- list, err := s.dao.GetBookList(bookType, name, barcode, showzero, caseid, page, pageSize)
- if err != nil {
- utils.LogError("获取图书列表失败: " + err.Error())
- return nil, errors.New("获取图书列表失败")
- }
- total, err := s.dao.GetBookListCount(bookType, name, showzero, barcode, caseid)
- if err != nil {
- utils.LogError("获取图书列表失败: " + err.Error())
- return nil, errors.New("获取图书列表失败")
- }
- return map[string]interface{}{
- "list": list,
- "pageSize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- func (s *BookServ) GetBookById(bookId string) (*model.TaBook, error) {
- book, err := s.dao.GetBookById(bookId)
- if err != nil {
- utils.LogError("获取图书详情失败: " + err.Error())
- return nil, errors.New("获取图书详情失败")
- }
- return book, nil
- }
- func (s *BookServ) AuthBook(book model.TaBook) error {
- if book.CaseId == "" {
- return errors.New("案场不能为空")
- }
- if book.BookBarcode == "" {
- return errors.New("条形码不能为空")
- }
- num, err := s.dao.IsBarcodeExist(book.BookBarcode, book.CaseId)
- if err != nil {
- utils.LogError("新增图书失败: " + err.Error())
- return errors.New("新增图书失败")
- }
- if num > 0 {
- return errors.New("条形码" + book.BookBarcode + "已存在")
- }
- if book.BookName == "" {
- return errors.New("图书名不能为空")
- }
- if book.InStock == 0 {
- return errors.New("总库存不能为0")
- }
- if book.BorrowDays == 0 {
- return errors.New("借阅天数不能为0")
- }
- return nil
- }
- func (s *BookServ) AuthBookEdit(book model.TaBook) error {
- if book.CaseId == "" {
- return errors.New("案场不能为空")
- }
- if book.BookName == "" {
- return errors.New("图书名不能为空")
- }
- if book.InStock == 0 {
- return errors.New("总库存不能为0")
- }
- if book.BorrowDays == 0 {
- return errors.New("借阅天数不能为0")
- }
- return nil
- }
- func (s *BookServ) AddBook(book model.TaBook) (*model.TaBook, error) {
-
- newBook, err := s.dao.AddBook(book)
-
- if err != nil {
- utils.LogError("新增图书失败: " + err.Error())
- return nil, errors.New("新增图书失败")
- }
- return newBook, err
-
- }
- func (s *BookServ) EditBook(book model.TaBook) (*model.TaBook, error) {
- editbook, err := s.dao.EditBook(book)
- if err != nil {
- utils.LogError("修改图书失败: " + err.Error())
- return nil, errors.New("修改图书失败")
- }
- return editbook, nil
- }
-
- // GetMineRecord 获取个人借阅记录
- func (s *BookServ) GetMineRecord(status string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page <= 0 {
- page = 1
- }
- customer := s.ctx.Get("customer").(model.TaCustomer)
- list, err := s.dao.GetMineRecord(customer.CustomerId, status, page, pageSize)
- if err != nil {
- utils.LogError("获取图书列表失败: " + err.Error())
- return nil, errors.New("获取图书列表失败")
- }
- total, err := s.dao.GetMineRecordCount(customer.CustomerId, status)
- if err != nil {
- utils.LogError("获取图书列表失败: " + err.Error())
- return nil, errors.New("获取图书列表失败")
- }
- return map[string]interface{}{
- "list": list,
- "pageSize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- func (s *BookServ) GetInStockChangeByBookId(bookId string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page <= 0 {
- page = 1
- }
- list, err := s.dao.GetInStockChangeByBookId(bookId, page, pageSize)
- if err != nil {
- utils.LogError("获取库存盘点列表失败: " + err.Error())
- return nil, errors.New("获取库存盘点列表失败")
- }
- total, err := s.dao.GetInStockChangeByBookIdCount(bookId)
- if err != nil {
- utils.LogError("获取库存盘点列表失败: " + err.Error())
- return nil, errors.New("获取库存盘点列表失败")
- }
- return map[string]interface{}{
- "list": list,
- "pageSize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- func (s *BookServ) AddChangeRecord(change model.TaInStockChange) error {
- book, err := s.dao.GetBookById(change.BookId)
- if err != nil {
- utils.LogError("库存盘点失败: " + err.Error())
- return errors.New("库存盘点失败")
- }
- bookAdd := change.InStockAfter - change.InStockBefore
- book.InStock = book.InStock + bookAdd
- book.LeftNum = change.InStockAfter
- change.InStockTotal = book.InStock
- err = s.dao.AddChangeRecord(change)
- if err != nil {
- utils.LogError("库存盘点失败: " + err.Error())
- return errors.New("库存盘点失败")
- }
- var cols = []string{
- "in_stock",
- "left_num",
- }
- err = s.dao.UpdateInStockBook(book, cols)
- if err != nil {
- utils.LogError("库存盘点失败: " + err.Error())
- return errors.New("库存盘点失败")
- }
- return nil
- }
-
- func (s *BookServ) BorrowBook(bookId, customerId, orgId string) (*model.TaBookBorrowRecord, error) {
- reserveRecord, err := s.dao.CustomerReservedBook(bookId, customerId)
- if err != nil {
- utils.LogError("借阅失败: " + err.Error())
- return nil, errors.New("借阅失败")
- }
- book, err := s.dao.GetBookById(bookId)
- if err != nil {
- utils.LogError("借阅失败: " + err.Error())
- return nil, errors.New("借阅失败")
- }
- returnTime := book.BorrowDays * 24
- returnStr := strconv.Itoa(returnTime) + "h"
- dd, _ := time.ParseDuration(returnStr)
- if reserveRecord == nil {
- customer, err := s.cdao.GetCustomerByID(customerId)
- if err != nil {
- utils.LogError("借阅失败: " + err.Error())
- return nil, errors.New("借阅失败")
- }
- if book.LeftNum <= 0 {
- return nil, errors.New("该图书已无库存")
- }
- var borrowRecord = model.TaBookBorrowRecord{
- BookId: bookId,
- BorrowStatus: models.BORROW_TYPE_BORROWED,
- CustomerId: customerId,
- CustomerName: customer.Name,
- CustomerPhone: customer.Phone,
- BorrowDate: time.Now(),
- EndDate: time.Now().Add(dd),
- CaseId: book.CaseId,
- OrgId: orgId,
- }
- newBorrow, err := s.dao.AddBookRecord(borrowRecord)
- if err != nil {
- utils.LogError("借阅失败: " + err.Error())
- return nil, errors.New("借阅失败")
- }
- book.BorrowNum = book.BorrowNum + 1
- book.LeftNum = book.LeftNum - 1
- var cols = []string{
- "left_num",
- "borrow_num",
- }
- err = s.dao.UpdateInStockBook(book, cols)
- if err != nil {
- utils.LogError("借阅失败: " + err.Error())
- return nil, errors.New("借阅失败")
- }
- return newBorrow, nil
- }
- reserveRecord.BorrowDate = time.Now()
- reserveRecord.BorrowStatus = models.BORROW_TYPE_BORROWED
- reserveRecord.EndDate = time.Now().Add(dd)
- newBorrow, err := s.dao.UpdateBookRecord(reserveRecord)
- if err != nil {
- utils.LogError("借阅失败: " + err.Error())
- return nil, errors.New("借阅失败")
- }
- book.BorrowNum = book.BorrowNum + 1
- var cols = []string{
- "borrow_num",
- }
- err = s.dao.UpdateInStockBook(book, cols)
- if err != nil {
- utils.LogError("借阅失败: " + err.Error())
- return nil, errors.New("借阅失败")
- }
- return newBorrow, nil
-
- }
-
- func (s *BookServ) ReturnBook(borrowId string) error {
- record, err := s.dao.GetBorrowById(borrowId)
- if err != nil {
- utils.LogError("归还失败: " + err.Error())
- return errors.New("归还失败")
- }
- book, err := s.dao.GetBookById(record.BookId)
- if err != nil {
- utils.LogError("归还失败: " + err.Error())
- return errors.New("归还失败")
- }
- if record == nil {
- return errors.New("不存在的借阅信息")
- }
- if record.BorrowStatus == models.BORROW_TYPE_LATE {
- record.BorrowStatus = models.BORROW_TYPE_LATERETURN
- } else {
- record.BorrowStatus = models.BORROW_TYPE_RETURN
- }
- record.ReturnDate = time.Now()
- _, err = s.dao.UpdateBookRecord(record)
- if err != nil {
- utils.LogError("归还失败: " + err.Error())
- return errors.New("归还失败")
- }
- book.BorrowNum = book.BorrowNum - 1
- book.LeftNum = book.LeftNum + 1
- var cols = []string{
- "left_num",
- "borrow_num",
- }
- err = s.dao.UpdateInStockBook(book, cols)
- if err != nil {
- utils.LogError("归还失败: " + err.Error())
- return errors.New("归还失败")
- }
- return nil
- }
- func (s *BookServ) CancelReserve(recordId string) error {
- record, err := s.dao.GetRecordById(recordId)
- if err != nil {
- utils.LogError("取消失败: " + err.Error())
- return errors.New("取消失败")
- }
- book, err := s.dao.GetBookById(record.BookId)
- if err != nil {
- utils.LogError("取消失败: " + err.Error())
- return errors.New("取消失败")
- }
- book.LeftNum = book.LeftNum + 1
- var cols = []string{
- "left_num",
- }
- err = s.dao.UpdateInStockBook(book, cols)
- if err != nil {
- utils.LogError("归还失败: " + err.Error())
- return errors.New("归还失败")
- }
-
- record.BorrowStatus = models.BORROW_TYPE_CANCEL
- _, err = s.dao.UpdateBookRecord(record)
- if err != nil {
- utils.LogError("取消失败: " + err.Error())
- return errors.New("取消失败")
- }
- return nil
-
- }
-
- func (s *BookServ) GetCustomerReturnList(customerInfo, caseId string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page <= 0 {
- page = 1
- }
- list, err := s.dao.GetCustomerReturnList(customerInfo, caseId, page, pageSize)
- if err != nil {
- utils.LogError("获取库存盘点列表失败: " + err.Error())
- return nil, errors.New("获取库存盘点列表失败")
- }
- total, err := s.dao.GetCustomerReturnListCount(customerInfo, caseId)
- if err != nil {
- utils.LogError("获取库存盘点列表失败: " + err.Error())
- return nil, errors.New("获取库存盘点列表失败")
- }
- return map[string]interface{}{
- "list": list,
- "pageSize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- // ReserveBook 图书预约
- func (s *BookServ) ReserveBook(bookid string) (*model.TaBookBorrowRecord, error) {
- book, err := s.dao.GetBookById(bookid)
- if err != nil {
- utils.LogError("获取图书信息失败:", err.Error())
- return nil, errors.New("获取图书信息失败")
- }
- if book == nil || book.BookId == "" {
- return nil, errors.New("没有对应的图书信息")
- }
- if book.LeftNum < 1 {
- return nil, errors.New("预约失败,库存不足")
- }
- customer := s.ctx.Get("customer").(model.TaCustomer)
- if customer.Phone == "" {
- return nil, errors.New("请先绑定您的手机号,再进行预约!")
- }
- isok, err := s.dao.CheckUserReserveBook(customer.CustomerId, bookid)
- if err != nil {
- utils.LogError("判断用户是否已借阅此图书失败:", err.Error())
- return nil, errors.New("判断失败,请刷新后重试!")
- }
- if !isok {
- return nil, errors.New("您已预约或借阅此图书!")
- }
- var record = model.TaBookBorrowRecord{
- BookId: book.BookId,
- CustomerId: customer.CustomerId,
- CustomerName: customer.Name,
- CustomerPhone: customer.Phone,
- OrgId: book.OrgId,
- CaseId: book.CaseId,
- }
- info, err := s.dao.ReserveBook(record)
- if err != nil {
- utils.LogError("预约失败:", err.Error())
- return nil, errors.New("预约失败")
- }
- // 减库存
- err = s.dao.BookLeftNumDel(book.BookId)
- if err != nil {
- utils.LogError("减库存失败:", err.Error())
- return nil, err
- }
- return &info, err
- }
-
- func (s *BookServ) GetCustomerByCustomerInfo(customerInfo string) (*model.TaCustomer, error) {
- list, err := s.dao.GetCustomerByCustomerInfo(customerInfo)
- if err != nil {
- utils.LogError("获取用户信息失败:", err.Error())
- return nil, errors.New("获取用户信息失败")
- }
- return list, nil
- }
-
- func (s *BookServ) GetRecordList(borrowStatus, caseid, customerName, customerPhone, bookName, barcode string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page <= 0 {
- page = 1
- }
- list, err := s.dao.GetRecordList(borrowStatus, caseid, customerName, customerPhone, bookName, barcode, page, pageSize)
- if err != nil {
- utils.LogError("获取借书记录列表失败: " + err.Error())
- return nil, errors.New("获取借书记录列表失败")
- }
- total, err := s.dao.GetRecordListCount(borrowStatus, caseid, customerName, customerPhone, bookName, barcode)
- if err != nil {
- utils.LogError("获取借书记录列表失败: " + err.Error())
- return nil, errors.New("获取借书记录列表失败")
- }
- return map[string]interface{}{
- "list": list,
- "pageSize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- func (s *BookServ) DeleteBook(bookId string) error {
- book, err := s.dao.GetBookById(bookId)
- if err != nil {
- utils.LogError("删除失败: " + err.Error())
- return errors.New("删除失败")
- }
- if book.LeftNum != book.InStock {
- return errors.New("当前图书已有借出/预约,不能删除")
- }
- err = s.dao.DeleteBook(bookId)
- if err != nil {
- utils.LogError("删除失败: " + err.Error())
- return errors.New("删除失败")
- }
- return nil
- }
-
- // func (s *BookServ) SendMessageToCustomer() error {
- // weekList, err := s.dao.GetAllOneWeekRecord()
- // if err != nil {
- // utils.LogError("发送消息失败失败: " + err.Error())
- // return errors.New("发送消息失败失败")
- // }
- // lateList, err := s.dao.GetAllLateRecord()
- // if err != nil {
- // utils.LogError("发送消息失败失败: " + err.Error())
- // return errors.New("发送消息失败失败")
- // }
- // if len(weekList) > 0 {
- // for i := 0; i < len(weekList); i++ {
- // userMap, err := s.dao.GetUserMappingById(weekList[i].CustomerId)
- // if err != nil {
- // utils.LogError("发送消息失败失败: " + err.Error())
- // return errors.New("发送消息失败失败")
- // }
- // message := utils.Message{
- // To: utils.ClientID{ID: userMap.Openid},
- // Data: map[string]interface{}{
- // "orgid": weekList[i].OrgId,
- // "tplid": "6WoxRkdXrRyF0T7Kc4PU5CjkpzAPWKKsA6wBLAGSQQg",
- // "data": map[string]string{
- // "first": "您好,您借阅图书即将逾期,请及时归还。",
- // "keyword1": weekList[i].BookName,
- // "keyword2": weekList[i].BorrowDate.Format("2006-01-02"),
- // "keyword3": weekList[i].EndDate.Format("2006-01-02"),
- // "remark": fmt.Sprintf("避免影响您下次借阅,请及时归还至", weekList[i].CaseName),
- // },
- // },
- // }
- // go utils.SendWechat(message)
- // }
- // }
- // if len(lateList) > 0 {
- // for i := 0; i < len(lateList); i++ {
- // userMap, err := s.dao.GetUserMappingById(lateList[i].CustomerId)
- // if err != nil {
- // utils.LogError("发送消息失败失败: " + err.Error())
- // return errors.New("发送消息失败失败")
- // }
- // message := utils.Message{
- // To: utils.ClientID{ID: userMap.Openid},
- // Data: map[string]interface{}{
- // "orgid": lateList[i].OrgId,
- // "tplid": "ID:Be0a25NMb3fzLtNaaQn_YOuECQDnlCs1es5aVvfwRhs",
- // "data": map[string]string{
- // "first": "您好,您借阅图书的时间已经逾期2天",
- // "keyword1": lateList[i].BookName,
- // "keyword2": weekList[i].BorrowDate.Format("2006-01-02"),
- // "keyword3": weekList[i].EndDate.Format("2006-01-02"),
- // "remark": fmt.Sprintf("避免影响您下次借阅,请及时归还至", lateList[i].CaseName),
- // },
- // },
- // }
- // go utils.SendWechat(message)
- // }
- // }
- // return nil
- // }
- func (s *BookServ) GetCustomerBorrowInfo(customerInfo string) (*book.CustomerInfo, error) {
- customer, err := s.dao.GetCustomerBorrowInfo(customerInfo)
- if err != nil {
- utils.LogError("获取用户信息失败: " + err.Error())
- return nil, errors.New("获取用户信息失败")
- }
- return customer, nil
- }
-
- func (s *BookServ) GetBookTypeByCaseId(caseId string) (map[string]string, error) {
- list, err := s.dao.GetBookTypeByCaseId(caseId)
- if err != nil {
- utils.LogError("查询图书类型失败: " + err.Error())
- return nil, errors.New("查询图书类型失败")
- }
- data := make(map[string]string)
- for i := 0; i < len(list); i++ {
- data[list[i].BookTypeName] = list[i].BookTypeId
- }
- return data, nil
-
- }
|