|
|
|
|
@@ -1,12 +1,19 @@
|
|
|
|
|
package uupt
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
|
|
|
|
|
"git.rosy.net.cn/baseapi/platformapi/uuptapi"
|
|
|
|
|
"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/business/partner"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/partner/delivery"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/globals"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/globals/api"
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
@@ -96,48 +103,196 @@ func (d DeliveryHandler) GetVendorID() int {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) CreateStore(ctx *jxcontext.Context, storeDetail *dao.StoreDetail2) (vendorStoreID string, status int, err error) {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
return "", 0, fmt.Errorf("uu跑腿暂不支持此操作")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) GetStore(ctx *jxcontext.Context, storeID int, vendorStoreID string) (storeDetail *dao.StoreDetail2, err error) {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
//uu跑腿无门店概念
|
|
|
|
|
store, err := dao.GetStoreDetail(dao.GetDB(), utils.Str2Int(vendorStoreID), model.VendorIDUUPT, "")
|
|
|
|
|
if err == nil {
|
|
|
|
|
storeDetail = &dao.StoreDetail2{
|
|
|
|
|
Store: model.Store{
|
|
|
|
|
Name: store.Name,
|
|
|
|
|
Tel1: store.Tel1,
|
|
|
|
|
Address: store.Address,
|
|
|
|
|
Lat: store.Lat,
|
|
|
|
|
Lng: store.Lng,
|
|
|
|
|
},
|
|
|
|
|
VendorID: model.VendorIDUUPT,
|
|
|
|
|
VendorStoreID: utils.Int2Str(storeID),
|
|
|
|
|
CourierStatus: model.StoreStatusOpened,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return storeDetail, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) IsErrStoreNotExist(err error) bool {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) IsErrStoreExist(err error) bool {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
//获取金额令牌,实际需要支付金额
|
|
|
|
|
price, err := getOrderPrice(order)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
param := map[string]interface{}{
|
|
|
|
|
"price_token": price.PriceToken,
|
|
|
|
|
"order_price": price.TotalMoney,
|
|
|
|
|
"balance_paymoney": price.NeedPayMoney,
|
|
|
|
|
"receiver": order.ConsigneeName,
|
|
|
|
|
"receiver_phone": order.ConsigneeMobile,
|
|
|
|
|
"callback_url": uuptapi.WaybillCallbackURL,
|
|
|
|
|
"push_type": uuptapi.PushTypeOpen,
|
|
|
|
|
"special_type": uuptapi.SpecialTypeNo,
|
|
|
|
|
"callme_withtake": uuptapi.CallMeWithTakeYes,
|
|
|
|
|
}
|
|
|
|
|
if orderCode, originID, err := api.UuAPI.AddOrder(param); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
} else {
|
|
|
|
|
bill = &model.Waybill{
|
|
|
|
|
VendorOrderID: order.VendorOrderID,
|
|
|
|
|
OrderVendorID: order.VendorID,
|
|
|
|
|
VendorWaybillID: orderCode,
|
|
|
|
|
VendorWaybillID2: originID,
|
|
|
|
|
WaybillVendorID: model.VendorIDUUPT,
|
|
|
|
|
DesiredFee: utils.Str2Int64(price.NeedPayMoney),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
delivery.OnWaybillCreated(bill)
|
|
|
|
|
return bill, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
|
|
|
|
//if err = api.UuAPI.CancelOrder(bill.VendorWaybillID, uuptapi.CancelReasonNormal); err != nil {
|
|
|
|
|
//
|
|
|
|
|
//}
|
|
|
|
|
if err = api.UuAPI.CancelOrder(bill.VendorWaybillID, uuptapi.CancelReasonNormal); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
bill.Status = model.WaybillStatusCanceled
|
|
|
|
|
bill.Remark = cancelReason
|
|
|
|
|
partner.CurOrderManager.OnWaybillStatusChanged(bill)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
if orderPrice, err := getOrderPrice(order); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
} else {
|
|
|
|
|
deliveryFeeInfo = &partner.WaybillFeeInfo{}
|
|
|
|
|
deliveryFeeInfo.DeliveryFee = utils.Str2Int64(orderPrice.NeedPayMoney)
|
|
|
|
|
}
|
|
|
|
|
return deliveryFeeInfo, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, resonContent string) (err error) {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
return fmt.Errorf("UU跑腿暂不支持此操作")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error) {
|
|
|
|
|
//TODO implement me
|
|
|
|
|
panic("implement me")
|
|
|
|
|
waybill, err := api.UuAPI.GetOrderDetail(orderId)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
temp := strings.Split(waybill.DriverLastloc, ",") //格式:113.71776,34.767501
|
|
|
|
|
param := &mtpsapi.RiderInfo{
|
|
|
|
|
OrderId: orderId,
|
|
|
|
|
ThirdCarrierOrderId: waybill.OrderCode,
|
|
|
|
|
CourierName: waybill.DriverName,
|
|
|
|
|
CourierPhone: waybill.DriverMobile,
|
|
|
|
|
LogisticsProviderCode: mtpsapi.UUPTCode,
|
|
|
|
|
LogisticsStatus: utils.Str2Int(waybill.State),
|
|
|
|
|
Longitude: temp[0],
|
|
|
|
|
Latitude: temp[1],
|
|
|
|
|
}
|
|
|
|
|
switch waybill.State {
|
|
|
|
|
case uuptapi.StateConfirmSuccess:
|
|
|
|
|
param.LogisticsStatus = model.WaybillStatusNew
|
|
|
|
|
param.LogisticsContext = model.RiderWaitRider
|
|
|
|
|
case uuptapi.StateRMGrabsOrder:
|
|
|
|
|
param.LogisticsStatus = model.WaybillStatusCourierAssigned
|
|
|
|
|
param.LogisticsContext = model.RiderGetOrder
|
|
|
|
|
case uuptapi.StateArrivedStore:
|
|
|
|
|
param.LogisticsStatus = model.WaybillStatusCourierArrived
|
|
|
|
|
param.LogisticsContext = model.RiderToStore
|
|
|
|
|
case uuptapi.StatePickUp, uuptapi.StateArrivedDestination:
|
|
|
|
|
param.LogisticsStatus = model.WaybillStatusDelivering
|
|
|
|
|
param.LogisticsContext = model.RiderGetOrderDelivering
|
|
|
|
|
case uuptapi.StateReceiverGetGoods:
|
|
|
|
|
param.LogisticsStatus = model.WaybillStatusDelivered
|
|
|
|
|
param.LogisticsContext = model.RiderGetOrderDelivered
|
|
|
|
|
case uuptapi.StateOrderCancel:
|
|
|
|
|
param.LogisticsStatus = model.WaybillStatusCanceled
|
|
|
|
|
param.LogisticsContext = model.RiderGetOrderCanceled
|
|
|
|
|
}
|
|
|
|
|
return param, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//辅助函数
|
|
|
|
|
func getOrderPrice(order *model.GoodsOrder) (orderPrice *uuptapi.GetOrderPriceResp, err error) {
|
|
|
|
|
store, err := dao.GetStoreDetail(dao.GetDB(), order.StoreID, 0, "")
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
address, _, err := dao.QueryUserDeliveryAddress(dao.GetDB(), order.AddressID, nil, 0, 0)
|
|
|
|
|
if err != nil || len(address) == 0 {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
param := map[string]interface{}{
|
|
|
|
|
"origin_id": order.VendorOrderID,
|
|
|
|
|
"from_address": store.Address,
|
|
|
|
|
"to_address": order.ConsigneeAddress,
|
|
|
|
|
"city_name": address[0].CityName,
|
|
|
|
|
"send_type": uuptapi.SendTypeHelpMeDeliver,
|
|
|
|
|
"to_lat": order.ConsigneeLat,
|
|
|
|
|
"to_lng": order.ConsigneeLng,
|
|
|
|
|
"from_lat": store.Lat,
|
|
|
|
|
"from_lng": store.Lng,
|
|
|
|
|
}
|
|
|
|
|
if orderPrice, err = api.UuAPI.GetOrderPrice(param); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
} else {
|
|
|
|
|
return orderPrice, nil
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResponse) {
|
|
|
|
|
param := &model.Waybill{
|
|
|
|
|
VendorOrderID: req.OriginID,
|
|
|
|
|
VendorWaybillID: req.OrderCode,
|
|
|
|
|
WaybillVendorID: model.VendorIDUUPT,
|
|
|
|
|
CourierName: req.DriverName,
|
|
|
|
|
CourierMobile: req.DriverMobile,
|
|
|
|
|
VendorStatus: req.State,
|
|
|
|
|
StatusTime: time.Now(),
|
|
|
|
|
Remark: req.StateText,
|
|
|
|
|
}
|
|
|
|
|
switch req.State {
|
|
|
|
|
case uuptapi.StateConfirmSuccess:
|
|
|
|
|
param.Status = model.WaybillStatusNew //5 待调度
|
|
|
|
|
case uuptapi.StateRMGrabsOrder:
|
|
|
|
|
param.Status = model.WaybillStatusCourierAssigned
|
|
|
|
|
param.Remark = req.DriverName + "," + req.DriverMobile
|
|
|
|
|
case uuptapi.StateArrivedStore:
|
|
|
|
|
param.Status = model.WaybillStatusCourierArrived
|
|
|
|
|
param.Remark = model.RiderToStore
|
|
|
|
|
case uuptapi.StatePickUp, uuptapi.StateArrivedDestination:
|
|
|
|
|
param.Status = model.WaybillStatusDelivering
|
|
|
|
|
param.Remark = model.RiderGetOrderDelivering
|
|
|
|
|
case uuptapi.StateReceiverGetGoods:
|
|
|
|
|
param.Status = model.WaybillStatusDelivered
|
|
|
|
|
param.Remark = model.RiderGetOrderDelivered
|
|
|
|
|
case uuptapi.StateOrderCancel:
|
|
|
|
|
param.Status = model.WaybillStatusCanceled
|
|
|
|
|
param.Remark = model.RiderGetOrderCanceled
|
|
|
|
|
default:
|
|
|
|
|
globals.SugarLogger.Warnf("onWaybillMsg unknown State:%v", req.State)
|
|
|
|
|
}
|
|
|
|
|
globals.SugarLogger.Debugf("UUPT onWaybillMsg param=====%s", utils.Format4Output(param, false))
|
|
|
|
|
if err := partner.CurOrderManager.OnWaybillStatusChanged(param); err != nil {
|
|
|
|
|
return uuptapi.Err2CallbackResponse(err)
|
|
|
|
|
}
|
|
|
|
|
return uuptapi.Err2CallbackResponse(nil)
|
|
|
|
|
}
|
|
|
|
|
|