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 } // 第三方数据创建成功,则创建本地数据 vendorOrder := &model.UserVendorOrder{ UserId: userId, LocalWayBill: utils.Int64ToStr(time.Now().Unix()) + userId[:4], // 当前时间秒数加用户ID前四位 OtherWayBill: utils.Int64ToStr(time.Now().Unix()) + userId[:4], 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: 2, // 创建待支付 Img: param.Images, IsForward: model.YES, // } // 事务创建待支付运单,和待支付order db := dao.GetDB() tdb, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { dao.Rollback(db, tdb) panic(r) } }() // 添加运单表 dao.WrapAddIDCULEntity(vendorOrder, ctx.GetUserName()) if err := dao.CreateEntity(db, vendorOrder); err != nil { dao.Rollback(db, tdb) return err } // 添加待支付订单表 orderPayStatus := &model.Order{ OrderID: vendorOrder.LocalWayBill, UserID: vendorOrder.UserId, Type: model.OrderTypePay, OrderType: model.PayType4Express, Way: "", Status: model.OrderTypeCash, // 待支付状态 PayPrice: int(vendorOrder.ChannelFee * 100), TransactionID: "", PayFinishedAt: time.Time{}, PrepayID: "", OriginalData: "", Comment: "", Lng: 0, Lat: 0, CityCode: 0, DistrictCode: 0, Address: "", PayMethod: 0, } if err := dao.CreateEntity(db, orderPayStatus); err != nil { dao.Rollback(db, tdb) return err } dao.Commit(db, tdb) return nil } // 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) ([]*model.UserOrderList, error) { 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) // 获取数据 result := make([]*model.UserOrderList, 0, 0) if err := dao.GetRows(dao.GetDB(), result, sql, param...); err != nil { return nil, err } return result, nil } // CreateOrder2QBiDa 订单回调成功,且为运费支付时使用该接口 func CreateOrder2QBiDa(orderId string) { // 加载订单 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 } // 创建QBIDA订单 otherId, err := createOtherOrder(&bida.MakeOrderReq{ PromiseTimeType: order.PromiseTimeType, DeliveryType: order.DeliveryType, Goods: order.Goods, GuaranteeValueAmount: order.GuaranteeValueAmount, Weight: order.Weight, Length: order.Length, Height: order.Height, Width: order.Width, OrderSendTime: order.OrderSendTime, PackageNum: order.PackageNum, Remark: order.Remark, ThirdPlatform: order.ThirdPlatform, Type: order.Type, Img: order.Img, // //ReceiveAddress: order.ReceiveAddressID, //ReceiveName: "", //ReceivePhone: "", //SenderAddress: "", //SenderName: "", //SenderPhone: "", }) // 获取发货地址以及送货地址 if err != nil { return err } order.OrderStatus = model.PayStatusYes + 3 // 支付成功 }