- price change request can be cancled by set the req price to the same as online
- if the req price is same as online, ignore it
This commit is contained in:
@@ -502,13 +502,23 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, storeIDs []int, skuBind
|
||||
for _, skuBindInfo := range skuBindInfos {
|
||||
inSkuBinds := skuBindInfo.Skus
|
||||
var allBinds []*tStoreSkuBindAndSpec
|
||||
if err = dao.GetRows(db, &allBinds, `
|
||||
SELECT t2.*, t1.id real_sku_id, t1.spec_quality, t1.spec_unit, t3.price sku_name_price, t3.unit sku_name_unit
|
||||
FROM sku t1
|
||||
LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND store_id = ? AND t2.deleted_at = ?
|
||||
JOIN sku_name t3 ON t1.name_id = t3.id AND t3.deleted_at = ?
|
||||
WHERE t1.name_id = ? AND t1.deleted_at = ?
|
||||
`, storeID, utils.DefaultTimeValue, utils.DefaultTimeValue, skuBindInfo.NameID, utils.DefaultTimeValue); err == nil {
|
||||
sql := `
|
||||
SELECT
|
||||
t2.*,
|
||||
t1.id real_sku_id, t1.spec_quality, t1.spec_unit,
|
||||
t3.price sku_name_price, t3.unit sku_name_unit
|
||||
FROM sku t1
|
||||
LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND store_id = ? AND t2.deleted_at = ?
|
||||
JOIN sku_name t3 ON t1.name_id = t3.id AND t3.deleted_at = ?
|
||||
WHERE t1.name_id = ? AND t1.deleted_at = ?`
|
||||
sqlParams := []interface{}{
|
||||
storeID,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
skuBindInfo.NameID,
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if err = dao.GetRows(db, &allBinds, sql, sqlParams...); err == nil {
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(allBinds, false))
|
||||
inSkuBinsMap := make(map[int]*StoreSkuBindSkuInfo, len(inSkuBinds))
|
||||
for _, v := range inSkuBinds {
|
||||
@@ -904,28 +914,93 @@ func filterStorePriceChange(ctx *jxcontext.Context, storeIDs []int, skuBindInfos
|
||||
for _, storeID := range storeIDs {
|
||||
for _, skuBindInfo := range skuBindInfos {
|
||||
shouldPending := shouldPendingStorePriceChange(ctx, storeID, skuBindInfo)
|
||||
if shouldPending {
|
||||
changeReq := &model.StoreOpRequest{
|
||||
Type: model.RequestTypeChangePrice,
|
||||
StoreID: storeID,
|
||||
ItemID: skuBindInfo.NameID,
|
||||
Status: model.RequestStatusNew,
|
||||
UserID: ctx.GetUserName(),
|
||||
IntParam1: skuBindInfo.UnitPrice,
|
||||
IntParam2: skuBindInfo.IsSale,
|
||||
}
|
||||
if shouldPending && (skuBindInfo.UnitPrice != 0 || skuBindInfo.IsFocus == 1) {
|
||||
var (
|
||||
opInfoList []*StoreOpRequestInfo
|
||||
sql string
|
||||
sqlParams []interface{}
|
||||
opType int8
|
||||
)
|
||||
|
||||
if skuBindInfo.IsFocus == 1 {
|
||||
changeReq.Type = model.RequestTypeFocusSkuName
|
||||
}
|
||||
if len(skuBindInfo.Skus) > 0 {
|
||||
changeReq.JsonParam = string(utils.MustMarshal(skuBindInfo.Skus))
|
||||
opType = model.RequestTypeFocusSkuName
|
||||
sql = `
|
||||
SELECT DISTINCT t1.*, t3.unit_price
|
||||
FROM store_op_request t1
|
||||
JOIN sku t2 ON t2.name_id = t1.item_id
|
||||
LEFT JOIN store_sku_bind t3 ON t3.store_id = t1.store_id AND t3.sku_id = t2.id AND t3.deleted_at = ?
|
||||
WHERE t1.store_id = ? AND t1.item_id = ? AND t1.deleted_at = ? AND t1.type IN (?, ?)`
|
||||
sqlParams = []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
storeID,
|
||||
skuBindInfo.NameID,
|
||||
utils.DefaultTimeValue,
|
||||
model.RequestTypeChangePrice,
|
||||
model.RequestTypeFocusSkuName,
|
||||
}
|
||||
} else {
|
||||
opType = model.RequestTypeChangePrice
|
||||
sql = `
|
||||
SELECT DISTINCT t3.*, t1.unit_price
|
||||
FROM store_sku_bind t1
|
||||
JOIN sku t2 ON t2.id = t1.sku_id AND t2.name_id = ?
|
||||
LEFT JOIN store_op_request t3 ON t3.store_id = t1.store_id AND t3.item_id = t2.name_id AND t3.deleted_at = ? AND t3.type IN (?, ?)
|
||||
WHERE t1.store_id = ? AND t1.deleted_at = ?`
|
||||
sqlParams = []interface{}{
|
||||
skuBindInfo.NameID,
|
||||
utils.DefaultTimeValue,
|
||||
model.RequestTypeChangePrice,
|
||||
model.RequestTypeFocusSkuName,
|
||||
storeID,
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
}
|
||||
|
||||
dao.WrapAddIDCULDEntity(changeReq, ctx.GetUserName())
|
||||
if err = dao.CreateOrUpdate(db, changeReq); err != nil {
|
||||
if err = dao.GetRows(db, &opInfoList, sql, sqlParams...); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if len(opInfoList) > 1 {
|
||||
panic(fmt.Sprintf("filterStorePriceChange more than one row, storeID:%d, skuBindInfo:%s, result:%s", storeID, utils.Format4Output(skuBindInfo, false), utils.Format4Output(opInfoList, false)))
|
||||
}
|
||||
existRow := len(opInfoList) == 1
|
||||
existRequestOp := existRow && opInfoList[0].ID != 0
|
||||
var changeReq *model.StoreOpRequest
|
||||
if existRequestOp {
|
||||
if opInfoList[0].Type != opType {
|
||||
return nil, nil, fmt.Errorf("filterStorePriceChange,关注与修改价格只应该存在一个待审核请求,已存在的:%s,新来的,storeID:%d, skuBindInfo:%s", utils.Format4Output(opInfoList[0], false), storeID, utils.Format4Output(skuBindInfo, false))
|
||||
}
|
||||
changeReq = &opInfoList[0].StoreOpRequest
|
||||
} else {
|
||||
changeReq = &model.StoreOpRequest{}
|
||||
}
|
||||
if existRequestOp && opInfoList[0].UnitPrice == skuBindInfo.UnitPrice {
|
||||
changeReq.Status = model.RequestStatusCanceled
|
||||
changeReq.DeletedAt = time.Now()
|
||||
} else {
|
||||
changeReq.Status = model.RequestStatusNew
|
||||
changeReq.Type = opType
|
||||
changeReq.StoreID = storeID
|
||||
changeReq.ItemID = skuBindInfo.NameID
|
||||
changeReq.UserID = ctx.GetUserName()
|
||||
changeReq.IntParam1 = skuBindInfo.UnitPrice
|
||||
changeReq.IntParam2 = skuBindInfo.IsSale
|
||||
if len(skuBindInfo.Skus) > 0 {
|
||||
changeReq.JsonParam = string(utils.MustMarshal(skuBindInfo.Skus))
|
||||
}
|
||||
}
|
||||
if existRequestOp {
|
||||
dao.WrapUpdateULEntity(changeReq, ctx.GetUserName())
|
||||
if _, err = dao.UpdateEntity(db, changeReq); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
} else {
|
||||
if !existRow || opInfoList[0].UnitPrice != skuBindInfo.UnitPrice {
|
||||
dao.WrapAddIDCULDEntity(changeReq, ctx.GetUserName())
|
||||
if err = dao.CreateEntity(db, changeReq); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
// 去除价格相关的部分
|
||||
if skuBindInfo.IsFocus == 1 {
|
||||
skuBindInfo.IsFocus = 0
|
||||
|
||||
Reference in New Issue
Block a user