Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-06-18 15:20:34 +03:00
parent f6f9ac55b8
commit 21b1242a5a
3 changed files with 132 additions and 9 deletions

View File

@@ -24,6 +24,8 @@ type wholesaleCampaignMailRow struct {
BrandGroupSec string
Dim1 int64
Dim3 int64
Dim1Token string
Dim3Token string
CampaignCode string
CampaignTitle string
DiscountRate float64
@@ -73,10 +75,10 @@ func buildWholesaleCampaignChangeMailHTML(firstGroupCode string, rows []wholesal
r.BrandGroupSec,
r.Marka,
r.ProductCode,
fmt.Sprintf("%d", r.Dim1),
strings.TrimSpace(r.Dim1Token),
func() string {
if r.Dim3 > 0 {
return fmt.Sprintf("%d", r.Dim3)
if strings.TrimSpace(r.Dim3Token) != "" {
return strings.TrimSpace(r.Dim3Token)
}
return ""
}(),
@@ -197,7 +199,52 @@ ORDER BY mm.code, l.dim1, COALESCE(l.dim3, 0), sc.discount_rate DESC;
}
defer rows.Close()
// Resolve dim ids -> human tokens so mails show Nebim-style variant codes (not numeric ids).
resolveDimTokens := func(ctx context.Context, dimIDs []int64) map[int64]string {
out := make(map[int64]string, len(dimIDs))
uniq := make([]int64, 0, len(dimIDs))
seen := make(map[int64]struct{}, len(dimIDs))
for _, id := range dimIDs {
if id <= 0 {
continue
}
if _, ok := seen[id]; ok {
continue
}
seen[id] = struct{}{}
uniq = append(uniq, id)
}
if len(uniq) == 0 {
return out
}
tRows, err := pg.QueryContext(ctx, `
SELECT DISTINCT ON (dim_id)
dim_id,
token
FROM mk_dim_token_map
WHERE dim_column = 'dimval1'
AND dim_id = ANY($1::bigint[])
ORDER BY dim_id, updated_at DESC;
`, pq.Array(uniq))
if err != nil {
return out
}
defer tRows.Close()
for tRows.Next() {
var id int64
var tok string
if err := tRows.Scan(&id, &tok); err == nil {
tok = strings.TrimSpace(tok)
if tok != "" {
out[id] = tok
}
}
}
return out
}
mailRows := make([]wholesaleCampaignMailRow, 0, 1024)
dimIDs := make([]int64, 0, 2048)
for rows.Next() {
var r dbRow
if err := rows.Scan(&r.ProductCode, &r.Dim1, &r.Dim3, &r.CampaignCode, &r.CampaignTitle, &r.DiscountRate); err != nil {
@@ -214,6 +261,12 @@ ORDER BY mm.code, l.dim1, COALESCE(l.dim3, 0), sc.discount_rate DESC;
if r.Dim3.Valid {
d3 = r.Dim3.Int64
}
if r.Dim1 > 0 {
dimIDs = append(dimIDs, r.Dim1)
}
if d3 > 0 {
dimIDs = append(dimIDs, d3)
}
mailRows = append(mailRows, wholesaleCampaignMailRow{
ProductCode: code,
UrunIlkGrubu: group,
@@ -236,6 +289,20 @@ ORDER BY mm.code, l.dim1, COALESCE(l.dim3, 0), sc.discount_rate DESC;
return
}
tokens := resolveDimTokens(ctx, dimIDs)
for i := range mailRows {
mailRows[i].Dim1Token = tokens[mailRows[i].Dim1]
if mailRows[i].Dim1Token == "" && mailRows[i].Dim1 > 0 {
mailRows[i].Dim1Token = fmt.Sprintf("%d", mailRows[i].Dim1)
}
if mailRows[i].Dim3 > 0 {
mailRows[i].Dim3Token = tokens[mailRows[i].Dim3]
if mailRows[i].Dim3Token == "" {
mailRows[i].Dim3Token = fmt.Sprintf("%d", mailRows[i].Dim3)
}
}
}
byGroup := map[string][]wholesaleCampaignMailRow{}
for _, r := range mailRows {
g := strings.TrimSpace(r.UrunIlkGrubu)