mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
Merge branch 'feat/BE/US-281-uniformity' into 'development'
Feat/be/us 281 uniformity See merge request mbugroup/lti-api!145
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.Id > b.Id
|
||||
}
|
||||
return aDate.After(bDate)
|
||||
}
|
||||
return a.Id > b.Id
|
||||
}
|
||||
|
||||
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
|
||||
@@ -586,13 +605,13 @@ func (s uniformityService) UpdateOne(c *fiber.Ctx, req *validation.Update, id ui
|
||||
}
|
||||
|
||||
func (s *uniformityService) ensureUniqueUniformity(ctx context.Context, id uint, projectFlockKandangID uint, week int, uniformDate *time.Time) error {
|
||||
if projectFlockKandangID == 0 || week == 0 || uniformDate == nil || uniformDate.IsZero() {
|
||||
if projectFlockKandangID == 0 || week == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
query := s.Repository.DB().WithContext(ctx).
|
||||
Model(&entity.ProjectFlockKandangUniformity{}).
|
||||
Where("project_flock_kandang_id = ? AND week = ? AND uniform_date = ?", projectFlockKandangID, week, *uniformDate)
|
||||
Where("project_flock_kandang_id = ? AND week = ?", projectFlockKandangID, week)
|
||||
if id != 0 {
|
||||
query = query.Where("id <> ?", id)
|
||||
}
|
||||
@@ -602,7 +621,7 @@ func (s *uniformityService) ensureUniqueUniformity(ctx context.Context, id uint,
|
||||
return fiber.NewError(fiber.StatusInternalServerError, "Failed to validate uniformity uniqueness")
|
||||
}
|
||||
if count > 0 {
|
||||
return fiber.NewError(fiber.StatusConflict, "Uniformity already exists for the same project flock kandang, week, and date")
|
||||
return fiber.NewError(fiber.StatusConflict, "Uniformity already exists for the same project flock kandang and week")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user