审查视图

pkg/infrastructure/repository/pg_evaluation_cycle_repository.go 5.6 KB
1 2 3 4 5
package repository

import (
	"errors"
	"fmt"
Your Name authored
6 7
	"time"
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
	"github.com/go-pg/pg/v10"
	"github.com/linmadan/egglib-go/persistent/pg/sqlbuilder"
	pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils"
)

type EvaluationCycleRepository struct {
	transactionContext *pgTransaction.TransactionContext
}

func NewEvaluationCycleRepository(transactionContext *pgTransaction.TransactionContext) *EvaluationCycleRepository {
	return &EvaluationCycleRepository{transactionContext: transactionContext}
}

func (repo *EvaluationCycleRepository) TransformToDomain(m *models.EvaluationCycle) domain.EvaluationCycle {
	return domain.EvaluationCycle{
tangxvhui authored
26 27 28 29 30 31 32 33 34 35 36
		Id:           m.Id,
		Name:         m.Name,
		TimeStart:    m.TimeStart,
		TimeEnd:      m.TimeEnd,
		CompanyId:    m.CompanyId,
		CreatorId:    m.CreatorId,
		KpiCycle:     m.KpiCycle,
		SummaryState: domain.ProjectSummaryState(m.SummaryState),
		CreatedAt:    m.CreatedAt.Local(),
		UpdatedAt:    m.UpdatedAt.Local(),
		DeletedAt:    m.DeletedAt,
37 38 39 40 41
	}
}

func (repo *EvaluationCycleRepository) TransformToModel(d *domain.EvaluationCycle) models.EvaluationCycle {
	return models.EvaluationCycle{
tangxvhui authored
42 43 44 45 46 47 48 49 50 51 52
		Id:           d.Id,
		Name:         d.Name,
		TimeStart:    d.TimeStart,
		TimeEnd:      d.TimeEnd,
		CompanyId:    d.CompanyId,
		CreatorId:    d.CreatorId,
		KpiCycle:     d.KpiCycle,
		SummaryState: int(d.SummaryState),
		CreatedAt:    d.CreatedAt,
		UpdatedAt:    d.UpdatedAt,
		DeletedAt:    d.DeletedAt,
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
	}
}

func (repo *EvaluationCycleRepository) nextIdentify() (int64, error) {
	return utils.NewSnowflakeId()
}

func (repo *EvaluationCycleRepository) Insert(d *domain.EvaluationCycle) (*domain.EvaluationCycle, error) {
	var isCreate = d.Id == 0
	if isCreate {
		id, err := repo.nextIdentify()
		if err != nil {
			return d, err
		}
		d.Id = id
		d.CreatedAt = time.Now()
		d.UpdatedAt = d.CreatedAt
	} else {
		d.UpdatedAt = time.Now()
	}
	m := repo.TransformToModel(d)
	tx := repo.transactionContext.PgTx
	var err error
	if isCreate {
		_, err = tx.Model(&m).Returning("id").Insert()
	} else {
		_, err = tx.Model(&m).Returning("id").WherePK().Update() // 更新和删除必须增加条件
	}
	if err != nil {
		return nil, err
	}
	d.Id = m.Id
	return d, nil
}

func (repo *EvaluationCycleRepository) Remove(d *domain.EvaluationCycle) (*domain.EvaluationCycle, error) {
	tx := repo.transactionContext.PgTx
	nowTime := time.Now()
	m := repo.TransformToModel(d)
	m.DeletedAt = &nowTime
	if _, err := tx.Model(&m).WherePK().Update(); err != nil {
		return d, err
	}
	return d, nil
}

