Files
jx-callback/business/q_bida/q_bida_server.go
邹宗楠 c84b67d67e 1
2022-06-27 18:26:38 +08:00

172 lines
5.4 KiB
Go
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"
"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"
)
// QueryExpressPrice 查询配送价格,获取所有快递价格
func QueryExpressPrice(param *bida.GetExpressPriceReq) (map[string]*bida.GetExpressPriceRes, error) {
if param.Weight <= 0 {
return nil, errors.New("物品重量必须大于0")
}
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 result, nil
}
// CreateWayOrder 创建快递订单
func CreateWayOrder(ctx *jxcontext.Context, param *model.MakeOrderParamReq, userId string) error {
// 检查价格
reallyCannelleFee := param.ChannelFee
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,
ReallyChannelFee: reallyCannelleFee,
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.Images,
IsForward: model.YES,
}
dao.WrapAddIDCULEntity(vendorOrder, ctx.GetUserName())
return dao.CreateEntity(dao.GetDB(), vendorOrder)
}
// CancelWayOrder 取消运单 todo
func CancelWayOrder(param *bida.CancelOrderReq) error {
if err := api.QBiDaAPI.CancelOrder(param); err != nil {
return err
}
// 发起退款
// 修改本地订单状态
return nil
}
// QueryOrderDetail 获取订单详细信息
func QueryOrderDetail(typeCode int, orderNo string) (*bida.OrderDetail, error) {
detail, err := api.QBiDaAPI.GetOrderDetail(&bida.GetOrderDetailReq{
Type: typeCode,
OrderNo: orderNo,
})
if err != nil {
return nil, err
}
// 本地查询获取真是支付快递费用
sql := `SELECT * FROM user_vendor_order a WHERE a.other_way_bill = ? and a.type = ? `
data := &model.UserVendorOrder{}
param := []interface{}{orderNo, typeCode}
if err := dao.GetRow(dao.GetDB(), data, sql, param); err != nil {
return nil, err
}
detail.ExpressFee = utils.Float64ToStr(data.ChannelFee)
return detail, nil
}
// QueryUserOrderList 查询用户订单列表
func QueryUserOrderList(userId string, expressType, orderStatus int, pageNum, pageSize int) {
sql := `
SELECT 
a.type,a.other_way_bill,a.local_way_bill,a.user_id,a.receive_address_id,a.sender_address_id,
a.create_at,a.order_status,a.channel_fee,add.consignee_name send_user_name,add2.consignee_name receive_user_name,
city.col_areaName sender_address,city2.col_areaName receive_address
FROM user_vendor_order a
LEFT JOIN user_delivery_address add ON a.sender_address_id = add.id
LEFT JOIN user_delivery_address add2 ON a.receive_address_id = add2.id
LEFT JOIN jde_city city ON city.clo_tencentAddressCode = add.district_code
LEFT JOIN jde_city city2 ON city2.clo_tencentAddressCode = add2.district_code
WHERE a.user_id = ?
`
param := make([]interface{}, 0, 0)
param = append(param, userId)
if expressType != 0 {
sql = sql + ` a.type = ? `
param = append(param, expressType)
}
if orderStatus != 0 {
sql = sql + ` a.order_status = ? `
param = append(param, orderStatus)
}
sql = sql + ` ORDER BY a.create_at DESC LIMIT ? OFFSET ? `
pageSize = jxutils.FormalizePageSize(pageSize)
param = append(param, pageSize, (pageNum-1)*pageSize)
}