Beispiel #1
0
        /// <summary>
        /// 根据日志编号更新日志Note
        /// </summary>
        /// <param name="logInfo"></param>
        public void UpdateSOLogNoteBySysNo(SOLogInfo logInfo)
        {
            DataCommand command = DataCommandManager.GetDataCommand("SO_Update_SOLogNoteBySysNo");

            command.SetParameterValue <SOLogInfo>(logInfo, true, false);
            command.ExecuteNonQuery();
        }
Beispiel #2
0
        public void InsertSOLog(SOLogInfo logInfo)
        {
            DataCommand command = DataCommandManager.GetDataCommand("SO_Insert_SOLog");

            command.SetParameterValue <SOLogInfo>(logInfo, true, false);
            command.ExecuteNonQuery();
        }
Beispiel #3
0
        public void WriteSOLog(ECCentral.BizEntity.Common.BizLogType logType, int soSysNo, string note)
        {
            SOLogInfo logInfo = new SOLogInfo();

            logInfo.SOSysNo       = soSysNo;
            logInfo.Note          = note;
            logInfo.OperationType = logType;
            WriteSOLog(logInfo);
        }
Beispiel #4
0
 public void WriteSOLog(SOLogInfo logInfo)
 {
     try
     {
         if (logInfo == null)
         {
             return;
         }
         logInfo.IP        = ServiceContext.Current.ClientIP;
         logInfo.LogTime   = DateTime.Now;
         logInfo.UserSysNo = ServiceContext.Current.UserSysNo;
         LogDA.InsertSOLog(logInfo);
     }
     catch (Exception ex)
     {
         ExceptionHelper.HandleException(ex);
     }
 }
Beispiel #5
0
        public static void WriteLog(SOInfo soInfo, BizLogType OperationType, string operationName)
        {
            SOLogInfo logInfo = new SOLogInfo
            {
                OptType       = OperationType,
                OperationName = operationName,
                OptIP         = string.Empty,//TODO:ServiceContext.Current.ClientIP,
                OptTime       = DateTime.Now,
                SOSysNo       = soInfo.SOSysNo,
                UserSysNo     = 0,//ServiceContext.Current.UserSysNo,
                CompanyCode   = soInfo.CompanyCode
            };
            SOLogNote notInfo = new SOLogNote
            {
                ActionName    = logInfo.OperationName,
                SOSysNo       = soInfo.SOSysNo,
                PayType       = soInfo.Payment.PayTypeID,
                RecvSysNo     = soInfo.ReceiveAreaSysNo,
                RecvAddress   = soInfo.ReceiveAddress,
                CustomerSysNo = soInfo.CustomerSysNo,
                ShipType      = soInfo.ShipType.ShipTypeSysNo,
                SOItems       = (from item in soInfo.SOItemList
                                 select new SOLogItemEntity
                {
                    ProductSysNo = 1,
                    Qty = 1,
                    Price = 0
                }).ToList()
            };

            logInfo.Note = SerializationUtility.XmlSerialize(notInfo);

            logInfo.OptIP     = string.Empty; //TODO: ServiceContext.Current.ClientIP;
            logInfo.OptTime   = DateTime.Now;
            logInfo.UserSysNo = 1;            // ServiceContext.Current.UserSysNo;
            DataCommand command = DataCommandManager.GetDataCommand("SO_Insert_SOLog");

            command.SetParameterValue <SOLogInfo>(logInfo, true, false);
            command.ExecuteNonQuery();
        }
