summary_evaluation_dao.go 3.8 KB
package dao

import (
	"time"

	"github.com/go-pg/pg/v10"
	pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
)

type SummaryEvaluationDao struct {
	transactionContext *pgTransaction.TransactionContext
}

func NewSummaryEvaluationDao(options map[string]interface{}) *SummaryEvaluationDao {
	var transactionContext *pgTransaction.TransactionContext
	if value, ok := options["transactionContext"]; ok {
		transactionContext = value.(*pgTransaction.TransactionContext)
	}
	return &SummaryEvaluationDao{
		transactionContext: transactionContext,
	}
}

type ExecutorCycle struct {
	CycleId   string `pg:"cycle_id" `  //周期id
	CycleName string `pg:"cycle_name"` //周期名称
}

// GetExecutorCycleList 获取执行人拥有的周期列表
// executorId 执行人id
// offset,limit 分页
func (d *SummaryEvaluationDao) GetExecutorCycleList(executorId int, offset int, limit int, isHrbp bool) ([]ExecutorCycle, error) {
	sqlStr := `select  
	distinct 
	summary_evaluation.cycle_id ,
	summary_evaluation.cycle_name 
	from summary_evaluation 
	where summary_evaluation.executor ->>'userId'='?'
	`
	tx := d.transactionContext.PgTx
	condition := []interface{}{
		executorId,
	}
	if isHrbp {
		sqlStr += ` or summary_evaluation."types"=4 `
	}
	condition = append(condition, offset, limit)
	sqlStr += ` order by summary_evaluation.cycle_id desc offset ? limit ? `
	result := []ExecutorCycle{}
	_, err := tx.Query(&result, sqlStr, condition...)
	return result, err
}

// CountExecutorCycleList 统计执行人拥有的周期列表
func (d *SummaryEvaluationDao) CountExecutorCycleList(executorId int, evaluationType domain.EvaluationType) (int, error) {
	sqlStr := `select count(
		distinct summary_evaluation.cycle_id
	  ) as cnt
	from  summary_evaluation 
	where summary_evaluation.executor ->>'userId'='?' `

	tx := d.transactionContext.PgTx
	condition := []interface{}{
		executorId,
	}
	if evaluationType > 0 {
		sqlStr += `	and summary_evaluation."types"=? `
		condition = append(condition, int(evaluationType))
	}

	var cnt int
	_, err := tx.QueryOne(pg.Scan(&cnt), sqlStr, condition...)
	return cnt, err
}

type TargetUserCycle struct {
	CycleId   string    `pg:"cycle_id" `  //周期id
	CycleName string    `pg:"cycle_name"` //周期名称
	BeginTime time.Time `pg:"begin_time"`
}

// GetExecutorCycleList 获取被评估目标人拥有的周期列表
// executorId 执行人id
// offset,limit 分页
func (d *SummaryEvaluationDao) GetTargetUserCycleList(executorId int, offset int, limit int, evaluationType int) ([]TargetUserCycle, error) {
	sqlStr := `select  
	distinct 
	summary_evaluation.cycle_id ,
	summary_evaluation.begin_time ,
	summary_evaluation.cycle_name 
	from summary_evaluation 
	where summary_evaluation.target_user ->>'userId'='?'
	`
	tx := d.transactionContext.PgTx
	condition := []interface{}{
		executorId,
	}

	if evaluationType > 0 {
		sqlStr += `	and summary_evaluation."types"=? `
		condition = append(condition, evaluationType)
	}

	condition = append(condition, offset, limit)
	sqlStr += ` order by summary_evaluation.begin_time desc offset ? limit ? `
	result := []TargetUserCycle{}
	_, err := tx.Query(&result, sqlStr, condition...)
	return result, err
}

// CountExecutorCycleList 统计 被评估目标人拥有的周期列表
func (d *SummaryEvaluationDao) CountTargetUserCycleList(executorId int, evaluationType int) (int, error) {
	sqlStr := `select count(
		distinct summary_evaluation.cycle_id
	  ) as cnt
	from  summary_evaluation 
	where summary_evaluation.target_user ->>'userId'='?' `

	condition := []interface{}{
		executorId,
	}
	if evaluationType > 0 {
		sqlStr += `	and summary_evaluation."types"=? `
		condition = append(condition, evaluationType)
	}
	tx := d.transactionContext.PgTx
	var cnt int
	_, err := tx.QueryOne(pg.Scan(&cnt), sqlStr, condition...)
	return cnt, err
}