Files
jx-callback/business/partner/purchase/tiktok_store/warehouse.go
richboo111 1a2be86da9 ddscope
2022-11-01 09:56:52 +08:00

237 lines
8.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package tiktok_store
import (
"fmt"
warehouse_bindFencesByStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_bindFencesByStore/request"
warehouse_bindStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_bindStore/request"
warehouse_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_create/request"
warehouse_createBatch_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_createBatch/request"
warehouse_createFence_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_createFence/request"
warehouse_getFences_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_getFences/response"
warehouse_getWarehouseByStore_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_getWarehouseByStore/response"
warehouse_setFence_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_setFence/request"
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"strings"
)
// /warehouse/create 创建单个区域仓
func CreateWarehouse(appOrgCode, outWarehouseID string) (warehouseID int64, err error) {
tempName := "京西菜市(" + outWarehouseID + ")的区域仓"
req := &warehouse_create_request.WarehouseCreateParam{
OutWarehouseId: outWarehouseID,
Name: tempName,
Intro: "",
}
resp, err := getAPI(appOrgCode, 0, "").CreateWarehouse(req)
if err != nil {
return 0, err
}
return resp.Data, err
}
// /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,
}
resp, err := getAPI(appOrgCode, 0, "").BatchCreateWarehouse(req)
if err != nil {
return err
}
if resp.Data["outWarehouseId"] == false {
return fmt.Errorf("outWarehouseId:%v 出错", resp.Data["outWarehouseId"])
}
return nil
}
// /warehouse/bindStore 仓库绑定门店
func BindStoreWarehouse(VendorOrgCode, outWarehouseID string, storeIDs int64) error {
param := &warehouse_bindStore_request.WarehouseBindStoreParam{
StoreIds: []int64{storeIDs},
OutWarehouseId: outWarehouseID,
}
if _, err := getAPI(VendorOrgCode, 0, "").StoreBindWarehouse(param); err != nil {
return err
}
return nil
}
// /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 {
return nil, err
}
return info, nil
}
type LocalStore struct {
Lng int `json:"-"` // 乘了10的6次方
Lat int `json:"-"` // 乘了10的6次方
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
DeliveryRange string `json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon则为逗号分隔坐标分号分隔的坐标点坐标与Lng和Lat一样都是整数比如 121361504,31189308;121420555,31150238。否则为半径单位为米
VendorStoreID string `json:"vendorStoreID"` // 平台上门店id
}
// /warehouse/createFence 以门店方式创建电子围栏
func CreateFenceByStore(appOrgCode string, storeID int64) (fenceID string, err error) {
var (
db *dao.DaoDB
localStore *LocalStore
vertex []warehouse_createFence_request.VerticesItem
)
sqlParam := []interface{}{
model.VendorIDDD,
}
sqlStr := ` SELECT t.lng,t.lat,t.delivery_range_type,t.delivery_range,s.vendor_store_id FROM store t
LEFT JOIN store_map s ON t.id = s.store_id
WHERE s.vendor_id = ? `
if storeID != 0 {
sqlStr += " AND t.id = ? "
sqlParam = append(sqlParam, storeID)
} else {
return "", fmt.Errorf("storeID必填")
}
if err = dao.GetRow(db, &localStore, sqlStr, sqlParam...); err == nil {
param := &warehouse_createFence_request.WarehouseCreateFenceParam{
FenceInfo: &warehouse_createFence_request.FenceInfo{
OutFenceId: utils.Int64ToStr(storeID), //绑定基于此id
Shape: int32(localStore.DeliveryRangeType),
},
}
if localStore.DeliveryRangeType == tiktok_api.ShapeCircular {
circular := &warehouse_createFence_request.Circular{
Center: &warehouse_createFence_request.Center{
Longitude: utils.Int2Float64(localStore.Lng),
Latitude: utils.Int2Float64(localStore.Lat),
},
Radius: utils.Str2Float64(localStore.DeliveryRange),
}
param.FenceInfo.Circular = circular
} else if localStore.DeliveryRangeType == tiktok_api.ShapePolygon {
tempStr := strings.Split(localStore.DeliveryRange, ";")
for v := len(tempStr) - 1; v >= 0; v-- {
s2 := strings.Split(tempStr[v], ",")
vertices := warehouse_createFence_request.VerticesItem{
Longitude: utils.Str2Float64(s2[0]),
Latitude: utils.Str2Float64(s2[1]),
}
vertex = append(vertex, vertices)
}
param.FenceInfo.Polygon.Vertices = vertex
}
resp, err := getAPI(appOrgCode, 0, "").CreateFence(param)
if err != nil {
return "", err
} else {
return resp.FenceId, err
}
} else {
return "", err
}
}
//直接创建电子围栏方式
func CreateFenceDirectly(param warehouse_createFence_request.WarehouseCreateFenceParam) (fenceID string, err error) {
info := &warehouse_createFence_request.WarehouseCreateFenceParam{
FenceInfo: param.FenceInfo,
}
resp, err := getAPI("", 0, "").CreateFence(info)
if err != nil {
return "", err
}
return resp.FenceId, err
}
// 通过门店更新电子围栏
func UpdateFenceByStore(appOrgCode string, storeID int) error {
var (
db *dao.DaoDB
localStore *LocalStore
verticeses []warehouse_setFence_request.VerticesItem
)
sqlParam := []interface{}{
model.VendorIDDD,
}
sqlStr := ` SELECT t.lng,t.lat,t.delivery_range_type,t.delivery_range,s.vendor_store_id FROM store t
LEFT JOIN store_map s ON t.id = s.store_id WHERE s.vendor_id= ? `
if storeID != 0 {
sqlStr += " AND t.id = ? "
sqlParam = append(sqlParam, storeID)
} else {
return fmt.Errorf("storeID必填")
}
if err := dao.GetRow(db, &localStore, sqlStr, sqlParam...); err == nil {
param := &warehouse_setFence_request.WarehouseSetFenceParam{
FenceInfo: &warehouse_setFence_request.FenceInfo{
OutFenceId: utils.Int2Str(storeID),
Shape: int32(localStore.DeliveryRangeType),
},
}
if localStore.DeliveryRangeType == tiktok_api.ShapeCircular {
circular := &warehouse_setFence_request.Circular{
Center: &warehouse_setFence_request.Center{
Longitude: utils.Int2Float64(localStore.Lng),
Latitude: utils.Int2Float64(localStore.Lat),
},
Radius: utils.Str2Float64(localStore.DeliveryRange),
}
param.FenceInfo.Circular = circular
} else if localStore.DeliveryRangeType == tiktok_api.ShapePolygon {
tempStr := strings.Split(localStore.DeliveryRange, ";")
for v := len(tempStr) - 1; v >= 0; v-- {
s2 := strings.Split(tempStr[v], ",")
vertices := warehouse_setFence_request.VerticesItem{
Longitude: utils.Str2Float64(s2[0]),
Latitude: utils.Str2Float64(s2[1]),
}
verticeses = append(verticeses, vertices)
}
param.FenceInfo.Polygon.Vertices = verticeses
}
if err := getAPI(appOrgCode, 0, "").SetFence(param); err != nil {
return err
}
} else {
return err
}
return nil
}
//门店直接绑定围栏
func BindFenceByStore(appOrgCode string, storeID int64, addOutFenceIDs []string) error {
param := &warehouse_bindFencesByStore_request.WarehouseBindFencesByStoreParam{
StoreId: storeID,
AddOutFenceIds: addOutFenceIDs,
}
if _, err := getAPI(appOrgCode, 0, "").BindFenceByStore(param); err != nil {
return err
}
return nil
}
//获取电子围栏信息
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
}
return resp.Fences[0], nil
}