project.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package dao
  2. import (
  3. "gorm.io/gorm"
  4. "server/global"
  5. )
  6. type Project struct {
  7. global.GVA_MODEL
  8. Code string `json:"code" form:"code" gorm:"comment:项目编号"`
  9. Name string `json:"name" form:"name" gorm:"comment:项目名称"`
  10. Address string `json:"address" form:"address" gorm:"comment:项目地址"`
  11. FirstPrincipal string `json:"firstPrincipal" form:"firstPrincipal" gorm:"comment:甲方负责人"`
  12. FirstPhone string `json:"firstPhone" form:"firstPhone" gorm:"comment:甲方电话"`
  13. ProjectPrice float64 `json:"projectPrice" form:"projectPrice" gorm:"type:decimal(10,2);comment:合同金额"`
  14. SecondPrincipal string `json:"secondPrincipal" form:"secondPrincipal" gorm:"comment:乙方负责人"`
  15. SignTime string `json:"signTime" form:"signTime" gorm:"comment:合同签订日期"`
  16. IntoConstructionTime string `json:"intoConstructionTime" form:"intoConstructionTime" gorm:"comment:进场施工时间"`
  17. CompletedTime string `json:"completedTime" form:"completedTime" gorm:"comment:竣工时间"`
  18. SupervisorUint string `json:"supervisorUint" form:"supervisorUint" gorm:"comment:监理单位"`
  19. SupervisorName string `json:"supervisorName" form:"supervisorName" gorm:"comment:监理姓名"`
  20. SupervisorPhone string `json:"supervisorPhone" form:"supervisorPhone" gorm:"comment:监理电话"`
  21. Illustrate string `json:"illustrate" form:"illustrate" gorm:"comment:说明;type:varchar(200)"`
  22. State int `json:"state" form:"state" gorm:"comment:状态"`
  23. ProjectState ProjectState `json:"projectState" form:"projectState" gorm:"foreignKey:State;references:id;"`
  24. CollectionTime string `json:"collectionTime" form:"collectionTime" gorm:"comment:收款时间"`
  25. EndTime string `json:"endTime" form:"endTime" gorm:"comment:结束时间"`
  26. Files []ProjectFile `json:"files" form:"files" gorm:"-"`
  27. WorkingHours []ProjectWorkingHours `json:"workingHours" form:"workingHours" gorm:"-"`
  28. WorkingHoursTotal int64 `json:"workingHoursTotal" form:"workingHoursTotal" gorm:"-"`
  29. Collection []Collection `json:"collection" form:"collection" gorm:"-"`
  30. CollectionTotal int64 `json:"collectionTotal" form:"collectionTotal" gorm:"-"`
  31. Reimbursement []Reimbursement `json:"reimbursement" form:"reimbursement" gorm:"-"`
  32. ReimbursementTotal int64 `json:"reimbursementTotal" form:"reimbursementTotal" gorm:"-"`
  33. }
  34. func (Project) TableName() string {
  35. return "project"
  36. }
  37. // TODO:项目查询
  38. // QueryProjectList 查询项目列表
  39. func QueryProjectList(limit, offset, state int, name, time string) (project []Project, total int64, err error) {
  40. // 创建db
  41. db := global.GVA_DB.Model(&Project{})
  42. // 如果有条件搜索 下方会自动创建搜索语句
  43. if state != 0 {
  44. db = db.Where("state = ?", state)
  45. }
  46. if name != "" {
  47. db = db.Where("name LIKE ?", "%"+name+"%")
  48. }
  49. if time != "" {
  50. db = db.Where("DATE_FORMAT(created_at, '%Y-%m') = ?", time)
  51. }
  52. err = db.Count(&total).Error
  53. if err != nil {
  54. return
  55. }
  56. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("ProjectState").Find(&project).Error
  57. return project, total, err
  58. }
  59. // QueryProjectByCode 查询单个项目 按编号
  60. func QueryProjectByCode(code string) (project Project, err error) {
  61. err = global.GVA_DB.Model(&Project{}).Where("code = ?", code).Preload("ProjectState").First(&project).Error
  62. return
  63. }
  64. // QueryAllProject 查询所以项目
  65. func QueryAllProject() (projects []Project, err error) {
  66. err = global.GVA_DB.Model(&Project{}).Find(&projects).Error
  67. return projects, err
  68. }
  69. // TODO:项目新增
  70. // CreateProject 新增项目
  71. func (p Project) CreateProject() error {
  72. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  73. txErr := tx.Model(&Project{}).Create(&p).Error
  74. if txErr != nil {
  75. return txErr
  76. }
  77. for _, file := range p.Files {
  78. var isFile ProjectFile
  79. tx.Model(&ProjectFile{}).Where("project_code = ? AND name = ? AND genre = ?", file.ProjectCode, file.Name, file.Genre).First(&isFile)
  80. if isFile.ID != 0 {
  81. txErr := tx.Model(&ProjectFile{}).Where("id = ?", isFile.ID).Updates(&file).Error
  82. if txErr != nil {
  83. return txErr
  84. }
  85. } else {
  86. txErr := tx.Model(&ProjectFile{}).Create(&file).Error
  87. if txErr != nil {
  88. return txErr
  89. }
  90. }
  91. }
  92. return txErr
  93. })
  94. }
  95. // TODO:项目修改
  96. // UpdateProject 修改项目
  97. func (p Project) UpdateProject() error {
  98. return global.GVA_DB.Model(&p).Where("id = ?", p.ID).Updates(p).Error
  99. }
  100. // TODO:项目删除
  101. // DeleteProject 删除项目
  102. func DeleteProject(code string) error {
  103. return global.GVA_DB.Unscoped().Where("code = ?", code).Delete(&Project{}).Error
  104. }