Merge branch 'jdshop' of e.coding.net:rosydev/jx-callback into jdshop

This commit is contained in:
邹宗楠
2022-11-09 15:44:14 +08:00
4 changed files with 273 additions and 184 deletions

View File

@@ -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,

View File

@@ -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(默认会创建)
}

View File

@@ -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
}

View File

@@ -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
}