permission_service.go 6.1 KB
package service

import (
	"github.com/linmadan/egglib-go/core/application"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/permission/command"
	service "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/role"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
)

type PermissionService struct {
}

func NewPermissionService() *PermissionService {
	newPermissionService := &PermissionService{}
	return newPermissionService
}

func (rs *PermissionService) Update(in *command.UpdatePermissionCommand) (interface{}, error) {
	transactionContext, err := factory.ValidateStartTransaction(in)
	if err != nil {
		return nil, err
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()

	permissionRepository := factory.CreatePermissionRepository(map[string]interface{}{"transactionContext": transactionContext})
	// 获取权限配置
	_, permissions, err := permissionRepository.Find(map[string]interface{}{"companyId": in.CompanyId})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if len(permissions) == 0 {
		return nil, application.ThrowError(application.BUSINESS_ERROR, "权限配置数据错误")
	}
	permission := permissions[0]
	permission.OptHrScore = in.OptHrScore
	permission.OptEvalScore = in.OptEvalScore

	// 超级管理员权限传参
	if in.OptConfirmPerf > 0 || in.CycleDeadLine != nil {
		superAdmin, err := service.GetSuperAdmin(transactionContext, int(in.CompanyId), int(in.UserId))
		if err != nil {
			return nil, err
		}
		if superAdmin != domain.RoleTypeSuperAdmin {
			return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")
		}

		switch in.OptConfirmPerf {
		case domain.PermissionOff, domain.PermissionOn:
		default:
			return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "是否需要员工确认绩效参数错误")
		}
		var cycleDeadLine = in.CycleDeadLine
		var allMinuteSelf = cycleDeadLine.AssessmentSelf.Hour*60 + cycleDeadLine.AssessmentSelf.Minute
		var allMinute360 = cycleDeadLine.AssessmentAll.Hour*60 + cycleDeadLine.AssessmentAll.Minute
		//var allMinuteHr = cycleDeadLine.AssessmentHr.Hour*60 + cycleDeadLine.AssessmentHr.Minute
		var allMinuteSuperior = cycleDeadLine.AssessmentSuperior.Hour*60 + cycleDeadLine.AssessmentSuperior.Minute
		var allMinuteMy = cycleDeadLine.ViewMyPerf.Hour*60 + cycleDeadLine.ViewMyPerf.Minute

		// 注. 360和人资评估时间截止是相同的(前端只传递一个360评估参数)
		cycleDeadLine.AssessmentHr.Hour = cycleDeadLine.AssessmentAll.Hour
		cycleDeadLine.AssessmentHr.Minute = cycleDeadLine.AssessmentAll.Minute

		if allMinuteSelf > allMinute360 {
			return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "截止时间:[360评估]不能小于[综合自评]")
		}
		if allMinute360 > allMinuteSuperior {
			return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "截止时间:[上级评估]不能小于[360评估]")
		}
		if allMinuteSuperior > allMinuteMy {
			return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "截止时间:[查看我的绩效]不能小于[上级评估]")
		}
		permission.OptConfirmPerf = in.OptConfirmPerf
		permission.CycleDeadline = in.CycleDeadLine
	}

	permission, err = permissionRepository.Insert(permission)
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return permission, nil
}

func (rs *PermissionService) Get(in *command.GetPermissionCommand) (*domain.Permission, error) {
	transactionContext, err := factory.ValidateStartTransaction(in)
	if err != nil {
		return nil, err
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()
	permissionRepository := factory.CreatePermissionRepository(map[string]interface{}{"transactionContext": transactionContext})

	// 获取权限配置
	_, permissions, err := permissionRepository.Find(map[string]interface{}{"companyId": in.CompanyId})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	var permission *domain.Permission
	if len(permissions) == 0 { // 不存在时,新增权限配置
		value := &domain.Permission{
			Id:             0,
			CompanyId:      in.CompanyId,
			OptHrScore:     domain.PermissionOff,
			OptEvalScore:   domain.PermissionOff,
			OptConfirmPerf: domain.PermissionOff,
			CycleDeadline:  rs.defaultCycleDeadline(),
		}
		permission, err = permissionRepository.Insert(value)
		if err != nil {
			return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
	} else {
		permission = permissions[0]
		// 纠正数据
		var isChange = false
		if permission.OptHrScore == 0 {
			isChange = true
			permission.OptHrScore = domain.PermissionOff
		}
		if permission.OptEvalScore == 0 {
			isChange = true
			permission.OptEvalScore = domain.PermissionOff
		}
		if permission.OptConfirmPerf == 0 {
			isChange = true
			permission.OptConfirmPerf = domain.PermissionOff
		}
		if permission.CycleDeadline == nil {
			isChange = true
			permission.CycleDeadline = rs.defaultCycleDeadline()
		}
		if isChange {
			permission, err = permissionRepository.Insert(permission)
			if err != nil {
				return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
			}
		}
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return permission, nil
}

// 创建默认周期截止时间
func (rs *PermissionService) defaultCycleDeadline() *domain.CycleDeadline {
	return &domain.CycleDeadline{
		AssessmentSelf: domain.DeadlineTime{
			Hour:   3 * 24,
			Minute: 0,
		},
		AssessmentAll: domain.DeadlineTime{
			Hour:   5 * 24,
			Minute: 0,
		},
		AssessmentHr: domain.DeadlineTime{
			Hour:   5 * 24,
			Minute: 0,
		},
		AssessmentSuperior: domain.DeadlineTime{
			Hour:   7 * 24,
			Minute: 0,
		},
		ViewMyPerf: domain.DeadlineTime{
			Hour:   9 * 24,
			Minute: 0,
		},
	}
}