package fn import ( "time" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/partner/delivery" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/baseapi/platformapi/fnpsapi" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals/api" ) var ( curDeliveryHandler *DeliveryHandler ) type DeliveryHandler struct { } func init() { if api.FnAPI != nil { curDeliveryHandler = new(DeliveryHandler) partner.RegisterDeliveryPlatform(curDeliveryHandler, true) } } func (c *DeliveryHandler) GetVendorID() int { return model.VendorIDFengNiao } func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) { err = api.FnAPI.CancelOrder(&fnpsapi.CancelOrderParam{ PartnerOrderCode: bill.VendorOrderID, OrderCancelReasonCode: 1, //用户取消 OrderCancelCode: fnpsapi.OrderCancelReson8, OrderCancelTime: time.Now().UnixNano() / 1e6, }) return err } func (c *DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, resonContent string) (err error) { return err } func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) { var ( db = dao.GetDB() ) storeDetail, err := dao.GetStoreDetail(db, order.StoreID, order.VendorID, order.VendorOrgCode) deliveryFee, _, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db) if err == nil { if err = delivery.CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee, order, model.VendorIDFengNiao); err != nil { return nil, err } params := &fnpsapi.CreateOrderParam{ PartnerOrderCode: order.VendorOrderID, NotifyURL: globals.FnNotifyURL, ChainStoreCode: order.VendorStoreID, OrderType: 1, //即时达 TransportInfo: &fnpsapi.TransportInfo{ TransportName: order.StoreName, TransportAddress: storeDetail.Address, TransportLongitude: jxutils.IntCoordinate2Standard(storeDetail.Lng), TransportLatitude: jxutils.IntCoordinate2Standard(storeDetail.Lat), PositionSource: 3, TransportTel: storeDetail.Tel1, }, OrderAddTime: order.OrderCreatedAt.UnixNano() / 1e6, OrderTotalAmount: jxutils.IntPrice2Standard(order.SalePrice), OrderActualAmount: jxutils.IntPrice2Standard(order.ActualPayPrice), OrderWeight: float64(jxutils.IntWeight2Float(order.Weight)), OrderRemark: utils.FilterMb4("客户电话:" + order.ConsigneeMobile + "," + order.BuyerComment + ",取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!"), IsInvoiced: 0, OrderPaymentStatus: 1, OrderPaymentMethod: 1, IsAgentPayment: 0, GoodsCount: order.GoodsCount, ReceiverInfo: &fnpsapi.ReceiverInfo{ ReceiverName: order.ConsigneeName, ReceiverAddress: order.ConsigneeAddress, ReceiverLongitude: jxutils.IntCoordinate2Standard(order.ConsigneeLng), ReceiverLatitude: jxutils.IntCoordinate2Standard(order.ConsigneeLat), ReceiverPrimaryPhone: order.ConsigneeMobile, ReceiverSecondPhone: order.ConsigneeMobile2, PositionSource: 3, }, SerialNumber: model.VendorNames[order.VendorID] + " #" + utils.Int2Str(order.OrderSeq), } var skuInfo []*fnpsapi.ItemsJSON for _, v := range order.Skus { skuInfo = append(skuInfo, &fnpsapi.ItemsJSON{ ItemID: utils.Int2Str(v.SkuID), ItemName: v.SkuName, ItemQuantity: v.Count, ItemPrice: jxutils.IntPrice2Standard(v.SalePrice), ItemActualPrice: jxutils.IntPrice2Standard(v.SalePrice), }) } params.ItemsJSON = skuInfo //要求饿百的订单要传来源 if order.VendorID == model.VendorIDEBAI { params.OrderSource = "109" params.ChannelOrderCode = order.VendorOrderID } err = api.FnAPI.CreateOrder(params) } return bill, err } func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) { return deliveryFeeInfo, err } func OnWaybillMsg(msg *fnpsapi.WayBillInfo) { order := &model.Waybill{ VendorWaybillID: msg.PartnerOrderCode, VendorWaybillID2: msg.PartnerOrderCode, WaybillVendorID: model.VendorIDFengNiao, CourierName: msg.CarrierDriverName, CourierMobile: msg.CarrierDriverPhone, VendorStatus: utils.Int2Str(msg.OrderStatus), StatusTime: utils.Timestamp2Time(msg.PushTime), Remark: msg.Description, } order.VendorOrderID, order.OrderVendorID = jxutils.SplitUniversalOrderID(msg.PartnerOrderCode) switch msg.OrderStatus { case fnpsapi.OrderStatusAccept: order.Status = model.WaybillStatusAccepted case fnpsapi.OrderStatusAssigned: order.Status = model.WaybillStatusCourierAssigned case fnpsapi.OrderStatusArrived: order.Status = model.WaybillStatusCourierArrived case fnpsapi.OrderStatusDelivering: order.Status = model.WaybillStatusDelivering case fnpsapi.OrderStatusDelivered: order.Status = model.WaybillStatusDelivered case fnpsapi.OrderStatusException: order.Status = model.WaybillStatusDeliverFailed default: globals.SugarLogger.Warnf("onWaybillMsg unknown msg:%v", msg) } partner.CurOrderManager.OnWaybillStatusChanged(order) }