定时更改商品可售状态
This commit is contained in:
@@ -122,6 +122,8 @@ type StoreSkuBindInfo struct {
|
|||||||
IsFocus int `json:"isFocus"` // -1:不关注,0:忽略,1:关注
|
IsFocus int `json:"isFocus"` // -1:不关注,0:忽略,1:关注
|
||||||
IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售
|
IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售
|
||||||
SubStoreID int `json:"subStoreID,omitempty"`
|
SubStoreID int `json:"subStoreID,omitempty"`
|
||||||
|
StatusSaleBegin int `json:"statusSaleBegin"` //商品可售时间范围
|
||||||
|
StatusSaleEnd int `json:"statusSaleEnd"`
|
||||||
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1076,6 +1078,12 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
updateFieldMap["Price"] = 1
|
updateFieldMap["Price"] = 1
|
||||||
updateFieldMap["JxPrice"] = 1
|
updateFieldMap["JxPrice"] = 1
|
||||||
}
|
}
|
||||||
|
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
||||||
|
updateFieldMap["StatusSaleBegin"] = skuBindInfo.StatusSaleBegin
|
||||||
|
updateFieldMap["StatusSaleEnd"] = skuBindInfo.StatusSaleEnd
|
||||||
|
skuBind.StatusSaleBegin = skuBindInfo.StatusSaleBegin
|
||||||
|
skuBind.StatusSaleEnd = skuBindInfo.StatusSaleEnd
|
||||||
|
}
|
||||||
// todo 这里应该是不需处理这个信息的吧?
|
// todo 这里应该是不需处理这个信息的吧?
|
||||||
// if inSkuBind != nil && inSkuBind.EbaiID != 0 {
|
// if inSkuBind != nil && inSkuBind.EbaiID != 0 {
|
||||||
// skuBind.EbaiID = inSkuBind.EbaiID
|
// skuBind.EbaiID = inSkuBind.EbaiID
|
||||||
|
|||||||
@@ -659,20 +659,18 @@ func (v *VendorSync) ChangeStoreSkuSaleStatus(ctx *jxcontext.Context, isAsync, i
|
|||||||
storeIDs []int
|
storeIDs []int
|
||||||
skuIDs []int
|
skuIDs []int
|
||||||
)
|
)
|
||||||
vendorIDs := partner.GetPurchasePlatformVendorIDs()
|
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
storeSkuList, err := dao.GetStoresSkusInfoBySaleTime(db)
|
storeSkuList, err := dao.GetStoresSkusInfoBySaleTime(db)
|
||||||
|
if len(storeSkuList) < 1 || err != nil {
|
||||||
|
return errors.New(fmt.Sprintf("未查询到设置了可售时间的商品 GetStoresSkusInfoBySaleTime!err : %v", err))
|
||||||
|
}
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
storeIDs = append(storeIDs, v.StoreID)
|
storeIDs = append(storeIDs, v.StoreID)
|
||||||
skuIDs = append(skuIDs, v.SkuID)
|
skuIDs = append(skuIDs, v.SkuID)
|
||||||
setStoreSkuBindStatus(v, model.SyncFlagSaleMask)
|
|
||||||
dao.UpdateEntity(db, v)
|
|
||||||
}
|
}
|
||||||
if len(storeSkuList) > 0 {
|
vendorIDs := partner.GetPurchasePlatformVendorIDs()
|
||||||
|
dao.UpdateStoreSkuBindSyncStatus(db, vendorIDs)
|
||||||
v.SyncStoresSkus(ctx, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError)
|
v.SyncStoresSkus(ctx, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError)
|
||||||
} else {
|
|
||||||
return errors.New("未查询到设置了可售时间的商品!")
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -329,9 +329,9 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo
|
|||||||
if reorderHandler != nil {
|
if reorderHandler != nil {
|
||||||
reorderSkuMap = make(map[string][]*dao.StoreSkuSyncInfo)
|
reorderSkuMap = make(map[string][]*dao.StoreSkuSyncInfo)
|
||||||
}
|
}
|
||||||
now := time.Now().Hour()*100 + time.Now().Minute()
|
now := jxutils.OperationTime2HourMinuteFormat(time.Now())
|
||||||
for _, sku := range skus {
|
for _, sku := range skus {
|
||||||
if isUpdateSkuSaleStatus(sku, now) {
|
if isUpdateSkuSaleStatus(sku, storeDetail, now) {
|
||||||
sku.MergedStatus = model.SkuStatusDontSale
|
sku.MergedStatus = model.SkuStatusDontSale
|
||||||
} else {
|
} else {
|
||||||
sku.MergedStatus = model.SkuStatusNormal
|
sku.MergedStatus = model.SkuStatusNormal
|
||||||
@@ -802,12 +802,27 @@ func GetSensitiveWord(singleStoreHandler partner.ISingleStoreStoreSkuHandler, st
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func isUpdateSkuSaleStatus(sku *dao.StoreSkuSyncInfo, now int) bool {
|
func isUpdateSkuSaleStatus(sku *dao.StoreSkuSyncInfo, storeDetail *dao.StoreDetail, now int) bool {
|
||||||
//商品可售时间的差集与门店营业时间的交集为不可售,其余为原本状态
|
//商品可售时间的差集与门店营业时间的交集为不可售,其余为原本状态
|
||||||
openTime := sku.OpenTime
|
var openTime int
|
||||||
closeTime := sku.CloseTime
|
var closeTime int
|
||||||
saleBeginTime := sku.StatusSaleBegin
|
saleBeginTime := sku.StatusSaleBegin
|
||||||
saleEndTime := sku.StatusSaleEnd
|
saleEndTime := sku.StatusSaleEnd
|
||||||
|
if storeDetail.OpenTime2 != 0 && storeDetail.CloseTime2 != 0 {
|
||||||
|
if storeDetail.OpenTime1 < storeDetail.OpenTime2 {
|
||||||
|
openTime = int(storeDetail.OpenTime1)
|
||||||
|
} else {
|
||||||
|
openTime = int(storeDetail.OpenTime2)
|
||||||
|
}
|
||||||
|
if storeDetail.CloseTime1 > storeDetail.CloseTime2 {
|
||||||
|
closeTime = int(storeDetail.CloseTime1)
|
||||||
|
} else {
|
||||||
|
closeTime = int(storeDetail.CloseTime2)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
openTime = int(storeDetail.OpenTime1)
|
||||||
|
closeTime = int(storeDetail.CloseTime1)
|
||||||
|
}
|
||||||
beginAt1, endAt1 := GetTimeMixByInt(0, saleBeginTime, openTime, closeTime)
|
beginAt1, endAt1 := GetTimeMixByInt(0, saleBeginTime, openTime, closeTime)
|
||||||
beginAt2, endAt2 := GetTimeMixByInt(saleEndTime, 2400, openTime, closeTime)
|
beginAt2, endAt2 := GetTimeMixByInt(saleEndTime, 2400, openTime, closeTime)
|
||||||
if beginAt1 != 0 && endAt1 != 0 {
|
if beginAt1 != 0 && endAt1 != 0 {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package cms
|
package cms
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
@@ -30,3 +31,14 @@ func TestFreeBatchStoreSkuInfo(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetTimeMixByInt(t *testing.T) {
|
||||||
|
var (
|
||||||
|
time1 = 1100
|
||||||
|
time2 = 2300
|
||||||
|
time3 = 1200
|
||||||
|
time4 = 2400
|
||||||
|
)
|
||||||
|
a, b := GetTimeMixByInt(time1, time2, time3, time4)
|
||||||
|
fmt.Println(a, b)
|
||||||
|
}
|
||||||
|
|||||||
@@ -688,6 +688,10 @@ func OperationTimeStr4VendorStore(v *model.VendorStoreSnapshot) (str string) {
|
|||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func OperationTime2HourMinuteFormat(time time.Time) (i int) {
|
||||||
|
return time.Hour()*100 + time.Minute()
|
||||||
|
}
|
||||||
|
|
||||||
// 得到饿百订单的取货码
|
// 得到饿百订单的取货码
|
||||||
func GetEbaiOrderGetCode(order *model.GoodsOrder) (getCode string) {
|
func GetEbaiOrderGetCode(order *model.GoodsOrder) (getCode string) {
|
||||||
if order.VendorID == model.VendorIDEBAI && len(order.VendorOrderID2) >= 4 {
|
if order.VendorID == model.VendorIDEBAI && len(order.VendorOrderID2) >= 4 {
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package dao
|
package dao
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
@@ -84,8 +86,6 @@ type StoreSkuSyncInfo struct {
|
|||||||
SkuName string
|
SkuName string
|
||||||
StatusSaleBegin int `json:"statusSaleBegin"` //商品可售时间范围
|
StatusSaleBegin int `json:"statusSaleBegin"` //商品可售时间范围
|
||||||
StatusSaleEnd int `json:"statusSaleEnd"`
|
StatusSaleEnd int `json:"statusSaleEnd"`
|
||||||
OpenTime int //门店营业时间
|
|
||||||
CloseTime int
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type MissingStoreSkuInfo struct {
|
type MissingStoreSkuInfo struct {
|
||||||
@@ -221,8 +221,6 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
sql := `
|
sql := `
|
||||||
SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id,
|
SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id,
|
||||||
t1.%s_sync_status store_sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end,
|
t1.%s_sync_status store_sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end,
|
||||||
IF(t6.open_time2 <> 0 AND t6.close_time2 <>0,IF(t6.open_time1 < t6.open_time2,t6.open_time1,t6.open_time2),t6.open_time1) open_time,
|
|
||||||
IF(t6.open_time2 <> 0 AND t6.close_time2 <>0,IF(t6.close_time1 > t6.close_time2,t6.close_time1,t6.close_time2),t6.close_time1) close_time,
|
|
||||||
t2.*,
|
t2.*,
|
||||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc,
|
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc,
|
||||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||||
@@ -255,7 +253,6 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
||||||
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
||||||
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
|
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
|
||||||
LEFT JOIN store t6 ON t6.id = t1.store_id
|
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
@@ -607,3 +604,31 @@ func GetStoresSkusInfoBySaleTime(db *DaoDB) (storeSkuBindList []*model.StoreSkuB
|
|||||||
err = GetRows(db, &storeSkuBindList, sql, sqlParams...)
|
err = GetRows(db, &storeSkuBindList, sql, sqlParams...)
|
||||||
return storeSkuBindList, err
|
return storeSkuBindList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpdateStoreSkuBindSyncStatus(db *DaoDB, vendorIDs []int) (num int64, err error) {
|
||||||
|
sql := `
|
||||||
|
UPDATE store_sku_bind
|
||||||
|
SET
|
||||||
|
`
|
||||||
|
fmtParams := []interface{}{}
|
||||||
|
sqlParams := []interface{}{}
|
||||||
|
if len(vendorIDs) > 0 {
|
||||||
|
for _, v := range vendorIDs {
|
||||||
|
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v])
|
||||||
|
sql += ` %s_sync_status = ?,`
|
||||||
|
fmtParams = append(fmtParams, fieldPrefix)
|
||||||
|
sqlParams = append(sqlParams, model.SyncFlagSaleMask)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return 0, errors.New("取平台ID名有错误!partner.GetPurchasePlatformVendorIDs()")
|
||||||
|
}
|
||||||
|
sql = sql[0:strings.LastIndex(sql, ",")]
|
||||||
|
sql = fmt.Sprintf(sql, fmtParams...)
|
||||||
|
sql += ` WHERE status = ?
|
||||||
|
AND deleted_at = ?
|
||||||
|
AND status_sale_begin <> 0
|
||||||
|
AND status_sale_end <> 0
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, model.StoreSkuBindStatusNormal, utils.DefaultTimeValue)
|
||||||
|
return ExecuteSQL(db, sql, sqlParams...)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user