globals.IsStoreSkuAct控制是否添加门店商品的平台活动信息

This commit is contained in:
gazebo
2020-01-13 14:17:50 +08:00
parent 21accbf8fe
commit d29b7b3686
10 changed files with 221 additions and 93 deletions

View File

@@ -168,6 +168,7 @@ type ActStoreSkuMap struct {
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`
VendorPrice int64 `json:"vendorPrice"` // 创建活动时的平台价格
ActualActPrice int64 `json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格
EarningPrice int64 `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱
}
func (*ActStoreSkuMap) TableUnique() [][]string {
@@ -213,3 +214,25 @@ type ActStoreSku2 struct {
SpecUnit string `json:"-"`
Comment string `json:"-"`
}
type StoreSkuAct struct {
ModelIDCUL
StoreID int `orm:"column(store_id)"`
SkuID int `orm:"column(sku_id);index"`
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
ActID int `orm:"column(act_id);index" json:"actID"`
VendorActID string `orm:"column(vendor_act_id);size(48);index" json:"vendorActID"`
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`
VendorPrice int64 `json:"vendorPrice"` // 创建活动时的平台价格
ActualActPrice int64 `json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格
EarningActID int `orm:"column(earning_act_id);index" json:"earningActID"`
EarningPrice int64 `json:"earningPrice"`
}
func (*StoreSkuAct) TableUnique() [][]string {
return [][]string{
[]string{"StoreID", "SkuID", "VendorID"},
}
}

View File

@@ -9,6 +9,7 @@ import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals/refutil"
)
type ActMapPureInfo struct {
@@ -438,3 +439,169 @@ func UpdateActStatusByTime(db *DaoDB, refTime time.Time) (num int64, err error)
num, err = ExecuteSQL(db, sql, sqlParams...)
return num, err
}
func ActStoreSkuMap2StoreSkuAct(actStoreSkuMap *model.ActStoreSkuMap, isCanceled bool) (storeSkuAct *model.StoreSkuAct) {
storeSkuAct = &model.StoreSkuAct{
StoreID: actStoreSkuMap.StoreID,
SkuID: actStoreSkuMap.SkuID,
VendorID: actStoreSkuMap.VendorID,
}
storeSkuAct.CreatedAt = actStoreSkuMap.CreatedAt
storeSkuAct.UpdatedAt = actStoreSkuMap.UpdatedAt
storeSkuAct.LastOperator = actStoreSkuMap.LastOperator
if actStoreSkuMap.ActualActPrice > 0 {
if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) {
storeSkuAct.ActID = 0
} else {
storeSkuAct.ActID = actStoreSkuMap.ActID
storeSkuAct.VendorActID = actStoreSkuMap.VendorActID
storeSkuAct.SyncStatus = actStoreSkuMap.SyncStatus
storeSkuAct.VendorPrice = actStoreSkuMap.VendorPrice
storeSkuAct.ActualActPrice = actStoreSkuMap.ActualActPrice
}
}
if actStoreSkuMap.EarningPrice > 0 {
if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) {
storeSkuAct.EarningActID = 0
} else {
storeSkuAct.EarningActID = actStoreSkuMap.ActID
storeSkuAct.EarningPrice = actStoreSkuMap.EarningPrice
}
}
return storeSkuAct
}
func BatchUpdateActEntity(db *DaoDB, isCanceled bool, items []*KVUpdateItem) (num int64, err error) {
if globals.IsStoreSkuAct {
Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
Rollback(db)
if r != nil {
panic(r)
}
}
}()
for _, v := range items {
if actStoreSku, ok := v.Item.(*model.ActStoreSkuMap); ok {
for k1, v1 := range v.KVs {
refutil.SetObjFieldByName(actStoreSku, k1, v1)
}
if err = CreateOrUpdateActStoreSku(db, ActStoreSkuMap2StoreSkuAct(actStoreSku, isCanceled)); err != nil {
return 0, err
}
}
}
}
if _, err = BatchUpdateEntityByKV(db, items); err != nil {
return 0, err
}
if globals.IsStoreSkuAct {
Commit(db)
}
return num, err
}
func CreateOrUpdateActStoreSku(db *DaoDB, storeSkuAct *model.StoreSkuAct) (err error) {
storeSkuActCopy := *storeSkuAct
if err2 := GetEntity(db, &storeSkuActCopy, model.FieldStoreID, model.FieldSkuID, model.FieldVendorID); err2 == nil {
storeSkuAct.ID = storeSkuActCopy.ID
_, err = UpdateEntity(db, storeSkuAct)
} else if IsNoRowsError(err2) {
err = CreateEntity(db, storeSkuAct)
} else {
err = err2
}
return err
}
func GetStoresSkusAct(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuActList []*model.StoreSkuAct, err error) {
sql := `
SELECT *
FROM store_sku_act t1
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(storeIDs) > 0 {
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if len(skuIDs) > 0 {
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
if len(vendorIDs) > 0 {
sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
sqlParams = append(sqlParams, vendorIDs)
}
err = GetRows(db, &storeSkuActList, sql, sqlParams...)
return storeSkuActList, err
}
func GetStoresSkusAndActInfo(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuAndActList []*StoreSkuAndAct, err error) {
storeSkuList, err := GetStoresSkusInfo(db, storeIDs, skuIDs)
if err == nil && len(storeSkuList) > 0 {
storeSkuActList, err2 := GetStoresSkusAct(db, storeIDs, skuIDs, vendorIDs)
if err = err2; err == nil {
actMap := make(map[int64][]*model.StoreSkuAct)
for _, v := range storeSkuActList {
actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = append(actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)], v)
}
for _, v := range storeSkuList {
storeSkuAct := &StoreSkuAndAct{
StoreSkuBind: v,
ActMap: make(map[int]*model.StoreSkuAct),
}
for _, vv := range actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] {
storeSkuAct.ActMap[vv.VendorID] = vv
}
storeSkuAndActList = append(storeSkuAndActList, storeSkuAct)
}
}
}
return storeSkuAndActList, err
}
func GetConflictStoreSkuActInfo(db *DaoDB, vendorIDs []int, inStoreSkuActList []*model.StoreSkuAct) (outStoreSkuActList []*model.StoreSkuAct, err error) {
storeIDMap := make(map[int]int)
skuIDMap := make(map[int]int)
inStoreSkuActMap := make(map[int64]*model.StoreSkuAct)
for _, v := range inStoreSkuActList {
storeIDMap[v.StoreID] = 1
skuIDMap[v.SkuID] = 1
inStoreSkuActMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = v
}
storeIDs := jxutils.IntMap2List(storeIDMap)
skuIDs := jxutils.IntMap2List(skuIDMap)
sql := `
SELECT *
FROM store_sku_act t1
WHERE
t1.store_id IN (` + GenQuestionMarks(len(storeIDs)) + `)
AND t1.sku_id IN (` + GenQuestionMarks(len(skuIDs)) + `)
`
sqlParams := []interface{}{
storeIDs,
skuIDs,
}
if len(vendorIDs) > 0 {
sql += ` AND t1.vendor_Id IN (` + GenQuestionMarks(len(storeIDs)) + `)`
sqlParams = append(sqlParams, vendorIDs)
}
var tmpStoreSkuActList []*model.StoreSkuAct
if err = GetRows(db, &tmpStoreSkuActList, sql, sqlParams...); err == nil {
for _, v := range tmpStoreSkuActList {
tmpStoreSkuAct := inStoreSkuActMap[jxutils.Combine2Int(v.StoreID, v.SkuID)]
if tmpStoreSkuAct != nil && (tmpStoreSkuAct.ActualActPrice > 0 && v.ActID != 0 && v.SyncStatus == 0 || tmpStoreSkuAct.EarningPrice > 0 && v.EarningActID != 0) {
outStoreSkuActList = append(outStoreSkuActList, v)
}
}
}
return outStoreSkuActList, err
}

