package model import ( "ArmedPolice/app/common/model" "fmt" ) type WorkSchedule struct { *model.WorkSchedule } // WorkScheduleInfo 工单流程信息 type WorkScheduleInfo struct { ID uint64 `json:"id"` IsNext bool `json:"is_next"` Reviewer []string `json:"reviewer"` } // ValidateAuth 验证权限 func (m *WorkSchedule) ValidateAuth(uid uint64) (bool, error) { // 流程权限信息 auths := make(map[string]bool, 0) for _, v := range m.GetTargetValueAttribute() { auths[v] = true } // 触发审核对象 switch m.Target { case model.WorkScheduleTargetForPerson: // 个人 _, has := auths[fmt.Sprintf("%d", uid)] return has, nil case model.WorkScheduleTargetForRole: // 角色 // 查询角色信息 roleIDs := make([]uint64, 0) mSysUserRole := model.NewSysUserRole() if err := model.Pluck(mSysUserRole, "role_id", &roleIDs, model.NewWhere("uid", uid)); err != nil { return false, err } for _, v := range roleIDs { if _, has := auths[fmt.Sprintf("%d", v)]; has { return has, nil } } break } return false, nil } // NextSchedule 下一流程 func (m *WorkSchedule) NextSchedule(isAssets bool) (*WorkScheduleInfo, error) { next := NewWorkSchedule() isExist, err := model.FirstWhere(next.WorkSchedule, model.NewWhere("stage", m.Stage), model.NewWhere("step", m.Stage+1)) if err != nil { return nil, err } else if isExist { // 直接抛出当前阶段下一流程信息 return &WorkScheduleInfo{ID: next.ID, Reviewer: next.GetTargetValueAttribute()}, err } // 进入下一阶段 // 是否需要下一阶段协助 // 不需要,直接抛出结束 if !isAssets { return nil, nil } // 下一阶段第一流程信息 if isExist, err = model.FirstWhere(next.WorkSchedule, model.NewWhere("stage", m.Stage+1), model.NewWhere("step", 1)); err != nil { return nil, err } else if !isExist { return nil, nil } return &WorkScheduleInfo{ID: next.ID, IsNext: true, Reviewer: next.GetTargetValueAttribute()}, err } func NewWorkSchedule() *WorkSchedule { return &WorkSchedule{model.NewWorkSchedule()} }