123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558 |
- package book
-
- import (
- "errors"
- "spaceofcheng/services/models"
- "spaceofcheng/services/models/model"
- "spaceofcheng/services/utils"
- "strconv"
- "strings"
- "time"
-
- "github.com/astaxie/beego"
-
- "github.com/go-xorm/xorm"
- )
-
- // BookDAO 当前数据库操作对象
- type BookDAO struct {
- ctx *utils.Context
- db *xorm.Session
- }
-
- // NewBookDAO New Inst
- func NewBookDAO(ctx *utils.Context) *BookDAO {
- return &BookDAO{
- ctx: ctx,
- db: ctx.DB,
- }
- }
-
- func (m *BookDAO) GetBookList(bookType, name, barcode, showzero, caseid string, page, pageSize int) ([]model.TaBook, error) {
- var book []model.TaBook
- sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
- and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
- if bookType != "" {
- sql += ` and book_type_id = '` + bookType + `'`
- }
- if name != "" {
- sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
- }
- if barcode != "" {
- sql += ` and book_barcode = '` + barcode + `'`
- }
- if showzero == "0" {
- sql += ` and left_num>0`
- }
- sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
- err := m.db.Sql(sql).Find(&book)
- return book, err
-
- }
- func (m *BookDAO) GetBookListCount(bookType, name, showzero, barcode, caseid string) (int, error) {
- var book []model.TaBook
- sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
- and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
- if bookType != "" {
- sql += ` and book_type_id = '` + bookType + `'`
- }
- if barcode != "" {
- sql += ` and book_barcode = '` + barcode + `'`
- }
- if name != "" {
- sql += ` and (book_name like '%` + name + `%' or author like '%` + name + `%')`
- }
- if showzero == "0" {
- sql += ` and left_num>0`
- }
- sql += ` order by create_date desc`
- err := m.db.Sql(sql).Find(&book)
- return len(book), err
-
- }
-
- func (m *BookDAO) GetBookById(bookId string) (*model.TaBook, error) {
- sql := `select * from ta_book where book_id = '` + bookId + `'`
-
- book := model.TaBook{}
- _, err := m.db.Sql(sql).Get(&book)
- return &book, err
- }
-
- func (m *BookDAO) AddBook(book model.TaBook) (*model.TaBook, error) {
- book.Status = models.STATUS_NORMAL
- book.BookId = utils.GetGUID()
- book.CreateDate = time.Now()
- _, err := m.db.Insert(book)
- return &book, err
- }
- func (m *BookDAO) EditBook(book model.TaBook) (*model.TaBook, error) {
- var cols = []string{
- "book_type_id",
- "book_name",
- "book_img",
- "author",
- "publisher",
- "price",
- "borrow_days",
- "book_description",
- "is_recommend",
- }
- _, err := m.db.Cols(cols...).Where("book_id = ?", book.BookId).Update(book)
- return &book, err
- }
- func (m *BookDAO) AddBookRecord(record model.TaBookBorrowRecord) (*model.TaBookBorrowRecord, error) {
- record.BookBorrowRecordId = utils.GetGUID()
- record.CreateDate = time.Now()
- _, err := m.db.Insert(record)
- return &record, err
- }
- func (m *BookDAO) GetRecordById(recordId string) (*model.TaBookBorrowRecord, error) {
- var record []model.TaBookBorrowRecord
- sql := `select * from ta_book_borrow_record where book_borrow_record_id = '` + recordId + `'`
- err := m.db.Sql(sql).Find(&record)
- if len(record) <= 0 {
- return nil, err
- }
- return &record[0], err
- }
- func (m *BookDAO) UpdateBookRecord(record *model.TaBookBorrowRecord) (*model.TaBookBorrowRecord, error) {
- var cols = []string{
- "borrow_date",
- "return_date",
- "borrow_status",
- "end_date",
- }
- _, err := m.db.Cols(cols...).Where("book_borrow_record_id = ?", record.BookBorrowRecordId).Update(record)
- return record, err
- }
- func (m *BookDAO) UpdateInStockBook(book *model.TaBook, cols []string) error {
- _, err := m.db.Cols(cols...).Where("book_id = ?", book.BookId).Update(book)
- return err
- }
-
- type BorrowRecord struct {
- model.TaBookBorrowRecord `xorm:"extends"`
- BookBarcode string
- BookName string
- BookImg string
- }
-
- func (m *BookDAO) GetRecordList(borrowStatus, caseid, customerName, customerPhone, bookName, barcode string, page, pageSize int) ([]BorrowRecord, error) {
- var record []BorrowRecord
- sql := `SELECT
- a.*,
- b.book_name,
- b.book_barcode,
- b.book_img
- FROM
- ta_book_borrow_record a
- INNER JOIN ta_book b ON a.book_id = b.book_id
- where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
- if borrowStatus != "" {
- sql += ` and a.borrow_status = '` + borrowStatus + `' `
- }
- if customerName != "" {
- sql += ` and a.customer_name like '%` + customerName + `%' `
- }
- if customerPhone != "" {
- sql += ` and a.customer_phone like'%` + customerPhone + `%' `
- }
- if bookName != "" {
- sql += ` and (b.book_name like '%` + bookName + `%')`
- }
- if barcode != "" {
- sql += ` and b.book_barcode = '` + barcode + `'`
- }
- if borrowStatus != models.BORROW_TYPE_RESERVE {
- sql += ` and a.borrow_status in(0,1,2,3) order by a.borrow_date desc`
- } else {
- sql += `order by a.create_date desc `
- }
- sql += ` limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
- beego.Error(sql)
- err := m.db.Sql(sql).Find(&record)
- return record, err
-
- }
-
- func (m *BookDAO) GetRecordListCount(borrowStatus, caseid, customerName, customerPhone, bookName, barcode string) (int, error) {
- var record []BorrowRecord
- sql := `SELECT
- a.*,
- b.book_name,
- b.book_barcode
- FROM
- ta_book_borrow_record a
- INNER JOIN ta_book b ON a.book_id = b.book_id
- where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')`
- if borrowStatus != "" {
- sql += ` and a.borrow_status = '` + borrowStatus + `' `
- }
- if customerName != "" {
- sql += ` and a.customer_name = '` + customerName + `' `
- }
- if customerPhone != "" {
- sql += ` and a.customer_phone ='` + customerPhone + `' `
- }
- if bookName != "" {
- sql += ` and b.book_name = '` + bookName + `' `
- }
- if barcode != "" {
- sql += ` and b.book_barcode = '` + barcode + `'`
- }
- if borrowStatus != models.BORROW_TYPE_RESERVE {
- sql += ` and a.borrow_status in(0,1,2,3)`
- }
- err := m.db.Sql(sql).Find(&record)
- return len(record), err
-
- }
-
- func (m *BookDAO) GetBookRecommendList(caseid string, page, pageSize int) ([]model.TaBook, error) {
- var book []model.TaBook
- sql := `select * from ta_book where status = '` + strconv.Itoa(models.STATUS_NORMAL) + `'
- and case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
- and is_recommend = '` + strconv.Itoa(models.RECOMMEND_YES) + `' and left_num>0`
- sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
- err := m.db.Sql(sql).Find(&book)
- return book, err
- }
-
- type InStockChange struct {
- model.TaInStockChange `xorm:"extends"`
- RealName string
- BookName string
- LeftNum int
- InStock int
- }
-
- func (m *BookDAO) GetInStockChangeByBookId(bookId string, page, pageSize int) ([]InStockChange, error) {
- var change []InStockChange
- sql := `SELECT
- a.*,
- b.book_name,
- b.left_num,
- b.in_stock,
- c.real_name
- FROM
- ta_in_stock_change a
- INNER JOIN ta_book b ON a.book_id = b.book_id
- INNER JOIN sys_user c on a.change_user = c.user_id
- WHERE a.book_id = '` + bookId + `'`
- sql += ` order by a.change_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
- err := m.db.Sql(sql).Find(&change)
- return change, err
- }
-
- func (m *BookDAO) GetInStockChangeByBookIdCount(bookId string) (int, error) {
- var change []InStockChange
- sql := `SELECT
- a.*,
- b.book_name,
- b.left_num,
- c.real_name
- FROM
- ta_in_stock_change a
- INNER JOIN ta_book b ON a.book_id = b.book_id
- INNER JOIN sys_user c on a.change_user = c.user_id
- WHERE a.book_id = '` + bookId + `'`
- err := m.db.Sql(sql).Find(&change)
- return len(change), err
- }
-
- func (m *BookDAO) AddChangeRecord(change model.TaInStockChange) error {
- change.ChangeDate = time.Now()
- change.RecordId = utils.GetGUID()
- _, err := m.db.Insert(change)
- return err
- }
-
- // BookBorrowRecord 图书借阅记录
- type BookBorrowRecord struct {
- model.TaBookBorrowRecord `xorm:"extends"`
- BookName string
- BookImg string
- CaseName string
- }
-
- // GetMineRecord 获取个人借阅记录
- func (m *BookDAO) GetMineRecord(customerid, status string, page, pagesize int) ([]BookBorrowRecord, error) {
- var records []BookBorrowRecord
- sql := `select a.*,b.book_name,b.book_img,c.case_name from ta_book_borrow_record a
- inner join sys_case c on a.case_id=c.case_id
- left join ta_book b on a.book_id=b.book_id
- where a.customer_id=? `
- if status != "" {
- sql += ` and a.borrow_status in ('` + strings.Replace(status, ",", "','", -1) + `')`
- }
- sql += ` order by a.borrow_status asc`
- if status == "4" {
- sql += `,a.reserve_date asc`
- } else {
- sql += `,a.end_date asc`
- }
- sql += ` limit ` + strconv.Itoa((page-1)*pagesize) + `, ` + strconv.Itoa(pagesize)
- err := m.db.Sql(sql, customerid).Find(&records)
- return records, err
- }
-
- // GetMineRecordCount 获取个人借阅记录count
- func (m *BookDAO) GetMineRecordCount(customerid, status string) (int, error) {
- var records []model.TaBookBorrowRecord
- var db = m.db.Where("customer_id=?", customerid)
- if status != "" {
- db.And("borrow_status in ('" + strings.Replace(status, ",", "','", -1) + "')")
- }
- err := db.Find(&records)
- return len(records), err
- }
-
- // ReserveBook 图书预约
- func (m *BookDAO) ReserveBook(record model.TaBookBorrowRecord) (model.TaBookBorrowRecord, error) {
- record.BookBorrowRecordId = utils.GetGUID()
- record.CreateDate = time.Now()
- record.ReserveDate = time.Now()
- dd, _ := time.ParseDuration("168h")
- record.ReserveEndDate = time.Now().Add(dd)
- record.BorrowStatus = models.BORROW_TYPE_RESERVE
- _, err := m.db.Insert(record)
-
- return record, err
- }
-
- // CheckUserReserveBook 判断用户书籍预约状态
- func (m *BookDAO) CheckUserReserveBook(customerid, bookid string) (bool, error) {
- var records []model.TaBookBorrowRecord
- 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)
- if err != nil {
- return false, err
- }
- return len(records) == 0, nil
- }
-
- // BookLeftNumDel 图书库存减少
- func (m *BookDAO) BookLeftNumDel(bookid string) error {
- sql := `update ta_book set left_num = left_num - 1 where book_id=? and left_num > 0`
- req, err := m.db.Exec(sql, bookid)
- if err != nil {
- return err
- }
- row, _ := req.RowsAffected()
- if row == 0 {
- return errors.New("预约失败,库存不足")
- }
- return nil
- }
-
- //
- func (m *BookDAO) CustomerReservedBook(bookId, customerId string) (*model.TaBookBorrowRecord, error) {
- var book []model.TaBookBorrowRecord
- sql := `SELECT
- a.*
- FROM
- ta_book_borrow_record a
- WHERE
- a.borrow_status = '` + models.BORROW_TYPE_RESERVE + `'
- AND a.customer_id = '` + customerId + `'
- AND a.book_id = '` + bookId + `'`
- err := m.db.Sql(sql).Find(&book)
- if len(book) <= 0 {
- return nil, err
- }
- return &book[0], err
- }
-
- func (m *BookDAO) GetBorrowById(borrowId string) (*model.TaBookBorrowRecord, error) {
- var book []model.TaBookBorrowRecord
- sql := `SELECT
- a.*
- FROM
- ta_book_borrow_record a
- WHERE
- a.book_borrow_record_id = '` + borrowId + `'`
- err := m.db.Sql(sql).Find(&book)
- if len(book) <= 0 {
- return nil, err
- }
- return &book[0], err
- }
-
- type ReturnList struct {
- model.TaBookBorrowRecord `xorm:"extends"`
- BookName string
- BookBarcode string
- BookTypeName string
- LateDays string
- }
-
- func (m *BookDAO) GetCustomerReturnList(customerInfo, caseId string, page, pageSize int) ([]ReturnList, error) {
- var record []ReturnList
- sql := `SELECT
- a.*,
- b.book_name,
- b.book_barcode,
- c.book_type_name
- FROM
- ta_book_borrow_record a
- INNER JOIN ta_book b ON a.book_id = b.book_id
- INNER JOIN ta_book_type c ON b.book_type_id = c.book_type_id
- INNER JOIN ta_customer d ON a.customer_id = d.customer_id
- WHERE
- a.borrow_status IN ( '` + models.BORROW_TYPE_BORROWED + `', '` + models.BORROW_TYPE_LATE + `' )
- AND ( a.customer_phone = '` + customerInfo + `' OR d.barcode = '` + customerInfo + `' )
- and a.case_id in('` + strings.Replace(caseId, ",", "','", -1) + `')`
- sql += ` order by a.borrow_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
- err := m.db.Sql(sql).Find(&record)
- return record, err
- }
-
- func (m *BookDAO) GetCustomerReturnListCount(customerInfo, caseId string) (int, error) {
- var record []ReturnList
- sql := `SELECT
- a.*,
- b.book_name,
- b.book_barcode,
- c.book_type_name
- FROM
- ta_book_borrow_record a
- INNER JOIN ta_book b ON a.book_id = b.book_id
- INNER JOIN ta_book_type c ON b.book_type_id = c.book_type_id
- INNER JOIN ta_customer d ON a.customer_id = d.customer_id
- WHERE
- a.borrow_status IN ( '` + models.BORROW_TYPE_BORROWED + `', '` + models.BORROW_TYPE_LATE + `' )
- AND ( a.customer_phone = '` + customerInfo + `' OR d.barcode = '` + customerInfo + `' )
- and a.case_id in('` + strings.Replace(caseId, ",", "','", -1) + `')`
- err := m.db.Sql(sql).Find(&record)
- return len(record), err
- }
- func (m *BookDAO) GetCustomerByCustomerInfo(customerInfo string) (*model.TaCustomer, error) {
- var customer []model.TaCustomer
- sql := `select * from ta_customer a
- where a.customer_phone = '` + customerInfo + `'
- OR d.barcode = '` + customerInfo + `' )`
- err := m.db.Sql(sql).Find(&customer)
- if len(customer) <= 0 {
- return nil, err
- }
- return &customer[0], err
-
- }
-
- type TimeList struct {
- model.TaBookBorrowRecord `xorm:"extends"`
- BookName string
- CaseName string
- }
-
- // GetAllOneWeekRecord 获取时间还剩一周过期的借阅记录
- func (m *BookDAO) GetAllOneWeekRecord() ([]TimeList, error) {
- var record []TimeList
- sql := `SELECT
- a.*,
- b.book_name,
- c.case_name
- FROM
- ta_book_borrow_record a
- inner join ta_book b on a.book_id = b.book_id
- inner join sys_case c on a.case_id = c.case_id
- WHERE
- DATE_FORMAT( a.end_date, "%Y-%m-%d" ) = DATE_FORMAT( ( SELECT date_add( now( ), INTERVAL 1 WEEK ) ), "%Y-%m-%d" )
- and a.borrow_status = '` + models.BORROW_TYPE_BORROWED + `'`
- err := m.db.Sql(sql).Find(&record)
- return record, err
- }
-
- // GetAllLateRecord 获取过期两天的借阅记录
- func (m *BookDAO) GetAllLateRecord() ([]TimeList, error) {
- var record []TimeList
- sql := `SELECT
- a.*,
- b.book_name,
- c.case_name
- FROM
- ta_book_borrow_record a
- inner join ta_book b on a.book_id = b.book_id
- inner join sys_case c on a.case_id = c.case_id
- WHERE
- DATE_FORMAT( now(), "%Y-%m-%d" ) = DATE_FORMAT( ( SELECT date_add( a.end_date, INTERVAL 2 DAY ) ), "%Y-%m-%d" )
- and a.borrow_status = '` + models.BORROW_TYPE_LATE + `'`
- err := m.db.Sql(sql).Find(&record)
- return record, err
- }
-
- func (m *BookDAO) DeleteBook(bookId string) error {
- var book = model.TaBook{
- BookId: bookId,
- Status: models.STATUS_DEL,
- }
- var cols = []string{
- "status",
- }
-
- _, err := m.db.Cols(cols...).Where("book_id = ?", book.BookId).Update(book)
- return err
- }
-
- func (m *BookDAO) GetUserMappingById(customerId string) (*model.TaUserMapping, error) {
- var userMap []model.TaUserMapping
- sql := `select * from ta_user_mapping where user_id = '` + customerId + `'`
- err := m.db.Sql(sql).Find(&userMap)
- if len(userMap) <= 0 {
- return nil, err
- }
- return &userMap[0], err
- }
-
- func (m *BookDAO) IsBarcodeExist(barcode, caseId string) (int, error) {
- var book []model.TaBook
- sql := `select * from ta_book where book_barcode = '` + barcode + `'
- and case_id = '` + caseId + `'
- and status ='` + strconv.Itoa(models.STATUS_NORMAL) + `'`
- err := m.db.Sql(sql).Find(&book)
- return len(book), err
- }
-
- type CustomerInfo struct {
- CustomerId string
- Name string
- Phone string
- BorrowNum int
- LateNum int
- IsLate string
- }
-
- func (m *BookDAO) GetCustomerBorrowInfo(customerInfo string) (*CustomerInfo, error) {
- var customer []CustomerInfo
- sql := `SELECT
- a.customer_id,
- a.name,
- a.phone ,
- (select count(1) from ta_book_borrow_record c WHERE borrow_status = '1' and c.customer_id = a.customer_id)as borrow_num,
- (select count(1) from ta_book_borrow_record c WHERE borrow_status = '0' and c.customer_id = a.customer_id)as late_num
- FROM
- ta_customer a LEFT JOIN ta_book_borrow_record b on a.customer_id = b.customer_id
- where a.phone = '` + customerInfo + `' OR a.barcode = '` + customerInfo + `'
- GROUP BY a.phone`
- err := m.db.SQL(sql).Find(&customer)
- if len(customer) <= 0 {
- return nil, err
- }
- if customer[0].LateNum > 0 {
- customer[0].IsLate = "yes"
- } else {
- customer[0].IsLate = "no"
- }
- return &customer[0], err
- }
-
- func (m *BookDAO) GetBookTypeByCaseId(caseId string) ([]model.TaBookType, error) {
- var bookType []model.TaBookType
- sql := `select * from ta_book_type where case_id = '` + caseId + `'`
- err := m.db.SQL(sql).Find(&bookType)
- return bookType, err
- }
-
- // func (m *BookDAO)UpdateBookRecordDays(bookId string,days int)error{
-
- // }
|