safe_audit.service.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /*
  2. * @description: 安全巡检审批相关
  3. * @Author: LanJianRong
  4. * @Date: 2020-12-18
  5. * @FilePath: \construction_management\web\api\safe_rpc_api.go
  6. */
  7. package services
  8. import (
  9. "errors"
  10. "log"
  11. "time"
  12. "github.com/kataras/iris/v12"
  13. "go.mod/dao"
  14. "go.mod/datasource"
  15. "go.mod/models"
  16. "go.mod/web/viewmodels"
  17. )
  18. type SafeAuditService interface {
  19. ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error)
  20. ValidStart(ctx iris.Context) (viewmodels.AuditStart, error)
  21. AddAuditor(safeId int, bId int, auditId int, times int) error
  22. CloseAudit(id int, opinion string, curUid int, saveId int) error
  23. BackAudit(id int, opinion string, curUid int, saveId int, auditId int, progress string) error
  24. PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error
  25. StartAudit(safeId int, bidsectionId int, times int, auditors []int, reAuditors []int, uid int) error
  26. }
  27. type safeAuditService struct {
  28. validAdd string
  29. validPass string
  30. validClose string
  31. validBack string
  32. daoSafeAudit *dao.SafeAuditDao
  33. daoSafe *dao.SafeDao
  34. }
  35. //创建项目用户service
  36. func NewSafeAuditService() SafeAuditService {
  37. return &safeAuditService{
  38. validBack: "/api/safe_audit/back",
  39. validAdd: "/api/safe_audit/add",
  40. validClose: "/api/safe_audit/close",
  41. validPass: "/api/safe_audit/pass",
  42. daoSafeAudit: dao.NewSafeAuditDao(datasource.InstanceDbMaster()),
  43. daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()),
  44. }
  45. }
  46. // 增加审批人
  47. func (s *safeAuditService) AddAuditor(safeId int, bId int, auditId int, times int) error {
  48. err := s.daoSafeAudit.AddAuditor(safeId, bId, auditId, times)
  49. return err
  50. }
  51. // 关闭审批流程
  52. func (s *safeAuditService) CloseAudit(id int, opinion string, curUid int, saveId int) error {
  53. auditor, err := s.daoSafeAudit.FindById(id)
  54. if err != nil {
  55. return err
  56. }
  57. if auditor.AuditId != curUid {
  58. return errors.New("该用户没有审批权限!")
  59. }
  60. // 更改cm_safe_audit的记录
  61. err = s.daoSafeAudit.ChangeStatusById(id, opinion, 3, "")
  62. if err != nil {
  63. return err
  64. }
  65. // 更改cm_safe的记录
  66. err = s.daoSafe.ChangeStatus(saveId, 3, auditor.Times)
  67. if err != nil {
  68. return err
  69. }
  70. return nil
  71. }
  72. // 审批退回
  73. func (s *safeAuditService) BackAudit(id int, opinion string, curUid int, saveId int, auditId int, progress string) error {
  74. auditor, err := s.daoSafeAudit.FindById(id)
  75. if err != nil {
  76. return err
  77. }
  78. if auditor.AuditId != curUid {
  79. return errors.New("该用户没有审批权限!")
  80. }
  81. // 更改cm_safe_audit的记录
  82. err = s.daoSafeAudit.ChangeStatusById(id, opinion, 2, "")
  83. if err != nil {
  84. return err
  85. }
  86. safeData := s.daoSafe.FindById(saveId)
  87. // 拷贝审批流程
  88. // 退回检查人-uncheck
  89. // 整改人审批退回-checking
  90. // 复查人审批退回-checkNo
  91. // 审批组退回-checked
  92. err = s.daoSafeAudit.CopyAuditors(saveId, safeData.Times, progress, auditId)
  93. if err != nil {
  94. return err
  95. }
  96. // 更改cm_safe的记录
  97. err = s.daoSafe.ChangeStatus(saveId, 2, auditor.Times+1)
  98. if err != nil {
  99. return err
  100. }
  101. return nil
  102. }
  103. // 审批通过
  104. func (s *safeAuditService) PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error {
  105. auditor, err := s.daoSafeAudit.FindById(id)
  106. if err != nil {
  107. return err
  108. }
  109. if auditor.AuditId != uid {
  110. return errors.New("该用户没有审批权限!")
  111. }
  112. if auditId != 0 {
  113. // 审批人选择了整改人
  114. err := s.daoSafeAudit.ChangeStatusById(auditor.Id, "", 1, rectifiedInfo)
  115. if err != nil {
  116. return err
  117. }
  118. err = s.daoSafeAudit.AddCheckWorker(id, auditId, opinion)
  119. if err != nil {
  120. return err
  121. }
  122. } else {
  123. err := s.daoSafeAudit.ChangeStatusById(auditor.Id, "", 1, rectifiedInfo)
  124. if err != nil {
  125. return err
  126. }
  127. }
  128. return nil
  129. }
  130. func (s *safeAuditService) StartAudit(safeId int, bidsectionId int, times int, auditors []int, reAuditors []int, uid int) error {
  131. safe := s.daoSafe.FindById(safeId)
  132. if safe.Uid != uid {
  133. return errors.New("该用户没有操作权限!")
  134. }
  135. data := make([]models.CmSafeAudit, 0)
  136. for i, item := range auditors {
  137. auditVM := models.CmSafeAudit{}
  138. auditVM.AuditId = item
  139. auditVM.BidsectionId = bidsectionId
  140. auditVM.SafeId = safeId
  141. auditVM.AuditOrder = i + 1
  142. auditVM.CreateTime = time.Now()
  143. auditVM.Progress = 0
  144. auditVM.Status = 0
  145. auditVM.Times = times
  146. data = append(data, auditVM)
  147. }
  148. for i, item := range reAuditors {
  149. auditVM := models.CmSafeAudit{}
  150. auditVM.AuditId = item
  151. auditVM.BidsectionId = bidsectionId
  152. auditVM.SafeId = safeId
  153. auditVM.AuditOrder = i + 2 + len(auditors)
  154. auditVM.CreateTime = time.Now()
  155. auditVM.Progress = 2
  156. auditVM.Status = 0
  157. auditVM.Times = times
  158. data = append(data, auditVM)
  159. }
  160. err := s.daoSafeAudit.InsertData(data)
  161. if err != nil {
  162. return err
  163. }
  164. err = s.daoSafe.ChangeStatus(safeId, 1, times)
  165. if err != nil {
  166. return err
  167. }
  168. return nil
  169. }
  170. // 规则校验
  171. func (s *safeAuditService) ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error) {
  172. safeAuditVaild := viewmodels.SafeAudit{}
  173. if ctx.Method() == "POST" {
  174. err := ctx.ReadJSON(&safeAuditVaild)
  175. if err != nil {
  176. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  177. return safeAuditVaild, err
  178. }
  179. if ctx.Path() == s.validAdd {
  180. err = safeAuditVaild.ValidateAddAuditor()
  181. return safeAuditVaild, err
  182. } else if ctx.Path() == s.validClose {
  183. err = safeAuditVaild.ValidateClose()
  184. return safeAuditVaild, err
  185. } else if ctx.Path() == s.validBack {
  186. err = safeAuditVaild.ValidateBack()
  187. return safeAuditVaild, err
  188. } else if ctx.Path() == s.validPass {
  189. err = safeAuditVaild.ValidatePass()
  190. return safeAuditVaild, err
  191. }
  192. return safeAuditVaild, err
  193. }
  194. return safeAuditVaild, nil
  195. }
  196. // 校验审批开始
  197. func (s *safeAuditService) ValidStart(ctx iris.Context) (viewmodels.AuditStart, error) {
  198. startAuditValid := viewmodels.AuditStart{}
  199. err := ctx.ReadJSON(&startAuditValid)
  200. if err != nil {
  201. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  202. return startAuditValid, err
  203. }
  204. err = startAuditValid.ValidateStart()
  205. return startAuditValid, err
  206. }