project_process.go 8.0 KB

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