projectMonthFee.go 2.0 KB

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