- 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:
gazebo
2018-12-22 11:51:36 +08:00
parent 7afc8228a6
commit 3492d40874
2 changed files with 100 additions and 24 deletions

View File

@@ -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

View File

@@ -20,6 +20,7 @@ const (
RequestStatusNew = 0
RequestStatusRejected = 1
RequestStatusAccepted = 2
RequestStatusCanceled = 3
)
var (