consume.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package services
  2. import (
  3. "goiot-cronapi/models"
  4. "github.com/jinzhu/gorm"
  5. )
  6. func GetConsumeDatas(db *gorm.DB, count, pageSize int) []models.ConsumeData {
  7. var consumeList []models.ConsumeData
  8. sql := `SELECT m.id, m.name, m.box_id, m.utilization_rate, m.consumption_cycle, m.ascription, m.reset_runtime, p.project_name, p.user_id
  9. FROM btk_consumables_management m
  10. LEFT JOIN btk_project p
  11. ON p.project_auto_id = m.project_auto_id
  12. WHERE LENGTH(m.box_id) > 0 AND m.utilization_rate > 0 AND m.consumption_cycle > 0 AND m.is_delete = 0
  13. ORDER BY m.id DESC`
  14. db.Raw(sql).Limit(pageSize).Offset(count * pageSize).Find(&consumeList)
  15. for i, data := range consumeList {
  16. data.Ratio = 100 / float64(data.Cycle)
  17. consumeList[i] = data
  18. }
  19. return consumeList
  20. }
  21. func UpdateConsumeRate(db *gorm.DB, datas []models.ConsumeData, m map[string]int64) error {
  22. var (
  23. err error
  24. sql string
  25. )
  26. tx := db.Begin()
  27. for _, data := range datas {
  28. if data.Cycle <= 0 {
  29. continue
  30. }
  31. if data.Ascription == "盒子" {
  32. // 如果是盒子, 计算损耗率
  33. runtime := float64(m[data.BoxId])
  34. cycle := float64(data.Cycle * 24 * 60)
  35. if data.ResetRuntime > runtime {
  36. data.ResetRuntime = runtime
  37. }
  38. data.Rate = (cycle - (runtime - data.ResetRuntime)) / cycle * 100
  39. if data.Rate < 0 {
  40. data.Rate = 0
  41. }
  42. sql = "UPDATE btk_consumables_management SET utilization_rate = ? WHERE id = ?"
  43. err = tx.Exec(sql, data.Rate, data.ID).Error
  44. } else {
  45. // 如果是项目, 按照自然日每天扣减损耗率
  46. if data.Rate >= data.Ratio {
  47. sql = "UPDATE btk_consumables_management SET utilization_rate = utilization_rate - ? WHERE id = ?"
  48. err = tx.Exec(sql, data.Ratio, data.ID).Error
  49. } else {
  50. sql = "UPDATE btk_consumables_management SET utilization_rate = 0 WHERE id = ?"
  51. err = tx.Exec(sql, data.ID).Error
  52. }
  53. }
  54. if err != nil {
  55. tx.Rollback()
  56. break
  57. }
  58. }
  59. if err == nil {
  60. tx.Commit()
  61. }
  62. return err
  63. }