monthExpenses.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package dao
  2. import (
  3. "gorm.io/gorm"
  4. "server/global"
  5. )
  6. type MonthExpenses struct {
  7. global.GVA_MODEL
  8. DepartmentId int `json:"departmentId" form:"departmentId" gorm:"comment:部门id"`
  9. Department Department `json:"department" form:"department" gorm:"foreignKey:DepartmentId;references:id;"`
  10. Genre int `json:"genre" form:"genre" gorm:"comment:费用类型Id"`
  11. ExpensesGenre ExpensesGenre `json:"expensesGenre" form:"expensesGenre" gorm:"foreignKey:Genre;references:id;"`
  12. TotalDeposit float64 `json:"totalDeposit" form:"totalDeposit" gorm:"comment:总支入;type:double(10,2)"`
  13. TotalExpenditure float64 `json:"totalExpenditure" form:"totalExpenditure" gorm:"comment:总支出;type:double(10,2)"`
  14. SettlementMonth string `json:"settlementMonth" form:"settlementMonth" gorm:"comment:结算月份"`
  15. }
  16. func (MonthExpenses) TableName() string {
  17. return "month_expenses"
  18. }
  19. func QueryMonthExpenses(monthTime, yearTime string, genreId int) (monthExpenses []MonthExpenses, err error) {
  20. db := global.GVA_DB.Debug().Model(&MonthExpenses{}).Select("department_id, SUM(total_deposit) AS total_deposit, SUM(total_expenditure) AS total_expenditure")
  21. if monthTime != "" {
  22. db = db.Where("DATE_FORMAT(CONCAT(settlement_month, '-01'), '%Y-%m') = ?", monthTime)
  23. }
  24. if yearTime != "" {
  25. db = db.Where("DATE_FORMAT(CONCAT(settlement_month, '-01'), '%Y') = ?", yearTime)
  26. }
  27. if genreId != 0 {
  28. db = db.Where("genre = ?", genreId)
  29. }
  30. err = db.Group("department_id").Preload("ExpensesGenre").Preload("Department").Find(&monthExpenses).Error
  31. return monthExpenses, err
  32. }
  33. func CreateMonthExpenses() error {
  34. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  35. tx = tx.Debug()
  36. txErr := tx.Session(&gorm.Session{AllowGlobalUpdate: true}).Unscoped().Delete(&MonthExpenses{}).Error
  37. if txErr != nil {
  38. return txErr
  39. }
  40. var fees []MonthExpenses
  41. txErr = tx.Raw(`SELECT DATE_FORMAT(fee_time, '%Y-%m') AS settlement_month,department_id, genre, SUM(deposit_amount) AS total_deposit, SUM(expenditure_amount) AS total_expenditure FROM expenses GROUP BY DATE_FORMAT(fee_time, '%Y-%m'),department_id,genre`).Scan(&fees).Error
  42. if txErr != nil {
  43. return txErr
  44. }
  45. txErr = tx.Model(&MonthExpenses{}).Create(&fees).Error
  46. if txErr != nil {
  47. return txErr
  48. }
  49. return txErr
  50. })
  51. }