- big refactor.

This commit is contained in:
gazebo
2018-07-05 12:21:25 +08:00
parent c43ec48837
commit bed727d3e5
21 changed files with 140 additions and 115 deletions

View File

@@ -0,0 +1,274 @@
package freshfood
import (
"errors"
"net/http"
"net/url"
"time"
"git.rosy.net.cn/baseapi/platformapi/dadaapi"
"github.com/astaxie/beego"
"git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/legacy/controllers"
"git.rosy.net.cn/jx-callback/legacy/jd/models"
)
const (
URL_FRESHFOOD_ORDER_CREATE_JDDJ = "order"
URL_FRESHFOOD_ORDER_STATUS = "order/status"
URL_FRESHFOOD_ORDER_COMMENT = "comments/pushJdBadComments"
URL_FRESHFOOD_DELIVERY_STATUS = "delivery/status"
URL_FRESHFOOD_ORDER_MODIFY = "order/modify"
URL_FRESHFOOD_ELEME_TOKENUPDATE = "eleme/token/update"
URL_FRESHFOOD_ORDER_CREATE_ELEME = "order/eleme"
URL_FRESHFOOD_MTPS_DELIVERYSTATUS = "mtps/status"
URL_FRESHFOOD_MTPS_EXCEPTION = "mtps/except"
)
const (
URL_FRESHFOOD_PARA_JDORDER = "jdOrder"
URL_FRESHFOOD_PARA_VENDERID = "venderId"
URL_FRESHFOOD_PARA_ORDERID = "orderId"
URL_FRESHFOOD_PARA_ORDERSTATUS = "orderStatus"
URL_FRESHFOOD_PARA_ORDERSTATUSTIME = "orderStatusTime"
URL_FRESHFOOD_PARA_CITYNAME = "cityName"
URL_FRESHFOOD_PARA_BILLID = "billId"
URL_FRESHFOOD_PARA_STATUSID = "statusId"
URL_FRESHFOOD_PARA_DELIVERYSTATUS = "deliveryStatus"
URL_FRESHFOOD_PARA_DLIVERYSTATUSTIME = "deliveryStatusTime"
URL_FRESHFOOD_PARA_DELIVERYCARRIERNO = "deliveryCarrierNo"
URL_FRESHFOOD_PARA_DELIVERYCARRIERNAME = "deliveryCarrierName"
URL_FRESHFOOD_PARA_DELIVERYMANNO = "deliveryManNo"
URL_FRESHFOOD_PARA_DELIVERYMANNAME = "deliveryManName"
URL_FRESHFOOD_PARA_DELIVERYMANPHONE = "deliveryManPhone"
URL_FRESHFOOD_PARA_ELEMEORDER = "elemeOrder"
)
const (
URL_FRESHFOOD_PARA_DELIVERYID = "deliveryId"
URL_FRESHFOOD_PARA_MTPEISONID = "mtPeisongId"
// URL_FRESHFOOD_PARA_ORDERID = "orderId"
URL_FRESHFOOD_PARA_STATUS = "status"
URL_FRESHFOOD_PARA_COURIERNAME = "courierName"
URL_FRESHFOOD_PARA_COURIERPHONE = "courierPhone"
URL_FRESHFOOD_PARA_CANCELREASONID = "cancelReasonId"
URL_FRESHFOOD_PARA_CANCELREASON = "cancelReason"
URL_FRESHFOOD_PARA_APPKEY = "appkey"
URL_FRESHFOOD_PARA_TIMESTAMP = "timestamp"
URL_FRESHFOOD_PARA_SIGN = "sign"
//转发美团配送异常消息
URL_FRESHFOOD_PARA_EXCEPTIONID = "exceptionId"
URL_FRESHFOOD_PARA_EXCEPTIONCODE = "exceptionCode"
URL_FRESHFOOD_PARA_EXCEPTIONDESC = "exceptionDesc"
URL_FRESHFOOD_PARA_EXCEPTIONTIME = "exceptionTime"
)
const (
//转发美团配送配送状态
URL_FRESHFOOD_DADADELIVERY_STATUS = "dadadelivery/status"
URL_FRESHFOOD_PARA_CLIENTID = "clientId"
URL_FRESHFOOD_PARA_CANCELFROM = "cancelFrom"
URL_FRESHFOOD_PARA_UPDATETIME = "updateTime"
URL_FRESHFOOD_PARA_DMID = "dmId"
URL_FRESHFOOD_PARA_DMNAME = "dmName"
URL_FRESHFOOD_PARA_DMMOBILE = "dmMobile"
)
const (
URL_WX_UPDATE_ACCESSTOKEN = "weixin/accesstoken/update"
)
const (
retryCount = 2
)
type API struct {
baseURL string
client *http.Client
}
var (
ErrFreshFooddReturnNot200 = errors.New("freshfood return code is not 200")
)
var (
FreshFoodAPI *API
)
func init() {
FreshFoodAPI = New(beego.AppConfig.String("freshFoodServerURL"))
}
func New(baseURL string) *API {
return &API{baseURL, &http.Client{Timeout: time.Second * 5}}
}
func (f *API) AccessFreshFood(apiStr string, params url.Values) error {
var err error
var response *http.Response
fullURL := f.baseURL + "/" + apiStr
for i := 0; i < retryCount; i++ {
if params != nil {
// globals.SugarLogger.Debug(params.Encode())
response, err = f.client.PostForm(fullURL, params)
} else {
response, err = f.client.Get(fullURL)
}
// err = error(nil)
// globals.SugarLogger.Debug(fullURL)
// globals.SugarLogger.Debug(params)
if err == nil && response != nil && response.StatusCode == 200 {
break
} else {
globals.SugarLogger.Infof("Call %s error:%v, response: %v", fullURL, err, response)
}
}
if err != nil || response.StatusCode != 200 {
globals.SugarLogger.Errorf("Call %s error:%v, url:%s, response: %v", fullURL, err, fullURL, response)
if err != nil {
return err
}
return ErrFreshFooddReturnNot200
}
return nil
}
// jd api
func (f *API) NewJDOrder(jdorder *models.Jdorder, isNew bool) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_JDORDER, string(utils.MustMarshal(jdorder)))
if isNew {
return f.AccessFreshFood(URL_FRESHFOOD_ORDER_CREATE_JDDJ, params)
}
return f.AccessFreshFood(URL_FRESHFOOD_ORDER_MODIFY, params)
}
func (f *API) JDOrderStatus(msg *jdapi.CallbackOrderMsg) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_VENDERID, utils.Int2Str(controllers.JD_VENDERID))
params.Set(URL_FRESHFOOD_PARA_ORDERID, msg.BillID)
params.Set(URL_FRESHFOOD_PARA_ORDERSTATUS, msg.StatusID)
params.Set(URL_FRESHFOOD_PARA_ORDERSTATUSTIME, msg.Timestamp)
params.Set(URL_FRESHFOOD_PARA_CITYNAME, "all")
return f.AccessFreshFood(URL_FRESHFOOD_ORDER_STATUS, params)
}
func (f *API) JDOrderComment(msg *jdapi.CallbackOrderMsg) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_BILLID, msg.BillID)
params.Set(URL_FRESHFOOD_PARA_STATUSID, msg.StatusID)
return f.AccessFreshFood(URL_FRESHFOOD_ORDER_COMMENT, params)
}
func (f *API) JDOrderDeliveryStatus(jdOrderDeliveryStatusMsg *jdapi.CallbackDeliveryStatusMsg) error {
params := make(url.Values)
cityName := "all"
params.Set(URL_FRESHFOOD_PARA_VENDERID, utils.Int2Str(controllers.JD_VENDERID))
params.Set(URL_FRESHFOOD_PARA_ORDERID, jdOrderDeliveryStatusMsg.OrderID)
params.Set(URL_FRESHFOOD_PARA_DELIVERYSTATUS, jdOrderDeliveryStatusMsg.DeliveryStatus)
params.Set(URL_FRESHFOOD_PARA_DLIVERYSTATUSTIME, jdOrderDeliveryStatusMsg.DeliveryStatusTime)
params.Set(URL_FRESHFOOD_PARA_DELIVERYCARRIERNO, jdOrderDeliveryStatusMsg.DeliveryCarrierNo)
params.Set(URL_FRESHFOOD_PARA_DELIVERYCARRIERNAME, jdOrderDeliveryStatusMsg.DeliveryCarrierName)
params.Set(URL_FRESHFOOD_PARA_DELIVERYMANNO, jdOrderDeliveryStatusMsg.DeliveryManNo)
params.Set(URL_FRESHFOOD_PARA_DELIVERYMANNAME, jdOrderDeliveryStatusMsg.DeliveryManName)
params.Set(URL_FRESHFOOD_PARA_DELIVERYMANPHONE, jdOrderDeliveryStatusMsg.DeliveryManPhone)
params.Set(URL_FRESHFOOD_PARA_CITYNAME, cityName)
return f.AccessFreshFood(URL_FRESHFOOD_DELIVERY_STATUS, params)
}
// elm api
func (f *API) NewELMOrder(order map[string]interface{}) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_ELEMEORDER, string(utils.MustMarshal(order)))
return f.AccessFreshFood(URL_FRESHFOOD_ORDER_CREATE_ELEME, params)
}
func (f *API) ELMOrderStatus(orderId string, status int, statusTime string) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_VENDERID, utils.Int2Str(controllers.ELM_VENDERID))
params.Set(URL_FRESHFOOD_PARA_ORDERID, orderId)
params.Set(URL_FRESHFOOD_PARA_ORDERSTATUS, utils.Int2Str(status))
params.Set(URL_FRESHFOOD_PARA_ORDERSTATUSTIME, statusTime)
return f.AccessFreshFood(URL_FRESHFOOD_ORDER_STATUS, params)
}
// mtps api
func (f *API) MtpsOrderStatusChanged(order *mtpsapi.CallbackOrderMsg) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_DELIVERYID, utils.Int64ToStr(order.DeliveryID))
params.Set(URL_FRESHFOOD_PARA_MTPEISONID, order.MtPeisongID)
params.Set(URL_FRESHFOOD_PARA_ORDERID, order.OrderId)
params.Set(URL_FRESHFOOD_PARA_STATUS, utils.Int2Str(order.Status))
params.Set(URL_FRESHFOOD_PARA_COURIERNAME, order.CourierName)
params.Set(URL_FRESHFOOD_PARA_COURIERPHONE, order.CourierPhone)
params.Set(URL_FRESHFOOD_PARA_CANCELREASONID, utils.Int2Str(order.CancelReasonId))
params.Set(URL_FRESHFOOD_PARA_CANCELREASON, order.CancelReason)
params.Set(URL_FRESHFOOD_PARA_APPKEY, order.AppKey)
params.Set(URL_FRESHFOOD_PARA_TIMESTAMP, utils.Int64ToStr(order.Timestamp))
params.Set(URL_FRESHFOOD_PARA_SIGN, order.Sign)
return f.AccessFreshFood(URL_FRESHFOOD_MTPS_DELIVERYSTATUS, params)
}
func (f *API) MtpsOrderException(order *mtpsapi.CallbackOrderExceptionMsg) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_DELIVERYID, utils.Int64ToStr(order.DeliveryID))
params.Set(URL_FRESHFOOD_PARA_MTPEISONID, order.MtPeisongID)
params.Set(URL_FRESHFOOD_PARA_ORDERID, order.OrderId)
params.Set(URL_FRESHFOOD_PARA_EXCEPTIONID, utils.Int64ToStr(order.ExceptionID))
params.Set(URL_FRESHFOOD_PARA_EXCEPTIONCODE, utils.Int2Str(order.ExceptionCode))
params.Set(URL_FRESHFOOD_PARA_EXCEPTIONDESC, order.ExceptionDescr)
params.Set(URL_FRESHFOOD_PARA_EXCEPTIONTIME, utils.Int64ToStr(order.ExceptionTime))
params.Set(URL_FRESHFOOD_PARA_COURIERNAME, order.CourierName)
params.Set(URL_FRESHFOOD_PARA_COURIERPHONE, order.CourierPhone)
params.Set(URL_FRESHFOOD_PARA_APPKEY, order.AppKey)
params.Set(URL_FRESHFOOD_PARA_TIMESTAMP, utils.Int64ToStr(order.Timestamp))
params.Set(URL_FRESHFOOD_PARA_SIGN, order.Sign)
return f.AccessFreshFood(URL_FRESHFOOD_MTPS_EXCEPTION, params)
}
// dada
func (f *API) DadaOrderStatusChanged(msg *dadaapi.CallbackMsg) error {
params := make(url.Values)
params.Set(URL_FRESHFOOD_PARA_CLIENTID, msg.ClientID)
params.Set(URL_FRESHFOOD_PARA_ORDERID, msg.OrderID)
params.Set(URL_FRESHFOOD_PARA_ORDERSTATUS, utils.Int2Str(msg.OrderStatus))
params.Set(URL_FRESHFOOD_PARA_CANCELREASON, msg.CancelReason)
params.Set(URL_FRESHFOOD_PARA_CANCELFROM, utils.Int2Str(msg.CancelFrom))
params.Set(URL_FRESHFOOD_PARA_UPDATETIME, utils.Int2Str(msg.UpdateTime))
params.Set(URL_FRESHFOOD_PARA_DMID, utils.Int2Str(msg.DmID))
params.Set(URL_FRESHFOOD_PARA_DMNAME, msg.DmName)
params.Set(URL_FRESHFOOD_PARA_DMMOBILE, msg.DmMobile)
return f.AccessFreshFood(URL_FRESHFOOD_DADADELIVERY_STATUS, params)
}
func (f *API) RefreshWeixinToken() error {
return f.AccessFreshFood(URL_WX_UPDATE_ACCESSTOKEN, nil)
}
func (f *API) RefreshElmToken() error {
return f.AccessFreshFood(URL_FRESHFOOD_ELEME_TOKENUPDATE, nil)
}