From a3cfcab631d8c8934361cb9138facfb6485147a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 18 Nov 2020 10:46:07 +0800 Subject: [PATCH] jdshop2 create store --- business/jxstore/tempop/tempop.go | 548 ++++++++++++------------------ 1 file changed, 226 insertions(+), 322 deletions(-) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 28ff2e246..e14b8f91a 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -3,19 +3,20 @@ package tempop import ( "bytes" "context" + "encoding/base64" + "encoding/json" "fmt" - "math" "regexp" "strings" "time" "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/partner/delivery" - "git.rosy.net.cn/jx-callback/business/partner/putils" "github.com/360EntSecGroup-Skylar/excelize" "github.com/qiniu/api.v7/storage" "git.rosy.net.cn/baseapi/platformapi/jdapi" + "git.rosy.net.cn/baseapi/platformapi/jdshopapi" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils/errlist" @@ -1500,342 +1501,245 @@ func addSku(outSkuId string, cagtegoryId int, shopCategories []int64, brandId in } func UploadJdsImage(ctx *jxcontext.Context) (err error) { - //京东商城商品不同 - // type tTmp struct { - // SkuID int `json:"skuID"` - // Reason string `json:"reason"` - // } - // var vendorMap = make(map[int]*partner.SkuNameInfo) - // var localMap = make(map[int]*model.StoreSkuBind) - // var addList, deleteList []int - // var updateList []*tTmp - // vendorStock2JxStatus := func(stock int) (status int) { - // if stock > 0 { - // return model.StoreSkuBindStatusNormal - // } else { - // return model.StoreSkuBindStatusDontSale - // } - // } - // handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDJDShop).(partner.ISingleStoreStoreSkuHandler) - // skuNameList, err := handler.GetStoreSkusFullInfo(ctx, nil, 0, "", nil) - // storeSkuList, err := dao.GetStoresSkusInfo(dao.GetDB(), []int{model.JdShopMainStoreID}, nil) - // for _, v := range skuNameList { - // vendorMap[v.SkuList[0].SkuID] = v - // } - // for _, v := range storeSkuList { - // if vendorMap[v.SkuID] == nil { - // if v.Status == model.StoreSkuBindStatusNormal { - // addList = append(addList, v.SkuID) - // } - // } else { - // if int64(v.JdsPrice) != vendorMap[v.SkuID].SkuList[0].VendorPrice { - // updateList = append(updateList, &tTmp{ - // SkuID: v.SkuID, - // Reason: "价格不同", - // }) - // } - // if v.Status != vendorStock2JxStatus(vendorMap[v.SkuID].SkuList[0].Stock) { - // updateList = append(updateList, &tTmp{ - // SkuID: v.SkuID, - // Reason: "库存可售不同", - // }) - // } - // skus, _ := dao.GetSkus(dao.GetDB(), []int{v.SkuID}, nil, nil, nil, nil) - // if skus[0].Comment != "" { - // if skus[0].Comment != vendorMap[v.SkuID].SkuList[0].Comment { - // updateList = append(updateList, &tTmp{ - // SkuID: v.SkuID, - // Reason: "备注与销售属性不同", - // }) - // } - // } - // } - // localMap[v.SkuID] = v - // } - // for k, _ := range vendorMap { - // if localMap[k] == nil { - // deleteList = append(deleteList, k) - // } - // } - // fmt.Println("addList2", addList) - // fmt.Println("updateList2", utils.Format4Output(updateList, false)) - // fmt.Println("deleteList2", deleteList) - // cms.DeletedDuplicateWaitAuditData(ctx, dao.GetDB()) - // orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -2).Format("20060102"), time.Now().Format("20060102")) // var ( - // db = dao.GetDB() - // goods []*model.GoodsOrder + // jdStoreIDs = []string{ + // "11734848", + // "11734850", + // "11734854", + // "11734862", + // "11734868", + // "11734873", + // "11734874", + // "11734886", + // "11748353", + // "11890095", + // "11800399", + // "11738114", + // "11857499", + // "11873440", + // "11883071", + // "11734852", + // "11886763", + // "11874614", + // "11734884", + // "11926674", + // "11929173", + // "11894144", + // "11734861", + // "11951611", + // "11800403", + // "11913597", + // "11980746", + // "11981675", + // "12011812", + // "12007545", + // "11734846", + // "12005417", + // "12005640", + // "12005682", + // "12006134", + // "11982352", + // "12007250", + // "12007560", + // "11982427", + // "12008087", + // "12035806", + // "12008160", + // "12008395", + // "12009345", + // "11940019", + // "12010237", + // "12010654", + // "12011111", + // "12006857", + // "11734851", + // "12030632", + // "12050456", + // } + // jdStoreIDxipu = "11890095" + // skuMap = make(map[string]partner.StoreSkuInfo) + // priceList = make(map[string][]*partner.StoreSkuInfo) + // statusList1 = make(map[string][]*partner.StoreSkuInfo) + // statusList2 = make(map[string][]*partner.StoreSkuInfo) + // stockList = make(map[string][]*partner.StoreSkuInfo) + // vendorOrgCode = "320406" + // vendorOrgCode = "82029" // ) - // sql := `SELECT * from goods_order where vendor_id = 0 and buyer_comment = '【JD】' and total_shop_money = 0 and status = 110 - // AND order_created_at > '2020-09-01'` - // dao.GetRows(db, &goods, sql, nil) - // for _, order2 := range goods { - // results, err := api.JdAPI.GetJdShopOrders(order2.OrderCreatedAt.AddDate(0, 0, -1).Format("20060102"), order2.OrderCreatedAt.Format("20060102"), globals.JdOrgCode, globals.JdLoginName) - // if err != nil || results == nil { - // return err - // } - // for _, v := range results.BillList.Result { - // if v.DueAmount != 0 { - // order, _ := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(v.OrderID), model.VendorIDJD) - // stores, _ := dao.GetStoreList(db, []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, nil, nil, "") - // if len(stores) > 0 { - // store := stores[0] - // if order.NewEarningPrice == 0 { - // jxutils.RefreshOrderEarningPrice2(order, store.PayPercentage) - // } - // if order.TotalShopMoney == 0 { - // order.TotalShopMoney = utils.Float64TwoInt64(v.DueAmount * 100) - // } - // dao.UpdateEntity(db, order, "TotalShopMoney", "NewEarningPrice") - // } - // } - // } - // } - // type tmpJD struct { - // JdStoreID int `orm:"column(jd_store_id)" json:"jdStoreID"` - // SkuName string `json:"skuName"` - // } - // type tmpCount struct { - // Count int `json:"count"` - // ID int `orm:"column(id)" json:"id"` - // } - // var ( - // db = dao.GetDB() - // tmpJDs []*tmpJD - // jdMaps = make(map[int][]string) - // jdMaps2 = make(map[int][]int) - // a = 99999 - // ) - // sql := `SELECT * FROM tmp_jd` - // dao.GetRows(db, &tmpJDs, sql, nil) - // for _, v := range tmpJDs { - // jdMaps[v.JdStoreID] = append(jdMaps[v.JdStoreID], v.SkuName) - // } - // for jdStoreID, skuNames := range jdMaps { - // for _, v := range skuNames { - // var ( - // nameIDs []int - // tmpCount = &tmpCount{} - // ) - // skuNames, _ := dao.GetSkuNames(db, nil, nil, v, false) - // for _, v := range skuNames { - // flag := false - // for _, vv := range nameIDs { - // if vv == v.ID { - // flag = true - // break - // } - // } - // if !flag { - // nameIDs = append(nameIDs, v.ID) - // } - // } - // if len(nameIDs) == 0 { - // continue - // } - // sql := ` - // SELECT SUM(a.count) count, c.id - // FROM order_sku a - // JOIN sku b ON a.sku_id = b.id - // JOIN sku_name c ON c.id = b.name_id - // WHERE c.name_id IN (` + dao.GenQuestionMarks(len(nameIDs)) + `) - // AND a.order_created_at > ? - // GROUP BY 2 - // ORDER BY 1 DESC - // LIMIT 1 - // ` - // sqlParams := []interface{}{time.Now().AddDate(0, -1, 0)} - // dao.GetRow(db, &tmpCount, sql, sqlParams) - // if tmpCount.ID != 0 { - // jdMaps2[jdStoreID] = append(jdMaps2[jdStoreID], tmpCount.ID) - // } else { - // jdMaps2[jdStoreID] = append(jdMaps2[jdStoreID], nameIDs[0]) - // } - // } - // } - // for jdStoreID, skuNames := range jdMaps2 { - // storeDetail, _ := dao.GetStoreDetailByVendorStoreID(db, utils.Int2Str(jdStoreID), model.VendorIDJD) - // if storeDetail == nil { - // continue - // } - // var skuBindInfos []*cms.StoreSkuBindInfo - // for _, v := range skuNames { - // var skuBindInfoSkus []*cms.StoreSkuBindSkuInfo - // skuBindInfo := &cms.StoreSkuBindInfo{ - // IsFocus: 1, - // IsSale: 1, - // NameID: v, - // StoreID: storeDetail.ID, - // } - // skus, _ := dao.GetSkus(db, nil, []int{v}, []int{model.SkuStatusNormal}, nil, nil) - // for _, vv := range skus { - // skuBindInfoSku := &cms.StoreSkuBindSkuInfo{ - // SkuID: vv.ID, - // Stock: &a, - // IsSale: 1, - // } - // skuBindInfoSkus = append(skuBindInfoSkus, skuBindInfoSku) - // } - // prices, _ := dao.GetPriceReferSnapshotNoPage(db, []int{0}, nil, []int{v}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) - // if len(prices) > 0 { - // skuBindInfo.UnitPrice = prices[0].MidUnitPrice - // } else { - // skuBindInfo.UnitPrice = 1000 - // } - // skuBindInfos = append(skuBindInfos, skuBindInfo) - // } - // cms.UpdateStoreSkus(ctx, 0, storeDetail.ID, skuBindInfos, true, true) - // } - var ( - jdStoreIDs = []string{ - // "11734848", - // "11734850", - // "11734854", - // "11734862", - // "11734868", - // "11734873", - // "11734874", - // "11734886", - // "11748353", - // "11890095", - // "11800399", - // "11738114", - // "11857499", - // "11873440", - // "11883071", - // "11734852", - // "11886763", - // "11874614", - // "11734884", - // "11926674", - // "11929173", - // "11894144", - // "11734861", - // "11951611", - // "11800403", - // "11913597", - // "11980746", - // "11981675", - // "12011812", - // "12007545", - "11734846", - // "12005417", - // "12005640", - // "12005682", - // "12006134", - // "11982352", - // "12007250", - // "12007560", - // "11982427", - // "12008087", - // "12035806", - // "12008160", - // "12008395", - // "12009345", - // "11940019", - // "12010237", - // "12010654", - // "12011111", - // "12006857", - // "11734851", - // "12030632", - // "12050456", - } - // jdStoreIDxipu = "11890095" - // skuMap = make(map[string]partner.StoreSkuInfo) - priceList = make(map[string][]*partner.StoreSkuInfo) - // statusList1 = make(map[string][]*partner.StoreSkuInfo) - // statusList2 = make(map[string][]*partner.StoreSkuInfo) - // stockList = make(map[string][]*partner.StoreSkuInfo) - vendorOrgCode = "320406" - // vendorOrgCode = "82029" - ) - handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDJD).(partner.IPurchasePlatformStoreSkuHandler) - multiHandler := partner.GetPurchasePlatformFromVendorID(model.VendorIDJD).(partner.IMultipleStoresHandler) - allSkuNameInfoList, err := multiHandler.GetSkus(ctx, vendorOrgCode, 0, "") + // handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDJD).(partner.IPurchasePlatformStoreSkuHandler) + // multiHandler := partner.GetPurchasePlatformFromVendorID(model.VendorIDJD).(partner.IMultipleStoresHandler) + // allSkuNameInfoList, err := multiHandler.GetSkus(ctx, vendorOrgCode, 0, "") // skuInfos := storeSkuFullList2BareFilter(allSkuNameInfoList) // outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, vendorOrgCode, nil, 0, jdStoreIDxipu, skuInfos) // for _, vv := range outStoreSkuList { // skuMap[vv.VendorSkuID] = *vv // } - for _, jdStoreID := range jdStoreIDs { - skuInfos2 := storeSkuFullList2BareFilter(allSkuNameInfoList) - outStoreSkuList2, _ := handler.GetStoreSkusBareInfo(ctx, vendorOrgCode, nil, 0, jdStoreID, skuInfos2) - for _, v := range outStoreSkuList2 { - v.VendorPrice = int64(math.Round(float64(v.VendorPrice) * 1.05)) - priceList[jdStoreID] = append(priceList[jdStoreID], v) - // a := skuMap[v.VendorSkuID] - // if &a == nil { - // continue - // } - // if a.VendorPrice != v.VendorPrice { - // v.VendorPrice = a.VendorPrice - // priceList[jdStoreID] = append(priceList[jdStoreID], v) - // } - // if a.Status != v.Status { - // v.Status = a.Status - // if v.Status == model.SkuStatusNormal { - // statusList1[jdStoreID] = append(statusList1[jdStoreID], v) - // } else { - // statusList2[jdStoreID] = append(statusList2[jdStoreID], v) - // } - // } - // if a.Stock != v.Stock { - // v.Stock = a.Stock - // stockList[jdStoreID] = append(stockList[jdStoreID], v) - // } + // for _, jdStoreID := range jdStoreIDs { + // skuInfos2 := storeSkuFullList2BareFilter(allSkuNameInfoList) + // outStoreSkuList2, _ := handler.GetStoreSkusBareInfo(ctx, vendorOrgCode, nil, 0, jdStoreID, skuInfos2) + // for _, v := range outStoreSkuList2 { + // v.VendorPrice = int64(math.Round(float64(v.VendorPrice) * 1.05)) + // priceList[jdStoreID] = append(priceList[jdStoreID], v) + // a := skuMap[v.VendorSkuID] + // if &a == nil { + // continue + // } + // if a.VendorPrice != v.VendorPrice { + // v.VendorPrice = a.VendorPrice + // priceList[jdStoreID] = append(priceList[jdStoreID], v) + // } + // if a.Status != v.Status { + // v.Status = a.Status + // if v.Status == model.SkuStatusNormal { + // statusList1[jdStoreID] = append(statusList1[jdStoreID], v) + // } else { + // statusList2[jdStoreID] = append(statusList2[jdStoreID], v) + // } + // } + // if a.Stock != v.Stock { + // v.Stock = a.Stock + // stockList[jdStoreID] = append(stockList[jdStoreID], v) + // } + // } + // } + // task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, + // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // step := batchItemList[0].(int) + // switch step { + // case 0: + // if len(priceList) > 0 { + // for k, v := range priceList { + // _, err = putils.FreeBatchStoreSkuInfo("更新门店商品价格", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { + // failedList, err := handler.UpdateStoreSkusPrice(ctx, vendorOrgCode, 0, k, batchedStoreSkuList) + // if len(failedList) > 0 { + // task.AddFailedList(failedList) + // } + // return nil, 1, err + // }, ctx, task, v, 50, true) + // } + // } + // case 1: + // if len(statusList1) > 0 { + // for k, v := range statusList1 { + // _, err = putils.FreeBatchStoreSkuInfo("更新门店商品状态", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { + // failedList, err := handler.UpdateStoreSkusStatus(ctx, vendorOrgCode, 0, k, batchedStoreSkuList, batchedStoreSkuList[0].Status) + // if len(failedList) > 0 { + // task.AddFailedList(failedList) + // } + // return nil, 1, err + // }, ctx, task, v, 50, true) + // } + // } + // case 2: + // case 3: + // if len(stockList) > 0 { + // for k, v := range stockList { + // _, err = putils.FreeBatchStoreSkuInfo("更新门店商品库存", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { + // failedList, err := handler.UpdateStoreSkusStock(ctx, vendorOrgCode, 0, k, batchedStoreSkuList) + // if len(failedList) > 0 { + // task.AddFailedList(failedList) + // } + // return nil, 1, err + // }, ctx, task, v, 50, true) + // } + // } + // } + // return retVal, err + // }, []int{0}) + // tasksch.HandleTask(task, nil, true).Run() + // _, err = task.GetResult(0) + var ( + storeMaps []*model.StoreMap + db = dao.GetDB() + ) + sql := ` + SELECT * FROM store_map WHERE vendor_id = 5 and store_id <> 102919 and deleted_at = '1970-01-01 00:00:00' AND vendor_org_code = 1 + ` + err = dao.GetRows(db, &storeMaps, sql, nil) + for _, v := range storeMaps { + store, _ := dao.GetStoreDetail(db, v.StoreID, model.VendorIDJDShop, "") + data, _, _ := jxutils.DownloadFileByURL(jdshopapi.JdsStoreImg) + timeMap := map[string]string{ + "businessBeginTime": int2TimeStr(int(store.OpenTime1)), + "businessEndTime": int2TimeStr(int(store.CloseTime1)), } - } - task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - step := batchItemList[0].(int) - switch step { - case 0: - if len(priceList) > 0 { - for k, v := range priceList { - _, err = putils.FreeBatchStoreSkuInfo("更新门店商品价格", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { - failedList, err := handler.UpdateStoreSkusPrice(ctx, vendorOrgCode, 0, k, batchedStoreSkuList) - if len(failedList) > 0 { - task.AddFailedList(failedList) + timeJSON, _ := json.Marshal(timeMap) + createEntityStoreParam := &jdshopapi.CreateEntityStoreParam{ + Name: store.Name, + AddCode: store.JdsCode, + AddCodeName: store.DistrictName, + AddName: store.ProvinceName + store.CityName + store.DistrictName + "@!" + store.Address, + Coordinate: utils.Float64ToStr(jxutils.IntCoordinate2Standard(store.Lat)) + "," + utils.Float64ToStr(jxutils.IntCoordinate2Standard(store.Lng)), + Phone: store.Tel1, + ExtendJSON: string(timeJSON), + ImageFile: base64.StdEncoding.EncodeToString(data), + CategoryName: jdshopapi.JdsStoreCategoryName, + CustomerID: utils.Int2Str(store.ID), + } + if store.JdsStreetCode != 0 { + createEntityStoreParam.AddCode = store.JdsStreetCode + } + if createEntityStoreParam.AddCode == 0 { + createEntityStoreParam.AddCode = store.JdCode + } + //证明这个店可能隶属直辖市或者东莞 + if model.ZXCityCodeMap[store.CityCode] != "" { + result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat)) + if result["regeocode"] != nil { + street := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})["township"].(string) + if street != "" { + result1, _ := api.JdShopAPI.GetProvince() + for _, v := range result1 { + if strings.Contains(store.CityName, v.AreaName) { + result2, _ := api.JdShopAPI.GetCity(v.AreaID) + for _, vv := range result2 { + if strings.Contains(store.DistrictName, vv.AreaName) { + result3, _ := api.JdShopAPI.GetCounty(vv.AreaID) + for _, vvv := range result3 { + if street == vvv.AreaName { + createEntityStoreParam.AddCode = vvv.AreaID + break + } + } + } } - return nil, 1, err - }, ctx, task, v, 50, true) + } } } - // case 1: - // if len(statusList1) > 0 { - // for k, v := range statusList1 { - // _, err = putils.FreeBatchStoreSkuInfo("更新门店商品状态", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { - // failedList, err := handler.UpdateStoreSkusStatus(ctx, vendorOrgCode, 0, k, batchedStoreSkuList, batchedStoreSkuList[0].Status) - // if len(failedList) > 0 { - // task.AddFailedList(failedList) - // } - // return nil, 1, err - // }, ctx, task, v, 50, true) - // } - // } - // case 2: - // case 3: - // if len(stockList) > 0 { - // for k, v := range stockList { - // _, err = putils.FreeBatchStoreSkuInfo("更新门店商品库存", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { - // failedList, err := handler.UpdateStoreSkusStock(ctx, vendorOrgCode, 0, k, batchedStoreSkuList) - // if len(failedList) > 0 { - // task.AddFailedList(failedList) - // } - // return nil, 1, err - // }, ctx, task, v, 50, true) - // } - // } } - return retVal, err - }, []int{0}) - tasksch.HandleTask(task, nil, true).Run() - _, err = task.GetResult(0) + } + vendorStoreID, _ := api.JdShop2API.CreateEntityStore(createEntityStoreParam) + + storeMap := &model.StoreMap{ + StoreID: v.StoreID, + VendorStoreID: vendorStoreID, + VendorID: model.VendorIDJDShop, + Status: 1, + PricePercentage: 100, + AutoPickup: 1, + DeliveryType: 2, + DeliveryCompetition: 1, + IsSync: 1, + PricePercentagePack: "京西100-100", + VendorOrgCode: "2", + JdsStreetCode: v.JdsStreetCode, + JdsStreetName: v.JdsStreetName, + } + dao.CreateEntity(db, storeMap) + break + } return err } +func int2TimeStr(time int) (str string) { + str += utils.Int2Str(time / 1000) + str += utils.Int2Str(time % 1000 / 100) + str += ":" + str += utils.Int2Str(time % 100 / 10) + str += utils.Int2Str(time % 10) + return str +} + func storeSkuFullList2BareFilter(storeSkuFull []*partner.SkuNameInfo) (bareStoreSkuList []*partner.StoreSkuInfo) { for _, v := range storeSkuFull { for _, v2 := range v.SkuList {