定时更改商品可售状态

This commit is contained in:
苏尹岚
2019-11-15 09:47:10 +08:00
parent bcc534289a
commit 7305f1a6af
6 changed files with 87 additions and 25 deletions

View File

@@ -116,13 +116,15 @@ type StoreSkuBindSkuInfo struct {
// UpdateStoreSku用API调用时
type StoreSkuBindInfo struct {
StoreID int `json:"storeID"`
NameID int `json:"nameID"`
UnitPrice int `json:"unitPrice"` // 对于是份的SKU就是单价每斤价格其它则为总价
IsFocus int `json:"isFocus"` // -1不关注0忽略1关注
IsSale int `json:"isSale"` // -1不可售0忽略1可售
SubStoreID int `json:"subStoreID,omitempty"`
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
StoreID int `json:"storeID"`
NameID int `json:"nameID"`
UnitPrice int `json:"unitPrice"` // 对于是份的SKU就是单价每斤价格其它则为总价
IsFocus int `json:"isFocus"` // -1不关注0忽略1关注
IsSale int `json:"isSale"` // -1不可售0忽略1可售
SubStoreID int `json:"subStoreID,omitempty"`
StatusSaleBegin int `json:"statusSaleBegin"` //商品可售时间范围
StatusSaleEnd int `json:"statusSaleEnd"`
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
}
type tStoreSkuBindAndSpec struct {
@@ -1076,6 +1078,12 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
updateFieldMap["Price"] = 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 这里应该是不需处理这个信息的吧?
// if inSkuBind != nil && inSkuBind.EbaiID != 0 {
// skuBind.EbaiID = inSkuBind.EbaiID

View File

@@ -659,20 +659,18 @@ func (v *VendorSync) ChangeStoreSkuSaleStatus(ctx *jxcontext.Context, isAsync, i
storeIDs []int
skuIDs []int
)
vendorIDs := partner.GetPurchasePlatformVendorIDs()
db := dao.GetDB()
storeSkuList, err := dao.GetStoresSkusInfoBySaleTime(db)
if len(storeSkuList) < 1 || err != nil {
return errors.New(fmt.Sprintf("未查询到设置了可售时间的商品 GetStoresSkusInfoBySaleTimeerr : %v", err))
}
for _, v := range storeSkuList {
storeIDs = append(storeIDs, v.StoreID)
skuIDs = append(skuIDs, v.SkuID)
setStoreSkuBindStatus(v, model.SyncFlagSaleMask)
dao.UpdateEntity(db, v)
}
if len(storeSkuList) > 0 {
v.SyncStoresSkus(ctx, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError)
} else {
return errors.New("未查询到设置了可售时间的商品!")
}
vendorIDs := partner.GetPurchasePlatformVendorIDs()
dao.UpdateStoreSkuBindSyncStatus(db, vendorIDs)
v.SyncStoresSkus(ctx, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError)
if err != nil {
return err
}

View File

@@ -329,9 +329,9 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo
if reorderHandler != nil {
reorderSkuMap = make(map[string][]*dao.StoreSkuSyncInfo)
}
now := time.Now().Hour()*100 + time.Now().Minute()
now := jxutils.OperationTime2HourMinuteFormat(time.Now())
for _, sku := range skus {
if isUpdateSkuSaleStatus(sku, now) {
if isUpdateSkuSaleStatus(sku, storeDetail, now) {
sku.MergedStatus = model.SkuStatusDontSale
} else {
sku.MergedStatus = model.SkuStatusNormal
@@ -802,12 +802,27 @@ func GetSensitiveWord(singleStoreHandler partner.ISingleStoreStoreSkuHandler, st
return ""
}
func isUpdateSkuSaleStatus(sku *dao.StoreSkuSyncInfo, now int) bool {
func isUpdateSkuSaleStatus(sku *dao.StoreSkuSyncInfo, storeDetail *dao.StoreDetail, now int) bool {
//商品可售时间的差集与门店营业时间的交集为不可售,其余为原本状态
openTime := sku.OpenTime
closeTime := sku.CloseTime
var openTime int
var closeTime int
saleBeginTime := sku.StatusSaleBegin
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)
beginAt2, endAt2 := GetTimeMixByInt(saleEndTime, 2400, openTime, closeTime)
if beginAt1 != 0 && endAt1 != 0 {

View File

@@ -1,6 +1,7 @@
package cms
import (
"fmt"
"testing"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
@@ -30,3 +31,14 @@ func TestFreeBatchStoreSkuInfo(t *testing.T) {
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)
}

View File

@@ -688,6 +688,10 @@ func OperationTimeStr4VendorStore(v *model.VendorStoreSnapshot) (str string) {
return str
}
func OperationTime2HourMinuteFormat(time time.Time) (i int) {
return time.Hour()*100 + time.Minute()
}
// 得到饿百订单的取货码
func GetEbaiOrderGetCode(order *model.GoodsOrder) (getCode string) {
if order.VendorID == model.VendorIDEBAI && len(order.VendorOrderID2) >= 4 {

View File

@@ -1,7 +1,9 @@
package dao
import (
"errors"
"fmt"
"strings"
"time"
"git.rosy.net.cn/baseapi/utils"
@@ -84,8 +86,6 @@ type StoreSkuSyncInfo struct {
SkuName string
StatusSaleBegin int `json:"statusSaleBegin"` //商品可售时间范围
StatusSaleEnd int `json:"statusSaleEnd"`
OpenTime int //门店营业时间
CloseTime int
}
type MissingStoreSkuInfo struct {
@@ -221,8 +221,6 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
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,
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.*,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc,
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 t12 ON t12.main_url = t3.img2
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
LEFT JOIN store t6 ON t6.id = t1.store_id
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
@@ -607,3 +604,31 @@ func GetStoresSkusInfoBySaleTime(db *DaoDB) (storeSkuBindList []*model.StoreSkuB
err = GetRows(db, &storeSkuBindList, sql, sqlParams...)
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...)
}