safe_audit.service.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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, 4, "")
  62. if err != nil {
  63. return err
  64. }
  65. // 更改cm_safe的记录
  66. err = s.daoSafe.ChangeStatus(saveId, 5, 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. // 改变当前审批记录的状态为已通过
  115. err := s.daoSafeAudit.ChangeStatusById(auditor.Id, opinion, 2, rectifiedInfo)
  116. // 修改cm_safe表的status状态为待整改
  117. err = s.daoSafe.ChangeStatus(auditor.SafeId, 2, auditor.Times)
  118. // 增加整改人的审批记录
  119. err = s.daoSafeAudit.AddCheckWorker(id, auditId)
  120. if err != nil {
  121. return err
  122. }
  123. } else {
  124. // 改变当前记录的状态为已通过
  125. err := s.daoSafeAudit.ChangeStatusById(auditor.Id, opinion, 2, rectifiedInfo)
  126. if auditor.Progress == 1 {
  127. // 整改人审批流程
  128. // 修改cm_safe表的status状态为待复查
  129. err = s.daoSafe.ChangeStatus(auditor.SafeId, 3, auditor.Times)
  130. } else {
  131. // 复查流程
  132. // 查找最后一个审批人
  133. lastAuditor, err := s.daoSafeAudit.GetLastAuditor(auditor.Times, auditor.SafeId)
  134. if err != nil {
  135. return err
  136. }
  137. if lastAuditor.Id == auditor.Id {
  138. // 说明审批流程已经走完
  139. err = s.daoSafe.ChangeStatus(auditor.SafeId, 4, auditor.Times)
  140. }
  141. }
  142. if err != nil {
  143. return err
  144. }
  145. }
  146. // 改变下一条记录为待审核
  147. err = s.daoSafeAudit.ChangeNextRecord(auditor.Times, auditor.AuditOrder+1)
  148. if err != nil {
  149. return err
  150. }
  151. return nil
  152. }
  153. func (s *safeAuditService) StartAudit(safeId int, bidsectionId int, times int, auditors []int, reAuditors []int, uid int) error {
  154. safe := s.daoSafe.FindById(safeId)
  155. if safe.Uid != uid {
  156. return errors.New("该用户没有操作权限!")
  157. }
  158. data := make([]models.CmSafeAudit, 0)
  159. for i, item := range auditors {
  160. auditVM := models.CmSafeAudit{}
  161. auditVM.AuditId = item
  162. auditVM.BidsectionId = bidsectionId
  163. auditVM.SafeId = safeId
  164. auditVM.AuditOrder = i + 1
  165. auditVM.CreateTime = time.Now()
  166. auditVM.Progress = 0
  167. if i == 0 {
  168. auditVM.Status = 1
  169. } else {
  170. auditVM.Status = 0
  171. }
  172. auditVM.Times = times
  173. data = append(data, auditVM)
  174. }
  175. for i, item := range reAuditors {
  176. auditVM := models.CmSafeAudit{}
  177. auditVM.AuditId = item
  178. auditVM.BidsectionId = bidsectionId
  179. auditVM.SafeId = safeId
  180. auditVM.AuditOrder = i + 2 + len(auditors)
  181. auditVM.CreateTime = time.Now()
  182. auditVM.Progress = 2
  183. auditVM.Status = 0
  184. auditVM.Times = times
  185. data = append(data, auditVM)
  186. }
  187. err := s.daoSafeAudit.InsertData(data)
  188. if err != nil {
  189. return err
  190. }
  191. err = s.daoSafe.ChangeStatus(safeId, 1, times)
  192. if err != nil {
  193. return err
  194. }
  195. return nil
  196. }
  197. // 规则校验
  198. func (s *safeAuditService) ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error) {
  199. safeAuditVaild := viewmodels.SafeAudit{}
  200. if ctx.Method() == "POST" {
  201. err := ctx.ReadJSON(&safeAuditVaild)
  202. if err != nil {
  203. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  204. return safeAuditVaild, err
  205. }
  206. if ctx.Path() == s.validAdd {
  207. err = safeAuditVaild.ValidateAddAuditor()
  208. return safeAuditVaild, err
  209. } else if ctx.Path() == s.validClose {
  210. err = safeAuditVaild.ValidateClose()
  211. return safeAuditVaild, err
  212. } else if ctx.Path() == s.validBack {
  213. err = safeAuditVaild.ValidateBack()
  214. return safeAuditVaild, err
  215. } else if ctx.Path() == s.validPass {
  216. err = safeAuditVaild.ValidatePass()
  217. return safeAuditVaild, err
  218. }
  219. return safeAuditVaild, err
  220. }
  221. return safeAuditVaild, nil
  222. }
  223. // 校验审批开始
  224. func (s *safeAuditService) ValidStart(ctx iris.Context) (viewmodels.AuditStart, error) {
  225. startAuditValid := viewmodels.AuditStart{}
  226. err := ctx.ReadJSON(&startAuditValid)
  227. if err != nil {
  228. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  229. return startAuditValid, err
  230. }
  231. err = startAuditValid.ValidateStart()
  232. return startAuditValid, err
  233. }