活动删除直降
This commit is contained in:
@@ -1317,15 +1317,15 @@ func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
|
|||||||
type tCount struct {
|
type tCount struct {
|
||||||
Count int `json:"count"`
|
Count int `json:"count"`
|
||||||
}
|
}
|
||||||
var count = &tCount{}
|
var counts []*tCount
|
||||||
sql := `
|
sql := `
|
||||||
SELECT count(*) count FROM goods_order WHERE store_id = ? AND order_create_at >= ? AND order_create_at <= ? AND vendor_id = ?
|
SELECT count(*) count FROM goods_order WHERE store_id = ? AND order_create_at >= ? AND order_create_at <= ? AND vendor_id = ?
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
order.StoreID, utils.Time2Date(time.Now()), utils.Time2Date(time.Now().AddDate(0, 0, 1)), order.VendorID,
|
order.StoreID, utils.Time2Date(time.Now()), utils.Time2Date(time.Now().AddDate(0, 0, 1)), order.VendorID,
|
||||||
}
|
}
|
||||||
err = dao.GetRow(dao.GetDB(), &count, sql, sqlParams)
|
err = dao.GetRows(dao.GetDB(), &counts, sql, sqlParams)
|
||||||
order.OrderSeq = count.Count + 1
|
order.OrderSeq = counts[0].Count + 1
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1682,3 +1682,5 @@ func checkPriceDefendOrderByPrice(db *dao.DaoDB, storeID, skuID, stock, jxPrice
|
|||||||
}
|
}
|
||||||
return stock
|
return stock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -206,6 +206,14 @@ type MatterStock struct {
|
|||||||
Stock int `json:"stock"`
|
Stock int `json:"stock"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ActStoreSkuParam struct {
|
||||||
|
model.ActStoreSku
|
||||||
|
|
||||||
|
ActualActPrice int64 `json:"actualActPrice,omitempty"` // 单品级活动用,创建活动时商品的活动价格
|
||||||
|
VendorPrice int64 `json:"vendorPrice,omitempty"` // 创建活动时的平台价格
|
||||||
|
ErrMsg string `json:"errMsg,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
maxStoreNameBind = 10000 // 最大门店SkuName bind个数
|
maxStoreNameBind = 10000 // 最大门店SkuName bind个数
|
||||||
maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数
|
maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数
|
||||||
@@ -1285,6 +1293,9 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
skuBind.JxPrice = jxPrice
|
skuBind.JxPrice = jxPrice
|
||||||
updateFieldMap["UnitPrice"] = 1
|
updateFieldMap["UnitPrice"] = 1
|
||||||
updateFieldMap["JxPrice"] = 1
|
updateFieldMap["JxPrice"] = 1
|
||||||
|
|
||||||
|
//TODO 2020-09-08 如果改价时商品在做直降,要取消这个商品的直降,再通过改价比例修改活动价,再上这个直降
|
||||||
|
// checkActDirectDown(ctx, skuBind, beforeMsg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
||||||
@@ -1350,6 +1361,47 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
return skuIDs, err
|
return skuIDs, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func checkActDirectDown(ctx *jxcontext.Context, skuBind *model.StoreSkuBind, beforeSkuBind tStoreSkuBindAndSpec) (err error) {
|
||||||
|
// var (
|
||||||
|
// originPrice = beforeSkuBind.Price
|
||||||
|
// price = skuBind.Price
|
||||||
|
// db = dao.GetDB()
|
||||||
|
// pageSize = 9999
|
||||||
|
// // percent = price / originPrice
|
||||||
|
// )
|
||||||
|
// if paged, _ := dao.QueryActs(db, 0, 0, pageSize, -1, "", -1, []int{model.ActStatusCreated}, []int{model.ActSkuDirectDown}, nil, skuBind.StoreID, []int{skuBind.SkuID}, 0, utils.ZeroTimeValue, utils.ZeroTimeValue, time.Now().AddDate(0, -2, 0), time.Now()); len(paged.Data) > 0 {
|
||||||
|
// for _, act := range paged.Data {
|
||||||
|
// if _, actStoreSkus, err := dao.GetActStoreSkuVendorList(db, act.ID, nil, []int{skuBind.StoreID}, []int{skuBind.SkuID}, "", 0, pageSize); err == nil && len(actStoreSkus) > 0 {
|
||||||
|
// var (
|
||||||
|
// handler = partner.GetPurchasePlatformFromVendorID(actStoreSkus[0].VendorID).(partner.IPurchasePlatformActHandler)
|
||||||
|
// actStoreSkuParam []*ActStoreSkuParam
|
||||||
|
// )
|
||||||
|
// for _, actStoreSku := range actStoreSkus {
|
||||||
|
// aa := &ActStoreSkuParam{
|
||||||
|
// ActStoreSku: model.ActStoreSku{
|
||||||
|
// StoreID: skuBind.StoreID,
|
||||||
|
// SkuID: actStoreSku.SkuID,
|
||||||
|
// ActID: act.ID,
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// actStoreSkuParam = append(actStoreSkuParam, aa)
|
||||||
|
// }
|
||||||
|
// DeleteActStoreSkuBind(ctx, db, act.ID, actStoreSkuParam)
|
||||||
|
// actMap, err := dao.GetActVendorInfo(db, act.ID, []int{actStoreSkus[0].VendorID})
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// actStoreSkuMap, err := dao.GetActStoreSkuVendorInfo(db, act.ID, nil, nil, nil)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// handler.SyncAct(ctx, nil, actMap[actStoreSkus[0].VendorID], nil, actStoreSkuMap[actStoreSkus[0].VendorID])
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
func getSkuSaleStatus(inSkuBind *StoreSkuBindSkuInfo, skuNameBindInfo *StoreSkuBindInfo) int {
|
func getSkuSaleStatus(inSkuBind *StoreSkuBindSkuInfo, skuNameBindInfo *StoreSkuBindInfo) int {
|
||||||
tempSale := 0
|
tempSale := 0
|
||||||
if inSkuBind != nil {
|
if inSkuBind != nil {
|
||||||
@@ -4940,3 +4992,127 @@ func GetSpecialtyStoreSkus(ctx *jxcontext.Context, storeIDs, vendorIDs []int) (e
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkActUpdate(actID int, actMap map[int]*model.Act2) (err error) {
|
||||||
|
if len(actMap) == 0 {
|
||||||
|
return fmt.Errorf("活动%d不存在或已被取消", actID)
|
||||||
|
}
|
||||||
|
errList := errlist.New()
|
||||||
|
for vendorID, act := range actMap {
|
||||||
|
if vendorID == model.VendorIDEBAI && act.CreateType != model.ActCreateTypeAPI {
|
||||||
|
errList.AddErr(fmt.Errorf("饿百平台不支持修改或取消网页活动"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errList.GetErrListAsOne()
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actStoreSkuParam []*ActStoreSkuParam) (originSyncStatus int8, err error) {
|
||||||
|
actMap, err := dao.GetActVendorInfo(db, actID, nil)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if err = checkActUpdate(actID, actMap); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
actStoreSkuMap, err := dao.GetActStoreSkuVendorInfo(db, actID, nil, nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
act := actMap[partner.GetVendorIDsFromActMap(actMap)[0]]
|
||||||
|
if act.Status != model.ActStatusCreated || time.Now().Sub(act.EndAt) > 0 {
|
||||||
|
return 0, fmt.Errorf("当前活动状态:%s,不能进行此操作,或已过期", model.ActStatusName[act.Status])
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.Begin(db)
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil || err != nil {
|
||||||
|
dao.Rollback(db)
|
||||||
|
if r != nil {
|
||||||
|
panic(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
actStoreSkuParamMap := make(map[int64]*ActStoreSkuParam)
|
||||||
|
for _, v := range actStoreSkuParam {
|
||||||
|
actStoreSkuParamMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = v
|
||||||
|
if _, err = dao.DeleteEntityLogically(db, &model.ActStoreSku{}, nil, ctx.GetUserName(),
|
||||||
|
map[string]interface{}{
|
||||||
|
model.FieldActID: actID,
|
||||||
|
model.FieldStoreID: v.StoreID,
|
||||||
|
model.FieldSkuID: v.SkuID,
|
||||||
|
}); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isNeedCancelAct := true
|
||||||
|
for vendorID, act := range actMap {
|
||||||
|
originSyncStatus |= act.SyncStatus
|
||||||
|
isDeleteAll := true
|
||||||
|
isDeleteAtLeastOne := false
|
||||||
|
if true { //actStoreSkuParam != nil {
|
||||||
|
actStoreSkuMap := partner.SplitActStoreSku(actStoreSkuMap[vendorID])
|
||||||
|
for storeID := range actStoreSkuMap {
|
||||||
|
for _, actStoreSku := range actStoreSkuMap[storeID] {
|
||||||
|
if actStoreSkuParam == nil || actStoreSkuParamMap[jxutils.Combine2Int(actStoreSku.StoreID, actStoreSku.SkuID)] != nil {
|
||||||
|
if act.Type == model.ActSkuFake {
|
||||||
|
_, err = dao.DeleteEntityLogically(db, &model.ActStoreSkuMap{}, nil, ctx.GetUserName(),
|
||||||
|
map[string]interface{}{
|
||||||
|
model.FieldActID: actID,
|
||||||
|
model.FieldStoreID: actStoreSku.StoreID,
|
||||||
|
model.FieldSkuID: actStoreSku.SkuID,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
_, err = dao.UpdateEntityLogically(db, partner.ActStoreSku2ActStoreSkuMap(actStoreSku),
|
||||||
|
map[string]interface{}{
|
||||||
|
model.FieldSyncStatus: actStoreSku.SyncStatus | model.SyncFlagDeletedMask,
|
||||||
|
}, ctx.GetUserName(), nil)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
isDeleteAtLeastOne = true
|
||||||
|
} else {
|
||||||
|
isNeedCancelAct = false
|
||||||
|
isDeleteAll = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
isDeleteAll = true
|
||||||
|
isDeleteAtLeastOne = true
|
||||||
|
}
|
||||||
|
if isDeleteAll || isDeleteAtLeastOne {
|
||||||
|
syncStatus := int8(model.SyncFlagModifiedMask)
|
||||||
|
if isDeleteAll {
|
||||||
|
syncStatus = model.SyncFlagDeletedMask
|
||||||
|
}
|
||||||
|
syncStatus |= act.SyncStatus
|
||||||
|
if act.Type != model.ActSkuFake && vendorID != model.VendorIDJX {
|
||||||
|
if _, err = dao.UpdateEntityLogically(db, partner.Act2ActMap(act),
|
||||||
|
map[string]interface{}{
|
||||||
|
model.FieldSyncStatus: syncStatus,
|
||||||
|
}, ctx.GetUserName(), nil); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if isDeleteAll != isNeedCancelAct {
|
||||||
|
globals.SugarLogger.Warnf("deleteActStoreBind, actID:%d isDeleteAll:%t != isNeedCancelAct:%t", act.ID, isDeleteAll, isNeedCancelAct)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if isNeedCancelAct {
|
||||||
|
act := &model.Act{}
|
||||||
|
act.ID = actID
|
||||||
|
if _, err = dao.UpdateEntityLogically(db, act,
|
||||||
|
map[string]interface{}{
|
||||||
|
model.FieldStatus: model.ActStatusCanceled,
|
||||||
|
}, ctx.GetUserName(), nil); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dao.Commit(db)
|
||||||
|
return originSyncStatus, err
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user