Merge branch 'mark' of e.coding.net:rosydev/jx-callback into mark
This commit is contained in:
@@ -777,6 +777,9 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
|
||||
dao.Commit(db)
|
||||
}
|
||||
notifyStoreOperatorChanged(store, valid["operatorPhone"])
|
||||
if valid["openTime1"] != 0 || valid["closeTime1"] != 0 || valid["openTime2"] != 0 || valid["closeTime2"] != 0 {
|
||||
err = CurVendorSync.ChangeStoreSkuSaleStatus(ctx, storeID, true, false)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("UpdateStore track:%s, store:%s", ctx.GetTrackInfo(), utils.Format4Output(store, true))
|
||||
|
||||
@@ -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 int16 `json:"statusSaleBegin"` //商品可售时间范围
|
||||
StatusSaleEnd int16 `json:"statusSaleEnd"`
|
||||
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
||||
}
|
||||
|
||||
type tStoreSkuBindAndSpec struct {
|
||||
@@ -1076,6 +1078,21 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
||||
updateFieldMap["Price"] = 1
|
||||
updateFieldMap["JxPrice"] = 1
|
||||
}
|
||||
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
||||
if skuBindInfo.StatusSaleBegin < 0 || skuBindInfo.StatusSaleBegin > 2359 ||
|
||||
skuBindInfo.StatusSaleEnd < 0 || skuBindInfo.StatusSaleEnd > 2359 {
|
||||
dao.Rollback(db)
|
||||
return nil, fmt.Errorf("更改商品:%s, 可售时间不合法!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
|
||||
}
|
||||
if skuBindInfo.StatusSaleBegin >= skuBindInfo.StatusSaleEnd {
|
||||
dao.Rollback(db)
|
||||
return nil, fmt.Errorf("更改商品:%s, 可售时间不允许交叉!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
|
||||
}
|
||||
updateFieldMap["StatusSaleBegin"] = int(skuBindInfo.StatusSaleBegin)
|
||||
updateFieldMap["StatusSaleEnd"] = int(skuBindInfo.StatusSaleEnd)
|
||||
skuBind.StatusSaleBegin = skuBindInfo.StatusSaleBegin
|
||||
skuBind.StatusSaleEnd = skuBindInfo.StatusSaleEnd
|
||||
}
|
||||
// todo 这里应该是不需处理这个信息的吧?
|
||||
// if inSkuBind != nil && inSkuBind.EbaiID != 0 {
|
||||
// skuBind.EbaiID = inSkuBind.EbaiID
|
||||
|
||||
@@ -653,3 +653,48 @@ func (v *VendorSync) SyncSkuNames(ctx *jxcontext.Context, nameIDs []int, isForce
|
||||
}
|
||||
return v.SyncSkus(ctx, db, nameIDs, nil, isAsync, isContinueWhenError, ctx.GetUserName())
|
||||
}
|
||||
|
||||
func (v *VendorSync) ChangeStoreSkuSaleStatus(ctx *jxcontext.Context, storeID int, isAsync, isContinueWhenError bool) (err error) {
|
||||
var (
|
||||
storeIDs []int
|
||||
skuIDs []int
|
||||
)
|
||||
db := dao.GetDB()
|
||||
storeSkuList, err := dao.GetStoresSkusInfoBySaleTime(db, storeID)
|
||||
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)
|
||||
}
|
||||
vendorIDs := partner.GetPurchasePlatformVendorIDs()
|
||||
dao.UpdateStoreSkuBindSyncStatus(db, vendorIDs, storeID)
|
||||
v.SyncStoresSkus(ctx, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetTimeMixByInt(begin1, end1, begin2, end2 int16) (beginAt, endAt int16) {
|
||||
if (begin1 > begin2 && begin1 > end2) || (begin2 > end1 && end2 > end1) {
|
||||
return 0, 0
|
||||
}
|
||||
if begin1 > begin2 {
|
||||
beginAt = begin1
|
||||
if end1 > end2 {
|
||||
endAt = end2
|
||||
} else {
|
||||
endAt = end1
|
||||
}
|
||||
} else {
|
||||
beginAt = begin2
|
||||
if end1 > end2 {
|
||||
endAt = end2
|
||||
} else {
|
||||
endAt = end1
|
||||
}
|
||||
}
|
||||
return beginAt, endAt
|
||||
}
|
||||
|
||||
@@ -299,6 +299,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo
|
||||
} else {
|
||||
skus, err = dao.GetStoreSkus(db, vendorID, storeID, skuIDs)
|
||||
}
|
||||
|
||||
if err != nil || len(skus) == 0 {
|
||||
return err
|
||||
}
|
||||
@@ -328,8 +329,13 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo
|
||||
if reorderHandler != nil {
|
||||
reorderSkuMap = make(map[string][]*dao.StoreSkuSyncInfo)
|
||||
}
|
||||
|
||||
now := jxutils.OperationTime2HourMinuteFormat(time.Now())
|
||||
for _, sku := range skus {
|
||||
if isUpdateSkuSaleStatus(sku, storeDetail, now) {
|
||||
sku.MergedStatus = model.SkuStatusDontSale
|
||||
} else {
|
||||
sku.MergedStatus = model.SkuStatusNormal
|
||||
}
|
||||
var bareSku *partner.StoreSkuInfo
|
||||
isNeedReorder := false
|
||||
if isStoreSkuSyncNeedDelete(sku) {
|
||||
@@ -800,3 +806,39 @@ func GetSensitiveWord(singleStoreHandler partner.ISingleStoreStoreSkuHandler, st
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
func isUpdateSkuSaleStatus(sku *dao.StoreSkuSyncInfo, storeDetail *dao.StoreDetail, now int16) bool {
|
||||
//商品可售时间的差集与门店营业时间的交集为不可售,其余为原本状态
|
||||
var openTime int16
|
||||
var closeTime int16
|
||||
saleBeginTime := sku.StatusSaleBegin
|
||||
saleEndTime := sku.StatusSaleEnd
|
||||
if storeDetail.OpenTime2 != 0 && storeDetail.CloseTime2 != 0 {
|
||||
if storeDetail.OpenTime1 < storeDetail.OpenTime2 {
|
||||
openTime = storeDetail.OpenTime1
|
||||
} else {
|
||||
openTime = storeDetail.OpenTime2
|
||||
}
|
||||
if storeDetail.CloseTime1 > storeDetail.CloseTime2 {
|
||||
closeTime = storeDetail.CloseTime1
|
||||
} else {
|
||||
closeTime = storeDetail.CloseTime2
|
||||
}
|
||||
} else {
|
||||
openTime = storeDetail.OpenTime1
|
||||
closeTime = storeDetail.CloseTime1
|
||||
}
|
||||
beginAt1, endAt1 := GetTimeMixByInt(0, saleBeginTime, openTime, closeTime)
|
||||
beginAt2, endAt2 := GetTimeMixByInt(saleEndTime, 2400, openTime, closeTime)
|
||||
if beginAt1 != 0 && endAt1 != 0 {
|
||||
if now >= beginAt1 && now < endAt1 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
if beginAt2 != 0 && endAt2 != 0 {
|
||||
if now >= beginAt2 && now < endAt2 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user