diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 88c6833da..30257ce9c 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -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 diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index ab204b4bd..2b5e3cf7a 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -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("未查询到设置了可售时间的商品 GetStoresSkusInfoBySaleTime!err : %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 } diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 94765a658..647f65dc1 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -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 { diff --git a/business/jxstore/cms/sync_store_sku_test.go b/business/jxstore/cms/sync_store_sku_test.go index acd9abfcf..0df67e1a0 100644 --- a/business/jxstore/cms/sync_store_sku_test.go +++ b/business/jxstore/cms/sync_store_sku_test.go @@ -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) +} diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index b0469f187..d43e503d0 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -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 { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index d42ba9b30..b20942a45 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -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...) +}