コード例 #1
0
        private SOCreateRequestInfo Convert2ContractInfo(OrderImportRowData item)
        {
            SOCreateRequestInfo contractInfo = new SOCreateRequestInfo();

            contractInfo.MerchantOrderID   = item.MerchantOrderID.Value;
            contractInfo.ServerType        = item.ServerType.ExtractValue;
            contractInfo.WarehouseID       = int.Parse(item.WarehouseID.Value);
            contractInfo.ArteryLogisticID  = int.Parse(item.ArteryLogisticID.Value);
            contractInfo.IsMerchantSelfFEP = int.Parse(item.IsMerchantSelfFEP.Value);

            contractInfo.PayInfo = new SOPayInfo();
            contractInfo.PayInfo.ProductAmount    = decimal.Parse(item.ProductAmount.Value);
            contractInfo.PayInfo.ShippingAmount   = decimal.Parse(item.ShippingAmount.Value);
            contractInfo.PayInfo.TaxAmount        = 0;
            contractInfo.PayInfo.CommissionAmount = 0;
            contractInfo.PayInfo.PayTypeSysNo     = int.Parse(item.PayTypeID.ExtractValue);
            contractInfo.PayInfo.PaySerialNumber  = item.PaySerialNumber.Value;

            contractInfo.ShippingInfo                 = new SOShippingInfo();
            contractInfo.ShippingInfo.ReceiveName     = item.ReceiveName.Value;
            contractInfo.ShippingInfo.ReceivePhone    = item.ReceiveCellPhone.Value;
            contractInfo.ShippingInfo.ReceiveAddress  = item.ReceiveAddress.Value;
            contractInfo.ShippingInfo.ReceiveAreaName = item.ReceiveAreaName.Value.Substring(0, item.ReceiveAreaName.Value.LastIndexOf('['));
            contractInfo.ShippingInfo.ReceiveAreaCode = item.ReceiveAreaName.ExtractValue.Substring(item.ReceiveAreaName.ExtractValue.LastIndexOf(',') + 1);
            contractInfo.ShippingInfo.ReceiveZip      = item.ReceiveZip.Value;
            contractInfo.ShippingInfo.ShipTypeID      = int.Parse(item.ShipTypeID.Value);

            contractInfo.AuthenticationInfo              = new SOAuthenticationInfo();
            contractInfo.AuthenticationInfo.Name         = item.AuthName.Value;
            contractInfo.AuthenticationInfo.IDCardType   = 0;
            contractInfo.AuthenticationInfo.IDCardNumber = item.IDCardNumber.Value;
            contractInfo.AuthenticationInfo.PhoneNumber  = item.AuthCellPhone.Value;
            contractInfo.AuthenticationInfo.Email        = item.AuthEmail.Value;

            contractInfo.ItemList = new List <SOItemInfo>();
            string[] productIDs    = item.ProductIDs.Value.Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries);
            string[] productQtys   = item.ProductQtys.Value.Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries);
            string[] productPrices = item.ProductPrices.Value.Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < productIDs.Length; i++)
            {
                contractInfo.ItemList.Add(new SOItemInfo()
                {
                    ProductID = productIDs[i],
                    Quantity  = int.Parse(productQtys[i]),
                    SalePrice = decimal.Parse(productPrices[i]),
                    TaxPrice  = 0
                });
            }

            return(contractInfo);
        }
