diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 752d8d56d..dfe094933 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1524,17 +1524,17 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend } if vendorID == model.VendorIDDD { //抖店绑定店铺时 检查并补充创建 globals.SugarLogger.Debugf("vendorID ==============%d", vendorID) - if str, err2 := tiktok_store.CreateOrUpdateAll(vendorOrgCode, int64(storeMap.StoreID), utils.Str2Int64(storeMap.VendorStoreID)); err2 != nil { - errList.AddErr(fmt.Errorf("wrongAns=%s,err=%v", str, err2)) + if err2 := tiktok_store.CreateOrUpdateAll(vendorOrgCode, int64(storeMap.StoreID), utils.Str2Int64(storeMap.VendorStoreID)); err2 != nil { + errList.AddErr(err2) } } } else if vendorID == model.VendorIDJX { ReCalculateJxPriceLight(db, ctx, storeID) - } else if vendorID == model.VendorIDYB { - err = checkYbParams(db, storeMap, storeID) - if err != nil { - return nil, err - } + //} else if vendorID == model.VendorIDYB { + // err = checkYbParams(db, storeMap, storeID) + // if err != nil { + // return nil, err + // } } else if vendorID == model.VendorIDJDShop { if storeMap.VendorStoreID == "" { storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店 @@ -1698,13 +1698,13 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor //增加同步到抖店厂商的同步标志 DDFlag := false errList := errlist.ErrList{} - if valid["deliveryFeeDeductionSill"] != nil && vendorID == model.VendorIDDD { + if (valid["deliveryFeeDeductionSill"] != nil || valid["deliveryFeeDeductionFee"] != nil || valid["ybStorePrefix"] != nil) && vendorID == model.VendorIDDD { DDFlag = true - } //特殊处理抖店运费模板 + } //特殊处理抖店运费模板、打包费 if DDFlag { - globals.SugarLogger.Debug("进入DDFlag 特殊处理运费模板") - if err := tiktok_store.FreightSpecialTreat(storeMap.VendorOrgCode, utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.StoreID)); err != nil { - errList.AddErr(fmt.Errorf("抖店运费模板相关处理错误:%v", err)) + 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 { + errList.AddErr(fmt.Errorf("抖店运费模板、起送价、打包费相关处理错误:%v", err)) } } for _, v := range [][]string{ diff --git a/business/model/store.go b/business/model/store.go index 3c3fe4157..707e0fd3d 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -481,10 +481,10 @@ type StoreMap struct { PricePercentagePack string `orm:"size(32)" json:"pricePercentagePack"` // FreightDeductionPack string `orm:"size(32)" json:"freightDeductionPack"` // - AutoPickup int8 `orm:"default(1)" json:"autoPickup"` // 是否自动拣货 - DeliveryType int8 `orm:"default(0)" json:"deliveryType"` // 配送类型 - DeliveryFeeDeductionSill int `json:"deliveryFeeDeductionSill"` - DeliveryFeeDeductionFee int `json:"deliveryFeeDeductionFee"` + AutoPickup int8 `orm:"default(1)" json:"autoPickup"` // 是否自动拣货 + DeliveryType int8 `orm:"default(0)" json:"deliveryType"` // 配送类型 + DeliveryFeeDeductionSill int `json:"deliveryFeeDeductionSill"` //在vendorID=14,存储满 x 包邮金额 + DeliveryFeeDeductionFee int `json:"deliveryFeeDeductionFee"` //在vendorID=14,存储打包费 DeliveryCompetition int8 `orm:"default(1)" json:"deliveryCompetition"` // 是否支持配送竞争 CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` //默认0系统发单,1为门店发单 @@ -503,7 +503,7 @@ type StoreMap struct { YbAppID string `orm:"column(yb_app_id);size(255)" json:"ybAppID"` YbAppKey string `orm:"size(255)" json:"ybAppKey"` - YbStorePrefix string `orm:"size(255)" json:"ybStorePrefix"` + YbStorePrefix string `orm:"size(255)" json:"ybStorePrefix"` //在vendorID=14,存储抖店门店起送金额 单位分 MtwmToken string `orm:"size(512)" json:"mtwmToken"` //美团外卖商超token,有效期30天,每20天刷一次 MtwmRefreshToken string `orm:"size(255)" json:"mtwmRefreshToken"` //美团外卖商超refreshToken diff --git a/business/partner/purchase/tiktok_store/store.go b/business/partner/purchase/tiktok_store/store.go index 33db75433..bd9c96569 100644 --- a/business/partner/purchase/tiktok_store/store.go +++ b/business/partner/purchase/tiktok_store/store.go @@ -20,7 +20,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" - //"git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxstore/event" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" @@ -89,9 +88,8 @@ func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri errList = errlist.New() timeStr = "" m = make(map[int64]string) + a = getAPI(storeDetail.VendorOrgCode, storeID, storeDetail.VendorStoreID) ) - //增加绑定门店操作 - a := getAPI(storeDetail.VendorOrgCode, storeID, storeDetail.VendorStoreID) if storeDetail.OpenTime1 == 0 || storeDetail.CloseTime1 == 0 { return "", fmt.Errorf("营业时间必填") } else { @@ -127,7 +125,7 @@ func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri return "", err } else { vendorStoreIDs = utils.Int64ToStr(resp.ResultList[0].Store.StoreId) - if _, err := CreateOrUpdateAll(storeDetail.VendorOrgCode, int64(storeDetail.Store.ID), resp.ResultList[0].Store.StoreId); err != nil { + if err := CreateOrUpdateAll(storeDetail.VendorOrgCode, int64(storeDetail.Store.ID), resp.ResultList[0].Store.StoreId); err != nil { errList.AddErr(err) } } @@ -136,7 +134,7 @@ func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri } //电子围栏 仓库 运费模板 限售模板 更新与绑定 -func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID int64) (string, error) { +func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID int64) error { var ( errList = errlist.New() FreightTemplate = &model.FreightTemplate{} @@ -201,8 +199,9 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID int64) (stri FreightTemplate.FenceID = utils.Int64ToStr(storeID) } } else { + //电子围栏二次验证 if len(bindWarehouseAndFence[vendorStoreID][0].OutFenceIds) == 0 || utils.IsNil(bindWarehouseAndFence[vendorStoreID][0].OutFenceIds) { //未绑定电子围栏 - globals.SugarLogger.Debug("进入创建电子围栏=========") + globals.SugarLogger.Debug("进入二次创建电子围栏=========") if fenceID, err := CreateFenceByStore(vendorOrgCode, storeID); err != nil || utils.Str2Int(fenceID) == 0 || utils.IsNil(fenceID) { //创建 globals.SugarLogger.Debug("门店(%d) 创建电子围栏失败:%v", storeID, err) errList.AddErr(fmt.Errorf("门店(%d) 创建电子围栏失败:%v", storeID, err)) @@ -248,18 +247,19 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID int64) (stri } if err = dao.CreateEntity(db, FreightTemplate); err != nil { - globals.SugarLogger.Debug("db update storeID,vendorStoreID defeat on :%v", err) - errList.AddErr(fmt.Errorf("db update storeID,vendorStoreID defeat on :%v", err)) - } else { _, err1 := dao.UpdateEntity(db, FreightTemplate, "TemplateID", "WarehouseID", "FenceID", "TradeLimitID") - errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err1)) + 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", errors.New(fmt.Sprintf("%s", utils.Format4Output(errList, true)))) - return "门店绑定成功,但需要根据提示进行处理", endErr + globals.SugarLogger.Debug("绑定门店需进行的错误处理:%v", errors.New(fmt.Sprintf("%s", utils.Format4Output(errList, false)))) + return endErr } else { - return "门店绑定成功", nil + return nil } } @@ -413,51 +413,47 @@ func UpdateStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int //默认 运费模板只创建 固定运费模板 func CreateFreightTemplate(storeCode int) (int64, error) { - var ( - param *freightTemplate_create_request.FreightTemplateCreateParam - ) - //获取本地门店信息 storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeCode, model.VendorIDDD, "") if err != nil { return 0, err } - Template := &freightTemplate_create_request.Template{ - TemplateName: storeDetail.VendorStoreName + "_" + utils.Int2Str(storeCode) + "的运费模板", - ProductProvince: int64(storeDetail.ProvinceCode), - ProductCity: int64(storeDetail.CityCode), - CalculateType: 2, //计价方式-1.按重量 2.按数量 - TransferType: 1, - RuleType: 1, //固定运费&卖家包邮 - FixedAmount: 500, //固定运费 单位:分 + param := &freightTemplate_create_request.FreightTemplateCreateParam{ + Template: &freightTemplate_create_request.Template{ + TemplateName: storeDetail.VendorStoreName + "(" + utils.Int2Str(storeCode) + ")的运费模板", + ProductProvince: int64(storeDetail.ProvinceCode), + ProductCity: int64(storeDetail.CityCode), + CalculateType: 2, //计价方式-1.按重量 2.按数量 + TransferType: 1, + RuleType: 1, //固定运费&卖家包邮 + FixedAmount: 500, //固定运费 单位:分 + }, } - param.Template = Template if int64(storeDetail.DeliveryFeeDeductionSill) != 0 { - param = &freightTemplate_create_request.FreightTemplateCreateParam{ - Columns: []freightTemplate_create_request.ColumnsItem{ - { - RuleAddress: fmt.Sprintf(`{"%s":{"%s":{"%s":[0]}}}`, utils.Int2Str(storeDetail.ProvinceCode), utils.Int2Str(storeDetail.CityCode)[:2], utils.Int2Str(storeDetail.DistrictCode)[:2]), - IsOverFree: true, //是否包邮 - IsLimited: false, - OverAmount: int64(storeDetail.DeliveryFeeDeductionSill), //此字段在vendor_id=14时 存储满x包邮金额 - ProvinceInfos: []freightTemplate_create_request.ProvinceInfosItem{ - { - Id: int64(storeDetail.ProvinceCode), - Children: []freightTemplate_create_request.ChildrenItem_4{ - { - Id: int64(storeDetail.CityCode), - Children: []freightTemplate_create_request.ChildrenItem_5{ - { - Id: int64(storeDetail.DistrictCode), - Children: []freightTemplate_create_request.ChildrenItem{ - {Id: 0}, - }, + columns := []freightTemplate_create_request.ColumnsItem{ + { + RuleAddress: fmt.Sprintf(`{"%s":{"%s":{"%s":[0]}}}`, utils.Int2Str(storeDetail.ProvinceCode), utils.Int2Str(storeDetail.CityCode)[:2], utils.Int2Str(storeDetail.DistrictCode)[:2]), + IsOverFree: true, //是否包邮 + IsLimited: false, + OverAmount: int64(storeDetail.DeliveryFeeDeductionSill), //此字段在vendor_id=14时 存储满x包邮金额 + ProvinceInfos: []freightTemplate_create_request.ProvinceInfosItem{ + { + Id: int64(storeDetail.ProvinceCode), + Children: []freightTemplate_create_request.ChildrenItem_4{ + { + Id: int64(storeDetail.CityCode), + Children: []freightTemplate_create_request.ChildrenItem_5{ + { + Id: int64(storeDetail.DistrictCode), + Children: []freightTemplate_create_request.ChildrenItem{ + {Id: 0}, }, }, }, - }}, - }, - }}, - } + }, + }}, + }, + }} + param.Columns = columns } resp, err := getAPI(storeDetail.VendorOrgCode, storeCode, storeDetail.VendorStoreID).FreightTemplateCreate(param) if err != nil { @@ -467,7 +463,7 @@ func CreateFreightTemplate(storeCode int) (int64, error) { } // /freightTemplate/update 修改运费模板 -func UpdateFreightTemplate(vendorStoreCode string, storeCode int) error { +func UpdateFreightTemplate(storeCode int) error { globals.SugarLogger.Debugf("进入UpdateFreightTemplate") var ( columns []freightTemplate_update_request.ColumnsItem @@ -519,7 +515,7 @@ func UpdateFreightTemplate(vendorStoreCode string, storeCode int) error { return nil } -// /freightTemplate/create 创建运费模板 +// /freightTemplate/create 创建运费模板 暂时未使用 func (P *PurchaseHandler) CreateFreightTemplateDirectly(templateInfo freightTemplate_create_request.FreightTemplateCreateParam, storeID, vendorStoreID int64) error { var ( db *dao.DaoDB @@ -575,7 +571,7 @@ func ShopBindStoreFreight(vendorOrgCode string, storeID, freightID int64) error func GetStoreFreight(vendorOrgCode string, storeID int64) (int64, error) { resp, err := getAPI(vendorOrgCode, int(storeID), "").GetStoreFreight(storeID) if err != nil || len(resp) == 0 { - return 0, errors.New(fmt.Sprintf("获取门店绑定运费模板失败:%v", err)) + return 0, err } return resp[0], nil } @@ -614,33 +610,63 @@ func (P *PurchaseHandler) GetAddressList(param *address_list_request.AddressList return listInfo, nil } -// /trade/createTradeLimitTemplate 创建限售模板 -func CreateTradeLimitTemplate(appOrgCode string, storeID int64) (tradeLimitID int64, err error) { - var ( - items []trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem - ) - item := trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem{ - TradeLimitModel: tiktok_api.TradeLimitModelQuantity, - TradeLimitResource: tiktok_api.TradeLimitResourceDouDian, - TradeLimitPattern: &trade_createTradeLimitTemplate_request.TradeLimitPattern{ - Minimum: 1, - Maximum: 1000, - CumulativeMax: 10000, - }, - TradeLimitSubjectList: []int32{tiktok_api.TradeLimitSubjectBuyMobile}, - } - items = append(items, item) +// /trade/createTradeLimitTemplate 创建限售模板 默认模板 +func CreateTradeLimitTemplate(appOrgCode string, vendorStoreID int64) (tradeLimitID int64, err error) { param := &trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{ - StoreId: storeID, - TradeLimitRuleRequestList: items, + StoreId: vendorStoreID, + TradeLimitRuleRequestList: []trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem{ + { + TradeLimitModel: tiktok_api.TradeLimitModelQuantity, + TradeLimitResource: tiktok_api.TradeLimitResourceDouDian, + TradeLimitPattern: &trade_createTradeLimitTemplate_request.TradeLimitPattern{ + Minimum: 1, + Maximum: 1000, + CumulativeMax: 10000, + }, + TradeLimitSubjectList: []int32{tiktok_api.TradeLimitSubjectBuyMobile}, + }, + }, } - resp, err := getAPI(appOrgCode, 0, utils.Int64ToStr(storeID)).CreateTradeLimitTemplate(param) + resp, err := getAPI(appOrgCode, 0, utils.Int64ToStr(vendorStoreID)).CreateTradeLimitTemplate(param) if err != nil { return 0, err } return resp.TradeLimitId, nil } +//创建起送价的 运费模板以及绑定 +func CreateAndBindMinPriceTemplate(vendorOrgCode string, vendorStoreID, minimum int64) error { + param := &trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{ + StoreId: vendorStoreID, + TradeLimitRuleRequestList: []trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem{ + { + TradeLimitModel: tiktok_api.TradeLimitModelMoney, + TradeLimitPattern: &trade_createTradeLimitTemplate_request.TradeLimitPattern{ + Minimum: minimum, + }, + TradeLimitSubjectList: []int32{ + tiktok_api.TradeLimitSubjectEndUser, + tiktok_api.TradeLimitSubjectUserGroup, + tiktok_api.TradeLimitSubjectDevice, + tiktok_api.TradeLimitSubjectBuyMobile, + tiktok_api.TradeLimitSubjectReceivingMobile, + tiktok_api.TradeLimitSubjectIDCard, + tiktok_api.TradeLimitSubjectPayAccount, + }, + }, + }, + } + resp, err := getAPI(vendorOrgCode, 0, "").CreateTradeLimitTemplate(param) + if err != nil || resp.TradeLimitId == 0 { + return errors.New(fmt.Sprintf("创建门店(%d)的起送价失败:%v", vendorStoreID, err)) + } else { //绑定 + if err := BindStoreSaleLimit(vendorOrgCode, vendorStoreID, resp.TradeLimitId); err != nil { + return errors.New(fmt.Sprintf("门店(%d)绑定 起送价限售模板失败:%v", vendorStoreID, err)) + } + } + return nil +} + // /shop/bindStoreSaleLimit 门店绑定限售模板 func BindStoreSaleLimit(appOrgCode string, storeID, saleLimitTemplateID int64) error { info := &shop_bindStoreSaleLimit_request.ShopBindStoreSaleLimitParam{ @@ -808,6 +834,14 @@ func (P *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo return retVal, nil } +//设置门店打包费 +func SetStorePackageFee(vendorOrgCode string, vendorStoreID, packageFee int64) error { + if err := getAPI(vendorOrgCode, 0, "").SetStorePackageFee(vendorStoreID, packageFee); err != nil { + return err + } + return nil +} + func (P *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) { return "", errors.New("抖店暂不支持此操作") } diff --git a/business/partner/purchase/tiktok_store/warehouse.go b/business/partner/purchase/tiktok_store/warehouse.go index 64439354b..23595beea 100644 --- a/business/partner/purchase/tiktok_store/warehouse.go +++ b/business/partner/purchase/tiktok_store/warehouse.go @@ -130,6 +130,8 @@ func CreateFenceByStore(appOrgCode string, storeID int64) (fenceID string, err e } param.FenceInfo.Circular = circular param.FenceInfo.Shape = tiktok_api.ShapeCircular + globals.SugarLogger.Debug("圆:lat,lng", circular.Center.Latitude, circular.Center.Longitude) + } else if localStore.DeliveryRangeType == LocalShapePolygon { tempStr := strings.Split(localStore.DeliveryRange, ";") for v := len(tempStr) - 1; v >= 0; v-- { @@ -142,6 +144,7 @@ func CreateFenceByStore(appOrgCode string, storeID int64) (fenceID string, err e } param.FenceInfo.Polygon.Vertices = vertex param.FenceInfo.Shape = tiktok_api.ShapePolygon + globals.SugarLogger.Debug("多边形:vertex", param.FenceInfo.Polygon.Vertices) } param.FenceInfo.OutFenceId = utils.Int64ToStr(storeID) //绑定基于此id resp, err := getAPI(appOrgCode, 0, "").CreateFence(param) @@ -245,7 +248,7 @@ func GetFence(appOrgCode, outFenceID string) (warehouse_getFences_response.Fence } //单独处理运费模板 -func FreightSpecialTreat(vendorOrgCode string, vendorStoreID, storeID int64) error { +func SpecialTreat(vendorOrgCode string, vendorStoreID, storeID, deliveryFeeDeductionFee, minPrice int64) error { var ( errList = errlist.New() FreightTemplate = &model.FreightTemplate{} @@ -270,11 +273,19 @@ func FreightSpecialTreat(vendorOrgCode string, vendorStoreID, storeID int64) err } } } else { - if err := UpdateFreightTemplate(vendorOrgCode, int(storeID)); err != nil { + if err := UpdateFreightTemplate(int(storeID)); err != nil { globals.SugarLogger.Debug("更新运费模板失败:", err) errList.AddErr(fmt.Errorf("更新运费模板失败:%v", err)) } } + //设置门店打包费 默认为0 + if err := SetStorePackageFee(vendorOrgCode, vendorStoreID, deliveryFeeDeductionFee); err != nil { + errList.AddErr(fmt.Errorf("设置门店打包费失败:%v", err)) + } + //设置门店起送价 默认为0 + if err := CreateAndBindMinPriceTemplate(vendorOrgCode, vendorStoreID, minPrice); err != nil { + errList.AddErr(fmt.Errorf("设置门店起送价失败:%v", err)) + } err1 := dao.CreateEntity(db, FreightTemplate) if err1 != nil { _, err2 := dao.UpdateEntity(db, FreightTemplate, "TemplateID") @@ -283,6 +294,6 @@ func FreightSpecialTreat(vendorOrgCode string, vendorStoreID, storeID int64) err } } endErr := errList.GetErrListAsOne() - globals.SugarLogger.Debugf("errList===============%s", endErr) + globals.SugarLogger.Debugf("endErr===============%s", endErr) return endErr }