dailyExpenses.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package dao
  2. import (
  3. "gorm.io/gorm"
  4. "server/global"
  5. )
  6. type DailyExpenses struct {
  7. global.GVA_MODEL
  8. Name string `json:"name" form:"name" gorm:"comment:名称"`
  9. Genre int `json:"genre" form:"genre" gorm:"comment:费用类型"`
  10. ExpensesGenre ExpensesGenre `json:"expensesGenre" form:"expensesGenre" gorm:"foreignKey:Genre;references:id;"`
  11. Applicant string `json:"applicant" form:"applicant" gorm:"comment:申请人"`
  12. ApplicationTime string `json:"applicationTime" form:"applicationTime" gorm:"comment:申请日期"`
  13. Charge int `json:"charge" form:"charge" gorm:"comment:负责人"`
  14. User SysUser `json:"user" form:"user" gorm:"foreignKey:Charge;references:id;"`
  15. TotalAmount float64 `json:"totalAmount" form:"totalAmount" gorm:"type:decimal(10,2);comment:总金额"`
  16. DailyFeeDetails []DailyFeeDetails `json:"dailyFeeDetails" form:"dailyFeeDetails" gorm:"-"`
  17. }
  18. func (DailyExpenses) TableName() string {
  19. return "daily_expenses"
  20. }
  21. // TODO:日常费用查询
  22. // QueryDailyExpensesList 查询日常费用列表
  23. func QueryDailyExpensesList(limit, offset, genre int, name, time, yearTime string) (dailyExpenses []DailyExpenses, total int64, err error) {
  24. // 创建db
  25. db := global.GVA_DB.Model(&DailyExpenses{})
  26. // 如果有条件搜索 下方会自动创建搜索语句
  27. if genre != 0 {
  28. db = db.Where("genre = ?", genre)
  29. }
  30. if name != "" {
  31. db = db.Where("name LIKE ?", "%"+name+"%")
  32. }
  33. if time != "" {
  34. db = db.Where("DATE_FORMAT(application_time, '%Y-%m') = ?", time)
  35. }
  36. if yearTime != "" {
  37. db = db.Where("DATE_FORMAT(application_time, '%Y') = ?", yearTime)
  38. }
  39. err = db.Count(&total).Error
  40. if err != nil {
  41. return
  42. }
  43. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("ExpensesGenre").Preload("User").Find(&dailyExpenses).Error
  44. return dailyExpenses, total, err
  45. }
  46. // QueryDailyExpenses 查询日常费用详情
  47. func QueryDailyExpenses(id int) (dailyExpenses DailyExpenses, err error) {
  48. err = global.GVA_DB.Model(&DailyExpenses{}).Where("id = ?", id).Preload("ExpensesGenre").Preload("User").First(&dailyExpenses).Error
  49. return dailyExpenses, err
  50. }
  51. // TODO:日常费用新增
  52. // CreateDailyExpenses 新增日常费用
  53. func (de DailyExpenses) CreateDailyExpenses() error {
  54. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  55. txErr := tx.Create(&de).Error
  56. if txErr != nil {
  57. return txErr
  58. }
  59. for _, dailyFeeDetail := range de.DailyFeeDetails {
  60. dailyFeeDetail.DailyFeeId = de.ID
  61. txErr := tx.Create(&dailyFeeDetail).Error
  62. if txErr != nil {
  63. return txErr
  64. }
  65. }
  66. return txErr
  67. })
  68. }
  69. // TODO:日常费用修改
  70. // UpdateDailyExpenses 修改日常费用
  71. func (de DailyExpenses) UpdateDailyExpenses() error {
  72. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  73. txErr := tx.Unscoped().Where("daily_fee_id = ?", de.ID).Delete(&DailyFeeDetails{}).Error
  74. if txErr != nil {
  75. return txErr
  76. }
  77. txErr = tx.Model(&de).Where("id = ?", de.ID).Updates(&de).Error
  78. if txErr != nil {
  79. return txErr
  80. }
  81. for _, dailyFeeDetail := range de.DailyFeeDetails {
  82. dailyFeeDetail.DailyFeeId = de.ID
  83. txErr := tx.Model(&DailyFeeDetails{}).Create(&dailyFeeDetail).Error
  84. if txErr != nil {
  85. return txErr
  86. }
  87. }
  88. return txErr
  89. })
  90. }
  91. // TODO:日常费用删除
  92. func (de DailyExpenses) DeleteDailyExpenses() error {
  93. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  94. txErr := tx.Unscoped().Where("daily_fee_id = ?", de.ID).Delete(&DailyFeeDetails{}).Error
  95. if txErr != nil {
  96. return txErr
  97. }
  98. txErr = tx.Unscoped().Delete(&de).Error
  99. if txErr != nil {
  100. return txErr
  101. }
  102. return txErr
  103. })
  104. }