projectFee.go 4.1 KB

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