mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
feat(BE-281): unique uniformity weeks
This commit is contained in:
@@ -199,14 +199,26 @@ func (s uniformityService) MapCharts(c *fiber.Ctx, items []entity.ProjectFlockKa
|
||||
for _, group := range grouped {
|
||||
allWeeks := make(map[int]utypes.UniformityChartWeek)
|
||||
weekOrder := make([]int, 0, len(group))
|
||||
weekSeen := make(map[int]struct{}, len(group))
|
||||
weeksWithData := 0
|
||||
gaugeWeeks := make([]utypes.UniformityChartGaugeWeek, 0, len(group))
|
||||
latestByWeek := make(map[int]entity.ProjectFlockKandangUniformity)
|
||||
|
||||
for _, item := range group {
|
||||
if item.Week == 0 {
|
||||
continue
|
||||
}
|
||||
if existing, ok := latestByWeek[item.Week]; !ok || isUniformityNewer(item, existing) {
|
||||
latestByWeek[item.Week] = item
|
||||
}
|
||||
}
|
||||
|
||||
for week := range latestByWeek {
|
||||
weekOrder = append(weekOrder, week)
|
||||
}
|
||||
sort.Ints(weekOrder)
|
||||
|
||||
for _, week := range weekOrder {
|
||||
item := latestByWeek[week]
|
||||
var weekSummary utypes.UniformityChartWeek
|
||||
if len(item.ChartData) > 0 {
|
||||
if err := json.Unmarshal(item.ChartData, &weekSummary); err != nil {
|
||||
@@ -222,16 +234,11 @@ func (s uniformityService) MapCharts(c *fiber.Ctx, items []entity.ProjectFlockKa
|
||||
if weekSummary.HasData {
|
||||
weeksWithData++
|
||||
}
|
||||
allWeeks[item.Week] = weekSummary
|
||||
|
||||
if _, ok := weekSeen[item.Week]; !ok {
|
||||
weekSeen[item.Week] = struct{}{}
|
||||
weekOrder = append(weekOrder, item.Week)
|
||||
}
|
||||
allWeeks[week] = weekSummary
|
||||
|
||||
hasData := item.ChickQtyOfWeight > 0
|
||||
gaugeWeeks = append(gaugeWeeks, utypes.UniformityChartGaugeWeek{
|
||||
Week: item.Week,
|
||||
Week: week,
|
||||
UniformityPercent: item.Uniformity,
|
||||
IdealCount: item.UniformQty,
|
||||
OutsideIdealCount: item.NotUniformQty,
|
||||
@@ -240,11 +247,6 @@ func (s uniformityService) MapCharts(c *fiber.Ctx, items []entity.ProjectFlockKa
|
||||
})
|
||||
}
|
||||
|
||||
sort.Ints(weekOrder)
|
||||
sort.Slice(gaugeWeeks, func(i, j int) bool {
|
||||
return gaugeWeeks[i].Week < gaugeWeeks[j].Week
|
||||
})
|
||||
|
||||
weekIndex := make(map[int]int, len(weekOrder))
|
||||
for idx, week := range weekOrder {
|
||||
weekIndex[week] = idx
|
||||
@@ -280,6 +282,23 @@ func (s uniformityService) MapCharts(c *fiber.Ctx, items []entity.ProjectFlockKa
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func isUniformityNewer(a, b entity.ProjectFlockKandangUniformity) bool {
|
||||
var aDate, bDate time.Time
|
||||
if a.UniformDate != nil {
|
||||
aDate = *a.UniformDate
|
||||
}
|
||||
if b.UniformDate != nil {
|
||||
bDate = *b.UniformDate
|
||||
}
|
||||
if !aDate.IsZero() || !bDate.IsZero() {
|
||||
if aDate.Equal(bDate) {
|
||||
return a.CreatedAt.After(b.CreatedAt)
|
||||
}
|
||||
return aDate.After(bDate)
|
||||
}
|
||||
return a.CreatedAt.After(b.CreatedAt)
|
||||
}
|
||||
|
||||
func (s uniformityService) MapDocuments(c *fiber.Ctx, items []entity.ProjectFlockKandangUniformity) (map[uint]string, error) {
|
||||
if s.DocumentSvc == nil || len(items) == 0 {
|
||||
return map[uint]string{}, nil
|
||||
|
||||
Reference in New Issue
Block a user