Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-06-19 00:49:47 +03:00
parent 7512e7fe7c
commit 55e36366c3
7 changed files with 413 additions and 90 deletions

View File

@@ -619,16 +619,13 @@ DO UPDATE SET dim_id = EXCLUDED.dim_id, updated_at = EXCLUDED.updated_at
if c.Dim1 <= 0 {
continue
}
v2 := int64(0)
var v2any any = nil
if c.Dim3.Valid && c.Dim3.Int64 > 0 {
v2 = c.Dim3.Int64
v2any = v2
}
// If we managed to resolve an "ItemDim3Code" id too, store it in val3 and mark mmdim_id=3.
// Active key: val1=color, val3=itemdim3. val2 is size and is not part of price/campaign key.
v3 := int64(0)
if extraVal3 != nil {
if vv, ok := extraVal3[fmt.Sprintf("%d|%d", c.Dim1, v2)]; ok && vv > 0 {
if c.Dim3.Valid && c.Dim3.Int64 > 0 {
v3 = c.Dim3.Int64
} else if extraVal3 != nil {
if vv, ok := extraVal3[fmt.Sprintf("%d|0", c.Dim1)]; ok && vv > 0 {
v3 = vv
}
}
@@ -1071,18 +1068,38 @@ VALUES (
_ = upsertDimCombosCache(code, dims) // best-effort cache fill
}
// 2) Last resort: MSSQL stock tokens, then seed mmitem_dim. Do not use
// mk_mmitem_dim_combo as a write source; stale cache rows can create wrong keys.
if len(dims) == 0 {
d, err := loadDimsFromMssqlStock(code)
if err != nil {
logger.Error("save:pg:dims:mssql:error", "product_code", code, "err", err)
} else {
dims = d
_ = upsertDimCombosCache(code, dims)
// If PG doesn't have mmitem_dim rows for this product yet, try to seed them.
ensureMMItemDimRows(mmItemID, dims, nil)
// 2) Merge MSSQL variant master combos. PG may be partially populated; missing
// colors/dim3 combos still need to be seeded before sdprc/zbggcampaign writes.
if d, err := loadDimsFromMssqlStock(code); err != nil {
logger.Error("save:pg:dims:mssql:error", "product_code", code, "err", err)
} else if len(d) > 0 {
seenDims := make(map[string]struct{}, len(dims)+len(d))
merged := make([]dimCombo, 0, len(dims)+len(d))
dim3Value := func(v sql.NullInt64) int64 {
if v.Valid {
return v.Int64
}
return 0
}
for _, c := range dims {
k := fmt.Sprintf("%d|%d", c.Dim1, dim3Value(c.Dim3))
if _, ok := seenDims[k]; ok {
continue
}
seenDims[k] = struct{}{}
merged = append(merged, c)
}
for _, c := range d {
k := fmt.Sprintf("%d|%d", c.Dim1, dim3Value(c.Dim3))
if _, ok := seenDims[k]; ok {
continue
}
seenDims[k] = struct{}{}
merged = append(merged, c)
}
dims = merged
_ = upsertDimCombosCache(code, dims)
ensureMMItemDimRows(mmItemID, d, nil)
}
}