mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-22 14:25:45 +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 {
|
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.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) {
|
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
|
||||||
@@ -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 {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
query := s.Repository.DB().WithContext(ctx).
|
query := s.Repository.DB().WithContext(ctx).
|
||||||
Model(&entity.ProjectFlockKandangUniformity{}).
|
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 {
|
if id != 0 {
|
||||||
query = query.Where("id <> ?", id)
|
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")
|
return fiber.NewError(fiber.StatusInternalServerError, "Failed to validate uniformity uniqueness")
|
||||||
}
|
}
|
||||||
if count > 0 {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user