reimbursement.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. Price decimal.Decimal `json:"price" form:"price" gorm:"comment:项目金额;type:decimal(10,2)"`
  16. Genre string `json:"genre" form:"genre" gorm:"comment:费用类型"`
  17. FeeDetails []FeeDetails `json:"feeDetails" form:"feeDetails" gorm:"-"`
  18. }
  19. func (Reimbursement) TableName() string {
  20. return "reimbursement"
  21. }
  22. // TODO:报销查询
  23. // QueryReimbursementList 查询报销列表
  24. func QueryReimbursementList(limit, offset int, code, name, time string) (reimbursement []Reimbursement, total int64, err error) {
  25. // 创建db
  26. db := global.GVA_DB.Model(&Reimbursement{}).Where("project_code = ?", code)
  27. // 如果有条件搜索 下方会自动创建搜索语句
  28. if name != "" {
  29. db = db.Where("name LIKE ?", "%"+name+"%")
  30. }
  31. if time != "" {
  32. db = db.Where("DATE_FORMAT(application_time, '%Y-%m') = ?", time)
  33. }
  34. err = db.Count(&total).Error
  35. if err != nil {
  36. return
  37. }
  38. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Find(&reimbursement).Error
  39. return reimbursement, total, err
  40. }
  41. func QueryReimbursement(code string) (reimbursement []Reimbursement, err error) {
  42. err = global.GVA_DB.Model(&Reimbursement{}).Where("project_code = ?", code).Preload("User").Find(&reimbursement).Error
  43. return reimbursement, err
  44. }
  45. // TODO:报销新增
  46. // CreateReimbursement 新增报销单
  47. func (r Reimbursement) CreateReimbursement() error {
  48. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  49. txErr := tx.Create(&r).Error
  50. if txErr != nil {
  51. return txErr
  52. }
  53. for _, feeDetail := range r.FeeDetails {
  54. txErr := tx.Create(&feeDetail).Error
  55. if txErr != nil {
  56. return txErr
  57. }
  58. }
  59. return txErr
  60. })
  61. }
  62. // TODO:报销修改
  63. // UpdateReimbursement 修改报销单
  64. func (r Reimbursement) UpdateReimbursement() error {
  65. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  66. txErr := tx.Unscoped().Where("reimbursement_id = ?", r.ID).Delete(&FeeDetails{}).Error
  67. if txErr != nil {
  68. return txErr
  69. }
  70. txErr = tx.Model(&r).Updates(&r).Error
  71. if txErr != nil {
  72. return txErr
  73. }
  74. for _, feeDetail := range r.FeeDetails {
  75. txErr := tx.Create(&feeDetail).Error
  76. if txErr != nil {
  77. return txErr
  78. }
  79. }
  80. return txErr
  81. })
  82. }
  83. // TODO:报销删除
  84. // DeleteReimbursement 删除报销单
  85. func (r Reimbursement) DeleteReimbursement() error {
  86. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  87. txErr := tx.Unscoped().Where("reimbursement_id = ?", r.ID).Delete(&FeeDetails{}).Error
  88. if txErr != nil {
  89. return txErr
  90. }
  91. txErr = tx.Unscoped().Delete(&r).Error
  92. if txErr != nil {
  93. return txErr
  94. }
  95. return txErr
  96. })
  97. }