description.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package dao
  2. import (
  3. "fmt"
  4. "server/global"
  5. )
  6. type Description struct {
  7. global.GVA_MODEL
  8. ProjectProcessId int `json:"projectProcessId" form:"projectProcessId" gorm:"comment:项目审批id"`
  9. ApprovalOpinion string `json:"approvalOpinion" form:"approvalOpinion" gorm:"comment:审批意见"`
  10. NodeId int `json:"nodeId" form:"nodeId" gorm:"comment:节点id"`
  11. Node Node `json:"node" form:"node" gorm:"foreignKey:NodeId;references:id;"`
  12. ApprovalTime string `json:"approvalTime" form:"approvalTime" gorm:"comment:审批时间"`
  13. OptionResult string `json:"optionResult" form:"optionResult" gorm:"comment:操作结果"`
  14. }
  15. func (Description) TableName() string {
  16. return "description"
  17. }
  18. func QueryDescriptionByProjectProcessId(projectProcessId int) (descriptions []Description, err error) {
  19. err = global.GVA_DB.Model(&Description{}).Where("project_process_id=?", projectProcessId).Find(&descriptions).Error
  20. return descriptions, err
  21. }
  22. func QueryDescriptionById(id int) (description Description, err error) {
  23. err = global.GVA_DB.Model(&Description{}).Where("id =?", id).First(&description).Error
  24. return description, err
  25. }
  26. func (d Description) CreateDescription() error {
  27. return global.GVA_DB.Create(&d).Error
  28. }
  29. func (d Description) UpdateDescription() error {
  30. return global.GVA_DB.Where("id = ?", d.ID).Updates(&d).Error
  31. }
  32. func (d Description) DeleteDescription() error {
  33. return global.GVA_DB.Unscoped().Delete(&d).Error
  34. }
  35. func ProcessOperate(projectProcess ProjectProcess, description Description) (err error) {
  36. //当前节点
  37. var currentNode Node
  38. //下个节点
  39. var lastNode Node
  40. for _, node := range projectProcess.Process.Nodes {
  41. if node.ID == projectProcess.Node.ID {
  42. currentNode = node
  43. }
  44. if node.Order == currentNode.Order+1 {
  45. lastNode = node
  46. }
  47. }
  48. // 当是最后一步时进行通过的操作
  49. if currentNode.Order == len(projectProcess.Process.Nodes) && description.OptionResult == "通过" {
  50. // 审批通过后,修改所属项目流程的状态
  51. err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("state", 1).Error
  52. if err != nil {
  53. return err
  54. }
  55. // 审批通过后,修改所属项目的状态
  56. err = global.GVA_DB.Model(&Project{}).Where("id = ?", projectProcess.ProjectId).Update("is_approve", 1).Error
  57. if err != nil {
  58. return err
  59. }
  60. //流程记录保存
  61. err = description.CreateDescription()
  62. if err != nil {
  63. return err
  64. }
  65. //通知
  66. notice := Notice{
  67. Title: "审批结果",
  68. Content: fmt.Sprintf("您的申请已通过审批"),
  69. Type: projectProcess.ProjectType,
  70. UserId: projectProcess.Applicant,
  71. }
  72. err = notice.CreateNotice()
  73. if err != nil {
  74. return err
  75. }
  76. return err
  77. }
  78. // 当是最后一步时进行打回的操作
  79. if currentNode.Order == len(projectProcess.Process.Nodes) && description.OptionResult == "打回" {
  80. //流程记录保存
  81. err = description.CreateDescription()
  82. if err != nil {
  83. return err
  84. }
  85. //通知
  86. notice := Notice{
  87. Title: "审批结果",
  88. Content: "您的申请未通过,请补充文件." + description.ApprovalOpinion,
  89. Type: projectProcess.ProjectType,
  90. UserId: projectProcess.Applicant,
  91. }
  92. err = notice.CreateNotice()
  93. if err != nil {
  94. return err
  95. }
  96. // 设置为打回状态
  97. err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("is_back", true).Error
  98. if err != nil {
  99. return err
  100. }
  101. return err
  102. }
  103. // 当是最后一步时进行拒绝的操作
  104. if currentNode.Order == len(projectProcess.Process.Nodes) && description.OptionResult == "拒绝" {
  105. // 审批通过后,修改所属项目流程的状态
  106. err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("state", 2).Error
  107. if err != nil {
  108. return err
  109. }
  110. //流程记录保存
  111. err = description.CreateDescription()
  112. if err != nil {
  113. return err
  114. }
  115. //通知
  116. notice := Notice{
  117. Title: "审批结果",
  118. Content: fmt.Sprintf("您的申请未通过"),
  119. Type: projectProcess.ProjectType,
  120. UserId: projectProcess.Applicant,
  121. }
  122. err = notice.CreateNotice()
  123. if err != nil {
  124. return err
  125. }
  126. return err
  127. }
  128. // 最后之前才会到达 如果为最后在上面完成后会return出去
  129. if description.OptionResult == "通过" {
  130. // 节点通过后,修改所属项目流程的当前节点为下个节点
  131. err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("current_node_order", lastNode.ID).Error
  132. if err != nil {
  133. return err
  134. }
  135. //流程记录保存
  136. err = description.CreateDescription()
  137. if err != nil {
  138. return err
  139. }
  140. //通知
  141. notice := Notice{
  142. Title: "审批结果",
  143. Content: fmt.Sprintf("您的申请已通过审批"),
  144. Type: projectProcess.ProjectType,
  145. UserId: projectProcess.Applicant,
  146. }
  147. err = notice.CreateNotice()
  148. if err != nil {
  149. return err
  150. }
  151. return err
  152. }
  153. // 最后之前才会到达 如果为最后在上面完成后会return出去
  154. if description.OptionResult == "打回" {
  155. //流程记录保存
  156. err = description.CreateDescription()
  157. if err != nil {
  158. return err
  159. }
  160. //通知
  161. notice := Notice{
  162. Title: "审批结果",
  163. Content: "您的申请未通过,请补充文件." + description.ApprovalOpinion,
  164. Type: projectProcess.ProjectType,
  165. UserId: projectProcess.Applicant,
  166. }
  167. err = notice.CreateNotice()
  168. if err != nil {
  169. return err
  170. }
  171. // 设置为打回状态
  172. err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("is_back", true).Error
  173. if err != nil {
  174. return err
  175. }
  176. return err
  177. }
  178. //
  179. if description.OptionResult == "拒绝" {
  180. // 审批通过后,修改所属项目流程的状态
  181. err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("state", 2).Error
  182. if err != nil {
  183. return err
  184. }
  185. // 审批通过后,修改所属项目的状态
  186. err = global.GVA_DB.Model(&Project{}).Where("id = ?", projectProcess.ProjectId).Update("is_approve", 1).Error
  187. if err != nil {
  188. return err
  189. }
  190. //流程记录保存
  191. err = description.CreateDescription()
  192. if err != nil {
  193. return err
  194. }
  195. //通知
  196. notice := Notice{
  197. Title: "审批结果",
  198. Content: fmt.Sprintf("您的申请未通过"),
  199. Type: projectProcess.ProjectType,
  200. UserId: projectProcess.Applicant,
  201. }
  202. err = notice.CreateNotice()
  203. if err != nil {
  204. return err
  205. }
  206. return err
  207. }
  208. return err
  209. }