func (repo *EvaluationCycleRepository) FindOne(queryOptions map[string]interface{}) (*domain.EvaluationCycle, error) {
	tx := repo.transactionContext.PgTx
	m := new(models.EvaluationCycle)
	query := tx.Model(m)
	query.Where("deleted_at isnull")
	if id, ok := queryOptions["id"]; ok {
		query.Where("id=?", id)
	}
	if err := query.First(); err != nil {
		if errors.Is(err, pg.ErrNoRows) {
			return nil, fmt.Errorf("没有此资源")
		} else {
			return nil, err
		}
	}
	u := repo.TransformToDomain(m)
	return &u, nil
}
118
func (repo *EvaluationCycleRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.EvaluationCycle, error) {
119 120
	tx := repo.transactionContext.PgTx
	var m []*models.EvaluationCycle
郑周 authored
121
122
	query := tx.Model(&m).Where("deleted_at isnull")
郑周 authored
123
郑周 authored
124
	if v, ok := queryOptions["name"].(string); ok && len(v) > 0 {
125
		query.Where("name LIKE ?", v)
郑周 authored
126
	}
127
郑周 authored
128 129 130 131
	if v, ok := queryOptions["ids"]; ok {
		query.Where("id in (?)", pg.In(v))
	}
132 133 134 135
	if v, ok := queryOptions["id"]; ok {
		query.Where("id=?", v)
	}
136 137
	if v, ok := queryOptions["companyId"]; ok {
		query.Where("company_id = ?", v)
138 139
	}
郑周 authored
140 141
	if v, ok := queryOptions["limit"].(int64); ok {
		query.Limit(int(v))
142
	}
郑周 authored
143 144
	if v, ok := queryOptions["offset"].(int64); ok {
		query.Offset(int(v))
145 146
	}
Your Name authored
147 148 149 150 151 152 153 154 155 156
	if v, ok := queryOptions["timeStart"]; ok {
		t := v.(time.Time)
		query.Where("time_start<=?", t)
	}

	if v, ok := queryOptions["timeEnd"]; ok {
		t := v.(time.Time)
		query.Where("time_end>=?", t)
	}
郑周 authored
157 158 159
	// 按创建时间降序
	query.Order("created_at DESC")
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
	count, err := query.SelectAndCount()
	if err != nil {
		return 0, nil, err
	}
	var arrays []*domain.EvaluationCycle
	for _, v := range m {
		d := repo.TransformToDomain(v)
		arrays = append(arrays, &d)
	}
	return int64(count), arrays, nil
}

func (repo *EvaluationCycleRepository) Count(queryOptions map[string]interface{}) (int64, error) {
	tx := repo.transactionContext.PgTx
	m := new(models.EvaluationCycle)
	query := sqlbuilder.BuildQuery(tx.Model(m), queryOptions)
	query.Where("deleted_at isnull")

	if id, ok := queryOptions["id"]; ok {
		query.Where("id = ?", id)
	}

	if notId, ok := queryOptions["notId"]; ok {
		query.Where("id != ?", notId)
	}
郑周 authored
186
	if v, ok := queryOptions["name"].(string); ok && len(v) > 0 {
187
		query.Where("name = ?", v)
188 189
	}
190 191
	if v, ok := queryOptions["companyId"]; ok {
		query.Where("company_id = ?", v)
192 193 194 195 196 197 198 199
	}

	count, err := query.Count()
	if err != nil {
		return 0, err
	}
	return int64(count), nil
}
tangxvhui authored
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221

// 获取已结束的周期
func (repo *EvaluationCycleRepository) FindCycleEnd(limit int) ([]*domain.EvaluationCycle, error) {
	tx := repo.transactionContext.PgTx
	var m []*models.EvaluationCycle
	query := tx.Model(&m).
		Where("deleted_at isnull").
		Where("time_end<=?", time.Now()).
		Where("summary_state=0").
		Limit(limit)

	err := query.Select()
	if err != nil {
		return nil, err
	}
	var arrays []*domain.EvaluationCycle
	for _, v := range m {
		d := repo.TransformToDomain(v)
		arrays = append(arrays, &d)
	}
	return arrays, nil
}