View File

@@ -819,55 +819,6 @@ func GetStoresSkusInfo(db *DaoDB, storeIDs, skuIDs []int) (storeSkuList []*model
return storeSkuList, err
}
func GetStoresSkusAndActInfo(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuAndActList []*StoreSkuAndAct, err error) {
storeSkuList, err := GetStoresSkusInfo(db, storeIDs, skuIDs)
if err == nil && len(storeSkuList) > 0 {
storeSkuActList, err2 := GetStoresSkusAct(db, storeIDs, skuIDs, vendorIDs)
if err = err2; err == nil {
actMap := make(map[int64][]*model.StoreSkuAct)
for _, v := range storeSkuActList {
actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = append(actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)], v)
}
for _, v := range storeSkuList {
storeSkuAct := &StoreSkuAndAct{
StoreSkuBind: v,
ActMap: make(map[int]*model.StoreSkuAct),
}
for _, vv := range actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] {
storeSkuAct.ActMap[vv.VendorID] = vv
}
storeSkuAndActList = append(storeSkuAndActList, storeSkuAct)
}
}
}
return storeSkuAndActList, err
}
func GetStoresSkusAct(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuActList []*model.StoreSkuAct, err error) {
sql := `
SELECT *
FROM store_sku_act t1
WHERE t1.deleted_at = ?
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
}
if len(storeIDs) > 0 {
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if len(skuIDs) > 0 {
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
if len(vendorIDs) > 0 {
sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
sqlParams = append(sqlParams, vendorIDs)
}
err = GetRows(db, &storeSkuActList, sql, sqlParams...)
return storeSkuActList, err
}
// vendorID, vendorStoreIDs和vendorSkuIDs都是必须参数
func GetStoresSkusInfoByVendorInfo(db *DaoDB, vendorID int, vendorStoreIDs, vendorSkuIDs []string) (storeSkuList []*StoreSkuBindWithVendorInfo, err error) {
if len(vendorStoreIDs) == 0 || len(vendorSkuIDs) == 0 {

View File

@@ -161,32 +161,3 @@ func (*StoreOpRequest) TableIndex() [][]string {
[]string{"StoreID", "Status", "Type"},
}
}
type StoreSkuAct struct {
ModelIDCULD // DeletedAt用于表示请求操作结束而并不一定是删除
StoreID int `orm:"column(store_id)"`
SkuID int `orm:"column(sku_id)"`
VendorID int
ActID int `orm:"column(act_id);index" json:"actID"`
VendorActID string `orm:"column(vendor_act_id);size(48);index" json:"vendorActID"`
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`
VendorPrice int64 `json:"vendorPrice"` // 创建活动时的平台价格
ActualActPrice int64 `json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格
EarningActID int `orm:"column(earning_act_id);index" json:"earningActID"`
EarningPrice int `json:"earningPrice"`
}
func (*StoreSkuAct) TableUnique() [][]string {
return [][]string{
[]string{"StoreID", "SkuID", "VendorID", "DeletedAt"},
}
}
func (*StoreSkuAct) TableIndex() [][]string {
return [][]string{
[]string{"SkuID", "DeletedAt"},
}
}