/* * @description: 安全巡检审批相关 * @Author: LanJianRong * @Date: 2020-12-18 * @FilePath: \construction_management\web\api\safe_rpc_api.go */ package services import ( "errors" "log" "github.com/kataras/iris/v12" "go.mod/dao" "go.mod/datasource" "go.mod/web/viewmodels" ) type SafeAuditService interface { ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error) ValidStart(ctx iris.Context) (viewmodels.AuditStart, error) // AddAuditor(safeId int, bId int, auditId int, times int) error CloseAudit(id int, opinion string, curUid int, saveId int) error BackAudit(id int, opinion string, curUid int, saveId int, auditId int) error PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error StartAudit(safeId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int) error } type safeAuditService struct { validAdd string validPass string validClose string validBack string daoSafeAudit *dao.SafeAuditDao daoSafe *dao.SafeDao daoApprover *dao.ApproverDao } //创建项目用户service func NewSafeAuditService() SafeAuditService { return &safeAuditService{ validBack: "/api/safe_audit/back", validAdd: "/api/safe_audit/add", validClose: "/api/safe_audit/close", validPass: "/api/safe_audit/pass", daoSafeAudit: dao.NewSafeAuditDao(datasource.InstanceDbMaster()), daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()), daoApprover: dao.NewApproverDao(datasource.InstanceDbMaster()), } } // 关闭审批流程 func (s *safeAuditService) CloseAudit(id int, opinion string, curUid int, saveId int) error { auditor, err := s.daoApprover.FindApproverById(id) if auditor.AuditId != curUid { return errors.New("该用户没有审批权限!") } safe := s.daoSafe.FindById(auditor.DataId) // 增加审批日志记录 err = s.daoSafeAudit.AddAuditRecord(auditor.DataId, auditor.BidsectionId, auditor.AuditId, safe.Times, 2, auditor.Progress, "") // 更改cm_safe的记录 err = s.daoSafe.ChangeStatus(saveId, 5) // 更改cm_approver的记录 err = s.daoApprover.ChangeStatus(id, 3) return err } // 审批退回 func (s *safeAuditService) BackAudit(id int, opinion string, curUid int, saveId int, auditId int) error { auditor, err := s.daoApprover.FindApproverById(id) if auditor.AuditId != curUid { return errors.New("该用户没有审批权限!") } safe := s.daoSafe.FindById(saveId) // 增加审批日志 err = s.daoSafeAudit.AddAuditRecord(auditor.DataId, auditor.BidsectionId, auditor.AuditId, safe.Times, 1, auditor.Progress, "") if err != nil { return err } // 退回到了检查人 if auditId == 0 { // 初始化审批流程 err = s.daoApprover.InitStatus(auditor.BidsectionId, auditor.DataType, auditor.DataId) } else { // 退回到审批流程中的某一个人 err = s.daoApprover.BackHandlerWithId(auditId) } safeData := s.daoSafe.FindById(saveId) err = s.daoSafeAudit.CopyAuditors(saveId, safeData.Times, auditId) return err } // 审批通过 func (s *safeAuditService) PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error { auditor, err := s.daoApprover.FindApproverById(id) if err != nil { return err } // 获取安全巡检记录 safe := s.daoSafe.FindById(auditor.DataId) if auditor.AuditId != uid { return errors.New("该用户没有审批权限!") } // 增加审批日志 err = s.daoSafeAudit.AddAuditRecord(auditor.DataId, auditor.BidsectionId, auditor.AuditId, safe.Times, 0, auditor.Progress, rectifiedInfo) // 改变审批流程中当前审批人以及下一个审批人的审批流程状态 err = s.daoApprover.ChangeStatus(id, 2) err = s.daoApprover.ChangeNextStatus(id, 1) // 审批人选择了整改人 if auditId != 0 { // 修改cm_safe表的status状态为待整改 err = s.daoSafe.ChangeStatus(auditor.DataId, 2) // 改变审批流程中的整改人id err = s.daoApprover.ChangeAuditId(auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditOrder+1, auditId) } else { if auditor.Progress == 1 { // 整改人审批流程 // 修改cm_safe表的status状态为待复查 err = s.daoSafe.ChangeStatus(auditor.DataId, 3) } else { // 复查流程 // 查找最后一个审批人 lastAuditor, err := s.daoApprover.GetLastAuditor(auditor.BidsectionId, auditor.DataType, auditor.DataId) if err != nil { return err } if lastAuditor.AuditId == auditor.Id { // 说明审批流程已经走完 err = s.daoSafe.ChangeStatus(auditor.DataId, 4) } } } return err } func (s *safeAuditService) StartAudit(safeId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int) error { safe := s.daoSafe.FindById(safeId) if safe.Uid != uid { return errors.New("该用户没有操作权限!") } // 清除可能有的旧的审批流程 err := s.daoApprover.DeleteOldAuditors(bidsectionId, 1, safeId) // 增加审批日志 err = s.daoSafeAudit.AddAuditRecord(safeId, bidsectionId, uid, safe.Times, 0, 0, "") // 改变安全巡检表的状态 err = s.daoSafe.ChangeStatus(safeId, 1) // 创建审批流程 err = s.daoApprover.InsertData(safe.Times, bidsectionId, pid, 1, safeId, auditors, reAuditors) return err } // 规则校验 func (s *safeAuditService) ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error) { safeAuditVaild := viewmodels.SafeAudit{} if ctx.Method() == "POST" { err := ctx.ReadJSON(&safeAuditVaild) if err != nil { log.Println("safe-ValidRule-ReadJson转换异常, error=", err) return safeAuditVaild, err } if ctx.Path() == s.validAdd { err = safeAuditVaild.ValidateAddAuditor() return safeAuditVaild, err } else if ctx.Path() == s.validClose { err = safeAuditVaild.ValidateClose() return safeAuditVaild, err } else if ctx.Path() == s.validBack { err = safeAuditVaild.ValidateBack() return safeAuditVaild, err } else if ctx.Path() == s.validPass { err = safeAuditVaild.ValidatePass() return safeAuditVaild, err } return safeAuditVaild, err } return safeAuditVaild, nil } // 校验审批开始 func (s *safeAuditService) ValidStart(ctx iris.Context) (viewmodels.AuditStart, error) { startAuditValid := viewmodels.AuditStart{} err := ctx.ReadJSON(&startAuditValid) if err != nil { log.Println("safe-ValidRule-ReadJson转换异常, error=", err) return startAuditValid, err } err = startAuditValid.ValidateStart() return startAuditValid, err }