物流笑嘻嘻

This commit is contained in:
邹宗楠
2022-06-29 15:59:47 +08:00
parent 301a430666
commit 4e5246cbda
12 changed files with 509 additions and 308 deletions

View File

@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
bida "git.rosy.net.cn/baseapi/platformapi/q_bida"
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
@@ -93,7 +94,7 @@ func CreateWayOrder(ctx *jxcontext.Context, param *model.MakeOrderParamReq, user
Bulk: param.Bulk,
Increment: param.Increment,
ChannelType: param.ChannelType,
OrderStatus: 2, // 创建待支付
OrderStatus: model.OrderStatusWaitPay, // 创建待支付
Img: param.Images,
IsForward: model.YES, //
}
@@ -121,7 +122,7 @@ func CreateWayOrder(ctx *jxcontext.Context, param *model.MakeOrderParamReq, user
Type: model.OrderTypePay,
OrderType: model.PayType4Express,
Way: "",
Status: model.OrderTypeCash, // 待支付状态
Status: model.OrderStatusWaitPay, // 待支付状态
PayPrice: int(vendorOrder.ChannelFee * 100),
TransactionID: "",
PayFinishedAt: time.Time{},
@@ -145,13 +146,54 @@ func CreateWayOrder(ctx *jxcontext.Context, param *model.MakeOrderParamReq, user
}
// CancelWayOrder 取消运单 todo
func CancelWayOrder(param *bida.CancelOrderReq) error {
if err := api.QBiDaAPI.CancelOrder(param); err != nil {
func CancelWayOrder(ctx *jxcontext.Context, userId string, param *bida.CancelOrderReq) error {
// 查询订单
order := &model.UserVendorOrder{UserId: userId, OtherWayBill: param.OrderNo}
if err := dao.GetEntity(dao.GetDB(), order, "UserId", "OtherWayBill"); err != nil {
return err
}
// 发起退款
// 修改本地订单状态
// 待支付或者支付失败
switch order.OrderStatus {
case model.OrderStatusFailPay, model.OrderStatusWaitPay: // 待支付订单或者支付失败订单不需要退款取消本地订单以及order记录表
db := dao.GetDB()
tx, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
panic(r)
}
}()
order.OrderStatus = model.OrderStatusCancel
if _, err := dao.UpdateEntityTx(tx, order, "OrderStatus"); err != nil {
tx.Rollback()
return err
}
if _, err := dao.UpdateEntityTx(tx, &model.Order{OrderID: param.OrderNo, UserID: userId, Status: model.OrderStatusCancel}, "Status"); err != nil {
tx.Rollback()
return err
}
tx.Commit()
case model.OrderStatusSuccessPay: // 支付成功,取消三方订单,本地转取消状态,,原路退款
// 发起QBiDa取消过去取消通过则取消本地不通过则不予取消!
if err := api.QBiDaAPI.CancelOrder(param); err != nil {
return err
}
// 暂时考虑余额支付渠道加载order表判断支付渠道方式
orderWay := &model.Order{OrderID: param.OrderNo, UserID: userId}
if err := dao.GetEntity(dao.GetDB(), orderWay, "OrderID", "UserID"); err != nil {
return err
}
if orderWay.PayMethod == 1 { // 余额支付
// 支付方式为余额支付则需要修改order/userVendorOrder修改订单状态给用户账户价钱生成一个价钱数据
} else if orderWay.PayMethod == 2 { // 微信支付
// 微信支付原路退款,发起退款申请
_, err := RefundOrderByTL(ctx, orderWay, order.OtherWayBill, int(order.ChannelFee*100), "申请退款")
return err
}
}
return nil
}
@@ -183,12 +225,12 @@ func QueryUserOrderList(userId string, expressType, orderStatus int, pageNum, pa
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
district.name sender_address,city.name 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
LEFT JOIN place district ON district.code = add.district_code
LEFT JOIN place city ON city.code = add2.district_code
WHERE a.user_id = ?
`
param := make([]interface{}, 0, 0)
@@ -214,16 +256,16 @@ func QueryUserOrderList(userId string, expressType, orderStatus int, pageNum, pa
}
// CreateOrder2QBiDa 订单回调成功,且为运费支付时使用该接口
func CreateOrder2QBiDa(orderId string) {
func CreateOrder2QBiDa(orderId string) error {
// 加载订单
order := &model.UserVendorOrder{}
sql := `SELECT * FROM user_vendor_order WHERE local_way_bill = ? `
if err := dao.GetRow(dao.GetDB(), order, sql, []interface{}{orderId}...); err != nil {
return
return err
}
// 创建QBIDA订单
otherId, err := createOtherOrder(&bida.MakeOrderReq{
makeOrder := &bida.MakeOrderReq{
PromiseTimeType: order.PromiseTimeType,
DeliveryType: order.DeliveryType,
Goods: order.Goods,
@@ -238,20 +280,110 @@ func CreateOrder2QBiDa(orderId string) {
ThirdPlatform: order.ThirdPlatform,
Type: order.Type,
Img: order.Img,
//
//ReceiveAddress: order.ReceiveAddressID,
//ReceiveName: "",
//ReceivePhone: "",
//SenderAddress: "",
//SenderName: "",
//SenderPhone: "",
})
}
// 获取发货地址以及送货地址
// GetAddressDetail 获取配送地址详情
sendAddress, err := dao.GetAddressDetail(int(order.SenderAddressID))
if err != nil {
return err
}
makeOrder.SenderAddress = sendAddress.AutoAddress
makeOrder.SenderName = sendAddress.ConsigneeName
makeOrder.SenderPhone = sendAddress.ConsigneeMobile
receiveAddress, err := dao.GetAddressDetail(int(order.ReceiveAddressID))
if err != nil {
return err
}
makeOrder.ReceiveAddress = receiveAddress.AutoAddress
makeOrder.ReceiveName = receiveAddress.ConsigneeName
makeOrder.ReceivePhone = receiveAddress.ConsigneeMobile
otherId, err := createOtherOrder(makeOrder)
if err != nil {
return err
}
order.OrderStatus = model.PayStatusYes + 3 // 支付成功
//order.OrderStatus = model.OrderStatusSuccessPay // 支付成功
order.OtherWayBill = otherId
order.OrderStatus = model.OrderStatusWaitPickup
order.UpdatedAt = time.Now()
if _, err = dao.UpdateEntity(dao.GetDB(), order, "UserId", "LocalWayBill"); err != nil {
return err
}
return nil
}
// RefundOrderByTL 发起取消订单
func RefundOrderByTL(ctx *jxcontext.Context, orderPay *model.Order, refundID string, refundFee int, refundDesc string) (orderPayRefund *model.OrderPayRefund, err error) {
result, err := api.TLpayAPI.PayRefund(&tonglianpayapi.PayRefundParam{
Trxamt: refundFee,
Reqsn: utils.GetUUID(),
Remark: refundDesc,
OldTrxID: orderPay.TransactionID,
})
if err == nil {
orderPayRefund = &model.OrderPayRefund{
RefundID: refundID,
VendorRefundID: result.TrxID,
VendorOrderID: orderPay.OrderID, //本地生成Id
Status: model.RefundStatusNo,
TransactionID: orderPay.TransactionID, // 支付事务id
RefundFee: refundFee,
RefundCreatedAt: time.Now(),
}
dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName())
db := dao.GetDB()
if result.TrxStatus == tonglianpayapi.TrxStatusSuccess {
orderPayRefund.Status = model.RefundStatusYes
} else {
orderPayRefund.Status = model.RefundStatusFailed
}
orderPayRefund.OriginalData = utils.Format4Output(result, true)
dao.CreateEntity(db, orderPayRefund)
//orderPay.Status = model.OrderStatusCancel
//dao.UpdateEntity(db, orderPay)
}
return orderPayRefund, err
}
// ManagerGetOrderList 管理系统查询订单列表
func ManagerGetOrderList(param *model.OrderListReq) ([]*model.UserVendorOrder, error) {
sql := `SELECT * FROM user_vendor_order uo WHERE 1=1 `
paramSql := make([]interface{}, 0, 0)
result := make([]*model.UserVendorOrder, 0, 0)
if param.OrderNo != "" {
sql += `AND (uo.local_way_bill = ? OR uo.other_way_bill = ? )`
paramSql = append(paramSql, param.OrderNo, param.OrderNo)
if err := dao.GetRows(dao.GetDB(), result, sql, paramSql...); err != nil {
return nil, err
}
return result, nil
}
if param.StartTime.IsZero() && param.EndTime.IsZero() {
sql += `AND ou.created_at >= ? AND ou.created_at <= ? `
paramSql = append(paramSql, param.StartTime, param.EndTime)
}
if param.ExpressType != 0 {
sql += `AND ou.type = ? `
paramSql = append(paramSql, param.ExpressType)
}
if param.OrderStatus != 0 {
sql += `AND ou.order_status = ? `
paramSql = append(paramSql, param.OrderStatus)
}
if param.PageNum == 0 {
param.PageNum = 1
}
if param.PageSize == 0 {
param.PageSize = 10
}
sql += ` ORDER BY uo.created_at DESC LIMIT ? OFFSET ? `
paramSql = append(paramSql, param.PageSize, (param.PageNum-1)*param.PageSize)
if err := dao.GetRows(dao.GetDB(), result, sql, paramSql...); err != nil {
return nil, err
}
return result, nil
}