rent_computer_ledger.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package rentComputer
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/xuri/excelize/v2"
  7. "go.uber.org/zap"
  8. "gorm.io/gorm"
  9. "log-server/global"
  10. "log-server/model/rentComputer"
  11. "log-server/model/rentComputer/request"
  12. "log-server/model/rentComputer/response"
  13. "time"
  14. )
  15. type ServiceRentComputerLedger struct {
  16. }
  17. func (service *ServiceRentComputerLedger) RentComputerLedgerList(ctx context.Context, api rentComputer.RentComputerLedger, info request.PageInfo, order string, desc bool) ([]*response.RentComputerLedgerResponse, int64, error) {
  18. db := global.GVA_DB.Model(&rentComputer.RentComputerLedger{})
  19. db = db.Select("rent_computer_ledger.id,rent_computer_ledger.update_time,rent_computer_ledger.create_time,rent_computer_ledger.pc_num,rent_computer_ledger.new_date,rent_computer_ledger.set_meal_id," +
  20. "rent_computer_ledger.pc_name,rent_computer_ledger.shop_id,rent_computer_ledger.rent_start_then,rent_computer_ledger.rent_duration_then,rent_computer_ledger.rent_price_then,rent_computer_ledger.rent_end_then," +
  21. "rent_computer_ledger.remark,rent_computer_ledger.rent_price_used_then,rent_computer_ledger.is_expire,rent_computer_ledger.rent_price_day_then,rent_computer_ledger.set_meal_id," +
  22. "s.name as shop_name, r.name as set_meal_name")
  23. db = db.Joins("left join rent_computer_shop s on s.id = rent_computer_ledger.shop_id")
  24. db = db.Joins("left join rent_set_meal r on r.id = rent_computer_ledger.set_meal_id")
  25. if api.PcNum != "" {
  26. db = db.Where("rent_computer_ledger.pc_num = ?", api.PcNum)
  27. }
  28. if api.ShopId != 0 {
  29. db = db.Where("rent_computer_ledger.shop_id = ?", api.ShopId)
  30. }
  31. if api.SetMealId != 0 {
  32. db = db.Where("rent_computer_ledger.set_meal_id = ?", api.SetMealId)
  33. }
  34. //if api.IsExpire != -1 {
  35. // db = db.Where("rent_computer_ledger.is_expire = ?", api.IsExpire)
  36. //}
  37. if api.NewDate != "" {
  38. db = db.Where("rent_computer_ledger.new_date = ?", api.NewDate)
  39. } else {
  40. yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  41. db = db.Where("rent_computer_ledger.new_date = ?", yesterday)
  42. }
  43. var total int64
  44. err := db.Count(&total).Error
  45. //if err != nil {
  46. // return nil, 0, err
  47. //}
  48. limit := info.PageSize
  49. offset := info.PageSize * (info.Page - 1)
  50. //var statisticsLogs []*log.LogComputer
  51. var ledgerComputers []*response.RentComputerLedgerResponse
  52. db = db.Limit(limit).Offset(offset)
  53. if order != "" {
  54. var OrderStr string
  55. // 设置有效排序key 防止sql注入
  56. // 感谢 Tom4t0 提交漏洞信息
  57. orderMap := make(map[string]bool, 3)
  58. orderMap["pc_num"] = true
  59. //orderMap["game_id"] = true
  60. //orderMap["operator"] = true
  61. if orderMap[order] {
  62. if desc {
  63. OrderStr = order + " desc"
  64. } else {
  65. OrderStr = order
  66. }
  67. } else { // didn't matched any order key in `orderMap`
  68. global.GVA_LOG.Error("获取失败!", zap.Error(err))
  69. return ledgerComputers, total, err
  70. }
  71. err = db.Order(OrderStr).Find(&ledgerComputers).Error
  72. } else {
  73. err = db.Order("pc_num").Find(&ledgerComputers).Error
  74. }
  75. if err != nil {
  76. return nil, 0, err
  77. }
  78. var infos []*response.RentComputerLedgerResponse
  79. for _, one := range ledgerComputers {
  80. info := new(response.RentComputerLedgerResponse)
  81. info.Id = one.Id
  82. info.UpdateTime = one.UpdateTime
  83. info.CreateTime = one.CreateTime
  84. info.PcNum = one.PcNum
  85. info.PcName = one.PcName
  86. info.ShopId = one.ShopId
  87. info.Remark = one.Remark
  88. info.IsExpire = one.IsExpire
  89. info.SetMealId = one.SetMealId
  90. info.ShopName = one.ShopName
  91. info.SetMealName = one.SetMealName
  92. info.RentPriceUsedThen = one.RentPriceUsedThen
  93. info.RentStartThen = one.RentStartThen
  94. info.RentEndThen = one.RentEndThen
  95. info.RentPriceDayThen = one.RentPriceDayThen
  96. info.NewDate = one.NewDate
  97. info.RentPriceThen = one.RentPriceThen
  98. info.RentDurationThen = one.RentDurationThen
  99. infos = append(infos, info)
  100. }
  101. return infos, total, err
  102. }
  103. func (service *ServiceRentComputerLedger) GetRentComputerLedgerNum(ctx context.Context, api rentComputer.RentComputerLedger) int64 {
  104. var total int64
  105. db := global.GVA_DB.Model(&rentComputer.RentComputerLedger{})
  106. db = db.Distinct("id")
  107. if api.PcNum != "" {
  108. db = db.Where("rent_computer_ledger.pc_num = ?", api.PcNum)
  109. }
  110. if api.ShopId != 0 {
  111. db = db.Where("rent_computer_ledger.shop_id = ?", api.ShopId)
  112. }
  113. if api.SetMealId != 0 {
  114. db = db.Where("rent_computer_ledger.set_meal_id = ?", api.SetMealId)
  115. }
  116. if api.NewDate != "" {
  117. db = db.Where("rent_computer_ledger.new_date = ?", api.NewDate)
  118. } else {
  119. yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  120. db = db.Where("rent_computer_ledger.new_date = ?", yesterday)
  121. }
  122. //db = db.Where("is_expire != 1")
  123. _ = db.Count(&total).Error
  124. return total
  125. }
  126. func (service *ServiceRentComputerLedger) ParseInfoList2Excel(infoList []*response.RentComputerLedgerResponse, filePath string) (err error) {
  127. excel := excelize.NewFile()
  128. err = excel.SetSheetRow("Sheet1", "A1", &[]string{"日期", "供应商", "编号", "起租日期", "到期日期", "租期", "套餐", "价格", "天租金", "已产生租金", "备注"})
  129. if err != nil {
  130. return err
  131. }
  132. for i, one := range infoList {
  133. axis := fmt.Sprintf("A%d", i+2)
  134. err = excel.SetSheetRow("Sheet1", axis, &[]interface{}{
  135. one.NewDate,
  136. one.ShopName,
  137. one.PcNum,
  138. one.RentStartThen,
  139. one.RentEndThen,
  140. one.RentDurationThen,
  141. one.SetMealName,
  142. one.RentPriceThen,
  143. one.RentPriceDayThen,
  144. one.RentPriceUsedThen,
  145. one.Remark,
  146. })
  147. if err != nil {
  148. return err
  149. }
  150. }
  151. err = excel.SaveAs(filePath)
  152. return err
  153. }
  154. func (s *ServiceRentComputerLedger) DeleteRentComputerLedgerByIds(ids request.IdsReq) (err error) {
  155. err = global.GVA_DB.Delete(&[]rentComputer.RentComputerLedger{}, "id in ?", ids.Ids).Error
  156. return err
  157. }
  158. func (s *ServiceRentComputerLedger) DeleteRentComputerLedgerById(api rentComputer.RentComputerLedger) (err error) {
  159. var entity rentComputer.RentComputerLedger
  160. err = global.GVA_DB.Where("id = ?", api.Id).First(&entity).Error // 根据id查询api记录
  161. if errors.Is(err, gorm.ErrRecordNotFound) { // api记录不存在
  162. return err
  163. }
  164. return global.GVA_DB.Delete(&entity).Error
  165. }