/// <summary> /// 查询物流信息 /// </summary> /// <param name="trackingNumberList"></param> public void QueryTracking(List <string> trackingNumberList) { SFExpressQueryDelegate _SFQueryTracking = new SFExpressQueryDelegate(SFExpressQuery); IAsyncResult ar = _SFQueryTracking.BeginInvoke(BuildQueryRequestXml(trackingNumberList), new AsyncCallback(QueryCompleted), _SFQueryTracking); }
/// <summary> /// 异步查询完成处理查询结果 /// </summary> /// <param name="ar"></param> private void QueryCompleted(IAsyncResult ar) { SFExpressQueryDelegate _SFExpressQuery = ar.AsyncState as SFExpressQueryDelegate; string responseXml = _SFExpressQuery.EndInvoke(ar); List <SFQueryResponseRouteResponse> result = AnalysisResponseXml(responseXml); if (result != null) { foreach (SFQueryResponseRouteResponse item in result) { if (item.RouteList != null) { //根据运单号获取订单号 int soSysNo = _SODA.GetSOSysNoByTrackingNumber(item.TrackingNumber); if (soSysNo <= 0) { continue; } if (item.RouteList.Exists(m => m.Code.Equals("70"))) { //物流派件不成功,订单更新为物流派件不成功 SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() { SOSysNo = soSysNo, OperatorType = SOOperatorType.System, OperatorSysNo = 0, Status = SOStatus.ShippingReject, ChangeTime = DateTime.Now, IsSendMailToCustomer = false, Note = "物流派件不成功" }; _SODA.UpdateSOStatus(soStatusChangeInfo); } if (item.RouteList.Exists(m => m.Code.Equals("80"))) { //已收货,订单更新为已完成 SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() { SOSysNo = soSysNo, OperatorType = SOOperatorType.System, OperatorSysNo = 0, Status = SOStatus.Complete, ChangeTime = DateTime.Now, IsSendMailToCustomer = false, Note = "物流已完成" }; _SODA.UpdateSOStatus(soStatusChangeInfo); //已收货,更新SO_CheckShipping表的LastChangeStatusDate字段,以便同步至WMS _SODA.UpdateSOCheckShippingLastChangeStatusDate(soSysNo); //已收货,检查并赠送优惠券 var soInfo = ObjectFactory <SOProcessor> .Instance.GetSOBySOSysNo(soSysNo); ObjectFactory <IMKTBizInteract> .Instance.CheckAndGivingPromotionCodeForSO(soInfo); } #region 更新SOLog var routeList = EntityConverter <SFQueryResponseRoute, SOLogisticsInfo> .Convert(item.RouteList, (s, t) => { t.Type = ExpressType.SF; }); string routeLogMsg = SerializationUtility.XmlSerialize(routeList); var logList = _SOLogDA.GetSOLogBySOSysNoAndLogType(soSysNo, BizLogType.Sale_SO_ShippingInfo); bool bIsCreate = logList == null || logList.Count == 0; if (bIsCreate) { //创建 SOLogInfo soLog = new SOLogInfo() { SOSysNo = soSysNo, IP = "::1", OperationType = BizLogType.Sale_SO_ShippingInfo, Note = routeLogMsg, UserSysNo = 0, CompanyCode = "8601" }; _SOLogDA.InsertSOLog(soLog); } else { //更新 SOLogInfo soLog = logList[0]; soLog.Note = routeLogMsg; _SOLogDA.UpdateSOLogNoteBySysNo(soLog); } #endregion } } } }