mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
[FEAT/BE] Add filter delivery order, adjust response purchase and fcr growing recording
This commit is contained in:
@@ -465,11 +465,16 @@ func (s *uniformityService) CreateOne(c *fiber.Ctx, req *validation.Create, file
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
if strings.EqualFold(category, string(utils.ProjectFlockCategoryGrowing)) {
|
||||
if err := s.updateGrowingFcrForWeek(tx, createBody.ProjectFlockKandangId, createBody.Week, calculation.MeanUp); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
s.Log.Errorf("Failed to create uniformity: %+v", err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if s.DocumentSvc != nil {
|
||||
actorIDCopy := actorID
|
||||
@@ -633,6 +638,9 @@ func (s uniformityService) UpdateOne(c *fiber.Ctx, req *validation.Update, id ui
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := s.updateGrowingFcrFromUniformity(c.Context(), id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.GetOne(c, id)
|
||||
}
|
||||
|
||||
@@ -694,6 +702,10 @@ func (s uniformityService) UpdateOne(c *fiber.Ctx, req *validation.Update, id ui
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.updateGrowingFcrFromUniformity(c.Context(), id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s.GetOne(c, id)
|
||||
}
|
||||
|
||||
@@ -724,7 +736,48 @@ func (s uniformityService) DeleteOne(c *fiber.Ctx, id uint) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := s.Repository.DeleteOne(c.Context(), id); err != nil {
|
||||
type uniformityContext struct {
|
||||
ID uint
|
||||
Week int
|
||||
ProjectFlockKandangId uint
|
||||
Category string
|
||||
}
|
||||
var ctxRow uniformityContext
|
||||
if err := s.Repository.DB().WithContext(c.Context()).
|
||||
Table("project_flock_kandang_uniformity u").
|
||||
Select("u.id, u.week, u.project_flock_kandang_id, pf.category").
|
||||
Joins("JOIN project_flock_kandangs pfk ON pfk.id = u.project_flock_kandang_id").
|
||||
Joins("JOIN project_flocks pf ON pf.id = pfk.project_flock_id").
|
||||
Where("u.id = ?", id).
|
||||
Scan(&ctxRow).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ctxRow.ID == 0 {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Uniformity not found")
|
||||
}
|
||||
|
||||
if err := s.Repository.DB().WithContext(c.Context()).Transaction(func(tx *gorm.DB) error {
|
||||
repoTx := s.Repository.WithTx(tx)
|
||||
if err := repoTx.DeleteOne(c.Context(), id); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if strings.EqualFold(ctxRow.Category, string(utils.ProjectFlockCategoryGrowing)) {
|
||||
startDay := (ctxRow.Week-1)*7 + 1
|
||||
endDay := ctxRow.Week * 7
|
||||
if ctxRow.Week > 0 {
|
||||
if err := tx.Model(&entity.Recording{}).
|
||||
Where("project_flock_kandangs_id = ?", ctxRow.ProjectFlockKandangId).
|
||||
Where("day BETWEEN ? AND ?", startDay, endDay).
|
||||
Update("fcr_value", 0).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}); err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Uniformity not found")
|
||||
}
|
||||
@@ -734,6 +787,58 @@ func (s uniformityService) DeleteOne(c *fiber.Ctx, id uint) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *uniformityService) updateGrowingFcrFromUniformity(ctx context.Context, uniformityID uint) error {
|
||||
if uniformityID == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
type uniformityRow struct {
|
||||
ID uint
|
||||
Week int
|
||||
MeanUp float64
|
||||
ProjectFlockKandangId uint
|
||||
Category string
|
||||
}
|
||||
var row uniformityRow
|
||||
if err := s.Repository.DB().WithContext(ctx).
|
||||
Table("project_flock_kandang_uniformity u").
|
||||
Select("u.id, u.week, u.mean_up, u.project_flock_kandang_id, pf.category").
|
||||
Joins("JOIN project_flock_kandangs pfk ON pfk.id = u.project_flock_kandang_id").
|
||||
Joins("JOIN project_flocks pf ON pf.id = pfk.project_flock_id").
|
||||
Where("u.id = ?", uniformityID).
|
||||
Scan(&row).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if row.ID == 0 {
|
||||
return nil
|
||||
}
|
||||
if !strings.EqualFold(row.Category, string(utils.ProjectFlockCategoryGrowing)) {
|
||||
return nil
|
||||
}
|
||||
|
||||
return s.updateGrowingFcrForWeek(s.Repository.DB().WithContext(ctx), row.ProjectFlockKandangId, row.Week, row.MeanUp)
|
||||
}
|
||||
|
||||
func (s *uniformityService) updateGrowingFcrForWeek(tx *gorm.DB, projectFlockKandangID uint, week int, meanUp float64) error {
|
||||
if tx == nil || projectFlockKandangID == 0 || week <= 0 {
|
||||
return nil
|
||||
}
|
||||
startDay := (week-1)*7 + 1
|
||||
endDay := week * 7
|
||||
meanBw := meanUp / 1.10
|
||||
if meanBw <= 0 {
|
||||
return tx.Model(&entity.Recording{}).
|
||||
Where("project_flock_kandangs_id = ?", projectFlockKandangID).
|
||||
Where("day BETWEEN ? AND ?", startDay, endDay).
|
||||
Update("fcr_value", 0).Error
|
||||
}
|
||||
|
||||
return tx.Model(&entity.Recording{}).
|
||||
Where("project_flock_kandangs_id = ?", projectFlockKandangID).
|
||||
Where("day BETWEEN ? AND ?", startDay, endDay).
|
||||
Update("fcr_value", gorm.Expr("CASE WHEN feed_intake IS NULL OR feed_intake = 0 THEN 0 ELSE feed_intake / ? END", meanBw)).Error
|
||||
}
|
||||
|
||||
func (s uniformityService) Approval(c *fiber.Ctx, req *validation.Approve) ([]entity.ProjectFlockKandangUniformity, error) {
|
||||
if err := s.Validate.Struct(req); err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user