package freshfood import ( "net/http" "net/url" "time" "git.rosy.net.cn/baseapi/platform/jdapi" "git.rosy.net.cn/baseapi/platform/mtpsapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jd/models" "go.uber.org/zap" ) const ( URL_FRESHFOOD_ORDER_CREATE_JDDJ = "order" URL_FRESHFOOD_ORDER_STATUS = "order/status" 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_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 ( JD_VENDERID = 0 ELM_VENDERID = 2 ) const ( retryCount = 3 ) type FreshFoodAPI struct { baseURL string sugarLogger *zap.SugaredLogger client *http.Client } func NewFreshFoodAPI(baseURL string, sugarredLogger *zap.SugaredLogger) *FreshFoodAPI { return &FreshFoodAPI{baseURL, sugarredLogger, &http.Client{Timeout: time.Second * 5}} } func (f *FreshFoodAPI) AccessFreshFood(apiStr string, params url.Values) error { var err error fullURL := f.baseURL + "/" + apiStr for i := 0; i < retryCount; i++ { // _, err := f.client.PostForm(fullURL, params) err = error(nil) f.sugarLogger.Debug(fullURL) if err != nil { f.sugarLogger.Warnf("Call %s error:%v", fullURL, err) } } return err } // jd api func (f *FreshFoodAPI) NewJDOrder(jdorder *models.Jdorder) error { params := make(url.Values) params.Set(URL_FRESHFOOD_PARA_JDORDER, string(utils.MustMarshal(jdorder))) if jdorder.OrderStatus == utils.Str2Int(jdapi.JdOrderStatusNew) { return f.AccessFreshFood(URL_FRESHFOOD_ORDER_CREATE_JDDJ, params) } return f.AccessFreshFood(URL_FRESHFOOD_ORDER_MODIFY, params) } // todo venderId func (f *FreshFoodAPI) JDOrderStatus(jdorder *models.Jdorder) error { params := make(url.Values) params.Set(URL_FRESHFOOD_PARA_VENDERID, utils.Int2Str(JD_VENDERID)) params.Set(URL_FRESHFOOD_PARA_ORDERID, utils.Int64ToStr(jdorder.JdOrderId)) params.Set(URL_FRESHFOOD_PARA_ORDERSTATUS, utils.Int2Str(jdorder.OrderStatus)) params.Set(URL_FRESHFOOD_PARA_ORDERSTATUSTIME, jdorder.OrderStatusTime) params.Set(URL_FRESHFOOD_PARA_CITYNAME, jdorder.CityName) return f.AccessFreshFood(URL_FRESHFOOD_ORDER_STATUS, params) } func (f *FreshFoodAPI) JDOrderDeliveryStatus(jdOrderDeliveryStatusMsg *jdapi.JDDeliveryStatusMsg) error { params := make(url.Values) cityName := "all" params.Set(URL_FRESHFOOD_PARA_VENDERID, utils.Int2Str(JD_VENDERID)) params.Set(URL_FRESHFOOD_PARA_ORDERID, jdOrderDeliveryStatusMsg.OrderId) params.Set(URL_FRESHFOOD_PARA_DELIVERYSTATUS, utils.Int2Str(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 *FreshFoodAPI) 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 *FreshFoodAPI) ELMOrderStatus(orderId string, status int, timestamp int64) error { params := make(url.Values) params.Set(URL_FRESHFOOD_PARA_VENDERID, utils.Int2Str(ELM_VENDERID)) params.Set(URL_FRESHFOOD_PARA_ORDERID, orderId) params.Set(URL_FRESHFOOD_PARA_ORDERSTATUS, utils.Int2Str(status)) params.Set(URL_FRESHFOOD_PARA_ORDERSTATUSTIME, utils.Timestamp2Str(timestamp)) return f.AccessFreshFood(URL_FRESHFOOD_PARA_ORDERSTATUS, params) } // mtps api func (f *FreshFoodAPI) MtpsOrderStatusChanged(order *mtpsapi.MtpsCallbackOrderMsg) 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 *FreshFoodAPI) MtpsOrderException(order *mtpsapi.MtpsCallbackOrderExceptionMsg) 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) }