projectFee.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package dao
  2. import (
  3. "github.com/shopspring/decimal"
  4. "gorm.io/gorm"
  5. "server/global"
  6. )
  7. type ProjectFee struct {
  8. global.GVA_MODEL
  9. Reimburser int `json:"reimburser" form:"reimburser" gorm:"comment:报销人"`
  10. SysUser SysUser `json:"user" form:"user" gorm:"foreignKey:Reimburser;references:id;"`
  11. DepartmentId int `json:"departmentId" form:"departmentId" gorm:"comment:部门id"`
  12. Department Department `json:"department" form:"department" gorm:"foreignKey:DepartmentId;references:id;"`
  13. ExpenditureAmount float64 `json:"expenditureAmount" form:"expenditureAmount" gorm:"comment:支出金额;type:double(10,2)"`
  14. DepositAmount float64 `json:"depositAmount" form:"depositAmount" gorm:"comment:支入金额;type:double(10,2)"`
  15. FeeTime string `json:"feeTime" form:"feeTime" gorm:"comment:时间"`
  16. Genre int `json:"genre" form:"genre" gorm:"comment:费用类型id"`
  17. ProjectFeeGenre ProjectFeeGenre `json:"projectFeeGenre" form:"projectFeeGenre" gorm:"foreignKey:Genre;references:id;"`
  18. ProjectCode string `json:"projectCode" form:"projectCode" gorm:"comment:项目编号"`
  19. Project Project `json:"project" form:"project" gorm:"foreignKey:ProjectCode;references:code;"`
  20. ExpenseDetail string `json:"expenseDetail" form:"expenseDetail" gorm:"comment:费用明细;type:varchar(400)"`
  21. Remarks string `json:"remarks" form:"remarks" gorm:"comment:备注"`
  22. ThenBalance float64 `json:"thenBalance" form:"thenBalance" gorm:"comment:当时余额;type:double(10,2)"`
  23. }
  24. func (ProjectFee) TableName() string {
  25. return "project_fee"
  26. }
  27. func QueryProjectFeeList(limit, offset, genre, name int, code, dayTime, monthTime, yearTime string) (projectFee []ProjectFee, total int64, err error) {
  28. // 创建db
  29. db := global.GVA_DB.Model(&ProjectFee{})
  30. // 如果有条件搜索 下方会自动创建搜索语句
  31. if genre != 0 {
  32. db = db.Where("genre = ?", genre)
  33. }
  34. if name != 0 {
  35. db = db.Where("reimburser = ?", name)
  36. }
  37. if code != "" {
  38. db = db.Where("project_code = ?", code)
  39. }
  40. if dayTime != "" {
  41. db = db.Where("DATE_FORMAT(fee_time, '%Y-%m-%d') = ?", dayTime)
  42. }
  43. if monthTime != "" {
  44. db = db.Where("DATE_FORMAT(fee_time, '%Y-%m') = ?", monthTime)
  45. }
  46. if yearTime != "" {
  47. db = db.Where("DATE_FORMAT(fee_time, '%Y') = ?", yearTime)
  48. }
  49. err = db.Count(&total).Error
  50. if err != nil {
  51. return
  52. }
  53. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("SysUser").Preload("Department").Preload("Project").Preload("ProjectFeeGenre").Find(&projectFee).Error
  54. return projectFee, total, err
  55. }
  56. func QueryProjectFeeByGenre(genre int) (projectFee []ProjectFee, err error) {
  57. err = global.GVA_DB.Model(&ProjectFee{}).Where("genre = ?", genre).Find(&projectFee).Error
  58. return projectFee, err
  59. }
  60. type Reserve struct {
  61. ReserveAmount float64 `json:"reserveAmount"`
  62. ExpenditureAmount float64 `json:"expenditureAmount"`
  63. Balance float64 `json:"balance"`
  64. }
  65. func QueryReserveBalance() (reserve Reserve, err error) {
  66. err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  67. txErr := tx.Model(&ProjectFee{}).Select("SUM(expenditure_amount) as expenditure_amount").Where("genre = ?", 7).First(&reserve).Error
  68. if txErr != nil {
  69. return txErr
  70. }
  71. txErr = tx.Model(&Expenses{}).Select("SUM(expenditure_amount) as reserve_amount").Where("genre = ?", 7).First(&reserve).Error
  72. if txErr != nil {
  73. return txErr
  74. }
  75. return txErr
  76. })
  77. // 使用decimal 防止精度不准
  78. exponent := decimal.NewFromFloatWithExponent(reserve.ReserveAmount-reserve.ExpenditureAmount, -2)
  79. reserve.Balance = exponent.InexactFloat64()
  80. return reserve, err
  81. }
  82. func (e ProjectFee) CreateProjectFee() error {
  83. return global.GVA_DB.Create(&e).Error
  84. }
  85. func (e ProjectFee) UpdateProjectFee() error {
  86. return global.GVA_DB.Model(&ProjectFee{}).Select("*").Omit("created_at").Where("id = ?", e.ID).Updates(&e).Error
  87. }
  88. func (e ProjectFee) DeleteProjectFee() error {
  89. return global.GVA_DB.Unscoped().Where("id = ?", e.ID).Delete(&e).Error
  90. }