project.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package dao
  2. import (
  3. "github.com/shopspring/decimal"
  4. "gorm.io/gorm"
  5. "server/global"
  6. )
  7. type Project struct {
  8. global.GVA_MODEL
  9. Code string `json:"code" form:"code" gorm:"comment:项目编号"`
  10. Name string `json:"name" form:"name" gorm:"comment:项目名称"`
  11. Principal string `json:"principal" form:"principal" gorm:"comment:负责人"`
  12. Price decimal.Decimal `json:"price" form:"price" gorm:"type:decimal(10,2);not null"`
  13. Level int `json:"level" form:"level" gorm:"级别"`
  14. Customer string `json:"customer" form:"customer" gorm:"相关客户"`
  15. Illustrate string `json:"illustrate" form:"illustrate" gorm:"comment:说明;type:varchar(200)"`
  16. State int `json:"state" form:"state" gorm:"comment:状态"`
  17. ProjectState ProjectState `json:"projectState" form:"projectState" gorm:"foreignKey:State;references:id;"`
  18. CollectionTime string `json:"collectionTime" form:"collectionTime" gorm:"comment:收款时间"`
  19. EndTime string `json:"endTime" form:"endTime" gorm:"comment:结束时间"`
  20. Files []ProjectFile `json:"files" form:"files" gorm:"-"`
  21. WorkingHours []ProjectWorkingHours `json:"workingHours" form:"workingHours" gorm:"-"`
  22. Collection []Collection `json:"collection" form:"collection" gorm:"-"`
  23. Reimbursement []Reimbursement `json:"reimbursement" form:"reimbursement" gorm:"-"`
  24. }
  25. func (Project) TableName() string {
  26. return "project"
  27. }
  28. // TODO:项目查询
  29. // QueryProjectList 查询项目列表
  30. func QueryProjectList(limit, offset, state int, name, time string) (project []Project, total int64, err error) {
  31. // 创建db
  32. db := global.GVA_DB.Model(&Project{})
  33. // 如果有条件搜索 下方会自动创建搜索语句
  34. if state != 0 {
  35. db = db.Where("state = ?", state)
  36. }
  37. if name != "" {
  38. db = db.Where("name LIKE ?", "%"+name+"%")
  39. }
  40. if time != "" {
  41. db = db.Where("DATE_FORMAT(created_at, '%Y-%m') = ?", time)
  42. }
  43. err = db.Count(&total).Error
  44. if err != nil {
  45. return
  46. }
  47. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("ProjectState").Find(&project).Error
  48. return project, total, err
  49. }
  50. // QueryProjectByCode 查询单个项目 按编号
  51. func QueryProjectByCode(code string) (project Project, err error) {
  52. err = global.GVA_DB.Model(&Project{}).Where("code = ?", code).Preload("ProjectState").First(&project).Error
  53. return
  54. }
  55. // QueryAllProject 查询所以项目
  56. func QueryAllProject() (projects []Project, err error) {
  57. err = global.GVA_DB.Model(&Project{}).Find(&projects).Error
  58. return projects, err
  59. }
  60. // TODO:项目新增
  61. // CreateProject 新增项目
  62. func (p Project) CreateProject() error {
  63. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  64. txErr := tx.Model(&Project{}).Create(&p).Error
  65. if txErr != nil {
  66. return txErr
  67. }
  68. for _, file := range p.Files {
  69. txErr := tx.Model(&ProjectFile{}).Create(&file).Error
  70. if txErr != nil {
  71. return txErr
  72. }
  73. }
  74. return txErr
  75. })
  76. }
  77. // TODO:项目修改
  78. // UpdateProject 修改项目
  79. func (p Project) UpdateProject() error {
  80. return global.GVA_DB.Model(&p).Updates(p).Error
  81. }
  82. // TODO:项目删除
  83. // DeleteProject 删除项目
  84. func DeleteProject(code string) error {
  85. return global.GVA_DB.Unscoped().Where("code = ?", code).Delete(&Project{}).Error
  86. }