diff --git a/platformapi/dadaapi/order_test.go b/platformapi/dadaapi/order_test.go index baf01519..d0c5df04 100644 --- a/platformapi/dadaapi/order_test.go +++ b/platformapi/dadaapi/order_test.go @@ -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) } diff --git a/platformapi/ebaiapi/order_test.go b/platformapi/ebaiapi/order_test.go index de52bf60..afa5ac7a 100644 --- a/platformapi/ebaiapi/order_test.go +++ b/platformapi/ebaiapi/order_test.go @@ -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 { diff --git a/platformapi/mtwmapi/order.go b/platformapi/mtwmapi/order.go index a7bde754..21ad0af2 100644 --- a/platformapi/mtwmapi/order.go +++ b/platformapi/mtwmapi/order.go @@ -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, diff --git a/platformapi/tao_vegetable/api_model.go b/platformapi/tao_vegetable/api_model.go index 6f184802..8b81434e 100644 --- a/platformapi/tao_vegetable/api_model.go +++ b/platformapi/tao_vegetable/api_model.go @@ -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(), + } +} diff --git a/platformapi/tao_vegetable/api_token.go b/platformapi/tao_vegetable/api_token.go index ad82c17a..12e84afb 100644 --- a/platformapi/tao_vegetable/api_token.go +++ b/platformapi/tao_vegetable/api_token.go @@ -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 } diff --git a/platformapi/tao_vegetable/order_afs.go b/platformapi/tao_vegetable/order_afs.go index 1a9d78c9..2cf1d047 100644 --- a/platformapi/tao_vegetable/order_afs.go +++ b/platformapi/tao_vegetable/order_afs.go @@ -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) diff --git a/platformapi/tao_vegetable/order_delivery.go b/platformapi/tao_vegetable/order_delivery.go index 00327fe7..0dbe3079 100644 --- a/platformapi/tao_vegetable/order_delivery.go +++ b/platformapi/tao_vegetable/order_delivery.go @@ -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) diff --git a/platformapi/tao_vegetable/order_test.go b/platformapi/tao_vegetable/order_test.go new file mode 100644 index 00000000..c9e68196 --- /dev/null +++ b/platformapi/tao_vegetable/order_test.go @@ -0,0 +1,7 @@ +package tao_vegetable + +import "testing" + +func TestName(t *testing.T) { + +} diff --git a/platformapi/tao_vegetable/store_categary.go b/platformapi/tao_vegetable/store_categary.go index b48e144d..160cc291 100644 --- a/platformapi/tao_vegetable/store_categary.go +++ b/platformapi/tao_vegetable/store_categary.go @@ -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 +} diff --git a/platformapi/tao_vegetable/store_model.go b/platformapi/tao_vegetable/store_model.go index 818f74db..43617c09 100644 --- a/platformapi/tao_vegetable/store_model.go +++ b/platformapi/tao_vegetable/store_model.go @@ -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"` } diff --git a/platformapi/tao_vegetable/store_sku.go b/platformapi/tao_vegetable/store_sku.go index 3ca863ce..976dbfb7 100644 --- a/platformapi/tao_vegetable/store_sku.go +++ b/platformapi/tao_vegetable/store_sku.go @@ -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) diff --git a/platformapi/tao_vegetable/store_sku_test.go b/platformapi/tao_vegetable/store_sku_test.go new file mode 100644 index 00000000..5e54d230 --- /dev/null +++ b/platformapi/tao_vegetable/store_sku_test.go @@ -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, ",")) +} diff --git a/platformapi/tao_vegetable/store_test.go b/platformapi/tao_vegetable/store_test.go index d5f8e11b..31552f0c 100644 --- a/platformapi/tao_vegetable/store_test.go +++ b/platformapi/tao_vegetable/store_test.go @@ -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) +} diff --git a/platformapi/tao_vegetable/tao_consts.go b/platformapi/tao_vegetable/tao_consts.go index ac30674c..ca4de4a1 100644 --- a/platformapi/tao_vegetable/tao_consts.go +++ b/platformapi/tao_vegetable/tao_consts.go @@ -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) +} diff --git a/utils/typeconv.go b/utils/typeconv.go index 13b812cc..4efdb34a 100644 --- a/utils/typeconv.go +++ b/utils/typeconv.go @@ -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))