| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							- package model
 
- import (
 
- 	"encoding/json"
 
- 	"sort"
 
- 	"strings"
 
- 	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
 
- 	"go.uber.org/zap"
 
- 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 
- )
 
- const WeekTypeSeparator = "|"
 
- type SameTime struct {
 
- 	Id                  int64                          `json:"id"`
 
- 	PastureId           int64                          `json:"pastureId"`
 
- 	Name                string                         `json:"name"`
 
- 	WeekType            string                         `json:"weekType"`
 
- 	CowType             pasturePb.SameTimeCowType_Kind `json:"cowType"`
 
- 	IsShow              pasturePb.IsShow_Kind          `json:"isShow"`
 
- 	PostpartumDaysStart int32                          `json:"postpartumDaysStart"`
 
- 	PostpartumDaysEnd   int32                          `json:"postpartumDaysEnd"`
 
- 	CollateNodes        string                         `json:"collateNodes"`
 
- 	Remarks             string                         `json:"remarks"`
 
- 	OperationId         int64                          `json:"operationId"`
 
- 	CreatedAt           int64                          `json:"createdAt"`
 
- 	UpdatedAt           int64                          `json:"updatedAt"`
 
- }
 
- func (e *SameTime) TableName() string {
 
- 	return "same_time"
 
- }
 
- func NewSameTime(pastureId int64, currentUser *SystemUser, req *pasturePb.SearchSameTimeList) *SameTime {
 
- 	var collateNodes []byte
 
- 	if len(req.CollateNodes) > 0 {
 
- 		collateNodes, _ = json.Marshal(req.CollateNodes)
 
- 	}
 
- 	weekType := ""
 
- 	if len(req.WeekType) > 0 {
 
- 		sort.Slice(req.WeekType, func(i, j int) bool {
 
- 			return req.WeekType[i] < req.WeekType[j]
 
- 		})
 
- 		for _, v := range req.WeekType {
 
- 			weekType += v.String() + WeekTypeSeparator
 
- 		}
 
- 	}
 
- 	if len(weekType) > 0 {
 
- 		weekType = weekType[:len(weekType)-1]
 
- 	}
 
- 	return &SameTime{
 
- 		PastureId:           pastureId,
 
- 		Name:                req.Name,
 
- 		WeekType:            weekType,
 
- 		CowType:             req.CowType,
 
- 		IsShow:              pasturePb.IsShow_Ok,
 
- 		PostpartumDaysStart: req.PostpartumDaysStart,
 
- 		PostpartumDaysEnd:   req.PostpartumDaysEnd,
 
- 		CollateNodes:        string(collateNodes),
 
- 		Remarks:             req.Remarks,
 
- 		OperationId:         currentUser.Id,
 
- 	}
 
- }
 
- type SameTimeSlice []*SameTime
 
- func (e SameTimeSlice) ToPB(
 
- 	weekMap map[pasturePb.Week_Kind]string,
 
- 	sameTimeCowTypeMap map[pasturePb.SameTimeCowType_Kind]string,
 
- 	systemUserList []*SystemUser,
 
- ) []*pasturePb.SearchSameTimeList {
 
- 	res := make([]*pasturePb.SearchSameTimeList, len(e))
 
- 	for i, v := range e {
 
- 		operationName := ""
 
- 		for _, u := range systemUserList {
 
- 			if u.Id != v.OperationId {
 
- 				continue
 
- 			}
 
- 			operationName = u.Name
 
- 		}
 
- 		collectionNodes := make([]*pasturePb.CollateNode, 0)
 
- 		if err := json.Unmarshal([]byte(v.CollateNodes), &collectionNodes); err != nil {
 
- 			zaplog.Error("json.Unmarshal SameTimeSlice.ToPB error", zap.Any("err", err))
 
- 		}
 
- 		weekType := make([]pasturePb.Week_Kind, 0)
 
- 		weekName := ""
 
- 		for _, w := range strings.Split(v.WeekType, WeekTypeSeparator) {
 
- 			wt := pasturePb.Week_Kind(pasturePb.Week_Kind_value[w])
 
- 			weekType = append(weekType, wt)
 
- 			weekName += weekMap[wt] + WeekTypeSeparator
 
- 		}
 
- 		if len(weekName) > 0 {
 
- 			weekName = weekName[:len(weekName)-1]
 
- 		}
 
- 		res[i] = &pasturePb.SearchSameTimeList{
 
- 			Id:                  int32(v.Id),
 
- 			Name:                v.Name,
 
- 			WeekType:            weekType,
 
- 			WeekName:            weekName,
 
- 			CowType:             v.CowType,
 
- 			CowTypeName:         sameTimeCowTypeMap[v.CowType],
 
- 			IsShow:              v.IsShow,
 
- 			PostpartumDaysStart: v.PostpartumDaysStart,
 
- 			PostpartumDaysEnd:   v.PostpartumDaysEnd,
 
- 			CollateNodes:        collectionNodes,
 
- 			Remarks:             v.Remarks,
 
- 			OperationId:         int32(v.OperationId),
 
- 			OperationName:       operationName,
 
- 			CreatedAt:           int32(v.CreatedAt),
 
- 			UpdatedAt:           int32(v.UpdatedAt),
 
- 		}
 
- 	}
 
- 	return res
 
- }
 
 
  |