reimbursement.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package dao
  2. import (
  3. "github.com/shopspring/decimal"
  4. "gorm.io/gorm"
  5. "server/global"
  6. )
  7. type Reimbursement struct {
  8. global.GVA_MODEL
  9. ProjectCode string `json:"projectCode" form:"projectCode" gorm:"comment:项目编号"`
  10. Name string `json:"name" form:"name" gorm:"comment:项目名称"`
  11. Applicant string `json:"applicant" form:"applicant" gorm:"comment:报销申请人"`
  12. ApplicationTime string `json:"applicationTime" form:"applicationTime" gorm:"comment:申请日期"`
  13. Approval int `json:"approval" form:"approval" gorm:"comment:报销审批人"`
  14. User SysUser `json:"user" form:"user" gorm:"foreignKey:Approval;references:id;"`
  15. ReimbursementPrice decimal.Decimal `json:"reimbursementPrice" form:"reimbursementPrice" gorm:"comment:项目金额;type:decimal(10,2)"`
  16. Genre int `json:"genre" form:"genre" gorm:"comment:费用类型"`
  17. ExpensesGenre ExpensesGenre `json:"expensesGenre" form:"expensesGenre" gorm:"foreignKey:Genre;references:id;"`
  18. FeeDetails []FeeDetails `json:"feeDetails" form:"feeDetails" gorm:"-"`
  19. }
  20. func (Reimbursement) TableName() string {
  21. return "reimbursement"
  22. }
  23. // TODO:报销查询
  24. // QueryReimbursementList 查询报销列表
  25. func QueryReimbursementList(limit, offset int, code, name, time string) (reimbursement []Reimbursement, total int64, err error) {
  26. // 创建db
  27. db := global.GVA_DB.Model(&Reimbursement{}).Where("project_code = ?", code)
  28. // 如果有条件搜索 下方会自动创建搜索语句
  29. if name != "" {
  30. db = db.Where("applicant LIKE ?", "%"+name+"%")
  31. }
  32. if time != "" {
  33. db = db.Where("DATE_FORMAT(application_time, '%Y-%m') = ?", time)
  34. }
  35. err = db.Count(&total).Error
  36. if err != nil {
  37. return
  38. }
  39. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("ExpensesGenre").Preload("User").Find(&reimbursement).Error
  40. return reimbursement, total, err
  41. }
  42. func QueryReimbursement(code string) (reimbursement []Reimbursement, err error) {
  43. err = global.GVA_DB.Model(&Reimbursement{}).Where("project_code = ?", code).Preload("ExpensesGenre").Preload("User").Find(&reimbursement).Error
  44. return reimbursement, err
  45. }
  46. // TODO:报销新增
  47. // CreateReimbursement 新增报销单
  48. func (r Reimbursement) CreateReimbursement() error {
  49. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  50. txErr := tx.Create(&r).Error
  51. if txErr != nil {
  52. return txErr
  53. }
  54. for _, feeDetail := range r.FeeDetails {
  55. feeDetail.ReimbursementId = r.ID
  56. txErr := tx.Create(&feeDetail).Error
  57. if txErr != nil {
  58. return txErr
  59. }
  60. }
  61. return txErr
  62. })
  63. }
  64. // TODO:报销修改
  65. // UpdateReimbursement 修改报销单
  66. func (r Reimbursement) UpdateReimbursement() error {
  67. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  68. txErr := tx.Unscoped().Where("reimbursement_id = ?", r.ID).Delete(&FeeDetails{}).Error
  69. if txErr != nil {
  70. return txErr
  71. }
  72. txErr = tx.Model(&r).Where("id = ?", r.ID).Updates(&r).Error
  73. if txErr != nil {
  74. return txErr
  75. }
  76. for _, feeDetail := range r.FeeDetails {
  77. feeDetail.ReimbursementId = r.ID
  78. txErr := tx.Create(&feeDetail).Error
  79. if txErr != nil {
  80. return txErr
  81. }
  82. }
  83. return txErr
  84. })
  85. }
  86. // TODO:报销删除
  87. // DeleteReimbursement 删除报销单
  88. func (r Reimbursement) DeleteReimbursement() error {
  89. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  90. txErr := tx.Unscoped().Where("reimbursement_id = ?", r.ID).Delete(&FeeDetails{}).Error
  91. if txErr != nil {
  92. return txErr
  93. }
  94. txErr = tx.Unscoped().Delete(&r).Error
  95. if txErr != nil {
  96. return txErr
  97. }
  98. return txErr
  99. })
  100. }