Beispiel #6
0
        public void WriteSOLog(ECCentral.BizEntity.Common.BizLogType logType, string operationName, SOInfo soInfo)
        {
            try
            {
                SOLogInfo logInfo = new SOLogInfo
                {
                    OperationType = logType,
                    OperationName = operationName,
                    IP            = ServiceContext.Current.ClientIP,
                    LogTime       = DateTime.Now,
                    SOSysNo       = soInfo.SysNo.Value,
                    UserSysNo     = ServiceContext.Current.UserSysNo,
                    CompanyCode   = soInfo.CompanyCode
                };
                SOLogNote notInfo = new SOLogNote
                {
                    ActionName    = logInfo.OperationName,
                    SOSysNo       = soInfo.SysNo,
                    PayType       = soInfo.BaseInfo.PayTypeSysNo,
                    RecvSysNo     = soInfo.ReceiverInfo.AreaSysNo,
                    RecvAddress   = soInfo.ReceiverInfo.Address,
                    CustomerSysNo = soInfo.BaseInfo.CustomerSysNo,
                    ShipType      = soInfo.ShippingInfo.ShipTypeSysNo,
                    SOItems       = (from item in soInfo.Items
                                     select new SOLogItemEntity
                    {
                        ProductSysNo = 1,
                        Qty = 1,
                        Price = 0
                    }).ToList()
                };
                logInfo.Note = ECCentral.Service.Utility.SerializationUtility.XmlSerialize(notInfo);

                WriteSOLog(logInfo);
            }
            catch (Exception ex)
            {
                ExceptionHelper.HandleException(ex);
            }
        }
Beispiel #7
0
        /// <summary>
        /// 异步查询完成处理查询结果
        /// </summary>
        /// <param name="ar"></param>
        private void QueryCompleted(IAsyncResult ar)
        {
            HttpWebRequest  request        = null;
            HttpWebResponse response       = null;
            Stream          streamResponse = null;
            StreamReader    streamRead     = null;
            string          responseXml    = null;

            try
            {
                request        = (HttpWebRequest)ar.AsyncState;
                response       = (HttpWebResponse)request.EndGetResponse(ar);
                streamResponse = response.GetResponseStream();
                streamRead     = new StreamReader(streamResponse, Encoding.UTF8);
                responseXml    = streamRead.ReadToEnd();
            }
            catch (Exception ex)
            {
                //
            }
            finally
            {
                if (streamRead != null)
                {
                    streamRead.Close();
                }
                if (streamResponse != null)
                {
                    streamResponse.Close();
                }
            }
            //check sign

            YTBatchQueryResponse result = AnalysisResponseXml(responseXml);

            if (result != null && result.orders != null && result.orders.Count > 0)
            {
                foreach (YTOrder item in result.orders)
                {
                    //根据运单号获取订单号
                    int soSysNo = _SODA.GetSOSysNoByTrackingNumber(item.mailNo);
                    if (soSysNo <= 0)
                    {
                        continue;
                    }
                    if (item.orderStatus == YTOrderStatus.UNACCEPT ||
                        item.orderStatus == YTOrderStatus.NOT_SEND ||
                        item.orderStatus == YTOrderStatus.FAILED)
                    {
                        //物流派件不成功,订单更新为物流派件不成功
                        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.orderStatus == YTOrderStatus.SIGNED)
                    {
                        //已收货,订单更新为已完成
                        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);
                    }
                    if (item.steps != null && item.steps.Count > 0)
                    {
                        #region 更新SOLog
                        var routeList = EntityConverter <YTStep, SOLogisticsInfo> .Convert(item.steps, (s, t) =>
                        {
                            t.AcceptAddress = s.acceptAddress;
                            t.AcceptTime    = s.acceptTime;
                            t.Name          = s.name;
                            t.Status        = s.status;
                            t.Type          = ExpressType.YT;
                        });

                        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
                    }
                }
            }
        }
