Merge branch 'master' of https://e.coding.net/rosydev/baseapi
This commit is contained in:
@@ -70,7 +70,7 @@ func TestCancel(t *testing.T) {
|
||||
//
|
||||
func TestQueryOrderInfo(t *testing.T) {
|
||||
dadaapi = New("dada154e2a41fd6cef3", "7f97d8f258b70b450f04e7ab274ed8f8", "6660", "http://callback.jxc4.com/dadadelivery/msg", true)
|
||||
result, err := dadaapi.QueryOrderInfo("1100568013516213472")
|
||||
result, err := dadaapi.QueryOrderInfo("1100599580388710489")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ func TestOrderListAll(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestOrderPartRefundGet(t *testing.T) {
|
||||
result, err := api.OrderPartRefundGet("4071470101033382467")
|
||||
result, err := api.OrderPartRefundGet("4056950043422699136")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
|
||||
@@ -410,6 +410,7 @@ func (a *API) OrderLogisticsChange2Self(orderID int64) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
// OrderDelivering 订单自配送中不支持骑手信息
|
||||
func (a *API) OrderDelivering(orderID int64) (err error) {
|
||||
retval, err := a.AccessAPI("order/delivering", true, map[string]interface{}{
|
||||
KeyOrderID: orderID,
|
||||
|
||||
@@ -15,3 +15,33 @@ type StoreTokenInfo struct {
|
||||
RefreshTokenValidTime int64 `json:"refresh_token_valid_time"`
|
||||
AccessToken string `json:"access_token"`
|
||||
}
|
||||
|
||||
// VegetableResultList 创建更新时,同意返回结构
|
||||
type VegetableResultList struct {
|
||||
ProductID string `json:"product_id"`
|
||||
SkuID string `json:"sku_id"`
|
||||
ErrMsg string `json:"err_msg"`
|
||||
}
|
||||
|
||||
// CallBackResult 回调函数同意返回结构
|
||||
type CallBackResult struct {
|
||||
Success bool `json:"success"`
|
||||
ErrCode string `json:"errCode"` // SUCCESS/Fail
|
||||
ErrMsg string `json:"errMsg"` // 文字说明
|
||||
}
|
||||
|
||||
// CallBackResultInfo 失败回调返回
|
||||
func CallBackResultInfo(err error) *CallBackResult {
|
||||
if err == nil {
|
||||
return &CallBackResult{
|
||||
Success: true,
|
||||
ErrCode: "SUCCESS",
|
||||
ErrMsg: "",
|
||||
}
|
||||
}
|
||||
return &CallBackResult{
|
||||
Success: false,
|
||||
ErrCode: "FAIL",
|
||||
ErrMsg: err.Error(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,10 @@ func (a *API) GetVendorOrgCode() string {
|
||||
return a.client.AppKey
|
||||
}
|
||||
|
||||
func (a *API) GetAppSecret() string {
|
||||
return a.client.AppSecret
|
||||
}
|
||||
|
||||
func (a *API) SetToken(token string) {
|
||||
a.token = token
|
||||
}
|
||||
|
||||
@@ -9,10 +9,12 @@ import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591"
|
||||
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
|
||||
request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/util"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
// AgreeUserCancel 同意用户售后申请
|
||||
@@ -113,6 +115,17 @@ func (a *API) UserCancelRefundApply(c *http.Request) (*UserCancelRefundApply, er
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// OnSaleRefundOrder 用户售中取消
|
||||
func (a *API) OnSaleRefundOrder(c *http.Request) (*OnSaleCancel, error) {
|
||||
body, _ := ioutil.ReadAll(c.Body)
|
||||
|
||||
var onSaleOrder *OnSaleCancel
|
||||
if err := json.Unmarshal(body, &onSaleOrder); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return onSaleOrder, nil
|
||||
}
|
||||
|
||||
// RefundOrderFinish 同城零售逆向订单状态完成接口(退款完成)
|
||||
func (a *API) RefundOrderFinish(c *http.Request) (*RefundOrderFinish, error) {
|
||||
data, err := ioutil.ReadAll(c.Body)
|
||||
@@ -162,6 +175,46 @@ func (a *API) QueryAfsOrderDetailList(req *request591.AlibabaWdkOrderRefundListR
|
||||
return &data.Result, nil
|
||||
}
|
||||
|
||||
// GetTransactionOrderListByTime 获取门店当天订单
|
||||
func (a *API) GetTransactionOrderListByTime(storeId string, queryData time.Time) ([]string, error) {
|
||||
createTime := util.LocalTime(time.Date(queryData.Year(), queryData.Month(), queryData.Day(), 0, 0, 0, 0, queryData.Location()))
|
||||
endTime := util.LocalTime(time.Date(queryData.Year(), queryData.Month(), queryData.Day(), 23, 59, 59, 59, queryData.Location()))
|
||||
var pageIndex int64 = 0
|
||||
var PageSize int64 = 200
|
||||
param := &request591.AlibabaWdkOrderListRequest{
|
||||
BatchQueryRequest: &domain591.AlibabaWdkOrderListBatchQueryRequest{
|
||||
StoreIds: &[]string{storeId},
|
||||
StartTime: &createTime,
|
||||
EndTime: &endTime,
|
||||
OrderFrom: utils.Int64ToPointer(ChannelCome),
|
||||
ShopId: nil,
|
||||
StoreId: nil,
|
||||
BizType: nil,
|
||||
},
|
||||
}
|
||||
vendorOrderList := make([]string, 0, 0)
|
||||
|
||||
for {
|
||||
param.BatchQueryRequest.SetPageSize(PageSize)
|
||||
param.BatchQueryRequest.SetPageIndex(pageIndex)
|
||||
result, err := a.GetTransactionOrderList(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, v := range *result.Orders {
|
||||
vendorOrderList = append(vendorOrderList, utils.Int64ToStr(*v.BizOrderId))
|
||||
}
|
||||
if *result.NextIndex != -1 {
|
||||
pageIndex += 1
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return vendorOrderList, nil
|
||||
}
|
||||
|
||||
// GetTransactionOrderList 实时拉取交易列表
|
||||
func (a *API) GetTransactionOrderList(req *request591.AlibabaWdkOrderListRequest) (*domain591.AlibabaWdkOrderListResult, error) {
|
||||
client := ability591.NewAbility591(&a.client)
|
||||
|
||||
@@ -24,16 +24,6 @@ func (a *API) ReaderOrderInfo(c *http.Request) (*CallbackOrder, error) {
|
||||
return callbackOrder, nil
|
||||
}
|
||||
|
||||
func (a *API) OnSaleRefundOrder(c *http.Request) (*OnSaleCancel, error) {
|
||||
body, _ := ioutil.ReadAll(c.Body)
|
||||
|
||||
var onSaleOrder *OnSaleCancel
|
||||
if err := json.Unmarshal(body, &onSaleOrder); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return onSaleOrder, nil
|
||||
}
|
||||
|
||||
// QueryOrderDetail 自配送查询订单详情
|
||||
func (a *API) QueryOrderDetail(req *request2.AlibabaAelophyOrderGetRequest) (*domain.AlibabaAelophyOrderGetOrderResponse, error) {
|
||||
client := ability591.NewAbility591(&a.client)
|
||||
|
||||
7
platformapi/tao_vegetable/order_test.go
Normal file
7
platformapi/tao_vegetable/order_test.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package tao_vegetable
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestName(t *testing.T) {
|
||||
|
||||
}
|
||||
@@ -10,6 +10,34 @@ import (
|
||||
)
|
||||
|
||||
// GetStoreAllCategory 获取门店所有分类
|
||||
func (a *API) GetStoreAllCategory() ([]*CategoryInfo, error) {
|
||||
// 获取所有的父分类
|
||||
parent, err := a.GetStoreCategoryInfo("")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := make([]*CategoryInfo, 0)
|
||||
for _, v := range parent.ChildCategorys {
|
||||
childNode, err := a.GetStoreCategoryInfo(v.Code)
|
||||
if err != nil || len(childNode.ChildCategorys) == 0 {
|
||||
result = append(result, &CategoryInfo{
|
||||
ChildCategorys: nil,
|
||||
Code: v.Code,
|
||||
Desc: v.Desc,
|
||||
ForestId: v.ForestId,
|
||||
Leaf: v.Leaf,
|
||||
Name: v.Name,
|
||||
ParentForestId: v.ParentForestId,
|
||||
Status: v.Status,
|
||||
})
|
||||
continue
|
||||
}
|
||||
result = append(result, childNode)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetStoreCategoryInfo 获取门店指定分类
|
||||
func (a *API) GetStoreCategoryInfo(code string) (*CategoryInfo, error) {
|
||||
@@ -29,15 +57,44 @@ func (a *API) GetStoreCategoryInfo(code string) (*CategoryInfo, error) {
|
||||
return info, nil
|
||||
}
|
||||
|
||||
// AddStoreCategoryInfo 添加门店分类
|
||||
func (a *API) AddStoreCategoryInfo(param *request.AlibabaWdkSkuCategoryAddRequest) (string, error) {
|
||||
storeCategory := ability587.NewAbility587(&a.client)
|
||||
resp, err := storeCategory.AlibabaWdkSkuCategoryAdd(param, a.token)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if resp.Result.ErrMsg != nil {
|
||||
return "", fmt.Errorf("requestId:" + resp.RequestId + "msg:" + *resp.Result.ErrMsg)
|
||||
if !*resp.Result.Success {
|
||||
return "", fmt.Errorf(*resp.Result.ErrMsg)
|
||||
}
|
||||
|
||||
return *resp.Result.Model, nil
|
||||
}
|
||||
|
||||
// DeleteStoreCategoryInfo 删除门店分类
|
||||
func (a *API) DeleteStoreCategoryInfo(param *request.AlibabaWdkSkuCategoryDeleteRequest) error {
|
||||
storeCategory := ability587.NewAbility587(&a.client)
|
||||
resp, err := storeCategory.AlibabaWdkSkuCategoryDelete(param, a.token)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !*resp.Result.Success {
|
||||
return fmt.Errorf(*resp.Result.ErrMsg)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateStoreCategoryInfo 修改门店分类
|
||||
func (a *API) UpdateStoreCategoryInfo(param *request.AlibabaWdkSkuCategoryUpdateRequest) error {
|
||||
storeCategory := ability587.NewAbility587(&a.client)
|
||||
resp, err := storeCategory.AlibabaWdkSkuCategoryUpdate(param, a.token)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !*resp.Result.Success {
|
||||
return fmt.Errorf(*resp.Result.ErrMsg)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -13,20 +13,12 @@ type Points struct {
|
||||
|
||||
/*商品分类*/
|
||||
type CategoryInfo struct {
|
||||
ChildCategorys []struct {
|
||||
Code string `json:"code"` // 类目编码
|
||||
Desc string `json:"desc"` // 详细描述
|
||||
ForestId int `json:"forestId"` // 类目id
|
||||
Leaf bool `json:"leaf"` // 是否叶子结点
|
||||
Name string `json:"name"` // 类目名称
|
||||
ParentForestId int `json:"parentForestId"` // 父节点id
|
||||
Status int `json:"status"`
|
||||
} `json:"childCategorys"`
|
||||
Code string `json:"code"`
|
||||
Desc string `json:"desc"`
|
||||
ForestId int `json:"forestId"`
|
||||
Leaf bool `json:"leaf"`
|
||||
Name string `json:"name"`
|
||||
ParentForestId int `json:"parentForestId"`
|
||||
Status int `json:"status"`
|
||||
ChildCategorys []*CategoryInfo `json:"childCategorys"`
|
||||
Code string `json:"code"` // 类目编码
|
||||
Desc string `json:"desc"` // 详细描述
|
||||
ForestId int `json:"forestId"` // 类目id
|
||||
Leaf bool `json:"leaf"` // 是否叶子结点
|
||||
Name string `json:"name"` // 类目名称
|
||||
ParentForestId int `json:"parentForestId"` // 父节点id
|
||||
Status int `json:"status"`
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
)
|
||||
|
||||
// AddStoreSku 新增门店商品
|
||||
func (a *API) AddStoreSku(param *request.AlibabaWdkSkuAddRequest) (*[]domain.AlibabaWdkSkuAddApiResult, error) {
|
||||
func (a *API) AddStoreSku(param *request.AlibabaWdkSkuAddRequest) (*[]VegetableResultList, error) {
|
||||
client := ability585.NewAbility585(&a.client)
|
||||
|
||||
data, err := client.AlibabaWdkSkuAdd(param, a.token)
|
||||
@@ -29,11 +29,20 @@ func (a *API) AddStoreSku(param *request.AlibabaWdkSkuAddRequest) (*[]domain.Ali
|
||||
return nil, fmt.Errorf(*data.Result.ErrMsg)
|
||||
}
|
||||
|
||||
return data.Result.Models, nil
|
||||
var foodList = make([]VegetableResultList, 0, len(*data.Result.Models))
|
||||
for _, v := range *data.Result.Models {
|
||||
foodList = append(foodList, VegetableResultList{
|
||||
ProductID: *v.ProductId,
|
||||
SkuID: *v.Model,
|
||||
ErrMsg: *v.ErrMsg,
|
||||
})
|
||||
}
|
||||
|
||||
return &foodList, nil
|
||||
}
|
||||
|
||||
// UpdateStoreSku 更新门店商品
|
||||
func (a *API) UpdateStoreSku(param *request.AlibabaWdkSkuUpdateRequest) (*[]domain.AlibabaWdkSkuUpdateApiResult, error) {
|
||||
func (a *API) UpdateStoreSku(param *request.AlibabaWdkSkuUpdateRequest) (*[]VegetableResultList, error) {
|
||||
client := ability585.NewAbility585(&a.client)
|
||||
|
||||
data, err := client.AlibabaWdkSkuUpdate(param, a.token)
|
||||
@@ -47,7 +56,19 @@ func (a *API) UpdateStoreSku(param *request.AlibabaWdkSkuUpdateRequest) (*[]doma
|
||||
return nil, fmt.Errorf(*data.Result.ErrMsg)
|
||||
}
|
||||
|
||||
return data.Result.Models, nil
|
||||
var foodList = make([]VegetableResultList, 0, len(*data.Result.Models))
|
||||
for _, v := range *data.Result.Models {
|
||||
model := VegetableResultList{
|
||||
ProductID: *v.Model,
|
||||
SkuID: *v.Model,
|
||||
}
|
||||
if !*v.Success {
|
||||
model.ErrMsg = *v.ErrMsg
|
||||
}
|
||||
foodList = append(foodList, model)
|
||||
}
|
||||
|
||||
return &foodList, nil
|
||||
}
|
||||
|
||||
// QueryStoreSKu 查询门店商品
|
||||
@@ -68,8 +89,13 @@ func (a *API) QueryStoreSKu(param *request.AlibabaWdkSkuQueryRequest) (*[]domain
|
||||
return data.Result.Models, nil
|
||||
}
|
||||
|
||||
// StoreSkuUpdate 门店商品上下架
|
||||
func (a *API) StoreSkuUpdate(param *request2.AlibabaAxChannelSkuStatusUpdateRequest) error {
|
||||
// DeleteStoreSku 删除门店商品
|
||||
func (a *API) DeleteStoreSku() {
|
||||
|
||||
}
|
||||
|
||||
// StoreSkuUpdateOffShelf 门店商品上下架
|
||||
func (a *API) StoreSkuUpdateOffShelf(param *request2.AlibabaAxChannelSkuStatusUpdateRequest) error {
|
||||
client := ability587.NewAbility587(&a.client)
|
||||
|
||||
data, err := client.AlibabaAxChannelSkuStatusUpdate(param, a.token)
|
||||
|
||||
233
platformapi/tao_vegetable/store_sku_test.go
Normal file
233
platformapi/tao_vegetable/store_sku_test.go
Normal file
@@ -0,0 +1,233 @@
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
request1475 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability1475/request"
|
||||
domain3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain"
|
||||
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
|
||||
domain585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/domain"
|
||||
request585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/request"
|
||||
domain587 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability587/domain"
|
||||
request587 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability587/request"
|
||||
domain589 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability589/domain"
|
||||
request589 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability589/request"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 上传图片
|
||||
func TestUploadImg(t *testing.T) {
|
||||
responseImg, err := http.Get("http://image.jxc4.com/8b7e117eb51bda162ea7fd249086d2e0.png")
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("img err := %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
imgByte, _ := ioutil.ReadAll(responseImg.Body)
|
||||
globals.SugarLogger.Debugf("=======imgByte := %s", utils.Format4Output(len(imgByte), false))
|
||||
data, err := apiTao.UploadImg(&request1475.AlibabaWdkPictureUploadRequest{
|
||||
PictureCategoryId: utils.Int64ToPointer(0),
|
||||
Img: &imgByte,
|
||||
ImgInputTitle: utils.String2Pointer("059c91725ee08443a4aaa204d1f54032.png"),
|
||||
Title: utils.String2Pointer("059c91725ee08443a4aaa204d1f54032"),
|
||||
})
|
||||
globals.SugarLogger.Debugf("=======data := %s", utils.Format4Output(data, false))
|
||||
globals.SugarLogger.Debugf("=======err2 := %s", utils.Format4Output(err, false))
|
||||
}
|
||||
|
||||
func TestAddStoreSku(t *testing.T) {
|
||||
param1 := &request585.AlibabaWdkSkuAddRequest{}
|
||||
param := make([]domain585.AlibabaWdkSkuAddSkuDo, 0, 0)
|
||||
sku1 := domain585.AlibabaWdkSkuAddSkuDo{
|
||||
Barcodes: utils.String2Pointer("19930827"),
|
||||
BrandName: utils.String2Pointer("京西菜场"),
|
||||
//CategoryCode: utils.String2Pointer("222201"),
|
||||
OuCode: utils.String2Pointer("JX668594"),
|
||||
InventoryUnit: utils.String2Pointer("份"),
|
||||
//MainPicUrls: utils.String2Pointer("https://img.alicdn.com/imgextra/i1/2680068332/O1CN01nXtVt92BQ6ryMXDpS_!!2680068332.png"), // 多图逗号
|
||||
//DetailPicUrls: utils.String2Pointer("https://img.alicdn.com/imgextra/i1/2680068332/O1CN01nXtVt92BQ6ryMXDpS_!!2680068332.png"), // 多图逗号
|
||||
ProducerPlace: utils.String2Pointer("中国"),
|
||||
//ShelfLife: utils.Int64ToPointer(7),
|
||||
SkuCode: utils.String2Pointer("19930827"),
|
||||
SkuName: utils.String2Pointer("西兰花 500g/份"),
|
||||
//SkuType: utils.Int64ToPointer(13),
|
||||
StorageType: utils.Int64ToPointer(242),
|
||||
SuggestedPrice: utils.String2Pointer("9"),
|
||||
Weight: utils.String2Pointer("500"),
|
||||
WeightFlag: utils.Int64ToPointer(0),
|
||||
ShortTitle: utils.String2Pointer("美味西兰花"),
|
||||
TxtDesc: utils.String2Pointer("美味西兰花"),
|
||||
NetContent: utils.String2Pointer("500"),
|
||||
SaleUnit: utils.String2Pointer("份"),
|
||||
LifeStatus: utils.String2Pointer("A"),
|
||||
SaleSpec: utils.String2Pointer("1*1份"),
|
||||
AvgWeight: utils.String2Pointer("1"), // 每个虾饺重量
|
||||
PreMinusWeight: utils.String2Pointer("1"), // 每个购买单位重量,预扣重量
|
||||
StepQuantity: utils.Int64ToPointer(1), // 每次购买至少增加一个购买单位
|
||||
PurchaseQuantity: utils.Int64ToPointer(1), // 起购单位
|
||||
SubTitle: utils.String2Pointer("同城包邮"),
|
||||
SubTitle1: utils.String2Pointer("一小时速达"),
|
||||
OnlineSaleFlag: utils.Int64ToPointer(1), // 门店控制是否可见
|
||||
DeliveryUnit: utils.String2Pointer("份"),
|
||||
DeliverySpec: utils.String2Pointer("1"),
|
||||
MemberPrice: utils.String2Pointer("9"),
|
||||
Storage: utils.String2Pointer("冷藏"),
|
||||
PickFloatRate: utils.String2Pointer("0"), // ? 0
|
||||
ForbidReceiveDays: utils.Int64ToPointer(0), // ? 7
|
||||
ForbidSalesDays: utils.Int64ToPointer(0), // ? 0
|
||||
OverloadRate: utils.String2Pointer("0"), // ? 0
|
||||
WarnDays: utils.Int64ToPointer(0), // ? 0
|
||||
FixedFlag: utils.Int64ToPointer(0), // ? 0
|
||||
PurchaseSpec: utils.String2Pointer("1"), // ? 1
|
||||
PurchaseUnit: utils.String2Pointer("份"), // ? 同上
|
||||
LabelStyleType: utils.String2Pointer("无价签"), // 库存单位
|
||||
RichText: utils.String2Pointer("优先使用这个(txt_desc)"),
|
||||
//BackCatCode: , // 优先使用BackCatCode HmCategoryCode靠后
|
||||
//HmCategoryCode: ,
|
||||
SkuPrice: utils.String2Pointer("9"), // 优先使用skuPrice 靠后SalePrice
|
||||
Period: utils.Int64ToPointer(7), // 优先使用period 靠后shelf_life
|
||||
ItemTypeNew: utils.Int64ToPointer(1), // 优先使用 靠后 sku_type
|
||||
MerchantCatCode: utils.String2Pointer("222201"), // 优先使用 靠后 category_code
|
||||
SkuPicUrls: utils.String2Pointer("https://image.jxc4.com/image/af9501e559555d062f2bba830adcd04a.jpg,https://image.jxc4.com/image/26d4f62c006180050df1237b92a007de.jpg"), // 第一张主图,后面是详情 优先使用本字段 靠后 同字段main_pic_urls和detail_pic_urls
|
||||
FragileFlag: utils.Int64ToPointer(1),
|
||||
DeliveryStorage: utils.String2Pointer("常温"),
|
||||
TemporaryFlag: utils.Int64ToPointer(0),
|
||||
IsOnline: utils.Int64ToPointer(1),
|
||||
}
|
||||
sku1.SkuSuppliers = &[]domain585.AlibabaWdkSkuAddSkuSupplierDo{
|
||||
domain585.AlibabaWdkSkuAddSkuSupplierDo{
|
||||
ReturnFlag: utils.Int64ToPointer(0),
|
||||
Minimum: utils.String2Pointer("1"),
|
||||
PurchasePrice: utils.String2Pointer(""),
|
||||
SupplierNo: nil,
|
||||
SupplierName: nil,
|
||||
MainFlag: nil,
|
||||
},
|
||||
}
|
||||
sku1.ChannelProps = &[]domain585.AlibabaWdkSkuAddChannelProp{
|
||||
domain585.AlibabaWdkSkuAddChannelProp{
|
||||
ChannelType: utils.String2Pointer("txd"),
|
||||
Props: &[]domain585.AlibabaWdkSkuAddPropField{
|
||||
domain585.AlibabaWdkSkuAddPropField{
|
||||
Value: utils.String2Pointer("1"),
|
||||
Key: utils.String2Pointer("ONE_HOUR_STATUS"),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
param = append(param, sku1)
|
||||
param1.ParamList = ¶m
|
||||
result, err := apiTao.AddStoreSku(param1)
|
||||
globals.SugarLogger.Debugf("result = %s", utils.Format4Output(result, false))
|
||||
globals.SugarLogger.Debugf("err = %s", utils.Format4Output(err, false))
|
||||
}
|
||||
|
||||
func TestUpdateSku(t *testing.T) {
|
||||
param := &request585.AlibabaWdkSkuUpdateRequest{}
|
||||
updateSkuList := make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0)
|
||||
updateSku := domain585.AlibabaWdkSkuUpdateSkuDo{
|
||||
OuCode: utils.String2Pointer("JX668594"),
|
||||
SkuCode: utils.String2Pointer("19930827"),
|
||||
AvgWeight: utils.String2Pointer("1"),
|
||||
ItemTypeNew: utils.Int64ToPointer(1),
|
||||
OnlineSaleFlag: utils.Int64ToPointer(1),
|
||||
}
|
||||
updateSkuList = append(updateSkuList, updateSku)
|
||||
param.ParamList = &updateSkuList
|
||||
data, err := apiTao.UpdateStoreSku(param)
|
||||
globals.SugarLogger.Debugf("data = %s", utils.Format4Output(data, false))
|
||||
globals.SugarLogger.Debugf("err = %s", utils.Format4Output(err, false))
|
||||
}
|
||||
|
||||
// 商品上下架
|
||||
func TestStoreSkuUpdateOffShelf(t *testing.T) {
|
||||
param := &request587.AlibabaAxChannelSkuStatusUpdateRequest{ChannelSkuUpdateStatusReq: &domain587.AlibabaAxChannelSkuStatusUpdateChannelSkuUpdateStatusReq{
|
||||
SkuCode: utils.String2Pointer("19930827"),
|
||||
StoreId: utils.String2Pointer("JX668594"),
|
||||
ChannelCode: utils.String2Pointer("31"),
|
||||
OnlineSaleFlag: utils.Int64ToPointer(0),
|
||||
}}
|
||||
err := apiTao.StoreSkuUpdateOffShelf(param)
|
||||
globals.SugarLogger.Debugf("err := %s ", utils.Format4Output(err, false))
|
||||
}
|
||||
|
||||
// 商品库存修改
|
||||
func TestStoreSkuStock(t *testing.T) {
|
||||
param := request589.AlibabaWdkStockPublishRequest{}
|
||||
batchStockPublishDto := &domain589.AlibabaWdkStockPublishBatchStockPublishDto{
|
||||
UpdateType: utils.Int64ToPointer(1),
|
||||
BillNo: utils.String2Pointer(utils.Int64ToStr(time.Now().UnixNano())),
|
||||
BillType: utils.Int64ToPointer(9064),
|
||||
PublishSource: utils.String2Pointer("JX668594"),
|
||||
ShopCode: utils.String2Pointer("JX668594"),
|
||||
Operator: utils.String2Pointer("liulei"),
|
||||
StockPublishDtos: nil,
|
||||
}
|
||||
stockPublishDtos := make([]domain589.AlibabaWdkStockPublishStockPublishDto, 0, 0)
|
||||
stockPublishDtos = append(stockPublishDtos, domain589.AlibabaWdkStockPublishStockPublishDto{
|
||||
SkuCode: utils.String2Pointer("19930827"),
|
||||
Quantity: utils.String2Pointer("99"),
|
||||
OrderNo: utils.String2Pointer(fmt.Sprintf("%s_%d_%d", "JX668594", time.Now().UnixNano(), 84671)),
|
||||
OrderType: utils.String2Pointer("10006800"),
|
||||
})
|
||||
batchStockPublishDto.StockPublishDtos = &stockPublishDtos
|
||||
param.BatchStockPublishDto = batchStockPublishDto
|
||||
|
||||
if err := apiTao.StoreSkuStock(¶m); err != nil {
|
||||
globals.SugarLogger.Debugf("err := %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetSkuDetaul(t *testing.T) {
|
||||
result, err := apiTao.QueryStoreSKu(&request585.AlibabaWdkSkuQueryRequest{Param: &domain585.AlibabaWdkSkuQuerySkuQueryDo{
|
||||
SkuCodes: &[]string{"84671"},
|
||||
OuCode: utils.String2Pointer("JX668998"),
|
||||
}})
|
||||
globals.SugarLogger.Debugf("err := %s ", utils.Format4Output(err, false))
|
||||
globals.SugarLogger.Debugf("result := %s ", utils.Format4Output(result, false))
|
||||
}
|
||||
|
||||
func TestPartialRefundReason(t *testing.T) {
|
||||
param := &request3156.AlibabaTclsAelophyRefundCsapplyrenderRequest{
|
||||
RefundCsApplyRenderDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderDto{
|
||||
OutOrderId: nil,
|
||||
StoreId: utils.String2Pointer("JX668998"),
|
||||
OutSubOrderIds: nil,
|
||||
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(TaoVegetableChannelCode)),
|
||||
},
|
||||
}
|
||||
apiTao.PartialRefundReason(param)
|
||||
}
|
||||
|
||||
func uploadImg(api *API, imgs []string) *string {
|
||||
result := make([]string, 0, 0)
|
||||
for _, v := range imgs {
|
||||
if v == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
inputTitle := strings.LastIndex(v, "/")
|
||||
title := strings.LastIndex(v, ".")
|
||||
resp, err := http.Get(v)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
body, _ := ioutil.ReadAll(resp.Body)
|
||||
if newImg, _ := api.UploadImg(&request1475.AlibabaWdkPictureUploadRequest{
|
||||
PictureCategoryId: utils.Int64ToPointer(0),
|
||||
Img: &body,
|
||||
ImgInputTitle: utils.String2Pointer(v[inputTitle:]),
|
||||
Title: utils.String2Pointer(v[inputTitle:title]),
|
||||
}); newImg != "" {
|
||||
result = append(result, newImg)
|
||||
}
|
||||
}
|
||||
|
||||
return utils.String2Pointer(strings.Join(result, ","))
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability587/domain"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability587/request"
|
||||
@@ -43,6 +44,12 @@ func TestGetStoreCategory(t *testing.T) {
|
||||
globals.SugarLogger.Debugf("err := %s", utils.Format4Output(err, false))
|
||||
}
|
||||
|
||||
func TestGetStoreAllCategory(t *testing.T) {
|
||||
data, err := apiTao.GetStoreAllCategory()
|
||||
globals.SugarLogger.Debugf("data := %s", utils.Format4Output(data, false))
|
||||
globals.SugarLogger.Debugf("err := %s", utils.Format4Output(err, false))
|
||||
}
|
||||
|
||||
func TestAddCategory(t *testing.T) {
|
||||
data, err := apiTao.AddStoreCategoryInfo(&request.AlibabaWdkSkuCategoryAddRequest{Param: &domain.AlibabaWdkSkuCategoryAddCategoryDo{
|
||||
Code: utils.String2Pointer("222201"),
|
||||
@@ -55,3 +62,24 @@ func TestAddCategory(t *testing.T) {
|
||||
globals.SugarLogger.Debugf("data := %s", utils.Format4Output(data, false))
|
||||
globals.SugarLogger.Debugf("err := %s", utils.Format4Output(err, false))
|
||||
}
|
||||
|
||||
func TestDeleteCategory(t *testing.T) {
|
||||
code := "2222"
|
||||
err := apiTao.DeleteStoreCategoryInfo(&request.AlibabaWdkSkuCategoryDeleteRequest{Param: &domain.AlibabaWdkSkuCategoryDeleteCategoryDo{Code: &code}})
|
||||
globals.SugarLogger.Debugf("err := %v", err)
|
||||
}
|
||||
|
||||
func TestUpdateCategory(t *testing.T) {
|
||||
err := apiTao.UpdateStoreCategoryInfo(&request.AlibabaWdkSkuCategoryUpdateRequest{Param: &domain.AlibabaWdkSkuCategoryUpdateCategoryDo{
|
||||
Code: utils.String2Pointer("5522225555"),
|
||||
Name: utils.String2Pointer("冰淇淋2"),
|
||||
Status: utils.Int64ToPointer(0),
|
||||
}})
|
||||
globals.SugarLogger.Debugf("err := %v", err)
|
||||
}
|
||||
|
||||
func TestAbc(t *testing.T) {
|
||||
a := 1001
|
||||
c := float64(a) / float64(100)
|
||||
fmt.Println(c)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,100 @@
|
||||
package tao_vegetable
|
||||
|
||||
import "git.rosy.net.cn/baseapi/utils"
|
||||
|
||||
const (
|
||||
AddStoreCategoryApi = "alibaba.wdk.sku.category.add"
|
||||
)
|
||||
|
||||
const (
|
||||
GeneralMaxLimit = 200 // 大多数的API的批处理最大条数
|
||||
)
|
||||
|
||||
const (
|
||||
ErrCodeSuccess = 0
|
||||
ErrCodeSysErr = 700 // 系统错误,按美团外卖技术支持的说法,可当成需重试的错误
|
||||
ErrCodeParameterFormatWrong = 705 // 参数格式错误
|
||||
ErrCodeAccessLimited = 711 // 接口调用过于频繁,触发流控,请降低调用频率
|
||||
ErrCodeNoAppFood = 805 // 不存在此菜品
|
||||
ErrCodeNoSuchOrder = 806 // 不存在此订单
|
||||
ErrCodeOpFailed = 808 // 操作失败(如订单在操作时,状态已变更等情况)
|
||||
ErrCodeSkuCategoryNotExist = "类目不存在" // 菜品分类不存在
|
||||
ErrCodeSkuCategoryExist = "类目已存在" // 菜品分类已存在
|
||||
ErrCodeCanNotModifyStoreDeliveryInfo = 3018 // 商家已接入美团配送,不可修改门店配送相关信息
|
||||
)
|
||||
|
||||
const (
|
||||
CreateItemTypeNewVegetable = 1 // ( 商品类型(同字段sku_type)1:普通商品、2:加工半成品、3:加工成品、4:原材料、5:耗材;优先使用本字段)
|
||||
CreateIsOnline = 1 // 1是/0否上线
|
||||
CreateSkuStorageType = 242 // 存储条件类型 241=常温,242=冷藏,243=冷冻,635=热链,636=室温,637=鲜活
|
||||
CreateSkuWeightFlagYes = 1 // 1称重商品
|
||||
CreateSkuWeightFlagNo = 0 // 0标品
|
||||
CreateShelfLife = 7 // 保质期7天
|
||||
CreateOfflineSaleFlag = 0 // 门店来控制本门店是否在app上让该商品可见,? 1可见? 0不可见
|
||||
CreateOnlineSaleFlag = 1 // 门店来控制本门店是否在app上让该商品可见,? 1可见? 0不可见
|
||||
UpdateTypeStoke = 1 // 1-全量/2-增量
|
||||
UpdateTypeStokeBillType = 9064 // 外部单据类型,9001大润发 9002欧尚 9003三江 9005 文峰 9007美特好(后面会给个京西的)
|
||||
CreateItemDeliveryStorage = "常温" // 常温、冷藏、冷冻
|
||||
CreateChannelType = "txd" // 渠道类型
|
||||
CreateChannelTypeKey = "ONE_HOUR_STATUS" // 渠道属性key, 取值为"ONE_HOUR_STATUS" 代表小时达,value=0表示不可售, value=1表示可售;"WAVE_ARRIVE_STATUS" 代表波次达,value=0表示不可售,value=1表示可售 */
|
||||
CreateSkuBrandName = "京西菜场" // 品牌名称
|
||||
CreateSkuProducerPlace = "中国" // 产地,默认中国
|
||||
CreateSkuInventoryUnit = "kg" // 库存单位,所有商品默认为kg
|
||||
CreateSkuLeafStatus = "A" // A-正常、T-暂时停购、C-淘汰出清、R-清退、D-删除封挡
|
||||
CreateStorage = "冷藏" // 填常温、冷藏、冷冻、热链、鲜活
|
||||
CreateLabelStyleType = "无价签" // 保质期7天
|
||||
OrderDeliveryTypeTime = 1 // 定时配送
|
||||
OrderDeliveryTypeSelf = 3 // 用户自提
|
||||
ChannelCome = 4 // 3:饿了么 4:盒马&淘鲜达 18:大润发飞牛 19:欧尚外卖 20:商家自有渠道
|
||||
)
|
||||
|
||||
const (
|
||||
TaoVegetableChannelCode = "31" // 渠道编码:2 美团,3 饿了么,26 京东到家,31 翱象淘鲜达,32 翱象共享库存
|
||||
)
|
||||
|
||||
const (
|
||||
ActivityTypeChannel = "1" // 渠道活动
|
||||
ActivityTypeBiz = "2" // 业务活动
|
||||
ActivityTypeMerchant = "3" // 商家erp活动
|
||||
)
|
||||
|
||||
const MAXHandleCount = 20 // 批量处理一次最大数据量
|
||||
|
||||
// 订单状态通知
|
||||
const (
|
||||
OrderStatusNew = "ACCEPTED" // 商户接单
|
||||
OrderStatusPayFinsh = "PAID" // 订单支付完成
|
||||
OrderStatusPickedUp = "PICKED" // 拣货完成
|
||||
OrderStatusCallRider = "PACKAGED" // 打包出库(呼叫骑手,骑手到店,骑手取货)
|
||||
OrderStatusDelivery = "SHIPPING" // 配送中
|
||||
OrderStatusDeliveryOver = "SIGN" // 配送结束
|
||||
OrderStatusUserRejection = "REFUSED" // 用户拒收
|
||||
OrderStatusMerchantCancel = "REJECTED" // 商户取消订单
|
||||
OrderStatusSuccess = "SUCCESS" // 交易完成
|
||||
OrderStatusRefundClose = "CLOSE" // 订单取消
|
||||
)
|
||||
|
||||
// 售后订单通知状态
|
||||
const (
|
||||
OrderStatusApplyAfs = "userApplyAfs" // 用户申请售后
|
||||
OrderStatusCancelAfs = "userCancelAfs" // 用户取消售后
|
||||
// 业务上规定的是打包之后不能取消,但是如果配送超过了预计送达时间1-2小时,c端的取消按钮会自动打开,让用户操作取消,但是如果你没接这个接口,用户申请取消了,你这边没有响应那么就不会退钱给用户,就会造成客诉。为什么不接售中取消呢
|
||||
OrderStatusOnSaleCancel = "userCancelOnSale" // 用户售中取消
|
||||
OrderStatusRefundSuccess = "refundSuccess" // 用户售后成功(退款成功)
|
||||
OrderStatusChange = "orderStatusChange" // 订单状态变化
|
||||
)
|
||||
|
||||
func IsErrCategoryExist(err error) (isExist bool) {
|
||||
return utils.IsErrMatch(err, ErrCodeSkuCategoryExist, nil)
|
||||
}
|
||||
|
||||
func IsErrCategoryNotExist(err error) (isNotExist bool) {
|
||||
return utils.IsErrMatch(err, ErrCodeSkuCategoryNotExist, nil) ||
|
||||
utils.IsErrMatch(err, utils.Int2Str(ErrCodeParameterFormatWrong), []string{
|
||||
"门店内不存在该分类",
|
||||
})
|
||||
}
|
||||
|
||||
func IsErrSkuNotExist(err error) (isExist bool) {
|
||||
return utils.IsErrMatch(err, utils.Int2Str(ErrCodeNoAppFood), nil)
|
||||
}
|
||||
|
||||
@@ -282,6 +282,10 @@ func Float64ToStr(data float64) string {
|
||||
return fmt.Sprint(data)
|
||||
}
|
||||
|
||||
func Float32ToStr(data float32) string {
|
||||
return fmt.Sprint(data)
|
||||
}
|
||||
|
||||
// timestamp is in second
|
||||
func Timestamp2Str(timestamp int64) string {
|
||||
return Time2Str(Timestamp2Time(timestamp))
|
||||
|
||||
Reference in New Issue
Block a user