京东eclp物流对接
This commit is contained in:
@@ -103,6 +103,7 @@ type GoodsOrder struct {
|
|||||||
InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码
|
InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码
|
||||||
InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱
|
InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱
|
||||||
VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
||||||
|
FromStoreID int `orm:"column(from_store_id)" json:"fromStoreID"` //物料配送门店
|
||||||
|
|
||||||
// 以下只是用于传递数据
|
// 以下只是用于传递数据
|
||||||
OriginalData string `orm:"-" json:"-"`
|
OriginalData string `orm:"-" json:"-"`
|
||||||
|
|||||||
@@ -157,8 +157,8 @@ func GetMyOrderCountInfo(ctx *jxcontext.Context, fromDate, toDate time.Time, sta
|
|||||||
return countInfo, err
|
return countInfo, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, createType int) (outJxOrder *JxOrderInfo, err error) {
|
func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, createType int, fromStoreID int) (outJxOrder *JxOrderInfo, err error) {
|
||||||
outJxOrder, deliveryAddress, err := generateOrder(ctx, jxOrder, addressID)
|
outJxOrder, deliveryAddress, err := generateOrder(ctx, jxOrder, addressID, fromStoreID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -360,7 +360,7 @@ func isTimeInOpTime(openTime1, closeTime1, openTime2, closeTime2 int16, time2Che
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64) (outJxOrder *JxOrderInfo, deliveryAddress *dao.UserDeliveryAddressEx, err error) {
|
func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, fromStoreID int) (outJxOrder *JxOrderInfo, deliveryAddress *dao.UserDeliveryAddressEx, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if jxOrder.StoreID == 0 {
|
if jxOrder.StoreID == 0 {
|
||||||
return nil, nil, fmt.Errorf("没有指定门店信息")
|
return nil, nil, fmt.Errorf("没有指定门店信息")
|
||||||
@@ -381,6 +381,14 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
if distance := jxutils.Point2StoreDistance(deliveryAddress.Lng, deliveryAddress.Lat, storeDetail.Lng, storeDetail.Lat, storeDetail.DeliveryRangeType, storeDetail.DeliveryRange); distance == 0 {
|
if distance := jxutils.Point2StoreDistance(deliveryAddress.Lng, deliveryAddress.Lat, storeDetail.Lng, storeDetail.Lat, storeDetail.DeliveryRangeType, storeDetail.DeliveryRange); distance == 0 {
|
||||||
return nil, nil, fmt.Errorf("当前送货地址不在门店%s的配送范围", storeDetail.Name)
|
return nil, nil, fmt.Errorf("当前送货地址不在门店%s的配送范围", storeDetail.Name)
|
||||||
}
|
}
|
||||||
|
//表示此订单为物料配送订单
|
||||||
|
if fromStoreID != 0 {
|
||||||
|
storeDetail2, err2 := dao.GetStoreDetail(db, fromStoreID, model.VendorIDJX)
|
||||||
|
if err = err2; err != nil {
|
||||||
|
return nil, nil, fmt.Errorf("fromStoreID有误,[%v]", fromStoreID)
|
||||||
|
}
|
||||||
|
deliveryAddress.ConsigneeName = storeDetail2.Name
|
||||||
|
}
|
||||||
|
|
||||||
// 营业状态及时间检查
|
// 营业状态及时间检查
|
||||||
if storeDetail.Status != model.StoreStatusOpened { // model.StoreStatusDisabled {
|
if storeDetail.Status != model.StoreStatusOpened { // model.StoreStatusDisabled {
|
||||||
@@ -571,7 +579,68 @@ func AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList
|
|||||||
}
|
}
|
||||||
|
|
||||||
func PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
|
func PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
|
||||||
return changeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "")
|
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "")
|
||||||
|
err = orderSolutionForWuLiao(order)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
|
||||||
|
if order.FromStoreID != 0 {
|
||||||
|
// var (
|
||||||
|
// goodsNos []string
|
||||||
|
// prices []int
|
||||||
|
// quantities []int
|
||||||
|
// db = dao.GetDB()
|
||||||
|
// )
|
||||||
|
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusDelivering, "")
|
||||||
|
// goods, err := dao.QueryOrders(db, order.VendorOrderID, -1, []int{model.VendorIDJX}, -1, utils.ZeroTimeValue, utils.ZeroTimeValue)
|
||||||
|
// if err != nil || len(goods) == 0 {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// for _, v := range goods[0].Skus {
|
||||||
|
// skus, err := dao.GetSkus(db, []int{v.SkuID}, nil, nil, nil)
|
||||||
|
// if err != nil || len(skus) == 0 {
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
// goodsNos = append(goodsNos, skus[0].EclpID)
|
||||||
|
// prices = append(prices, 0)
|
||||||
|
// quantities = append(quantities, v.Count)
|
||||||
|
// }
|
||||||
|
// result, err := api.JdEclpAPI.AddOrder(&jdeclpapi.AddOrderParam{
|
||||||
|
// IsvUUID: order.VendorOrderID,
|
||||||
|
// IsvSource: jdeclpapi.IsvSource,
|
||||||
|
// ShopNo: jdeclpapi.ShopNo,
|
||||||
|
// DepartmentNo: jdeclpapi.DepartmentNo,
|
||||||
|
// WarehouseNo: jdeclpapi.WarehouseNo,
|
||||||
|
// SalesPlatformOrderNo: order.VendorOrderID,
|
||||||
|
// SalePlatformSource: "",
|
||||||
|
// ConsigneeName: order.ConsigneeName,
|
||||||
|
// ConsigneeMobile: order.ConsigneeMobile,
|
||||||
|
// ConsigneeAddress: order.ConsigneeAddress,
|
||||||
|
// OrderMark: jdeclpapi.OrderMark,
|
||||||
|
// GoodsNo: goodsNos,
|
||||||
|
// Price: prices,
|
||||||
|
// Quantity: quantities,
|
||||||
|
// })
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// wayBill := &model.Waybill{
|
||||||
|
// VendorOrderID: order.VendorOrderID,
|
||||||
|
// OrderVendorID: model.VendorIDJX,
|
||||||
|
// VendorWaybillID: result.EclpSoNo,
|
||||||
|
// WaybillVendorID: model.VendorIDJD,
|
||||||
|
// CourierName: "京东物流",
|
||||||
|
// CourierMobile: "",
|
||||||
|
// Status: model.WaybillStatusNew,
|
||||||
|
// VendorStatus: utils.Int2Str(model.WaybillStatusDelivering),
|
||||||
|
// WaybillCreatedAt: utils.DefaultTimeValue,
|
||||||
|
// WaybillFinishedAt: utils.DefaultTimeValue,
|
||||||
|
// StatusTime: time.Now(),
|
||||||
|
// }
|
||||||
|
// dao.CreateEntity(db, wayBill)
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) {
|
func SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) {
|
||||||
|
|||||||
@@ -170,6 +170,10 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
|
|||||||
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
||||||
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
||||||
|
|
||||||
|
jdEclpAccessToken = ""
|
||||||
|
jdEclpAppKey = ""
|
||||||
|
jdEclpAppSecret = ""
|
||||||
|
|
||||||
elmIsProd = true
|
elmIsProd = true
|
||||||
elmToken = ""
|
elmToken = ""
|
||||||
elmAppKey = "KLRDcOZGrk"
|
elmAppKey = "KLRDcOZGrk"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ type JxOrderController struct {
|
|||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
// @Param jxOrder formData string true "订单信息"
|
// @Param jxOrder formData string true "订单信息"
|
||||||
// @Param addressID formData int64 true "配送地址ID"
|
// @Param addressID formData int64 true "配送地址ID"
|
||||||
|
// @Param fromStoreID formData int fasle "物料配送门店"
|
||||||
// @Param createType formData int false "创建类型, 0:预创建, 1:创建"
|
// @Param createType formData int false "创建类型, 0:预创建, 1:创建"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
// @Failure 200 {object} controllers.CallResult
|
// @Failure 200 {object} controllers.CallResult
|
||||||
@@ -24,7 +25,7 @@ func (c *JxOrderController) CreateOrder() {
|
|||||||
c.callCreateOrder(func(params *tJxorderCreateOrderParams) (retVal interface{}, errCode string, err error) {
|
c.callCreateOrder(func(params *tJxorderCreateOrderParams) (retVal interface{}, errCode string, err error) {
|
||||||
var jxOrder *localjx.JxOrderInfo
|
var jxOrder *localjx.JxOrderInfo
|
||||||
if err = utils.UnmarshalUseNumber([]byte(params.JxOrder), &jxOrder); err == nil {
|
if err = utils.UnmarshalUseNumber([]byte(params.JxOrder), &jxOrder); err == nil {
|
||||||
retVal, err = localjx.CreateOrder(params.Ctx, jxOrder, int64(params.AddressID), params.CreateType)
|
retVal, err = localjx.CreateOrder(params.Ctx, jxOrder, int64(params.AddressID), params.CreateType, params.FromStoreID)
|
||||||
}
|
}
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package api
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/jdeclpapi"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
|
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
|
||||||
|
|
||||||
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
|
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
|
||||||
@@ -40,6 +42,7 @@ var (
|
|||||||
|
|
||||||
Jd2API *jdapi.API
|
Jd2API *jdapi.API
|
||||||
FakeJdAPI *jdapi.API
|
FakeJdAPI *jdapi.API
|
||||||
|
JdEclpAPI *jdeclpapi.API
|
||||||
|
|
||||||
ElmAPI *elmapi.API
|
ElmAPI *elmapi.API
|
||||||
EbaiAPI *ebaiapi.API
|
EbaiAPI *ebaiapi.API
|
||||||
@@ -104,6 +107,11 @@ func Init() {
|
|||||||
} else {
|
} else {
|
||||||
JdAPI = nil
|
JdAPI = nil
|
||||||
}
|
}
|
||||||
|
if !beego.AppConfig.DefaultBool("disableJdEclp", false) {
|
||||||
|
JdEclpAPI = jdeclpapi.New(beego.AppConfig.String("jdEclpAccessToken"), beego.AppConfig.String("jdEclpAppKey"), beego.AppConfig.String("jdEclpAppSecret"))
|
||||||
|
} else {
|
||||||
|
JdEclpAPI = nil
|
||||||
|
}
|
||||||
if !beego.AppConfig.DefaultBool("disableElm", false) {
|
if !beego.AppConfig.DefaultBool("disableElm", false) {
|
||||||
ElmAPI = elmapi.New(beego.AppConfig.DefaultString("elmToken", ""), beego.AppConfig.String("elmAppKey"), beego.AppConfig.String("elmSecret"), beego.AppConfig.DefaultBool("elmIsProd", false))
|
ElmAPI = elmapi.New(beego.AppConfig.DefaultString("elmToken", ""), beego.AppConfig.String("elmAppKey"), beego.AppConfig.String("elmSecret"), beego.AppConfig.DefaultBool("elmIsProd", false))
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user