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