safe_audit.service.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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/web/viewmodels"
  16. )
  17. type SafeAuditService interface {
  18. ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error)
  19. ValidStart(ctx iris.Context) (viewmodels.AuditStart, error)
  20. // AddAuditor(safeId int, bId int, auditId int, times int) error
  21. CloseAudit(id int, opinion string, curUid int, saveId int) error
  22. BackAudit(id int, opinion string, curUid int, saveId int, auditId int) error
  23. PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error
  24. StartAudit(safeId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int, inspection string, inspectionDetail string, demand string, createTime time.Time) error
  25. }
  26. type safeAuditService struct {
  27. validAdd string
  28. validPass string
  29. validClose string
  30. validBack string
  31. daoSafeAudit *dao.SafeAuditDao
  32. daoSafe *dao.SafeDao
  33. daoApprover *dao.ApproverDao
  34. daoTree *dao.TreeDao
  35. }
  36. //创建项目用户service
  37. func NewSafeAuditService() SafeAuditService {
  38. return &safeAuditService{
  39. validBack: "/api/safe_audit/back",
  40. validAdd: "/api/safe_audit/add",
  41. validClose: "/api/safe_audit/close",
  42. validPass: "/api/safe_audit/pass",
  43. daoSafeAudit: dao.NewSafeAuditDao(datasource.InstanceDbMaster()),
  44. daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()),
  45. daoApprover: dao.NewApproverDao(datasource.InstanceDbMaster()),
  46. daoTree: dao.NewTreeDao(datasource.InstanceDbMaster()),
  47. }
  48. }
  49. // 关闭审批流程
  50. func (s *safeAuditService) CloseAudit(id int, opinion string, curUid int, saveId int) error {
  51. err := s.daoApprover.CloseHandler("safe", id, opinion, curUid, saveId)
  52. return err
  53. }
  54. // 审批退回
  55. func (s *safeAuditService) BackAudit(id int, opinion string, curUid int, saveId int, auditId int) error {
  56. auditor, err := s.daoApprover.FindApproverById(id)
  57. if auditor.AuditId != curUid {
  58. return errors.New("该用户没有审批权限")
  59. }
  60. safe := s.daoSafe.FindById(saveId)
  61. // 退回到了检查人
  62. if auditId == 0 {
  63. // 初始化审批流程
  64. err = s.daoApprover.InitStatus("safe", auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
  65. } else {
  66. // 退回到审批流程中的某一个人
  67. err = s.daoApprover.BackHandlerWithId("safe", auditId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
  68. }
  69. return err
  70. }
  71. // 审批通过
  72. func (s *safeAuditService) PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error {
  73. err := s.daoApprover.PassHandler("safe", id, uid, auditId, opinion, rectifiedInfo)
  74. return err
  75. }
  76. func (s *safeAuditService) StartAudit(safeId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int, inspection string, inspectionDetail string, demand string, createTime time.Time) error {
  77. safe := s.daoSafe.FindById(safeId)
  78. if safe.Uid != uid {
  79. return errors.New("该用户没有操作权限")
  80. }
  81. // 清除可能有的旧的审批流程
  82. err := s.daoApprover.DeleteOldAuditors(bidsectionId, 1, safeId)
  83. if err != nil {
  84. return err
  85. }
  86. // 增加审批日志
  87. err = s.daoSafeAudit.AddAuditRecord(safeId, bidsectionId, uid, safe.Times, 0, 0, "", "")
  88. if err != nil {
  89. return err
  90. }
  91. // 改变安全巡检表的状态
  92. err = s.daoSafe.ChangeStatus(safeId, 1, inspection, inspectionDetail, demand, createTime)
  93. if err != nil {
  94. return err
  95. }
  96. // 创建审批流程, 同时添加推送消息
  97. err = s.daoApprover.InsertData(uid, bidsectionId, pid, 1, safeId, auditors, reAuditors)
  98. return err
  99. }
  100. // 规则校验
  101. func (s *safeAuditService) ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error) {
  102. safeAuditVaild := viewmodels.SafeAudit{}
  103. if ctx.Method() == "POST" {
  104. err := ctx.ReadJSON(&safeAuditVaild)
  105. if err != nil {
  106. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  107. return safeAuditVaild, err
  108. }
  109. if ctx.Path() == s.validAdd {
  110. err = safeAuditVaild.ValidateAddAuditor()
  111. return safeAuditVaild, err
  112. } else if ctx.Path() == s.validClose {
  113. err = safeAuditVaild.ValidateClose()
  114. return safeAuditVaild, err
  115. } else if ctx.Path() == s.validBack {
  116. err = safeAuditVaild.ValidateBack()
  117. return safeAuditVaild, err
  118. } else if ctx.Path() == s.validPass {
  119. err = safeAuditVaild.ValidatePass()
  120. return safeAuditVaild, err
  121. }
  122. return safeAuditVaild, err
  123. }
  124. return safeAuditVaild, nil
  125. }
  126. // 校验审批开始
  127. func (s *safeAuditService) ValidStart(ctx iris.Context) (viewmodels.AuditStart, error) {
  128. startAuditValid := viewmodels.AuditStart{}
  129. err := ctx.ReadJSON(&startAuditValid)
  130. if err != nil {
  131. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  132. return startAuditValid, err
  133. }
  134. err = startAuditValid.ValidateStart()
  135. return startAuditValid, err
  136. }