rent_computer_ledger.go 5.3 KB

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