diff --git a/business/jxstore/misc/misc2.go b/business/jxstore/misc/misc2.go index b55a57367..436a3f157 100644 --- a/business/jxstore/misc/misc2.go +++ b/business/jxstore/misc/misc2.go @@ -2,7 +2,7 @@ package misc import ( "time" - + "strings" "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" @@ -15,7 +15,8 @@ import ( ) const ( - specialSkuName = "温馨提示" + taskParallelCount = 4 + specialSkuNameKeyWord = "温馨提示" startOpStoreStockNumber = 0 endOpStoreStockNumber = model.MaxStoreSkuStockQty startOpStoreTimeDefaultMTWM = int16(2200) @@ -25,19 +26,34 @@ const ( ) var ( - startOpStoreTimeListJXCS = []string{ + //only for MTWM + startOpStoreTimeListJXGY_MTWM = []string{ + "22:00:00", + } + endOpStoreTimeListJXGY_MTWM = []string{ + "00:00:00", + } + startOpStoreTimeListJXCS_MTWM = []string { "22:10:00", } - endOpStoreTimeListJXCS = []string{ - "06:10:00", + endOpStoreTimeListJXCS_MTWM = []string{ + "00:10:00", } + //for other vendor startOpStoreTimeListJXGY = []string{ - "22:00:00", + "22:20:00", } endOpStoreTimeListJXGY = []string{ "06:00:00", } - vendorList = map[int]bool{ + startOpStoreTimeListJXCS = []string{ + "22:30:00", + } + endOpStoreTimeListJXCS = []string{ + "06:10:00", + } + + vendorList = map[int]bool { model.VendorIDMTWM: true, model.VendorIDEBAI: true, } @@ -71,17 +87,45 @@ func GetOpStoreTime(vendorID int) (startTime, endTime int16) { return 0, 0 } -func FilterSkuNameList(storeSkuNameList []*partner.SkuNameInfo) (filterStoreSkuNameList []*partner.SkuNameInfo) { - for _, skuNameInfo := range storeSkuNameList { - if skuNameInfo.Name != specialSkuName { - filterStoreSkuNameList = append(filterStoreSkuNameList, skuNameInfo) - } - } - return filterStoreSkuNameList +func IsSpecialSku(name string) bool { + return strings.Contains(name, specialSkuNameKeyWord) } -func StartOrEndOpStore(isStart bool, startTime, endTime int16, isAsync, isContinueWhenError bool) (retVal interface{}, err error) { +func SetSkuStock(isStart bool, storeSkuNameList []*partner.SkuNameInfo) { + for _, skuNameInfo := range storeSkuNameList { + for _, skuInfo := range skuNameInfo.SkuList { + if IsSpecialSku(skuNameInfo.Name) || IsSpecialSku(skuInfo.SkuName) { + skuInfo.Stock = endOpStoreStockNumber + } else { + skuInfo.Stock = GetStockValue(isStart) + } + } + } +} + +func SetSpecialSkuStatus(storeID, vendorID int, vendorStoreID string, storeSkuNameList []*partner.SkuNameInfo) { + ctx := jxcontext.AdminCtx + singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) + for _, skuNameInfo := range storeSkuNameList { + for _, skuInfo := range skuNameInfo.SkuList { + if IsSpecialSku(skuNameInfo.Name) || IsSpecialSku(skuInfo.SkuName) { + storeSkuList := []*partner.StoreSkuInfo{&skuInfo.StoreSkuInfo} + singleStoreHandler.UpdateStoreSkusStatus(ctx, storeID, vendorStoreID, storeSkuList, model.SkuStatusNormal) + } + } + } +} + +func StartOrEndOpStore(isStart bool, vendorIDList []int, storeIDList []int, startTime, endTime int16, isAsync, isContinueWhenError bool) (retVal interface{}, err error) { startProcessTime := time.Now().Unix() + vendorMap := make(map[int]bool) + for _, vendorID := range vendorIDList { + vendorMap[vendorID] = true + } + storeIDMap := make(map[int]bool) + for _, storeID := range storeIDList { + storeIDMap[storeID] = true + } baseapi.SugarLogger.Debugf("StartOrEndOpStore start time: %v", time.Now()) ctx := jxcontext.AdminCtx storeInfo, err := cms.GetStores(ctx, "", map[string]interface{}{}, 0, -1, utils.DefaultTimeValue, utils.DefaultTimeValue, 0, 0) @@ -92,9 +136,21 @@ func StartOrEndOpStore(isStart bool, startTime, endTime int16, isAsync, isContin taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeListValue := batchItemList[0].(*cms.StoreExt) storeID := storeListValue.ID + //filter for storeID + if len(storeIDMap) > 0 { + if _, ok := storeIDMap[storeID]; !ok { + return retVal, err + } + } if storeListValue.StoreMaps != nil { for _, vendorListValue := range storeListValue.StoreMaps { vendorID := int(utils.MustInterface2Int64(vendorListValue["vendorID"])) + //filter for vendorID + if len(vendorMap) > 0 { + if _, ok := vendorMap[vendorID]; !ok { + continue + } + } if _, ok := vendorList[vendorID]; ok { startOpStoreTime, endOpStoreTime := GetOpStoreTime(vendorID) if startTime != 0 && endTime != 0 { @@ -109,17 +165,15 @@ func StartOrEndOpStore(isStart bool, startTime, endTime int16, isAsync, isContin if err != nil { baseapi.SugarLogger.Errorf("StartOrEndOpStore GetStoreSkusFullInfo error:%v storeID:%d vendorID:%d vendorStoreID:%s", err, storeID, vendorID, vendorStoreID) } else { - filterStoreSkuNameList := FilterSkuNameList(storeSkuNameList) - storeSkuList := putils.StoreSkuFullList2Bare(filterStoreSkuNameList) + SetSkuStock(isStart, storeSkuNameList) + SetSpecialSkuStatus(storeID, vendorID, vendorStoreID,storeSkuNameList) + storeSkuList := putils.StoreSkuFullList2Bare(storeSkuNameList) if len(storeSkuList) > 0 { if !isStart { AddOrDelExtraStoreOptime(vendorID, storeID, vendorStoreID, &storeListValue.Store, startOpStoreTime, endOpStoreTime, false) } _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { - for _, skuValue := range batchedStoreSkuList { - skuValue.Stock = GetStockValue(isStart) - } //var successList []*partner.StoreSkuInfo if _, err = singleStoreHandler.UpdateStoreSkusStock(ctx, storeID, vendorStoreID, batchedStoreSkuList); err == nil { //successList = batchedStoreSkuList @@ -138,7 +192,7 @@ func StartOrEndOpStore(isStart bool, startTime, endTime int16, isAsync, isContin } return retVal, err } - task := tasksch.NewParallelTask("StartOrEndOpStore", tasksch.NewParallelConfig().SetParallelCount(4), ctx, taskFunc, storeInfo.Stores) + task := tasksch.NewParallelTask("StartOrEndOpStore", tasksch.NewParallelConfig().SetParallelCount(taskParallelCount), ctx, taskFunc, storeInfo.Stores) tasksch.HandleTask(task, nil, true).Run() if isAsync { retVal = task.ID @@ -158,21 +212,43 @@ func StartOrEndOpStore(isStart bool, startTime, endTime int16, isAsync, isContin return retVal, err } -func InitEx() { - startTimeList := startOpStoreTimeListJXCS - stopTimeList := endOpStoreTimeListJXCS - if !globals.IsMainProductEnv() { - startTimeList = startOpStoreTimeListJXGY - stopTimeList = endOpStoreTimeListJXGY +func StartDaemon(vendorID int) { + startTimeList := []string{} + stopTimeList := []string{} + if vendorID == model.VendorIDMTWM { + startTimeList = startOpStoreTimeListJXCS_MTWM + stopTimeList = endOpStoreTimeListJXCS_MTWM + if !globals.IsMainProductEnv() { + startTimeList = startOpStoreTimeListJXGY_MTWM + stopTimeList = endOpStoreTimeListJXGY_MTWM + } + } else { + startTimeList = startOpStoreTimeListJXCS + stopTimeList = endOpStoreTimeListJXCS + if !globals.IsMainProductEnv() { + startTimeList = startOpStoreTimeListJXGY + stopTimeList = endOpStoreTimeListJXGY + } } + + vendorIDList := []int{vendorID} + storeIDList := []int{} ScheduleTimerFunc("StartOpStore", func() { if !IsImportantTaskRunning(TaskNameSyncStoreSku) { - StartOrEndOpStore(true, 0, 0, false, true) + StartOrEndOpStore(true, vendorIDList, storeIDList, 0, 0, false, true) } }, startTimeList) ScheduleTimerFunc("EndOpStore", func() { if !IsImportantTaskRunning(TaskNameSyncStoreSku) { - StartOrEndOpStore(false, 0, 0, false, true) + StartOrEndOpStore(false, vendorIDList, storeIDList, 0, 0, false, true) } }, stopTimeList) } + +func InitEx() { + for index, value := range vendorList { + if value { + StartDaemon(index) + } + } +} diff --git a/business/jxstore/misc/misc2_test.go b/business/jxstore/misc/misc2_test.go index c683e0bb7..38d1a9be5 100644 --- a/business/jxstore/misc/misc2_test.go +++ b/business/jxstore/misc/misc2_test.go @@ -5,5 +5,5 @@ import ( ) func TestStartOrEndOpStore(t *testing.T) { - StartOrEndOpStore(true, 0, 0, false, true) + StartOrEndOpStore(1, true, 0, 0, false, true) } diff --git a/controllers/temp_op.go b/controllers/temp_op.go index 6f7eb122f..95d5001a6 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -276,18 +276,24 @@ func (c *TempOpController) TestIt() { // @Title 开启或结束所有平台商店的额外时间 // @Description 开启或结束所有平台商店的额外时间,并且修改所有商品库存为0或99999(开启:0 , 结束:99999) -// @Param token header string true "认证token" -// @Param startOrEndStore query bool true "开启或结束" -// @Param startTime query int false "开始营业时间(格式:930代表早上9点30分)" -// @Param endTime query int false "结束营业时间" -// @Param isAsync query bool false "是否异步操作" -// @Param isContinueWhenError query bool false "单个同步失败是否继续,缺省false" +// @Param token header string true "认证token" +// @Param vendorIDs formData string false "运营商ID列表(美团1 饿百3)" +// @Param storeIDs formData string false "京西门店ID列表" +// @Param startOrEndStore formData bool true "开启或结束" +// @Param startTime formData int false "开始营业时间(格式:930代表早上9点30分)" +// @Param endTime formData int false "结束营业时间" +// @Param isAsync formData bool false "是否异步操作" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /TestStartOrEndOpStore [get] +// @router /TestStartOrEndOpStore [post] func (c *TempOpController) TestStartOrEndOpStore() { c.callTestStartOrEndOpStore(func(params *tTempopTestStartOrEndOpStoreParams) (retVal interface{}, errCode string, err error) { - retVal, err = misc.StartOrEndOpStore(params.StartOrEndStore, int16(params.StartTime), int16(params.EndTime), params.IsAsync, params.IsContinueWhenError) + var vendorIDList []int + var storeIDList []int + if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList, params.StoreIDs, &storeIDList); err == nil { + retVal, err = misc.StartOrEndOpStore(params.StartOrEndStore, vendorIDList, storeIDList, int16(params.StartTime), int16(params.EndTime), params.IsAsync, params.IsContinueWhenError) + } return retVal, "", err }) }