mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +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 {
|
for _, group := range grouped {
|
||||||
allWeeks := make(map[int]utypes.UniformityChartWeek)
|
allWeeks := make(map[int]utypes.UniformityChartWeek)
|
||||||
weekOrder := make([]int, 0, len(group))
|
weekOrder := make([]int, 0, len(group))
|
||||||
weekSeen := make(map[int]struct{}, len(group))
|
|
||||||
weeksWithData := 0
|
weeksWithData := 0
|
||||||
gaugeWeeks := make([]utypes.UniformityChartGaugeWeek, 0, len(group))
|
gaugeWeeks := make([]utypes.UniformityChartGaugeWeek, 0, len(group))
|
||||||
|
latestByWeek := make(map[int]entity.ProjectFlockKandangUniformity)
|
||||||
|
|
||||||
for _, item := range group {
|
for _, item := range group {
|
||||||
if item.Week == 0 {
|
if item.Week == 0 {
|
||||||
continue
|
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
|
var weekSummary utypes.UniformityChartWeek
|
||||||
if len(item.ChartData) > 0 {
|
if len(item.ChartData) > 0 {
|
||||||
if err := json.Unmarshal(item.ChartData, &weekSummary); err != nil {
|
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 {
|
if weekSummary.HasData {
|
||||||
weeksWithData++
|
weeksWithData++
|
||||||
}
|
}
|
||||||
allWeeks[item.Week] = weekSummary
|
allWeeks[week] = weekSummary
|
||||||
|
|
||||||
if _, ok := weekSeen[item.Week]; !ok {
|
|
||||||
weekSeen[item.Week] = struct{}{}
|
|
||||||
weekOrder = append(weekOrder, item.Week)
|
|
||||||
}
|
|
||||||
|
|
||||||
hasData := item.ChickQtyOfWeight > 0
|
hasData := item.ChickQtyOfWeight > 0
|
||||||
gaugeWeeks = append(gaugeWeeks, utypes.UniformityChartGaugeWeek{
|
gaugeWeeks = append(gaugeWeeks, utypes.UniformityChartGaugeWeek{
|
||||||
Week: item.Week,
|
Week: week,
|
||||||
UniformityPercent: item.Uniformity,
|
UniformityPercent: item.Uniformity,
|
||||||
IdealCount: item.UniformQty,
|
IdealCount: item.UniformQty,
|
||||||
OutsideIdealCount: item.NotUniformQty,
|
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))
|
weekIndex := make(map[int]int, len(weekOrder))
|
||||||
for idx, week := range weekOrder {
|
for idx, week := range weekOrder {
|
||||||
weekIndex[week] = idx
|
weekIndex[week] = idx
|
||||||
@@ -280,6 +282,23 @@ func (s uniformityService) MapCharts(c *fiber.Ctx, items []entity.ProjectFlockKa
|
|||||||
return result, nil
|
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) {
|
func (s uniformityService) MapDocuments(c *fiber.Ctx, items []entity.ProjectFlockKandangUniformity) (map[uint]string, error) {
|
||||||
if s.DocumentSvc == nil || len(items) == 0 {
|
if s.DocumentSvc == nil || len(items) == 0 {
|
||||||
return map[uint]string{}, nil
|
return map[uint]string{}, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user