添加下单接口
This commit is contained in:
80
business/model/user_vendor_order.go
Normal file
80
business/model/user_vendor_order.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package model
|
||||
|
||||
import "git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
|
||||
type UserVendorOrder struct {
|
||||
ModelIDCUL
|
||||
UserId string `orm:"size(128);column(user_id);index" json:"userID"` // 用户ID
|
||||
LocalWayBill string `orm:"size(128);column(local_way_bill);index" json:"localWayBill"` // 本地订单ID
|
||||
OtherWayBill string `orm:"size(128);column(other_way_bill);index" json:"otherWayBill"` // 第三方运单ID
|
||||
Goods string `orm:"column(goods)" json:"goods"` // 商品名称
|
||||
GuaranteeValueAmount float64 `orm:"column(guarantee_value_amount)" json:"guaranteeValueAmount"` // 保价金额
|
||||
Weight int `orm:"size(64);column(weight)" json:"weight"` // 重量kg
|
||||
Length int `orm:"size(64);column(length)" json:"length"` // 所有包裹累计长cm
|
||||
Height int `orm:"size(64);column(height)" json:"height"` // 所有包裹累计高cm
|
||||
Width int `orm:"size(64);column(width)" json:"width"` // 所有包裹累计宽cm(向上取整)
|
||||
OrderSendTime string `orm:"size(128);column(orderSendTime)" json:"orderSendTime"` // 预约时间
|
||||
PackageNum int `orm:"size(128);column(package_num)" json:"packageNum"` // 包裹数量
|
||||
ReceiveAddressID int64 `orm:"size(128);column(receive_address_id)" json:"receiveAddressID"` // 收件人地址ID
|
||||
Remark string `orm:"size(512);column(remark)" json:"remark"` // 运单备注
|
||||
SenderAddressID int64 `orm:"size(128);column(sender_address_id)" json:"senderAddressID"` // 寄件人地址ID
|
||||
ThirdPlatform int `orm:"size(16);column(third_platform)" json:"thirdPlatform"` // 第三方平台-京东商家下单传3
|
||||
Type int `orm:"size(8);column(type)" json:"type"` // 快递公司
|
||||
PromiseTimeType int `orm:"size(8);column(promise_Time_type)" json:"promiseTimeType"` // 快递时效产品
|
||||
DeliveryType int `orm:"size(8);column(delivery_type)" json:"deliveryType"` // 产品类型
|
||||
ChannelFee float64 `orm:"column(channel_fee)" json:"channelFee"` // 渠道价
|
||||
ServiceCharge float64 `orm:"column(service_charge)" json:"serviceCharge"` // 服务费
|
||||
GuarantFee float64 `orm:"column(guarant_fee)" json:"guarantFee"` // 保价费用
|
||||
OriginalFee float64 `orm:"column(original_fee)" json:"originalFee"` // 原价
|
||||
Bulk float64 `orm:"column(bulk)" json:"bulk"` // 体积抛比系数
|
||||
Increment float64 `orm:"column(increment)" json:"increment"` // 增值(物流)
|
||||
ChannelType int `orm:"size(8);column(channel_type)" json:"channelType"` // 渠道类型(1-快递,2-物流,3-国际物流,4-整车)
|
||||
OrderStatus int `orm:"size(8);column(order_status)" json:"orderType"` // 订单状态(1-待支付,2-支付失败,3-支付成功,4-取件,5-配送,6-,4-取消)
|
||||
Img string `orm:"text;column(img)" json:"img"` // 包裹图片
|
||||
}
|
||||
|
||||
func (*UserVendorOrder) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"LocalWayBill", "DeletedAt"},
|
||||
[]string{"OtherWayBill", "DeletedAt"},
|
||||
[]string{"CreatedAt", "DeletedAt"},
|
||||
}
|
||||
}
|
||||
|
||||
func (u *UserVendorOrder) CreateVendorOrder() error {
|
||||
return dao.CreateEntity(dao.GetDB(), u)
|
||||
}
|
||||
|
||||
// MakeOrderParamReq 下订单请求参数
|
||||
type MakeOrderParamReq struct {
|
||||
PromiseTimeType int `json:"promiseTimeType"` // 快递时效产品
|
||||
DeliveryType int `json:"deliveryType"` // 产品类型
|
||||
Goods string `json:"goods"` // 商品名称
|
||||
GuaranteeValueAmount float64 `json:"guaranteeValueAmount"` // 保价金额
|
||||
Weight int `json:"weight"` // 重量kg
|
||||
Length int `json:"length"` // 所有包裹累计长cm
|
||||
Height int `json:"height"` // 所有包裹累计高cm
|
||||
Width int `json:"width"` // 所有包裹累计宽cm(向上取整)
|
||||
OrderSendTime string `json:"orderSendTime"` // 预约时间
|
||||
PackageNum int `json:"packageNum"` // 包裹数量
|
||||
ReceiveAddressId int64 `json:"receiveAddressId"` // 收件人ID
|
||||
ReceiveAddress string `json:"receiveAddress"` // 收件人地址
|
||||
ReceiveName string `json:"receiveName"` // 收件人姓名
|
||||
ReceivePhone string `json:"receivePhone"` // 收件人手机号
|
||||
Remark string `json:"remark"` // 运单备注
|
||||
SenderAddressID int64 `json:"senderAddressId"` // 寄件人地址Id
|
||||
SenderAddress string `json:"senderAddress"` // 寄件人地址
|
||||
SenderName string `json:"senderName"` // 寄件人姓名
|
||||
SenderPhone string `json:"senderPhone"` // 寄件人手机号
|
||||
ThirdPlatform int `json:"thirdPlatform"` // 第三方平台-京东商家下单传3
|
||||
Type int `json:"type"` // 快递公司
|
||||
ChannelType int `json:"channelType"` // 渠道类型(1-快递,2-物流,3-国际物流,4-整车)
|
||||
Img string `json:"img"` // 包裹图片
|
||||
// 快递费
|
||||
ChannelFee float64 `json:"channel_fee"` // 渠道价
|
||||
Bulk float64 `json:"bulk"` // 体积抛比系数
|
||||
ServiceCharge float64 `json:"service_charge"` // 服务费
|
||||
GuarantFee float64 `json:"guarant_fee"` // 保价费用
|
||||
OriginalFee float64 `json:"original_fee"` // 原价
|
||||
Increment float64 `json:"increment"` // 物流
|
||||
}
|
||||
@@ -2,26 +2,103 @@ package q_bida
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
bida "git.rosy.net.cn/baseapi/platformapi/q_bida"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"time"
|
||||
)
|
||||
|
||||
func QueryExpressPrice(param *bida.GetExpressPriceReq) ([]*bida.GetExpressPriceData, error) {
|
||||
// QueryExpressPrice 查询配送价格,获取所有快递价格
|
||||
func QueryExpressPrice(param *bida.GetExpressPriceReq) (map[string]*bida.GetExpressPriceRes, error) {
|
||||
if param.Weight <= 0 {
|
||||
return nil, errors.New("物品重量必须大于0")
|
||||
}
|
||||
fee, err := api.QBiDaAPI.GetExpressPrice(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 渠道费每公斤加价两毛
|
||||
for _, v := range fee {
|
||||
if v.ChannelFee != 0 {
|
||||
addFee := v.ChannelFee + int64(param.Width*2)
|
||||
v.ChannelFee = addFee
|
||||
result := make(map[string]*bida.GetExpressPriceRes, 0)
|
||||
if param.Type == 0 {
|
||||
// 渠道费每公斤加价两毛
|
||||
for i := 1; i <= 14; i++ {
|
||||
param.Type = i
|
||||
fee, err := api.QBiDaAPI.GetExpressPrice(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if fee.Code != 0 {
|
||||
result[fmt.Sprintf("%d", i)] = fee
|
||||
continue
|
||||
}
|
||||
if fee.Data.ChannelFee != 0 {
|
||||
addFee := fee.Data.ChannelFee + utils.Int2Float64(param.Width*2)
|
||||
fee.Data.ChannelFee = addFee
|
||||
result[fmt.Sprintf("%d", i)] = fee
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fee, err := api.QBiDaAPI.GetExpressPrice(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if fee.Code != 0 {
|
||||
// result[fmt.Sprintf("%d", param.Type)] = fee
|
||||
return nil, errors.New(fee.Msg)
|
||||
}
|
||||
if fee.Data.ChannelFee != 0 {
|
||||
addFee := fee.Data.ChannelFee + utils.Int2Float64(param.Width*2)
|
||||
fee.Data.ChannelFee = addFee
|
||||
result[fmt.Sprintf("%d", param.Type)] = fee
|
||||
}
|
||||
}
|
||||
|
||||
return fee, nil
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// CreateWayOrder 创建快递订单
|
||||
func CreateWayOrder(ctx *jxcontext.Context, param *model.MakeOrderParamReq, userId string) error {
|
||||
// 检查价格
|
||||
if err := checkWayFeeIsTrue(param); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 创建三方订单
|
||||
otherId, err := createOtherOrder(param)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 第三方数据创建成功,则创建本地数据
|
||||
vendorOrder := &model.UserVendorOrder{
|
||||
UserId: userId,
|
||||
LocalWayBill: utils.Int64ToStr(time.Now().Unix()) + userId[:4], // 当前时间秒数加用户ID前四位
|
||||
OtherWayBill: otherId,
|
||||
PromiseTimeType: param.PromiseTimeType,
|
||||
DeliveryType: param.DeliveryType,
|
||||
Goods: param.Goods,
|
||||
GuaranteeValueAmount: param.GuaranteeValueAmount,
|
||||
Weight: param.Weight,
|
||||
Length: param.Length,
|
||||
Height: param.Height,
|
||||
Width: param.Width,
|
||||
OrderSendTime: param.OrderSendTime,
|
||||
PackageNum: param.PackageNum,
|
||||
ReceiveAddressID: param.ReceiveAddressId,
|
||||
Remark: param.Remark,
|
||||
SenderAddressID: param.SenderAddressID,
|
||||
ThirdPlatform: param.ThirdPlatform,
|
||||
Type: param.Type,
|
||||
ChannelFee: param.ChannelFee,
|
||||
ServiceCharge: param.ServiceCharge,
|
||||
GuarantFee: param.GuarantFee,
|
||||
OriginalFee: param.OriginalFee,
|
||||
Bulk: param.Bulk,
|
||||
Increment: param.Increment,
|
||||
ChannelType: param.ChannelType,
|
||||
OrderStatus: model.YES, // 创建
|
||||
Img: param.Img,
|
||||
}
|
||||
dao.WrapAddIDCULEntity(vendorOrder, ctx.GetUserName())
|
||||
return vendorOrder.CreateVendorOrder()
|
||||
}
|
||||
|
||||
61
business/q_bida/q_bida_server_utils.go
Normal file
61
business/q_bida/q_bida_server_utils.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package q_bida
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
bida "git.rosy.net.cn/baseapi/platformapi/q_bida"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
// 检查快递费是否正确
|
||||
func checkWayFeeIsTrue(param *model.MakeOrderParamReq) error {
|
||||
// 检查运费提交是否准确
|
||||
orderWayFee, err := QueryExpressPrice(&bida.GetExpressPriceReq{
|
||||
PromiseTimeType: param.PromiseTimeType,
|
||||
DeliveryType: param.DeliveryType,
|
||||
GoodsValue: param.GuaranteeValueAmount,
|
||||
ReceiveAddress: param.ReceiveAddress,
|
||||
SendAddress: param.SenderAddress,
|
||||
Type: param.Type,
|
||||
Weight: param.Weight,
|
||||
Length: param.Length,
|
||||
Height: param.Height,
|
||||
Width: param.Width,
|
||||
SendPhone: param.SenderPhone,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if fee, ok := orderWayFee[fmt.Sprintf("%d", param.Type)]; !ok || fee.Code != 0 || fee.Data.ChannelFee != param.ChannelFee {
|
||||
return errors.New("价格核算错误,价格不匹配")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 创建QBiDa订单
|
||||
func createOtherOrder(param *model.MakeOrderParamReq) (string, error) {
|
||||
// 创建三方订单
|
||||
return api.QBiDaAPI.CreateOrder(&bida.MakeOrderReq{
|
||||
PromiseTimeType: param.PromiseTimeType,
|
||||
DeliveryType: param.DeliveryType,
|
||||
Goods: param.Goods,
|
||||
GuaranteeValueAmount: param.GuaranteeValueAmount,
|
||||
Weight: param.Weight,
|
||||
Length: param.Length,
|
||||
Height: param.Height,
|
||||
Width: param.Width,
|
||||
OrderSendTime: param.OrderSendTime,
|
||||
PackageNum: param.PackageNum,
|
||||
ReceiveAddress: param.ReceiveAddress,
|
||||
ReceiveName: param.ReceiveName,
|
||||
ReceivePhone: param.ReceivePhone,
|
||||
Remark: param.Remark,
|
||||
SenderAddress: param.SenderAddress,
|
||||
SenderName: param.SenderName,
|
||||
SenderPhone: param.SenderPhone,
|
||||
ThirdPlatform: param.ThirdPlatform,
|
||||
Type: param.Type,
|
||||
Img: param.Img,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user