Beispiel #8
0
        /// <summary>
        /// 申报订单
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool DeclareSO(WaitDeclareSO entity)
        {
            bool result = false;

            #region 0.先进行支付申报,申报成功再执行订单申报
            if (!this.DeclarePayment(entity))
            {
                return(result);
            }
            #endregion

            #region 1.单笔值计算
            DeclareOrderInfo  declareOrderInfo = SODA.DeclareGetOrderInfoBySOSysNo(entity.SOSysNo);
            VendorCustomsInfo customsInfo      = SODA.LoadVendorCustomsInfo(entity.SOSysNo);
            PayType           payType          = ObjectFactory <ICommonBizInteract> .Instance.GetPayTypeByID(declareOrderInfo.PayTypeID);

            if (declareOrderInfo == null || declareOrderInfo.SOItemList == null || declareOrderInfo.SOItemList.Count == 0)
            {
                return(result);
            }
            decimal allCargoTotalPrice = 0m;
            string  cargoDescript      = "";
            decimal totalTariffAmount  = 0m;
            decimal otherPrice         = Math.Abs(declareOrderInfo.Amount.PrepayAmt) * -1;
            List <EasiPayRequestDeclareOrderCargoes> cargoesList = new List <EasiPayRequestDeclareOrderCargoes>();

            foreach (var item in declareOrderInfo.SOItemList)
            {
                cargoDescript     += (string.IsNullOrEmpty(cargoDescript) ? "" : ";") + (item.ProductName.Replace("#", "").Replace("%", "").Replace("&", "").Replace("+", "") + "描述");
                totalTariffAmount += item.TariffAmt * item.Quantity;
                item.ProductName   = item.ProductName.Replace("#", "").Replace("%", "").Replace("&", "").Replace("+", "");
                //折扣除不尽时,把多余的作为OtherPrice上送
                decimal currOtherPrice = Math.Abs(item.DiscountAmt) % item.Quantity;
                otherPrice += currOtherPrice * -1;
                //Item上是商品本身的价格,需要排除折扣
                decimal unitPrice = item.OriginalPrice - ((Math.Abs(item.DiscountAmt) - currOtherPrice) / item.Quantity);
                unitPrice           = decimal.Parse(unitPrice.ToString("F2"));
                otherPrice         += Math.Abs(item.PromotionDiscount * item.Quantity) * -1;
                allCargoTotalPrice += unitPrice * item.Quantity;
                cargoesList.Add(new EasiPayRequestDeclareOrderCargoes()
                {
                    cargoName       = item.ProductName,
                    cargoCode       = item.EntryCode,
                    cargoNum        = item.Quantity,
                    cargoUnitPrice  = decimal.Parse(unitPrice.ToString("F2")),
                    cargoTotalPrice = decimal.Parse((unitPrice * item.Quantity).ToString("F2")),
                    cargoTotalTax   = decimal.Parse((item.TariffAmt * item.Quantity).ToString("F2"))
                });
            }
            //积分支付作为其他金额报关
            otherPrice += Math.Abs(declareOrderInfo.Amount.PointPay * 1.00m / 100.00m) * -1;
            #endregion

            #region 2.构造请求业务数据
            int serialNumber = SODA.CreateSODeclareRecordsSysNo();
            EasiPayRequestDeclareOrder requestInfo = new EasiPayRequestDeclareOrder();
            requestInfo.version           = AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigVersion");
            requestInfo.commitTime        = DateTime.Now.ToString("yyyyMMddHHmmss");
            requestInfo.coName            = customsInfo.CBTMerchantName;
            requestInfo.coCode            = customsInfo.CBTSRC_NCode;
            requestInfo.MerchantSecretKey = customsInfo.CBTSODeclareSecretKey;
            requestInfo.serialNumber      = serialNumber.ToString();
            requestInfo.merchantOrderId   = entity.SOSysNo.ToString();
            requestInfo.assBillNo         = entity.TrackingNumber;
            requestInfo.orderCommitTime   = declareOrderInfo.OrderDate.ToString("yyyyMMddHHmmss");
            //发件信息,从Appsetting配置中取(改为从仓库表中读取 by cavin 2014-12-02)
            //仓库编号
            //string warehouseNumber = declareOrderInfo.SOItemList[0].WarehouseNumber.Trim();
            requestInfo.senderName        = declareOrderInfo.senderName;        //AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderName", warehouseNumber));
            requestInfo.senderTel         = declareOrderInfo.senderTel;         // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderTel", warehouseNumber));
            requestInfo.senderCompanyName = declareOrderInfo.senderCompanyName; // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderCompanyName", warehouseNumber));
            requestInfo.senderAddr        = declareOrderInfo.senderAddr;        // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderAddr", warehouseNumber));
            requestInfo.senderZip         = declareOrderInfo.senderZip;         // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderZip", warehouseNumber));
            requestInfo.senderCity        = declareOrderInfo.senderCity;        // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderCity", warehouseNumber));
            requestInfo.senderProvince    = declareOrderInfo.senderProvince;    // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderProvince", warehouseNumber));
            //发件地国家,需要适配三位国家代码
            requestInfo.senderCountry      = declareOrderInfo.SOItemList.FirstOrDefault().CountryCode;
            requestInfo.cargoDescript      = string.IsNullOrEmpty(cargoDescript) ? "无商品信息简述" : cargoDescript;
            requestInfo.allCargoTotalPrice = decimal.Parse(allCargoTotalPrice.ToString("F2"));
            requestInfo.allCargoTotalTax   = decimal.Parse(totalTariffAmount.ToString("F2"));
            requestInfo.expressPrice       = decimal.Parse(declareOrderInfo.Amount.ShipPrice.ToString("F2"));
            requestInfo.otherPrice         = decimal.Parse(otherPrice.ToString("F2"));
            requestInfo.recPerson          = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveName) ? "无" : declareOrderInfo.ReceiveName;
            requestInfo.recPhone           = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveCellPhone) ? "无" : declareOrderInfo.ReceiveCellPhone;
            requestInfo.recCountry         = "中国";
            requestInfo.recProvince        = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveProvinceName) ? "无" : declareOrderInfo.ReceiveProvinceName;
            requestInfo.recCity            = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveCityName) ? "无" : declareOrderInfo.ReceiveCityName;
            requestInfo.recAddress         = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveAddress) ? "无" : declareOrderInfo.ReceiveAddress;
            //为空
            requestInfo.recZip        = "";
            requestInfo.serverType    = declareOrderInfo.StockType == BizEntity.Common.TradeType.FTA ? "S02" : "S01";
            requestInfo.custCode      = declareOrderInfo.CustomsCode;
            requestInfo.operationCode = AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigOperationCode");
            //为空
            requestInfo.spt             = "";
            requestInfo.cargoes         = cargoesList;
            requestInfo.payMethod       = AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigPayMethod");
            requestInfo.payMerchantName = payType.CBTMerchantName;
            requestInfo.payMerchantCode = payType.CBTMerchantCode;
            //支付总金额=全部商品合计总价+税费+物流运费+其他金额(其他金额为负数)-余额支付金额
            requestInfo.payAmount = decimal.Parse((allCargoTotalPrice + totalTariffAmount + declareOrderInfo.Amount.ShipPrice + otherPrice).ToString("F2"));
            requestInfo.payCUR    = customsInfo.PayCurrencyCode;
            requestInfo.payID     = string.IsNullOrWhiteSpace(declareOrderInfo.PayInfo.SerialNumber) ? "" : declareOrderInfo.PayInfo.SerialNumber.Substring(1).Trim();//因为支付有个前缀P
            requestInfo.payTime   = declareOrderInfo.PayInfo.PayProcessTime.Trim();
            #endregion

            #region 3.处理请求,解析请求结果
            SOLogInfo soLogInfo = new SOLogInfo()
            {
                UserSysNo     = 3025,
                IP            = "Delcare SO Job",
                OperationType = ECCentral.BizEntity.Common.BizLogType.Sale_SO_Update,
                SOSysNo       = entity.SOSysNo,
                Note          = "",
                CompanyCode   = "8601"
            };
            string reqContent       = BuildPostReqData(requestInfo, requestInfo.MerchantSecretKey);
            string strRequestResult = HttpPostRequest(AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigRequestUrl"), reqContent);
            strRequestResult = CommonUtility.HttpUrlDecode(strRequestResult);
            EasiPayRequestResult requestResult = SerializationUtility.JsonDeserialize <EasiPayRequestResult>(strRequestResult);
            if (requestResult.status.ToLower().Equals("success"))
            {
                result         = true;
                soLogInfo.Note = "订单报关申报提交成功";
            }
            else
            {
                soLogInfo.Note = string.Format("订单报关申报提交失败:{0}", requestResult.errorMsg);
            }
            ObjectFactory <ISOLogDA> .Instance.InsertSOLog(soLogInfo);

            #region 写系统Log
            ApplicationEventLog log = new ApplicationEventLog()
            {
                Source           = "JOB SODeclare",
                ReferenceIP      = ServiceContext.Current.ClientIP,
                EventType        = 8,
                HostName         = "JOB",
                EventTitle       = "SODeclare Request",
                EventMessage     = reqContent,
                LanguageCode     = "zh-CN",
                CompanyCode      = "8601",
                StoreCompanyCode = "8601",
                EventDetail      = soLogInfo.Note,
            };
            ObjectFactory <ICommonBizInteract> .Instance.CreateApplicationEventLog(log);

            #endregion
            #endregion

            #region 4.提交申报申请成功,创建申报记录
            if (result)
            {
                SODeclareRecords declareRecord = new SODeclareRecords()
                {
                    SysNo          = serialNumber,
                    SOSysNo        = entity.SOSysNo,
                    TrackingNumber = entity.TrackingNumber
                };
                SODA.CreateSODeclareRecords(declareRecord);
            }
            #endregion

            return(result);
        }
