project_process.go 8.0 KB

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