diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index cf3bc3322..0268902ef 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1523,7 +1523,7 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend } if vendorID == model.VendorIDDD { //抖店绑定店铺时 检查并补充创建 globals.SugarLogger.Debugf("vendorID ==============%d", vendorID) - if err2 := tiktok_store.CreateOrUpdateAll(vendorOrgCode, int64(storeMap.StoreID), utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.DeliveryFeeDeductionFee), utils.Str2Int64(storeMap.YbStorePrefix)); err2 != nil { + if err2 := tiktok_store.CreateAndBindAllV2(vendorOrgCode, int64(storeMap.StoreID), utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.DeliveryFeeDeductionFee), utils.Str2Int64(storeMap.YbStorePrefix), userName); err2 != nil { errList.AddErr(err2) } } @@ -1702,7 +1702,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor } //特殊处理抖店运费模板、打包费 if DDFlag { globals.SugarLogger.Debug("进入DDFlag 特殊处理运费模板、起送价、打包费") - if err := tiktok_store.SpecialTreat(storeMap.VendorOrgCode, utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.StoreID), int64(storeMap.DeliveryFeeDeductionFee), utils.Str2Int64(storeMap.YbStorePrefix)); err != nil { + if err := tiktok_store.SpecialTreat(storeMap.VendorOrgCode, utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.StoreID), int64(storeMap.DeliveryFeeDeductionFee), utils.Str2Int64(storeMap.YbStorePrefix), userName); err != nil { errList.AddErr(fmt.Errorf("抖店运费模板、起送价、打包费相关处理错误:%v", err)) } } @@ -4357,7 +4357,7 @@ func CreateVendorStore(ctx *jxcontext.Context, storeID, vendorID int, payload ma if err != nil { return err } - if vendorStoreID != "" && vendorStoreID != "0" { + if vendorStoreID != "" && vendorStoreID != "0" && vendorID != model.VendorIDDD { //抖店单独处理 //AddStoreVendorMap 太复杂了并不满足,还是手动加吧 storeMap := &model.StoreMap{ VendorStoreID: vendorStoreID, diff --git a/business/model/store.go b/business/model/store.go index 95fb07bab..02135d975 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -1022,7 +1022,7 @@ type FreightTemplate struct { StoreID int `orm:"column(store_id)" json:"storeID"` //京西本地门店ID即抖店门店编码 VendorStoreID string `orm:"column(vendor_store_id)" json:"vendorStoreID"` //抖店平台门店ID TemplateID int64 `orm:"column(template_id)" json:"templateID"` //运费模板ID 1对1 - WarehouseID int64 `orm:"column(warehouse_id)" json:"warehouseID"` //创建门店时绑定的仓库id 1对1 + WarehouseID int64 `orm:"column(warehouse_id)" json:"warehouseID"` //创建门店时绑定的仓库id 1对1(仓库和电子围栏1对n) FenceID string `orm:"column(fence_id)" json:"fenceID"` //电子围栏id 1对1 TradeLimitID int64 `orm:"column(trade_limit_id)" json:"tradeLimitID"` //限售模板id 1对1(默认会创建) } diff --git a/business/partner/purchase/tiktok_store/store.go b/business/partner/purchase/tiktok_store/store.go index 0cb809187..4cf3e78dd 100644 --- a/business/partner/purchase/tiktok_store/store.go +++ b/business/partner/purchase/tiktok_store/store.go @@ -84,7 +84,6 @@ func SplicingTimeToDoudian(openTime1, closeTime1, openTime2, closeTime2 int16, f func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string, params map[string]interface{}, storeDetail *dao.StoreDetail) (vendorStoreID string, err error) { var ( vendorStoreIDs string - lists []shop_batchCreateStore_request.StoreListItem ShopBatchCreateStoreParam *shop_batchCreateStore_request.ShopBatchCreateStoreParam errList = errlist.New() timeStr = "" @@ -103,32 +102,48 @@ func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri m[int64(j)] = timeStr } } - list := shop_batchCreateStore_request.StoreListItem{ - RowId: 1, - Name: "京西菜市(" + storeDetail.Name + ")", - StoreCode: utils.Int2Str(storeDetail.Store.ID), - Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lng)), - Latitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lat)), - Province: storeDetail.ProvinceName, - City: storeDetail.CityName, - District: storeDetail.DistrictName, - Address: storeDetail.Address, - Contact: storeDetail.Tel1, - OpenTime: &shop_batchCreateStore_request.OpenTime{ - DayMap: m, - }, - } - lists = append(lists, list) ShopBatchCreateStoreParam = &shop_batchCreateStore_request.ShopBatchCreateStoreParam{ - StoreList: lists, + StoreList: []shop_batchCreateStore_request.StoreListItem{ + { + RowId: 1, + Name: "京西菜市(" + storeDetail.Name + ")", + StoreCode: utils.Int2Str(storeDetail.Store.ID), + Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lng)), + Latitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lat)), + Province: storeDetail.ProvinceName, + City: storeDetail.CityName, + District: storeDetail.DistrictName, + Address: storeDetail.Address, + Contact: storeDetail.Tel1, + OpenTime: &shop_batchCreateStore_request.OpenTime{ + DayMap: m, + }, + }, + }, } if resp, err := a.BatchCreateStore(ShopBatchCreateStoreParam); err != nil { return "", err } else { //必须先存进数据库 - + storeMap := &model.StoreMap{ + VendorStoreID: vendorStoreID, + StoreID: storeID, + VendorID: model.VendorIDDD, + VendorOrgCode: storeDetail.VendorOrgCode, + Status: 0, + DeliveryType: model.StoreDeliveryTypeByStore, + PricePercentage: int16(utils.MustInterface2Int64(storeDetail.PricePercentage)), + AutoPickup: 1, + DeliveryCompetition: 1, + IsSync: 1, + PricePercentagePack: "", + } + dao.WrapAddIDCULDEntity(storeMap, userName) + if err := dao.CreateEntity(db, storeMap); err != nil { + errList.AddErr(dao.CreateEntity(db, storeMap)) + } vendorStoreIDs = utils.Int64ToStr(resp.ResultList[0].Store.StoreId) - if err := CreateOrUpdateAll(storeDetail.VendorOrgCode, int64(storeDetail.Store.ID), resp.ResultList[0].Store.StoreId, int64(storeDetail.DeliveryFeeDeductionFee), utils.Str2Int64(storeDetail.YbStorePrefix)); err != nil { + if err := CreateAndBindAllV2(storeDetail.VendorOrgCode, int64(storeDetail.Store.ID), resp.ResultList[0].Store.StoreId, int64(storeDetail.DeliveryFeeDeductionFee), utils.Str2Int64(storeDetail.YbStorePrefix), userName); err != nil { errList.AddErr(err) } } @@ -136,7 +151,7 @@ func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri return vendorStoreIDs, errors.New(fmt.Sprintf("创建抖店平台店铺相关错误信息:%v", endErr)) } -//电子围栏 仓库 运费模板 限售模板 打包费 更新与绑定 +// todo 暂时不删除 func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFeeDeductionFee, minPrice int64) error { var ( errList = errlist.New() @@ -214,7 +229,6 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFee // } // } // } - } //3.平台获取限售模板 @@ -265,15 +279,123 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFee } } +func CreateAndBindAllV2(vendorOrgCode string, storeID, vendorStoreID, deliveryFeeDeductionFee, minPrice int64, userName string) error { + var ( + db *dao.DaoDB + ctx *jxcontext.Context + errList = errlist.New() + FreightTemplate = &model.FreightTemplate{ + VendorStoreID: utils.Int64ToStr(vendorStoreID), + StoreID: int(storeID), + } + ) + task := tasksch.NewParallelTask("CreateAndBindAllV2", tasksch.NewParallelConfig().SetIsContinueWhenError(true).SetParallelCount(1), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + step := batchItemList[0].(int) + switch step { + case 0: //1.门店运费模板 + bindFreightIDs, err := GetStoreFreight(vendorOrgCode, vendorStoreID) + if err != nil { + globals.SugarLogger.Debugf("获取门店(%d) 绑定运费模板出错:%v", vendorStoreID, err) + errList.AddErr(fmt.Errorf("获取门店(%d) 绑定运费模板出错:%v", vendorStoreID, err)) + } + if bindFreightIDs == 0 { + if freightTemplateID, err := CreateFreightTemplate(int(storeID)); err != nil || freightTemplateID == 0 || utils.IsNil(freightTemplateID) { + globals.SugarLogger.Debugf("京西菜市门店:%d 平台门店:%d 创建运费模板:%d 失败:%v", storeID, vendorStoreID, freightTemplateID, err) + errList.AddErr(fmt.Errorf("京西菜市门店:%d 平台门店:%d 创建运费模板:%d 失败:%v", storeID, vendorStoreID, freightTemplateID, err)) + } else { + if err = ShopBindStoreFreight(vendorOrgCode, vendorStoreID, freightTemplateID); err != nil { + globals.SugarLogger.Debugf("京西菜市门店:%d 平台门店:%d 绑定运费模板:%d 失败:%v", storeID, vendorStoreID, freightTemplateID, err) + errList.AddErr(fmt.Errorf("京西菜市门店:%d 平台门店:%d 绑定运费模板:%d 失败:%v", storeID, vendorStoreID, freightTemplateID, err)) + } else { + FreightTemplate.TemplateID = freightTemplateID + } + } + } else { + FreightTemplate.TemplateID = bindFreightIDs + } + case 1: //2.仓库以及电子围栏 + warehouseID, err := CreateWarehouse(vendorOrgCode, storeID) + if err != nil || len(warehouseID) == 0 || utils.IsNil(warehouseID) { + globals.SugarLogger.Debugf("门店(%d) 创建仓库失败:%v", storeID, err) + errList.AddErr(fmt.Errorf("门店(%d) 创建仓库失败:%v", storeID, err)) + } else { //绑定 + if err = BindStoreWarehouse(vendorOrgCode, utils.Int64ToStr(storeID), vendorStoreID); err != nil { //仓库绑定通过自定义外部ID + globals.SugarLogger.Debugf("门店(%d) 绑定仓库:%s 失败:%v", storeID, warehouseID, err) + errList.AddErr(fmt.Errorf("门店(%d) 绑定仓库:%s 失败:%v", storeID, warehouseID, err)) + } else { + FreightTemplate.WarehouseID = utils.Str2Int64(warehouseID) + } + } + case 2: //3.电子围栏 + fenceID, err := CreateFenceByStore(vendorOrgCode, storeID) + if err != nil || utils.Str2Int(fenceID) == 0 || utils.IsNil(fenceID) { //不管存在与否 直接创建 + globals.SugarLogger.Debugf("门店(%d) 创建电子围栏失败:%v", storeID, err) + errList.AddErr(fmt.Errorf("门店(%d) 创建电子围栏失败:%v", storeID, err)) + } else { //绑定 + if err := BindFenceByStore(vendorOrgCode, vendorStoreID, []string{utils.Int64ToStr(storeID)}); err != nil { + globals.SugarLogger.Debugf("门店(%d) 绑定电子围栏:%s失败:%v", storeID, fenceID, err) + errList.AddErr(fmt.Errorf("门店(%d) 绑定电子围栏:%s失败:%v", storeID, fenceID, err)) + } else { + FreightTemplate.FenceID = utils.Int64ToStr(storeID) + } + } + case 3: //4.限售模板 + bindSaleLimitID, err := GetStoreSaleLimit(vendorOrgCode, vendorStoreID) + if err != nil { + globals.SugarLogger.Debugf("获取门店(%d) 限售模板失败:%v", vendorStoreID, err) + errList.AddErr(fmt.Errorf("获取门店(%d) 限售模板失败:%v", vendorStoreID, err)) + } + if bindSaleLimitID == 0 || utils.IsNil(bindSaleLimitID) { //未绑定限售模板,目前默认创建起送价限售模板 + if createSaleLimitID, err := CreateAndBindMinPriceTemplate(vendorOrgCode, vendorStoreID, minPrice); err != nil { + errList.AddErr(fmt.Errorf("设置门店起送价限售模板失败:%v", err)) + } else { + FreightTemplate.TradeLimitID = createSaleLimitID + } + } else { + if updateSaleLimitID, err := UpdateTradeLimitTemplate(vendorOrgCode, bindSaleLimitID, minPrice); err != nil { + errList.AddErr(fmt.Errorf("更新门店起送价限售模板失败:%v", err)) + } else { + FreightTemplate.TradeLimitID = updateSaleLimitID + } + } + case 4: //5.门店打包费 默认为 0 + if err := SetStorePackageFee(vendorOrgCode, vendorStoreID, deliveryFeeDeductionFee); err != nil { + errList.AddErr(fmt.Errorf("设置门店打包费失败:%v", err)) + } + } + return nil, err + }, []int{0, 1, 2, 3, 4}) + tasksch.ManageTask(task).Run() + //6.同步进数据库 + globals.SugarLogger.Debugf("preTest TradeLimitID==%d,TemplateID==%d, WarehouseID==%d,FenceID==%s", FreightTemplate.TradeLimitID, FreightTemplate.TemplateID, FreightTemplate.WarehouseID, FreightTemplate.FenceID) + dao.WrapAddIDCULDEntity(FreightTemplate, userName) + if err := dao.CreateEntity(db, FreightTemplate); err != nil { + _, err1 := dao.UpdateEntity(db, FreightTemplate, "TemplateID", "WarehouseID", "FenceID", "TradeLimitID") + if err1 == nil { + errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err)) + } else { + errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err1)) + } + } + endErr := errList.GetErrListAsOne() + if utils.IsNil(errList) { + globals.SugarLogger.Debug("绑定门店需进行的错误处理:%v", endErr) + return endErr + } else { + return nil + } +} + // shop/editStore 编辑门店信息 正向推送平台 func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { var ( - storeInfo *dao.StoreDetail + m = make(map[int64]string) name string - FreightTemplate = &model.FreightTemplate{} + storeInfo *dao.StoreDetail errList = errlist.New() timeStr = "" - m = make(map[int64]string) + FreightTemplate = &model.FreightTemplate{} ) if db == nil { db = dao.GetDB() @@ -333,9 +455,9 @@ func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin } err3 := apiObj.EditStore(params) if err3 != nil { - errList.AddErr(err3) + errList.AddErr(fmt.Errorf("修改门店(%d) 信息失败:%v", utils.Str2Int64(storeInfo.VendorStoreID), err3)) } - //获取电子围栏 + //电子围栏 bindWarehouseAndFence, err := GetWarehouseByStore(storeInfo.VendorOrgCode, utils.Str2Int64(storeInfo.VendorStoreID)) //todo 此接口暂时有问题 if err != nil { errList.AddErr(fmt.Errorf("获取门店(%d) 电子围栏失败:%v", utils.Str2Int64(storeInfo.VendorStoreID), err)) @@ -350,30 +472,38 @@ func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin errList.AddErr(fmt.Errorf("门店(%d) 绑定电子围栏:%s失败:%v", storeID, fenceID, err)) } else { FreightTemplate.FenceID = utils.Int2Str(storeID) - if err := dao.CreateEntity(db, FreightTemplate); err != nil { - globals.SugarLogger.Debug("电子围栏ID(%s) 同步到数据库失败:%v", fenceID, err) - errList.AddErr(fmt.Errorf("电子围栏ID(%s) 同步到数据库失败:%v", fenceID, err)) - } } - FreightTemplate.FenceID = utils.Int2Str(storeID) } } else { //更新电子围栏 outFenceID := bindWarehouseAndFence[utils.Str2Int64(storeInfo.VendorStoreID)][0].OutFenceIds[0] + //容错绑定 + if err := BindFenceByStore(storeInfo.VendorOrgCode, utils.Str2Int64(storeInfo.VendorStoreID), []string{outFenceID}); err != nil { + globals.SugarLogger.Debugf("门店(%d) 容错绑定电子围栏:%s失败:%v", storeID, outFenceID, err) + errList.AddErr(fmt.Errorf("门店(%d) 容错绑定电子围栏:%s失败:%v", storeID, outFenceID, err)) + } if err = UpdateFenceByStore(storeInfo.VendorOrgCode, outFenceID, storeID); err != nil { return errors.New(fmt.Sprintf("更新电子围栏失败,原因:%v", err)) } - if err = dao.CreateEntity(db, FreightTemplate); err != nil { - if _, err1 := dao.UpdateEntity(db, FreightTemplate, "FenceID"); err1 != nil { - globals.SugarLogger.Debug("db update storeID,vendorStoreID defeat on :%v", err1) - errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err1)) - } else { - errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err)) - } + FreightTemplate.FenceID = outFenceID + } + //同步进数据库 + FreightTemplate = &model.FreightTemplate{ + StoreID: storeID, + VendorStoreID: storeInfo.VendorStoreID, + } + dao.WrapAddIDCULDEntity(FreightTemplate, userName) + if err = dao.CreateEntity(db, FreightTemplate); err != nil { + if _, err1 := dao.UpdateEntity(db, FreightTemplate, "FenceID"); err1 != nil { + globals.SugarLogger.Debug("db update storeID,vendorStoreID defeat on :%v", err1) + errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err1)) + } else { + errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err)) } } } endErr := errList.GetErrListAsOne() + globals.SugarLogger.Debugf("DouDian UpdateStore wrong information:%v", endErr) return errors.New(fmt.Sprintf("更新抖店平台店铺信息,相关处理错误:%v", endErr)) } @@ -383,28 +513,25 @@ func UpdateStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int a := getAPI(vendorOrgCode, storeID, vendorStoreID) if globals.EnableDdStoreWrite { if isOnline != tiktok_api.StoreStatusOnline { //暂停营业状态 - suspendStoreID := &shop_storeSuspend_request.ShopStoreSuspendParam{ + if _, err = a.StoreSuspend(&shop_storeSuspend_request.ShopStoreSuspendParam{ StoreId: utils.Str2Int64(vendorStoreID), - } - if _, err = a.StoreSuspend(suspendStoreID); err != nil { + }); err != nil { return err } } else { //恢复营业 - unsuspendStoreID := &shop_unsuspendStore_request.ShopUnsuspendStoreParam{ + //与平台上店铺状态对比 + remoteStoreInfo, err2 := a.GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ StoreId: utils.Str2Int64(vendorStoreID), - } - getStoreID := &shop_getStoreDetail_request.ShopGetStoreDetailParam{ - StoreId: utils.Str2Int64(vendorStoreID), - } - //平台上店铺状态 - remoteStoreInfo, err2 := a.GetStoreDetail(getStoreID) + }) if err2 != nil { return err2 } if remoteStoreInfo.StoreDetail.Store.SuspendType == tiktok_api.SuspendTypePlatformPenalty { err = errors.New("门店因平台处罚暂停营业,不可主动修改营业状态") } else { - if _, err = a.UnsuspendStore(unsuspendStoreID); err != nil { + if _, err = a.UnsuspendStore(&shop_unsuspendStore_request.ShopUnsuspendStoreParam{ + StoreId: utils.Str2Int64(vendorStoreID), + }); err != nil { return err } } @@ -587,12 +714,10 @@ func (P *PurchaseHandler) CreateFreightTemplateDirectly(templateInfo freightTemp // /shop/bindStoreFreight 门店绑定运费模版 //门店绑定运费模版,运费模版必须属于门店关联的抖店,且门店与运费模版是一对一关系 func ShopBindStoreFreight(vendorOrgCode string, storeID, freightID int64) error { - param := &shop_bindStoreFreight_request.ShopBindStoreFreightParam{ + if err := getAPI(vendorOrgCode, int(storeID), "").BindFreightTemplate(&shop_bindStoreFreight_request.ShopBindStoreFreightParam{ StoreId: storeID, FreightId: freightID, - } - err := getAPI(vendorOrgCode, int(storeID), "").BindFreightTemplate(param) - if err != nil { + }); err != nil { return err } return nil @@ -600,30 +725,28 @@ func ShopBindStoreFreight(vendorOrgCode string, storeID, freightID int64) error // /shop/getStoreFreight 获取门店绑定运费模板 func GetStoreFreight(vendorOrgCode string, storeID int64) (int64, error) { - resp, err := getAPI(vendorOrgCode, int(storeID), "").GetStoreFreight(storeID) - if err != nil || len(resp) == 0 { + if resp, err := getAPI(vendorOrgCode, int(storeID), "").GetStoreFreight(storeID); err != nil || len(resp) == 0 { return 0, err + } else { + return resp[0], nil } - return resp[0], nil } // /address/create 创建店铺地址库(新建即绑定) -func (P *PurchaseHandler) CreateAddress(addressInfo address_create_request.AddressCreateParam) (addressID int64, err error) { - info := &address_create_request.AddressCreateParam{ +func (P *PurchaseHandler) CreateAddress(appOrgCode string, addressInfo address_create_request.AddressCreateParam) (addressID int64, err error) { + if resp, err := getAPI(appOrgCode, 0, utils.Int64ToStr(addressInfo.StoreId)).AddressCreate(&address_create_request.AddressCreateParam{ Address: addressInfo.Address, StoreId: addressInfo.StoreId, - } - api := getAPI("", 0, utils.Int64ToStr(info.StoreId)) - resp, err := api.AddressCreate(info) - if err != nil { + }); err != nil { return 0, err + } else { + return resp.AddressId, nil } - return resp.AddressId, nil } // /address/list 获取售后地址列表接口 //分页获取商家地址列表 -func (P *PurchaseHandler) GetAddressList(param *address_list_request.AddressListParam) (*address_list_response.AddressListData, error) { +func (P *PurchaseHandler) GetAddressList(appOrgCode string, param *address_list_request.AddressListParam) (*address_list_response.AddressListData, error) { //不传入ID则是获取所有门店售后地址列表 info := &address_list_request.AddressListParam{ PageSize: 10, @@ -634,14 +757,14 @@ func (P *PurchaseHandler) GetAddressList(param *address_list_request.AddressList if param.StoreId != 0 { info.StoreId = param.StoreId } - listInfo, err := getAPI("", 0, utils.Int64ToStr(info.StoreId)).GetAddressList(info) - if err != nil { + if listInfo, err := getAPI(appOrgCode, 0, utils.Int64ToStr(info.StoreId)).GetAddressList(info); err != nil { return nil, err + } else { + return listInfo, nil } - return listInfo, nil } -// /trade/createTradeLimitTemplate 创建限售模板 默认模板 +// /trade/createTradeLimitTemplate 创建限售模板 默认模板 暂时不使用 func CreateTradeLimitTemplate(appOrgCode string, vendorStoreID int64) (tradeLimitID int64, err error) { param := &trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{ StoreId: vendorStoreID, @@ -667,7 +790,7 @@ func CreateTradeLimitTemplate(appOrgCode string, vendorStoreID int64) (tradeLimi //创建起送价的 运费模板以及绑定 func CreateAndBindMinPriceTemplate(vendorOrgCode string, vendorStoreID, minimum int64) (int64, error) { - param := &trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{ + resp, err := getAPI(vendorOrgCode, 0, "").CreateTradeLimitTemplate(&trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{ StoreId: vendorStoreID, TradeLimitRuleRequestList: []trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem{ { @@ -686,8 +809,7 @@ func CreateAndBindMinPriceTemplate(vendorOrgCode string, vendorStoreID, minimum }, }, }, - } - resp, err := getAPI(vendorOrgCode, 0, "").CreateTradeLimitTemplate(param) + }) if err != nil || resp.TradeLimitId == 0 { return 0, errors.New(fmt.Sprintf("创建门店(%d)的起送价失败:%v", vendorStoreID, err)) } else { //绑定 @@ -700,7 +822,7 @@ func CreateAndBindMinPriceTemplate(vendorOrgCode string, vendorStoreID, minimum // /trade/UpdateTradeLimitTemplate 更新限售模板 目前只做起送价 func UpdateTradeLimitTemplate(vendorOrgCode string, tradeLimitID, minPrice int64) (int64, error) { - param := &trade_UpdateTradeLimitTemplate_request.TradeUpdateTradeLimitTemplateParam{ + if updateTradeLimit, err := getAPI(vendorOrgCode, 0, "").UpdateTradeLimitTemplate(&trade_UpdateTradeLimitTemplate_request.TradeUpdateTradeLimitTemplateParam{ TradeLimitTemplateId: tradeLimitID, TradeLimitRuleRequestList: []trade_UpdateTradeLimitTemplate_request.TradeLimitRuleRequestListItem{ { @@ -710,24 +832,21 @@ func UpdateTradeLimitTemplate(vendorOrgCode string, tradeLimitID, minPrice int64 }, }, }, - } - updateTradeLimit, err := getAPI(vendorOrgCode, 0, "").UpdateTradeLimitTemplate(param) - if err != nil { + }); err != nil { return 0, err - } - if updateTradeLimit.TradeLimitTemplateId == 0 { + } else if updateTradeLimit.TradeLimitTemplateId == 0 { return 0, errors.New(fmt.Sprintf("更新操作返回的TradeLimitTemplateId=0")) + } else { + return updateTradeLimit.TradeLimitTemplateId, nil } - return updateTradeLimit.TradeLimitTemplateId, nil } // /shop/bindStoreSaleLimit 门店绑定限售模板 func BindStoreSaleLimit(appOrgCode string, storeID, saleLimitTemplateID int64) error { - info := &shop_bindStoreSaleLimit_request.ShopBindStoreSaleLimitParam{ + if err := getAPI(appOrgCode, 0, utils.Int64ToStr(storeID)).BindStoreSaleLimit(&shop_bindStoreSaleLimit_request.ShopBindStoreSaleLimitParam{ StoreId: storeID, SaleLimitId: saleLimitTemplateID, - } - if err := getAPI(appOrgCode, 0, utils.Int64ToStr(info.StoreId)).BindStoreSaleLimit(info); err != nil { + }); err != nil { return err } return nil @@ -743,11 +862,14 @@ func GetStoreSaleLimit(appOrgCode string, storeID int64) (int64, error) { } func (P *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, opTimeList []int16) (err error) { - t1 := opTimeList[0] - t2 := opTimeList[1] - t3 := opTimeList[2] - t4 := opTimeList[4] - timeStr := "" + var ( + timeStr = "" + t1 = opTimeList[0] + t2 = opTimeList[1] + t3 = opTimeList[2] + t4 = opTimeList[4] + m = make(map[int64]string) + ) if t1 != 0 && t2 != 0 { if t3 != 0 && t4 != 0 { timeStr = SplicingTimeToDoudian(t1, t2, t3, t4, true) @@ -757,37 +879,33 @@ func (P *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, vendorOrgCod } else { return fmt.Errorf("营业时间必填") } - m := make(map[int64]string) for j := 1; j <= 7; j++ { m[int64(j)] = timeStr } - params := &shop_editStore_request.ShopEditStoreParam{ - StoreId: utils.Str2Int64(vendorStoreID), - OpenTime: &shop_editStore_request.OpenTime{ - DayMap: m, - }, - } if globals.EnableDdStoreWrite { - err = getAPI(vendorOrgCode, storeID, vendorStoreID).EditStore(params) + err = getAPI(vendorOrgCode, storeID, vendorStoreID).EditStore(&shop_editStore_request.ShopEditStoreParam{ + StoreId: utils.Str2Int64(vendorStoreID), + OpenTime: &shop_editStore_request.OpenTime{ + DayMap: m, + }, + }) } return err } //获取门店状态 func (P *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error) { - params := &shop_getStoreDetail_request.ShopGetStoreDetailParam{ + if result, err := getAPI(vendorOrgCode, storeID, vendorStoreID).GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ StoreId: utils.Str2Int64(vendorStoreID), IsNeedChargeInfo: false, IsNeedPoiAuditInfo: false, IsNeedRelShopUser: false, - } - result, err := getAPI(vendorOrgCode, storeID, vendorStoreID).GetStoreDetail(params) - if err != nil { + }); err != nil { return 0, err + } else { + poiStatus := int(result.StoreDetail.Store.PoiAuditState) + return poiStatus, nil } - poiStatus := int(result.StoreDetail.Store.PoiAuditState) - //status := bizStatusJX2DouDian(int(result.StoreDetail.Store.PoiAuditState)) - return poiStatus, nil } func (P *PurchaseHandler) EnableAutoAcceptOrder(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, isSetEnable bool) (err error) { @@ -815,17 +933,15 @@ func (P *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context, vendorOrg } func (P *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) { - api := getAPI(vendorOrgCode, storeID, vendorStoreID) + a := getAPI(vendorOrgCode, storeID, vendorStoreID) if lineStatus == model.StoreStatusOpened { - param := &shop_unsuspendStore_request.ShopUnsuspendStoreParam{ + _, err = a.UnsuspendStore(&shop_unsuspendStore_request.ShopUnsuspendStoreParam{ StoreId: utils.Str2Int64(vendorStoreID), - } - _, err = api.UnsuspendStore(param) + }) } else { - param := &shop_storeSuspend_request.ShopStoreSuspendParam{ + _, err = a.StoreSuspend(&shop_storeSuspend_request.ShopStoreSuspendParam{ StoreId: utils.Str2Int64(vendorStoreID), - } - _, err = api.StoreSuspend(param) + }) } return err } @@ -842,18 +958,10 @@ func (P *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo } retVal.OriginalName = vendorStore.StoreDetail.Store.Name _, retVal.Name = jxutils.SplitStoreName(retVal.OriginalName, partner.StoreNameSeparator, globals.StoreNameTiktok) - retVal.SetTiktokOpenTime(vendorStore.StoreDetail.Store.OpenTime.DayMap[1]) retVal.Status = bizStatusTiktok2JX(vendorStore.StoreDetail.Store.State) - - //tel2 := result.StandbyTel - //if tel2 != "" && tel2 != retVal.Tel1 { - // retVal.Tel2 = tel2 - //} - retVal.Lng = int(utils.Str2Float64(vendorStore.StoreDetail.Store.Longitude) * 1000000) retVal.Lat = int(utils.Str2Float64(vendorStore.StoreDetail.Store.Latitude) * 1000000) - lng := jxutils.IntCoordinate2Standard(retVal.Lng) lat := jxutils.IntCoordinate2Standard(retVal.Lat) db := dao.GetDB() @@ -861,30 +969,12 @@ func (P *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo city, err := dao.GetPlaceByCode(db, utils.Str2Int(vendorStore.StoreDetail.Store.CityCode)) retVal.CityName = city.Name retVal.CityCode = utils.Str2Int(vendorStore.StoreDetail.Store.CityCode) - poiCode := vendorStore.StoreDetail.Store.StoreCode retVal.VendorStoreID = vendorStoreID retVal.ID = utils.Str2Int(poiCode) retVal.DeliveryRangeType = model.DeliveryRangeTypeRadius retVal.DeliveryRange = "3000" retVal.DeliveryType = scheduler.StoreDeliveryTypeByStore - //retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon - //var deliveryRangeInfo []map[string]interface{} - //deliveryRangeInfo, err = getAPIWithoutToken(vendorOrgCode).ShippingFetch(poiCode) - //if err != nil { - // deliveryRangeInfo, err = getAPIWithoutToken(vendorOrgCode).ShippingList(poiCode) - //} - //if err == nil { - // if len(deliveryRangeInfo) > 0 { - // retVal.DeliveryRange = rangeMtwm2JX(deliveryRangeInfo[0]["area"].(string)) - // logisticsCode := utils.Interface2String(deliveryRangeInfo[0]["logistics_code"]) - // if logisticsCode == "" || logisticsCode == mtwmapi.PeiSongTypeSelf { - // retVal.DeliveryType = scheduler.StoreDeliveryTypeByStore - // } else { - // retVal.DeliveryType = scheduler.StoreDeliveryTypeByPlatform - // } - // } - //} return retVal, nil } diff --git a/business/partner/purchase/tiktok_store/warehouse.go b/business/partner/purchase/tiktok_store/warehouse.go index 83abd5610..ab5ff3796 100644 --- a/business/partner/purchase/tiktok_store/warehouse.go +++ b/business/partner/purchase/tiktok_store/warehouse.go @@ -32,7 +32,7 @@ func CreateWarehouse(appOrgCode string, storeID int64) (warehouseID string, err if err != nil { return "", fmt.Errorf("获取门店本地信息失败:%v", err) } - param := &warehouse_create_request.WarehouseCreateParam{ + resp, err := getAPI(appOrgCode, 0, "").CreateWarehouse(&warehouse_create_request.WarehouseCreateParam{ OutWarehouseId: utils.Int64ToStr(storeID), //本地storeID绑定 Name: "京西菜市_" + storeDetail.Name + "_" + utils.Int64ToStr(storeID) + "_区域仓", Intro: "", @@ -45,31 +45,26 @@ func CreateWarehouse(appOrgCode string, storeID int64) (warehouseID string, err }, AddressDetail: storeDetail.Address, }, - } - resp, err := getAPI(appOrgCode, 0, "").CreateWarehouse(param) + }) if err != nil { return "", fmt.Errorf("创建单个区域仓失败:%v", err) } return resp.WarehouseId, nil } -// /warehouse/createBatch 批量创建区域仓 +// /warehouse/createBatch 批量创建区域仓 暂时不使用 func (P *PurchaseHandler) BatchCreateWarehouse(param warehouse_createBatch_request.WarehouseCreateBatchParam, appOrgCode string) error { - infos := []warehouse_createBatch_request.OutWarehouseListItem{} - for _, v := range param.OutWarehouseList { - info := warehouse_createBatch_request.OutWarehouseListItem{ - OutWarehouseId: v.OutWarehouseId, - Name: v.Name, - Intro: v.Intro, - AddressDetail: v.AddressDetail, - WarehouseLocation: v.WarehouseLocation, - } - infos = append(infos, info) - } req := &warehouse_createBatch_request.WarehouseCreateBatchParam{ - OutWarehouseList: infos, + OutWarehouseList: []warehouse_createBatch_request.OutWarehouseListItem{ + { + OutWarehouseId: param.OutWarehouseList[0].OutWarehouseId, + Name: param.OutWarehouseList[0].Name, + Intro: param.OutWarehouseList[0].Intro, + AddressDetail: param.OutWarehouseList[0].AddressDetail, + WarehouseLocation: param.OutWarehouseList[0].WarehouseLocation, + }, + }, } - resp, err := getAPI(appOrgCode, 0, "").BatchCreateWarehouse(req) if err != nil { return err @@ -82,11 +77,10 @@ func (P *PurchaseHandler) BatchCreateWarehouse(param warehouse_createBatch_reque // /warehouse/bindStore 仓库绑定门店 func BindStoreWarehouse(VendorOrgCode, outWarehouseID string, storeIDs int64) error { - param := &warehouse_bindStore_request.WarehouseBindStoreParam{ + if _, err := getAPI(VendorOrgCode, 0, "").StoreBindWarehouse(&warehouse_bindStore_request.WarehouseBindStoreParam{ StoreIds: []int64{storeIDs}, OutWarehouseId: outWarehouseID, - } - if _, err := getAPI(VendorOrgCode, 0, "").StoreBindWarehouse(param); err != nil { + }); err != nil { return err } return nil @@ -94,11 +88,11 @@ func BindStoreWarehouse(VendorOrgCode, outWarehouseID string, storeIDs int64) er // /warehouse/getWarehouseByStore 门店id获取绑定仓库详情包括电子围栏 func GetWarehouseByStore(appOrgCode string, storeID int64) (map[int64][]warehouse_getWarehouseByStore_response.WarehouseInfoMapItem, error) { - info, err := getAPI(appOrgCode, 0, "").GetWarehouseByStore(storeID) - if err != nil { + if resp, err := getAPI(appOrgCode, 0, "").GetWarehouseByStore(storeID); err != nil { return nil, err + } else { + return resp, nil } - return info, nil } type LocalStore struct { @@ -118,7 +112,6 @@ func CreateFenceByStore(appOrgCode string, storeID int64) (fenceID string, err e param = &warehouse_createFence_request.WarehouseCreateFenceParam{} sqlParam = []interface{}{} ) - sqlStr := `SELECT t.lng,t.lat,t.delivery_range_type,t.delivery_range FROM store t` if storeID != 0 { sqlStr += " WHERE t.id = ? " @@ -243,11 +236,10 @@ func UpdateFenceByStore(appOrgCode, outFenceID string, storeID int) error { //门店直接绑定围栏 func BindFenceByStore(appOrgCode string, storeID int64, addOutFenceIDs []string) error { - param := &warehouse_bindFencesByStore_request.WarehouseBindFencesByStoreParam{ + if _, err := getAPI(appOrgCode, 0, "").BindFenceByStore(&warehouse_bindFencesByStore_request.WarehouseBindFencesByStoreParam{ StoreId: storeID, AddOutFenceIds: addOutFenceIDs, - } - if _, err := getAPI(appOrgCode, 0, "").BindFenceByStore(param); err != nil { + }); err != nil { return err } return nil @@ -255,22 +247,26 @@ func BindFenceByStore(appOrgCode string, storeID int64, addOutFenceIDs []string) //获取电子围栏信息 func GetFence(appOrgCode, outFenceID string) (warehouse_getFences_response.FencesItem, error) { - data := warehouse_getFences_response.FencesItem{} - resp, err := getAPI(appOrgCode, 0, "").GetFence(outFenceID) - if err != nil { - return data, err + emptyResp := warehouse_getFences_response.FencesItem{} + if resp, err := getAPI(appOrgCode, 0, "").GetFence(outFenceID); err != nil { + return emptyResp, err + } else { + return resp.Fences[0], nil } - return resp.Fences[0], nil + } //特殊处理 -func SpecialTreat(vendorOrgCode string, vendorStoreID, storeID, deliveryFeeDeductionFee, minPrice int64) error { +func SpecialTreat(vendorOrgCode string, vendorStoreID, storeID, deliveryFeeDeductionFee, minPrice int64, userName string) error { var ( - errList = errlist.New() - FreightTemplate = &model.FreightTemplate{} db *dao.DaoDB + errList = errlist.New() + FreightTemplate = &model.FreightTemplate{ + VendorStoreID: utils.Int64ToStr(vendorStoreID), + StoreID: int(storeID), + } ) - //首先获取绑定信息 + //1.运费模板 bindFreightIDs, err := GetStoreFreight(vendorOrgCode, vendorStoreID) if err != nil { globals.SugarLogger.Debug("获取门店(%d) 绑定运费模板出错:", vendorStoreID, err) @@ -294,13 +290,12 @@ func SpecialTreat(vendorOrgCode string, vendorStoreID, storeID, deliveryFeeDeduc errList.AddErr(fmt.Errorf("更新运费模板失败:%v", err)) } } - //设置门店打包费 默认为0 + //2.设置门店打包费 默认为0 if err := SetStorePackageFee(vendorOrgCode, vendorStoreID, deliveryFeeDeductionFee); err != nil { errList.AddErr(fmt.Errorf("设置门店打包费失败:%v", err)) } - //设置门店起送价 默认为0 - bindSaleLimitID, err := GetStoreSaleLimit(vendorOrgCode, vendorStoreID) - if err != nil { + //3.设置门店起送价 默认为0 + if bindSaleLimitID, err := GetStoreSaleLimit(vendorOrgCode, vendorStoreID); err != nil { errList.AddErr(fmt.Errorf("获取门店限售模板失败:%v", err)) } else { if bindSaleLimitID == 0 || utils.IsNil(bindSaleLimitID) { //创建 @@ -317,14 +312,18 @@ func SpecialTreat(vendorOrgCode string, vendorStoreID, storeID, deliveryFeeDeduc } } } - err1 := dao.CreateEntity(db, FreightTemplate) - if err1 != nil { - _, err2 := dao.UpdateEntity(db, FreightTemplate, "TemplateID") - if err2 != nil { + //多次同步数据库,兜底处理 + if err := dao.CreateEntity(db, FreightTemplate); err != nil { + _, err1 := dao.UpdateEntity(db, FreightTemplate, "TemplateID", "TradeLimitID") + if err1 != nil { errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err1)) + } else { + errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err)) } + } else { + dao.WrapAddIDCULDEntity(FreightTemplate, userName) } endErr := errList.GetErrListAsOne() - globals.SugarLogger.Debugf("endErr===============%s", endErr) + globals.SugarLogger.Debugf("SpecialTreat wrong information endErr: %s", endErr) return endErr }