project_process.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package dao
  2. import "server/global"
  3. type ProjectProcess struct {
  4. global.GVA_MODEL
  5. ProjectProcessName string `json:"projectProcessName" form:"projectProcessName" gorm:"comment:项目审批名称"`
  6. Applicant int `json:"applicant" form:"applicant" gorm:"comment:申请人"`
  7. User SysUser `json:"user" form:"user" gorm:"foreignKey:Applicant;references:id;"`
  8. ProjectId int `json:"projectId" form:"projectId" gorm:"comment:项目id"`
  9. CurrentNodeOrder int `json:"currentNodeOrder" form:"currentNodeOrder" gorm:"comment:当前审批节点id"`
  10. Node Node `json:"node" form:"node" gorm:"foreignKey:CurrentNodeOrder;references:id;"`
  11. ProcessApprovalId int `json:"processApprovalId" form:"processApprovalId" gorm:"comment:当前审批流程id"`
  12. Process Process `json:"process" form:"process" gorm:"foreignKey:ProcessApprovalId;references:id"`
  13. ProjectType string `json:"projectType" form:"projectType" gorm:"comment:项目类型"`
  14. Descriptions []Description `json:"descriptions" form:"descriptions" gorm:"foreignKey:ProjectProcessId;"`
  15. State int `json:"isOver" form:"isOver" gorm:"comment:状态;default:0;"`
  16. Code string `json:"code" form:"code" gorm:"-"`
  17. IsBack bool `json:"isBack" form:"isBack" gorm:"default:false;comment:是否打回"`
  18. }
  19. func (ProjectProcess) TableName() string {
  20. return "project_process"
  21. }
  22. func QueryProjectApplicantList(limit, offset, applicant int) (projectProcesses []ProjectProcess, total int64, err error) {
  23. // 创建db
  24. db := global.GVA_DB.Model(&ProjectProcess{})
  25. // 如果有条件搜索 下方会自动创建搜索语句
  26. if applicant != 0 {
  27. db = db.Where("applicant = ?", applicant)
  28. }
  29. err = db.Count(&total).Error
  30. if err != nil {
  31. return
  32. }
  33. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
  34. for i, projectProcess := range projectProcesses {
  35. var processNodes []ProcessNodes
  36. err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
  37. if err != nil {
  38. return nil, 0, err
  39. }
  40. var nodes []Node
  41. for _, node := range processNodes {
  42. var node1 Node
  43. err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
  44. if err != nil {
  45. return nil, 0, err
  46. }
  47. node1.Order = node.NodeOrder
  48. nodes = append(nodes, node1)
  49. }
  50. projectProcesses[i].Process.Nodes = nodes
  51. //获取当前节点所有信息
  52. var node Node
  53. err = global.GVA_DB.Model(&Node{}).Where("id = ?", projectProcess.CurrentNodeOrder).Preload("Approver").First(&node).Error
  54. projectProcesses[i].Node = node
  55. var processNode ProcessNodes
  56. err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ? and node_id = ?", projectProcess.Process.ID, node.ID).First(&processNode).Error
  57. projectProcesses[i].Node.Order = processNode.NodeOrder
  58. }
  59. return projectProcesses, total, err
  60. }
  61. func QueryProjectProcessList(limit, offset, applicant int) (projectProcesses []ProjectProcess, total int64, err error) {
  62. // 创建db
  63. db := global.GVA_DB.Model(&ProjectProcess{}).Joins("JOIN node ON project_process.current_node_order = node.id").Where("node.approver_id = ? AND project_process.is_back = ?", applicant, false)
  64. // 如果有条件搜索 下方会自动创建搜索语句
  65. err = db.Count(&total).Error
  66. if err != nil {
  67. return
  68. }
  69. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
  70. for i, projectProcess := range projectProcesses {
  71. var processNodes []ProcessNodes
  72. err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
  73. if err != nil {
  74. return nil, 0, err
  75. }
  76. var nodes []Node
  77. for _, node := range processNodes {
  78. var node1 Node
  79. err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
  80. if err != nil {
  81. return nil, 0, err
  82. }
  83. node1.Order = node.NodeOrder
  84. nodes = append(nodes, node1)
  85. }
  86. projectProcesses[i].Process.Nodes = nodes
  87. //获取当前节点所有信息
  88. var node Node
  89. err = global.GVA_DB.Model(&Node{}).Where("id = ?", projectProcess.CurrentNodeOrder).Preload("Approver").First(&node).Error
  90. projectProcesses[i].Node = node
  91. var processNode ProcessNodes
  92. err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ? and node_id = ?", projectProcess.Process.ID, node.ID).First(&processNode).Error
  93. projectProcesses[i].Node.Order = processNode.NodeOrder
  94. }
  95. return projectProcesses, total, err
  96. }
  97. func QueryProjectProcessById(id int) (projectProcess ProjectProcess, err error) {
  98. err = global.GVA_DB.Where("id =?", id).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").First(&projectProcess).Error
  99. var processNodes []ProcessNodes
  100. err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
  101. if err != nil {
  102. return projectProcess, err
  103. }
  104. var nodes []Node
  105. for _, node := range processNodes {
  106. var node1 Node
  107. err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
  108. if err != nil {
  109. return projectProcess, err
  110. }
  111. node1.Order = node.NodeOrder
  112. nodes = append(nodes, node1)
  113. }
  114. projectProcess.Process.Nodes = nodes
  115. //获取当前节点所有信息
  116. var node Node
  117. err = global.GVA_DB.Model(&Node{}).Where("id = ?", projectProcess.CurrentNodeOrder).Preload("Approver").First(&node).Error
  118. projectProcess.Node = node
  119. var processNode ProcessNodes
  120. err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ? and node_id = ?", projectProcess.Process.ID, node.ID).First(&processNode).Error
  121. projectProcess.Node.Order = processNode.NodeOrder
  122. //当项目类型为立项时
  123. if projectProcess.ProjectType == "立项" {
  124. var project Project
  125. err = global.GVA_DB.Model(&Project{}).Where("id = ?", projectProcess.ProjectId).First(&project).Error
  126. if err != nil {
  127. return projectProcess, err
  128. }
  129. projectProcess.Code = project.Code
  130. }
  131. return projectProcess, err
  132. }
  133. func QueryProjectProcessByProcessApprovalId(id int) (projectProcesses []ProjectProcess, err error) {
  134. err = global.GVA_DB.Where("process_approval_id =?", id).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
  135. for i, projectProcess := range projectProcesses {
  136. var processNodes []ProcessNodes
  137. err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
  138. if err != nil {
  139. return projectProcesses, err
  140. }
  141. var nodes []Node
  142. for _, node := range processNodes {
  143. var node1 Node
  144. err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
  145. if err != nil {
  146. return projectProcesses, err
  147. }
  148. node1.Order = node.NodeOrder
  149. nodes = append(nodes, node1)
  150. }
  151. projectProcesses[i].Process.Nodes = nodes
  152. }
  153. return projectProcesses, err
  154. }
  155. func (pp ProjectProcess) CreateProjectProcess() error {
  156. return global.GVA_DB.Create(&pp).Error
  157. }
  158. func (pp ProjectProcess) UpdateProjectProcess() error {
  159. return global.GVA_DB.Where("id = ?", pp.ID).Updates(&pp).Error
  160. }
  161. func Replenished(id int) error {
  162. return global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", id).Update("is_back", false).Error
  163. }
  164. func (pp ProjectProcess) DeleteProjectProcess() error {
  165. return global.GVA_DB.Unscoped().Delete(&pp).Error
  166. }