コード例 #2
0
        public void Import(string templateFilePath)
        {
            ConfigData configData = ConfigDataProcessor.GetConfigData();

            if (configData == null)
            {
                throw new BusinessException("配置不存在,请先保存基础配置");
            }

            if (!File.Exists(templateFilePath))
            {
                throw new BusinessException("文件\"{0}\"不存在", templateFilePath);
            }
            string ext = Path.GetExtension(templateFilePath);

            if (string.Compare(ext, ".xlsx", true) != 0)
            {
                throw new BusinessException("订单模板文件格式错误");
            }

            List <OrderImportRowData> docData = ReadDocumentToList(templateFilePath);

            OnOrderImportFileReadComplate(this, docData == null ? 0 : docData.Count);

            if (docData == null || docData.Count <= 0)
            {
                return;
            }


            string   frequencyCfg = ConfigurationManager.AppSettings["order.socreate.frequency"];
            double   frequencyValue;
            TimeSpan frequency = TimeSpan.FromSeconds(0);

            if (!string.IsNullOrWhiteSpace(frequencyCfg) && double.TryParse(frequencyCfg, out frequencyValue))
            {
                frequency = TimeSpan.FromSeconds(frequencyValue);
            }

            int    millisecondsDelay = (int)frequency.TotalMilliseconds;
            string errorMsg          = null;

            foreach (var item in docData)
            {
                if (!ValidateData(item, out errorMsg))
                {
                    OnOrderImportComplate(this, new OrderCreateResponseResult()
                    {
                        Code = -1,
                        Data = new OrderCreateResponseData()
                        {
                            MerchantOrderID = item.MerchantOrderID.Value
                        },
                        Desc = errorMsg
                    });
                }
                else
                {
                    SOCreateRequestInfo contractInfo = Convert2ContractInfo(item);
                    contractInfo.SaleChannelSysNo = configData.SaleChannelSysNo;
                    ImportOrder(contractInfo, configData);
                }
                Thread.Sleep(millisecondsDelay);
            }
        }
コード例 #3
0
        private void ImportOrder(SOCreateRequestInfo contractInfo, ConfigData configData)
        {
            OrderCreateResponseResult result = new OrderCreateResponseResult()
            {
                Data = new OrderCreateResponseData()
                {
                    MerchantOrderID = contractInfo.MerchantOrderID
                }
            };

            var parameters = new NameValueCollection();

            parameters.Add("method", "Order.SOCreate");
            parameters.Add("data", JsonSerializer.Serialize(contractInfo));
            parameters.Add("format", "json");
            parameters.Add("version", "1.0");
            parameters.Add("nonce", new Random().NextDouble().ToString());
            parameters.Add("appid", configData.AppId);
            parameters.Add("timestamp", DateTime.Now.ToString("yyyyMMddhhmmss"));

            string sign = SignatureUtil.Build(parameters, configData.SecretKey);

            StringBuilder httpContentStringBuilder = new StringBuilder();

            foreach (string key in parameters.AllKeys)
            {
                httpContentStringBuilder.AppendFormat("&{0}={1}", key, SignatureUtil.UrlEncode(parameters[key]));
            }
            httpContentStringBuilder.AppendFormat("&{0}={1}", "sign", sign);
            var content = httpContentStringBuilder.ToString().TrimStart('&');

            WebRequest request = WebRequest.Create(configData.OpenApiUrl);

            request.Method      = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            using (Stream requestStream = request.GetRequestStream())
            {
                byte[] postData = Encoding.UTF8.GetBytes(content);
                requestStream.Write(postData, 0, postData.Length);
            }
            try
            {
                string      responseData = "";
                WebResponse response     = request.GetResponse();
                using (Stream responseStream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(responseStream))
                    {
                        responseData = reader.ReadToEnd();
                    }
                }
                result = JsonSerializer.Deserialize <OrderCreateResponseResult>(responseData);
                if (result.Data == null)
                {
                    result.Data = new OrderCreateResponseData()
                    {
                        MerchantOrderID = contractInfo.MerchantOrderID
                    };
                }
            }
            catch (AggregateException aex)
            {
                result.Code = -10;
                var       egex     = (AggregateException)aex;
                Exception innerExp = null;
                if (egex.InnerExceptions != null && egex.InnerExceptions.Count > 0)
                {
                    innerExp = egex.InnerExceptions[0];
                }
                if (innerExp == null)
                {
                    result.Desc = egex.Message;
                }
                else
                {
                    Exception tempExp;
                    GetInnerException(innerExp, out tempExp);
                    if (tempExp != null)
                    {
                        result.Desc = tempExp.Message;
                    }
                    else
                    {
                        result.Desc = innerExp.Message;
                    }
                }
            }
            catch (Exception ex)
            {
                result.Code = -10;
                result.Desc = ex.Message;
            }

            OnOrderImportComplate(this, result);
        }