Beispiel #9
0
        /// <summary>
        /// 异步查询完成处理查询结果
        /// </summary>
        /// <param name="ar"></param>
        private void QueryCompleted(string responseStr, string number)
        {
            #region old function
            //KD100QueryResponse result = AnalysisResponseXml(responseStr);
            //if (result != null)
            //{
            //    //根据运单号获取订单号
            //    int soSysNo = _SODA.GetSOSysNoByTrackingNumber(result.nu);
            //    if (soSysNo <= 0)
            //        return;
            //    if (result.state == 2 || result.state == 4 || result.state == 6)
            //    {
            //        //物流派件不成功,订单更新为物流派件不成功
            //        SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo()
            //        {
            //            SOSysNo = soSysNo,
            //            OperatorType = SOOperatorType.System,
            //            OperatorSysNo = 0,
            //            Status = SOStatus.ShippingReject,
            //            ChangeTime = DateTime.Now,
            //            IsSendMailToCustomer = false,
            //            Note = "物流派件不成功"
            //        };
            //        _SODA.UpdateSOStatus(soStatusChangeInfo);
            //    }
            //    if (result.state == 3)
            //    {
            //        //已收货,订单更新为已完成
            //        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 = ConverterSOLog(result.dataList);
            //    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
            //}
            #endregion
            if (!string.IsNullOrEmpty(responseStr))
            {
                //根据运单号获取订单号
                int soSysNo = _SODA.GetSOSysNoByTrackingNumber(number);
                if (soSysNo <= 0)
                {
                    return;
                }

                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          = responseStr,
                        UserSysNo     = 0,
                        CompanyCode   = "8601"
                    };
                    _SOLogDA.InsertSOLog(soLog);
                }
                else
                {
                    //更新
                    SOLogInfo soLog = logList[0];
                    soLog.Note = responseStr;
                    _SOLogDA.UpdateSOLogNoteBySysNo(soLog);
                }
            }
        }
Beispiel #10
0
        /// <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
                    }
                }
            }
        }