12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package backend
- import (
- "context"
- "kpt-pasture/model"
- "net/http"
- "strings"
- "time"
- "gitee.com/xuyiping_admin/pkg/xerr"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- )
- // GrowthCurve 生长曲线 获取图表数据
- func (s *StoreEntry) GrowthCurve(ctx context.Context, req *pasturePb.SearchGrowthCurvesRequest) (*pasturePb.GrowthCurvesResponse, error) {
- // 查询数据
- cowList := make([]*model.Cow, 0)
- pref := s.DB.Model(new(model.Cow)).Where("is_remove = ?", pasturePb.IsShow_Ok)
- if req.GetCowId() != "" {
- pref.Where("id IN ?", strings.Split(req.CowId, ","))
- }
- if len(req.BirthDate) == 2 && req.BirthDate[0] != "" && req.BirthDate[1] != "" {
- t0, _ := time.Parse(time.RFC3339, req.BirthDate[0])
- t1, _ := time.Parse(time.RFC3339, req.BirthDate[1])
- pref.Where("birth_at BETWEEN ? AND ?", t0.Unix(), t1.Unix()+86399)
- }
- if err := pref.Find(&cowList).Error; err != nil {
- return nil, err
- }
- penList, err := s.GetPenList(ctx)
- if err != nil {
- return nil, xerr.WithStack(err)
- }
- // 计算图表数据
- chartsList := &pasturePb.Charts{
- CowId: make([]int32, 0),
- Weight: make([]float32, 0),
- DayAge: make([]int32, 0),
- }
- cowData := make([]*pasturePb.CowList, 0)
- for _, cow := range cowList {
- currentWeight := float32(cow.CurrentWeight) / 100
- penName := ""
- for _, v := range penList {
- if cow.PenId != v.Id {
- continue
- }
- penName = v.Name
- }
- cowData = append(cowData, &pasturePb.CowList{
- CowId: int32(cow.Id),
- EarNumber: cow.EarNumber,
- DayAge: cow.GetDayAge(),
- PenName: penName,
- CurrentWeight: currentWeight,
- BirthAt: int32(cow.BirthAt),
- BirthWeight: float32(cow.BirthWeight) / 100,
- LastWeightAt: int32(cow.LastWeightAt),
- DailyWeightGain: float32(cow.GetDayWeight() / 100),
- AverageDailyWeightGain: float32(cow.GetAverageDailyWeight() / 100),
- })
- chartsList.CowId = append(chartsList.CowId, int32(cow.Id))
- chartsList.Weight = append(chartsList.Weight, currentWeight)
- chartsList.DayAge = append(chartsList.DayAge, cow.GetDayAge())
- }
- // 返回数据
- return &pasturePb.GrowthCurvesResponse{
- Code: http.StatusOK,
- Message: "success",
- Data: &pasturePb.GrowthCurveData{
- Table: cowData,
- Charts: chartsList,
- },
- }, nil
- }
|