diff --git a/business/jxstore/misc/misc2.go b/business/jxstore/misc/misc2.go new file mode 100644 index 000000000..c72559692 --- /dev/null +++ b/business/jxstore/misc/misc2.go @@ -0,0 +1,133 @@ +package misc + +import ( + "time" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/business/partner/putils" + "git.rosy.net.cn/baseapi" +) + +const ( + specialSkuName = "温馨提示" + startOpStoreStockNumber = 0 + endOpStoreStockNumber = model.MaxStoreSkuStockQty + startOpStoreTimeDefault = int16(5) + endOpStoreTimeDefault = int16(2355) +) + +var ( + startOpStoreTimeList = []string { + "00:00:00", + } + endOpStoreTimeList = []string { + "06:00:00", + } + vendorList = map[int]bool { + model.VendorIDMTWM: true, + model.VendorIDEBAI: true, + } +) + +func AddOrDelExtraStoreOptime(vendorID, storeID int, vendorStoreID string, storeInfo *model.Store, startOpStoreTime, endOpStoreTime int16, needAddTime bool) bool { + ctx := jxcontext.AdminCtx + opTimeList := storeInfo.GetOpTimeList() + if needAddTime { + opTimeList = []int16{startOpStoreTime, endOpStoreTime} + } + handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IStoreHandler) + return handler.UpdateStoreOpTime(ctx, storeID, vendorStoreID, opTimeList) == nil +} + +func GetStockValue(isStart bool) int { + if isStart { + return startOpStoreStockNumber + } else { + return endOpStoreStockNumber + } +} + +func FilterSkuNameList(storeSkuNameList []*partner.SkuNameInfo) (filterStoreSkuNameList []*partner.SkuNameInfo) { + for _, skuNameInfo := range storeSkuNameList { + if skuNameInfo.Name != specialSkuName { + filterStoreSkuNameList = append(filterStoreSkuNameList, skuNameInfo) + } + } + return filterStoreSkuNameList +} + +func StartOrEndOpStore(isStart bool, startTime, endTime int16) { + startProcessTime := time.Now().Unix() + baseapi.SugarLogger.Debugf("StartOrEndOpStore start time: %v", time.Now()) + startOpStoreTime := startOpStoreTimeDefault + endOpStoreTime := endOpStoreTimeDefault + if startTime != 0 && endTime != 0 { + startOpStoreTime = startTime + endOpStoreTime = endTime + baseapi.SugarLogger.Debugf("SetStoreOptime:%d do:%d", startTime, endTime) + } + ctx := jxcontext.AdminCtx + storeInfo, err := cms.GetStores(ctx, "", map[string]interface{}{}, 0, -1, utils.DefaultTimeValue, utils.DefaultTimeValue, 0, 0) + + if err != nil { + baseapi.SugarLogger.Errorf("storeInfo error:%v", err) + } else { + for _, storeListValue := range storeInfo.Stores { + storeID := storeListValue.ID + if storeListValue.StoreMaps != nil { + for _, vendorListValue := range storeListValue.StoreMaps { + vendorID := int(utils.MustInterface2Int64(vendorListValue["vendorID"])) + if _, ok := vendorList[vendorID]; ok { + vendorStoreID := utils.Interface2String(vendorListValue["vendorStoreID"]) + baseapi.SugarLogger.Debugf("storeID:%d vendorID:%d vendorStoreID:%s", storeID, vendorID, vendorStoreID) + singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) + storeSkuNameList, err := singleStoreHandler.GetStoreSkusFullInfo(ctx, nil, storeID, vendorStoreID, nil) + if err != nil { + baseapi.SugarLogger.Errorf("storeSkuList error:%v", err) + } else { + filterStoreSkuNameList := FilterSkuNameList(storeSkuNameList) + storeSkuList := putils.StoreSkuFullList2Bare(filterStoreSkuNameList) + if len(storeSkuList) > 0 { + if !isStart { + AddOrDelExtraStoreOptime(vendorID, storeID, vendorStoreID, &storeListValue.Store, startOpStoreTime, endOpStoreTime, false) + } + + _, err = putils.FreeBatchStoreSkuInfo(func(batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, 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 + //baseapi.SugarLogger.Debugf("successList:%v error:%v", successList, err) + } + return nil, err + }, ctx, nil, storeSkuList, singleStoreHandler.GetStoreSkusBatchSize(partner.FuncUpdateStoreSkusStock), true) + + if isStart { + AddOrDelExtraStoreOptime(vendorID, storeID, vendorStoreID, &storeListValue.Store, startOpStoreTime, endOpStoreTime, true) + } + } + } + } + } + } + } + } + endProcessTime := time.Now().Unix() + diff := endProcessTime - startProcessTime + baseapi.SugarLogger.Debugf("StartOrEndOpStore end time: %v", time.Now()) + baseapi.SugarLogger.Debugf("StartOrEndOpStore cost time: %d sec", diff) +} + +func InitEx() { + ScheduleTimerFunc(func() { + StartOrEndOpStore(true, 0, 0) + }, startOpStoreTimeList) + ScheduleTimerFunc(func() { + StartOrEndOpStore(false, 0, 0) + }, endOpStoreTimeList) +} \ No newline at end of file diff --git a/business/jxstore/misc/misc2_test.go b/business/jxstore/misc/misc2_test.go new file mode 100644 index 000000000..3973944c7 --- /dev/null +++ b/business/jxstore/misc/misc2_test.go @@ -0,0 +1,9 @@ +package misc + +import ( + "testing" +) + +func TestStartOrEndOpStore(t *testing.T) { + StartOrEndOpStore(true, 0, 0) +} diff --git a/controllers/temp_op.go b/controllers/temp_op.go index 3b5d945bb..d2fc4d144 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -10,6 +10,7 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" + "git.rosy.net.cn/jx-callback/business/jxstore/misc" ) type TempOpController struct { @@ -271,3 +272,19 @@ func (c *TempOpController) TestIt() { return retVal, "", err }) } + +// @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 "结束营业时间" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /TestStartOrEndOpStore [get] +func (c *TempOpController) TestStartOrEndOpStore() { + c.callTestStartOrEndOpStore(func(params *tTempopTestStartOrEndOpStoreParams) (retVal interface{}, errCode string, err error) { + misc.StartOrEndOpStore(params.StartOrEndStore, int16(params.StartTime), int16(params.EndTime)) + return retVal, "", err + }) +} diff --git a/main.go b/main.go index 67c8a92a8..81aa12ff6 100644 --- a/main.go +++ b/main.go @@ -57,6 +57,7 @@ func Init() { if globals.IsProductEnv() { ebai.CurPurchaseHandler.StartRefreshComment() misc.Init() + misc.InitEx() } } diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index b796aa207..1a31eaca4 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1690,6 +1690,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"], + beego.ControllerComments{ + Method: "TestStartOrEndOpStore", + Router: `/TestStartOrEndOpStore`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"], beego.ControllerComments{ Method: "UpdateAllWeiXinRemark",