service.go 6.9 KB
package service

import (
	"github.com/linmadan/egglib-go/core/application"
	"github.com/linmadan/egglib-go/utils/tool_funs"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/summary_evaluation/adapter"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/summary_evaluation/command"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/dao"
)

type SummaryEvaluationServeice struct {
}

func NewStaffAssessServeice() *SummaryEvaluationServeice {
	newService := &SummaryEvaluationServeice{}
	return newService
}

// GetCycleList
// 获取周期列表
func (srv *SummaryEvaluationServeice) GetCycleList(param *command.QueryCycleList) (map[string]interface{}, error) {
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		_ = transactionContext.RollbackTransaction()
	}()
	evaluationDao := dao.NewSummaryEvaluationDao(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	limit := 300
	offset := 0
	if param.PageSize > 0 {
		limit = param.PageSize
	}
	if param.PageNumber > 0 {
		offset = (param.PageNumber - 1) * param.PageSize
	}

	cycleData, err := evaluationDao.GetPersonalCycleList(param.UserId, offset, limit)
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取周期列表"+err.Error())
	}

	cnt, err := evaluationDao.CountPersonalCycleList(param.UserId)
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	cycleList := []adapter.CycleList{}
	for _, v := range cycleData {
		m := adapter.CycleList{
			CycleId:    v.CycleId,
			CycleName:  v.CycleName,
			ExecutorId: v.ExecutorId,
		}
		cycleList = append(cycleList, m)
	}
	return tool_funs.SimpleWrapGridMap(int64(cnt), cycleList), nil
}

// GetMenu
// 根据周期获取菜单显示
func (srv *SummaryEvaluationServeice) GetMenu(param *command.QueryMenu) (map[string]interface{}, error) {
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		_ = transactionContext.RollbackTransaction()
	}()
	evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})

	//查找我的绩效
	_, selfEvaluation, err := evaluationRepo.Find(map[string]interface{}{
		"types":      int(domain.EvaluationSelf),
		"executorId": param.UserId,
		"limit":      1,
	})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	//查找360评估,统计未完成的
	cnt360, _, err := evaluationRepo.Find(map[string]interface{}{
		"types":      int(domain.Evaluation360),
		"executorId": param.UserId,
		"limit":      1,
		"status":     string(domain.EvaluationUncompleted),
	})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	//查询上级评估,统计未完成
	cntSuper, _, err := evaluationRepo.Find(map[string]interface{}{
		"types":      int(domain.EvaluationSelf),
		"executorId": param.UserId,
		"limit":      1,
		"status":     string(domain.EvaluationUncompleted),
	})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	//查询人资评估,统计未完成
	cntHrbp, _, err := evaluationRepo.Find(map[string]interface{}{
		"types":      int(domain.EvaluationHrbp),
		"executorId": param.UserId,
		"limit":      1,
		"status":     string(domain.EvaluationUncompleted),
	})

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

	menuList := []adapter.MenuList{}

	//模块-我的绩效
	menu1 := adapter.MenuList{
		CycleId:    0,
		NodeName:   "我的绩效",
		StatusName: "",
		Types:      "",
		Child:      []adapter.MenuList{},
	}
	menu1_1 := adapter.MenuList{
		CycleId:    param.CycleId,
		NodeName:   "填写综合自评",
		StatusName: "",
		Types:      "填写综合自评",
	}
	menu1_2 := adapter.MenuList{
		CycleId:    param.CycleId,
		NodeName:   "查看综合自评",
		StatusName: "",
		Types:      "查看综合自评",
	}
	if len(selfEvaluation) > 0 {
		if selfEvaluation[0].Status == domain.EvaluationCompleted {
			menu1_1.StatusName = "已完成"
		} else {
			menu1_1.StatusName = "未完成"
		}
		if selfEvaluation[0].CheckResult == domain.EvaluationCheckCompleted {
			menu1_2.StatusName = "已完成"
		} else {
			menu1_2.StatusName = "未完成"
		}
	}
	menu1.Child = append(menu1.Child, menu1_1, menu1_2)
	menuList = append(menuList, menu1)
	menu2 := adapter.MenuList{
		CycleId:    0,
		NodeName:   "给他人评估",
		StatusName: "",
		Types:      "",
		Child:      []adapter.MenuList{},
	}
	menu2_1 := adapter.MenuList{
		CycleId:    param.CycleId,
		NodeName:   "360综评",
		StatusName: "",
		Types:      "360综评",
	}
	if cnt360 > 0 {
		menu2_1.StatusName = "未完成"
	} else {
		menu2_1.StatusName = "已完成"
	}
	menu2.Child = append(menu2.Child, menu2_1)
	menuList = append(menuList, menu2)
	menu3 := adapter.MenuList{
		CycleId:    0,
		NodeName:   "人资评估",
		StatusName: "",
		Types:      "",
		Child:      []adapter.MenuList{},
	}
	menu3_1 := adapter.MenuList{
		CycleId:    param.CycleId,
		NodeName:   "上级综评",
		StatusName: "",
		Types:      "上级综评",
	}
	if cntHrbp > 0 {
		menu3_1.StatusName = "未完成"
	} else {
		menu3_1.StatusName = "已完成"
	}
	menu3.Child = append(menu3.Child, menu3_1)

	menuList = append(menuList, menu3)
	menu4 := adapter.MenuList{
		CycleId:    0,
		NodeName:   "我的团队绩效",
		StatusName: "",
		Types:      "",
		Child:      []adapter.MenuList{},
	}
	menu4_1 := adapter.MenuList{
		CycleId:    param.CycleId,
		NodeName:   "上级综评",
		StatusName: "",
		Types:      "上级综评",
	}
	if cntSuper > 0 {
		menu4_1.StatusName = "未完成"
	} else {
		menu4_1.StatusName = "已完成"
	}
	menu4.Child = append(menu4.Child, menu4_1)
	menuList = append(menuList, menu4)
	result := map[string]interface{}{
		"menus": menuList,
	}
	return result, nil
}

// 获取综合自评详情
func (srv *SummaryEvaluationServeice) GetEvaluationSelf() {}

// 编辑综合自评详情
func (srv *SummaryEvaluationServeice) EditEvaluationSelf() {}