Пример #1
0
        /// <summary>
        /// 获取运单号
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        /// <remarks>2016-07-19 陈海裕 创建</remarks>
        public override Result GetOrderExpressno(string orderId)
        {
            Result <string> result = new Result <string>();

            result.Status     = false;
            result.StatusCode = 0;
            result.Message    = "接口调用失败";
            string url = RequestUrl + "express/create";

            try
            {
                SoOrder order = BLL.Order.SoOrderBo.Instance.GetEntity(TConvert.ToInt32(orderId));
                if (order == null)
                {
                    result.Message = "该订单不存在";
                    return(result);
                }
                LgDeliveryType          deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo);
                ParaOnlinePaymentFilter filter       = new ParaOnlinePaymentFilter();
                filter.OrderSysNo = TConvert.ToInt32(orderId);
                var           onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault();
                CBWhWarehouse warehouse     = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);
                string        _deliveryType = "";
                if (deliveryType.DeliveryTypeName.Contains("顺丰"))
                {
                    _deliveryType = "SF";
                    //CustomerCode = SFCustomerCode;
                    //Key = SFKey;
                    Token = SFToken;
                }
                else if (deliveryType.DeliveryTypeName.Contains("中通"))
                {
                    _deliveryType = "ZTO";
                }
                if (_deliveryType == "")
                {
                    result.Message = "友信达物流目前只有支持顺丰和中通两种快递方式";
                    return(result);
                }

                Dictionary <string, string> paramsData = new Dictionary <string, string>();
                paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo);
                paramsData.Add("warehouse_id", warehouse.LogisWarehouseCode);
                paramsData.Add("sm_code", _deliveryType);
                string responseStr = GetResponse(url, InitParams(paramsData));
                result = GetResult(JObject.Parse(responseStr), result);
                if (result.Status == true)
                {
                    // 生成出库单
                }

                return(result);
            }
            catch (Exception ex)
            {
                result.Message = "查询订单运单号报错:" + ex.StackTrace;
                return(result);
            }
        }
Пример #2
0
        /// <summary>
        /// 取消订单
        /// </summary>
        /// <param name="orderSysNo"></param>
        /// <returns></returns>
        /// <remarks>2016-07-05 陈海裕 创建</remarks>
        public override Result CancelOrderTrade(int orderSysNo, string reason = "")
        {
            // 订单id,用于日志记录
            _orderSysNo = orderSysNo;

            Result <string> result = new Result <string>();

            result.Status     = false;
            result.StatusCode = 0;
            result.Message    = "接口调用失败";
            string url = RequestUrl + "order/del";

            if (orderSysNo <= 0)
            {
                return(result);
            }

            try
            {
                SoOrder order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysNo);
                if (order == null)
                {
                    result.Message = "该订单不存在";
                    return(result);
                }
                ParaOnlinePaymentFilter filter = new ParaOnlinePaymentFilter();
                filter.OrderSysNo = orderSysNo;
                var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault();
                if (onlinePayment == null)
                {
                    result.Message = "订单不存在在线支付记录";
                    return(result);
                }

                Dictionary <string, string> paramsData = new Dictionary <string, string>();
                paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo);
                string postData    = InitParams(paramsData);
                string responseStr = GetResponse(url, postData);
                result = GetResult(JObject.Parse(responseStr), result);
                if (result.Status == true)
                {
                    // 删除物流返回订单记录
                    //BLL.CrossBorderLogistics.CrossBorderLogisticsOrderBo.Instance.DeleteByOrderSysNo(orderSysNo);
                    BLL.Order.SoOrderSyncLogisticsLogBo.Instance.DeleteByOrderSysNoAndCode(orderSysNo, (int)Code);
                    BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(0, 3, orderSysNo);
                }
            }
            catch (Exception ex)
            {
                result.Message = "向" + this.Code + "物流取消订单报错:" + ex.StackTrace;
                return(result);
            }

            return(result);
        }
Пример #3
0
        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="filter">查询参数</param>
        /// <returns>分页</returns>
        /// <remarks>2013-07-16 朱家宏 创建</remarks>
        public override Pager <CBFnOnlinePayment> GetAll(ParaOnlinePaymentFilter filter)
        {
            const string sql =
                @"(select a.sysno,a.sourcesysno,a.amount,b.paymentname,a.voucherno,a.createddate,a.status,a.BusinessOrderSysNo,
                            0 as TotalAmount,a.CreatedBy 
                            from FnOnlinePayment a 
                            left join BsPaymentType b on a.paymenttypesysno=b.sysno
                    where   
                            (@0 is null or a.sourcesysno=@0) and                                                                                                   --OrderSysNo
                            (@1 is null or exists (select 1 from splitstr(@1,',') tmp where tmp.col = a.PaymentTypeSysNo)) and       --支付类型                                                                                         --RmaType
                            (@2 is null or a.CreatedDate>=@2) and                                                                                                    --创建日期(起)
                            (@3 is null or a.CreatedDate<@3)                                                                                                             --创建日期(止) 
                    ) tb";

            var paymentTypeSysNos = filter.PaymentTypeSysNos != null?string.Join(",", filter.PaymentTypeSysNos) : null;

            //查询日期上限+1
            filter.EndDate = filter.EndDate == null ? (DateTime?)null : filter.EndDate.Value.AddDays(1);

            var paras = new object[]
            {
                filter.OrderSysNo, //  filter.OrderSysNo,
                paymentTypeSysNos, //  paymentTypeSysNos,
                filter.BeginDate,  //  filter.BeginDate,
                filter.EndDate     //,             filter.EndDate
            };

            var dataList  = Context.Select <CBFnOnlinePayment>("tb.*").From(sql);
            var dataCount = Context.Select <int>("count(0)").From(sql);
            var dataSum   = Context.Select <decimal>("sum(amount)").From(sql);

            dataList.Parameters(paras);
            dataCount.Parameters(paras);
            dataSum.Parameters(paras);

            var pager = new Pager <CBFnOnlinePayment>
            {
                PageSize    = filter.PageSize,
                CurrentPage = filter.Id
            };

            pager.TotalRows = dataCount.QuerySingle();
            pager.Rows      = dataList.OrderBy("tb.CreatedDate desc").Paging(pager.CurrentPage, filter.PageSize).QueryMany();

            if (pager.Rows.Any())
            {
                pager.Rows.First().TotalAmount = dataSum.QuerySingle();
            }

            return(pager);
        }
Пример #4
0
        /// <summary>
        /// 添加交易订单
        /// </summary>
        /// <param name="orderId">销售订单系统编号</param>
        /// <returns></returns>
        /// <remarks>
        /// 2016-3-21 杨浩 创建
        /// 2016-4-19 陈海裕 重构
        /// </remarks>
        public override Result AddOrderTrade(int orderId)
        {
            var result = new Result()
            {
                Status     = false,
                StatusCode = 0,
                Message    = "向" + this.Code + "物流推送订单失败"
            };


            try
            {
                var order = Hyt.BLL.Order.SoOrderBo.Instance.GetEntity(orderId);
                if (order == null)
                {
                    result.Status     = false;
                    result.Message    = string.Format("订单号{0}不存在!", orderId);
                    result.StatusCode = -100;
                }


                #region 旧参数

                //var receiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);
                //if (receiveAddress == null)
                //{
                //    result.Status = false;
                //    result.Message = string.Format("订单中的收货地址编号{0}不存在!", order.ReceiveAddressSysNo);
                //    result.StatusCode = -101;
                //}
                //var area = BLL.Basic.BasicAreaBo.Instance.GetArea(receiveAddress.AreaSysNo);
                //if (area == null)
                //{
                //    result.Status = false;
                //    result.Message = string.Format("地区({0})不存在!", receiveAddress.AreaSysNo);
                //    result.StatusCode = -103;
                //}
                //var city = BLL.Basic.BasicAreaBo.Instance.GetArea(area.ParentSysNo);
                //if (city == null)
                //{
                //    result.Status = false;
                //    result.Message = string.Format("城市({0})不存在!", area.ParentSysNo);
                //    result.StatusCode = -104;
                //}
                //var province = BLL.Basic.BasicAreaBo.Instance.GetArea(city.ParentSysNo);
                //if (province == null)
                //{
                //    result.Status = false;
                //    result.Message = string.Format("省份({0})不存在!", city.ParentSysNo);
                //    result.StatusCode = -105;
                //}

                //if (!result.Status)
                //    return result;
                //var param = "{\"orderId\":\"" + order.OrderNo + "\",";
                //param += "\"addr\":\"" + receiveAddress.StreetAddress + "\",";
                //param += "\"phone\":\"" + receiveAddress.MobilePhoneNumber + "\",";
                //param += "\"freight\":" + order.FreightAmount + ",";//运费
                //param += "\"orderDate\":\"" + order.CreateDate.ToString("yyyy-MM-dd") + "\",";
                //param += "\"province\":\"" + JsonStrEscape(province.AreaName) + "\",";
                //param += "\"city\":\"" + JsonStrEscape(city.AreaName) + "\",";
                //param += "\"area\":\"" + JsonStrEscape(area.AreaName) + "\",";
                //param += "\"total\":" + order.ProductAmount + ",";//订单总金额
                //param += "\"insuredFee\":0,";  //保价费用
                //param += "\"cardType\":\"0\","; //证件类型 (默认身份证则填0)
                //param += "\"expressCode\":\"SF\","; //物流公司编码
                //param += "\"busiMode\":\"BBC\","; //所属业务模式 (BBC/备货BC/直邮BC/个人物品)
                //param += "\"whCode\":\"FLC\",";   //发货仓库代号
                //param += "\"portCode\":\"5141\","; //口岸编码
                //param += "\"platformCode\":\"IE150604146855\",";//海关企业备案号
                //param += "\"cardNo\":\"" + receiveAddress.IDCardNo + "\",";//顾客身份证
                //param += "\"name\":\"" + JsonStrEscape(receiveAddress.Name) + "\",";
                ////param += "\"senderContact\":\"测试公司\",";
                ////param += "\"senderPhone\":\"13500000000\",";
                ////param += "\"tax\":\"" + orderInfo.TaxFee + "\",";
                //param += "\"orderItemList\":{";
                //param += "\"orderItems\":[";
                //var orderItemList = Hyt.BLL.Web.SoOrderBo.Instance.GetOrderItemListByOrderSysNo(orderId);
                //string orderItem = "";
                //foreach (var item in orderItemList)
                //{
                //    if (orderItem != "")
                //        orderItem += ",";
                //    orderItem += "{";
                //    //8712400110037
                //    //orderItem += "\"qty\":" + item.Quantity + ",\"price\":" + item.SalesUnitPrice + ",\"total\":" + item.SalesAmount + ",\"productId\":\""+item.ErpCode+"\",\"productName\":\"" + JsonStrEscape(item.ProductName) + "\"";
                //    orderItem += "\"qty\":" + item.Quantity + ",\"price\":" + item.SalesUnitPrice + ",\"total\":" + item.SalesAmount + ",\"productId\":\"8712400110136\",\"productName\":\"" + JsonStrEscape(item.ProductName) + "\"";
                //    orderItem += "}";
                //}

                //param += orderItem;
                //param += "]}}";
                #endregion
                string method = "wtdex.trade.order.add";

                order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);
                order.OrderItemList  = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo);
                //ParaVoucherFilter voucherFilter = new ParaVoucherFilter();
                //voucherFilter.SourceSysNo = order.SysNo;
                //CBFnReceiptVoucher recVoucher = BLL.Finance.FinanceBo.Instance.GetReceiptVouchers(voucherFilter).Rows.FirstOrDefault();
                //recVoucher.VoucherItems = BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherItem(recVoucher.SysNo);


                var filter = new ParaOnlinePaymentFilter();
                filter.OrderSysNo = orderId;
                var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault();

                if (onlinePayment == null)
                {
                    result.Message = "订单不存在在线支付记录";
                    return(result);
                }
                // 收货人 区 市 省
                BsArea receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo);
                BsArea receiverCity     = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo);
                BsArea receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo);
                // 发货人 市
                CBWhWarehouse warehouse   = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);
                BsArea        shipperCity = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo);

                DsDealer dealer = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo);

                LgDeliveryType deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo);



                var newOrder = new WTDOrder();
                newOrder.addr             = TConvert.ToString(order.ReceiveAddress.StreetAddress).Trim();
                newOrder.area             = TConvert.ToString(receiverDistrict.AreaName).Trim();
                newOrder.busiMode         = "BC";
                newOrder.cardNo           = TConvert.ToString(order.ReceiveAddress.IDCardNo);
                newOrder.cardType         = "0";
                newOrder.city             = TConvert.ToString(receiverCity.AreaName).Trim();
                newOrder.consumerAddr     = TConvert.ToString(order.ReceiveAddress.StreetAddress).Trim();
                newOrder.consumerArea     = TConvert.ToString(receiverDistrict.AreaName).Trim();
                newOrder.consumerCity     = TConvert.ToString(receiverCity.AreaName).Trim();
                newOrder.consumerName     = TConvert.ToString(order.ReceiveAddress.Name);
                newOrder.consumerPhone    = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber;
                newOrder.consumerProvince = TConvert.ToString(receiverProvince.AreaName).Trim();
                newOrder.destCity         = null;
                newOrder.expressCode      = "YT";// "SF";
                newOrder.expressNo        = null;
                newOrder.freight          = (double)order.FreightAmount;
                newOrder.ieFlag           = null;
                newOrder.insuredFee       = 0d;
                newOrder.invoice          = null;
                newOrder.invoiceHead      = null;
                newOrder.invoiceType      = null;
                newOrder.isgac            = 1;
                newOrder.isactpay         = "0";
                newOrder.isactlogistics   = "1";



                newOrder.mobile      = null;
                newOrder.name        = TConvert.ToString(order.ReceiveAddress.Name);
                newOrder.notes       = TConvert.ToString(order.Remarks).Trim();
                newOrder.orderDate   = order.CreateDate.ToString("yyyy-MM-dd");
                newOrder.orderId     = onlinePayment.BusinessOrderSysNo;
                newOrder.paymentCode = null;
                newOrder.phone       = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber;

                newOrder.pickMode      = "0";//BC、PS情况下必填0:散货/包裹1:大货/备货,有货物在我们仓库
                newOrder.platformCode  = config.PlatformCode;
                newOrder.portCode      = config.PortCode;
                newOrder.prodFlag      = null;
                newOrder.province      = TConvert.ToString(receiverProvince.AreaName).Trim();
                newOrder.seller        = null;
                newOrder.senderContact = TConvert.ToString(dealer.ErpName);
                newOrder.senderPhone   = !string.IsNullOrWhiteSpace(dealer.MobilePhoneNumber) ? dealer.MobilePhoneNumber : dealer.PhoneNumber;
                newOrder.tax           = (double)order.TaxFee;
                newOrder.total         = (double)order.ProductAmount;
                //newOrder.total = 100d;
                newOrder.whCode                   = TConvert.ToString(warehouse.LogisWarehouseCode);
                newOrder.zipCode                  = null;
                newOrder.orderItemList            = new WTDOrderItemList();
                newOrder.orderItemList.orderItems = new List <WTDOrderItem>();
                WTDOrderItem orderItem = new WTDOrderItem();
                foreach (var item in order.OrderItemList)
                {
                    var product = BLL.Product.PdProductBo.Instance.GetProductNoCache(item.ProductSysNo);
                    orderItem.groupBarcode = null;
                    orderItem.isGroup      = null;
                    orderItem.postTax      = null;
                    orderItem.price        = (double)item.SalesUnitPrice;
                    orderItem.productId    = product.ErpCode;
                    orderItem.productName  = TConvert.ToString(item.ProductName);
                    orderItem.qty          = item.Quantity;
                    orderItem.total        = (double)item.SalesAmount;
                    newOrder.orderItemList.orderItems.Add(orderItem);
                    //orderItem.groupBarcode = null;
                    //orderItem.isGroup = null;
                    //orderItem.postTax = null;
                    //orderItem.price = 50d;
                    //orderItem.productId = "8712400110136";
                    //orderItem.productName = TConvert.ToString(item.ProductName);
                    //orderItem.qty = 2;
                    //orderItem.total = 100d;
                    //newOrder.orderItemList.orderItems.Add(orderItem);
                    //break;
                }

                string postData = Util.Serialization.JsonUtil.ToJson2(newOrder);
                postData = InitParams(method, postData);

                var _result = Hyt.Util.WebUtil.PostForm(apiUrl, postData);

                result = GetResponseResult(_result);

                if (result.Status == true)
                {
                    var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog();

                    soOrderSyncLogisticsLog.OrderSysNo = orderId;
                    soOrderSyncLogisticsLog.Code       = (int)this.Code;

                    soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
                    soOrderSyncLogisticsLog.StatusCode     = "";
                    soOrderSyncLogisticsLog.StatusMsg      = "";
                    soOrderSyncLogisticsLog.Packets        = postData;
                    soOrderSyncLogisticsLog.ReceiptContent = _result;

                    soOrderSyncLogisticsLog.LastUpdateBy     = 0;
                    soOrderSyncLogisticsLog.LogisticsOrderId = "";

                    soOrderSyncLogisticsLog.CreateDate = DateTime.Now;
                    soOrderSyncLogisticsLog.CreatedBy  = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo;
                    SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog);


                    BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(1, 3, orderId);
                }
            }
            catch (Exception ex)
            {
                result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace;
                return(result);
            }

            return(result);
        }
Пример #5
0
        /// <summary>
        /// 支付报关推送
        /// </summary>
        /// <param name="order">订单实体</param>
        public override Result ApplyToCustoms(SoOrder order)
        {
            Result result = new Result()
            {
                Status     = false,
                StatusCode = 0,
                Message    = "未知错误"
            };

            //防止并发操作
            lock (lockHelper)
            {
                try
                {
                    if (order != null)
                    {
                        var onlinePaymentFilter = new ParaOnlinePaymentFilter()
                        {
                            OrderSysNo = order.SysNo,
                            Id         = 1
                        };

                        var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows;
                        var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);

                        DateTime dtNow = DateTime.Now;

                        //广州电子口岸
                        string xmlTemplte = "<VnbMessage>"
                                            + "<MessageHead>"
                                            + "<MessageCode>VNB3PARTY_GZEPORT</MessageCode>"
                                            + "<MessageID>" + dtNow.ToString("yyyyMMddHHmmss") + "0001" + "</MessageID>"
                                            + "<SenderID>" + payConfig.TLPaySenderID + "</SenderID>"
                                            + "<SendTime>" + dtNow.ToString("yyyy-MM-dd HH:mm:ss") + "</SendTime>"
                                            + "<ReceiptUrl>" + payConfig.TLPayReceiptUrl + "</ReceiptUrl>"
                                            + "<Sign>{0}</Sign>"
                                            + "</MessageHead>"
                                            + "<MessageBodyList>"
                                            + "<MessageBody>"
                                            + "<customICP>" + customsConfig.SenderID + "</customICP>"
                                            + "<customName>" + customsConfig.EbcName + "</customName>"
                                            + "<ciqType>00</ciqType>"
                                            + "<cbepComCode>C000000000001</cbepComCode>"
                                            + "<orderNo>" + onlinePayments.First().BusinessOrderSysNo + "</orderNo>"
                                            + "<payTransactionNo>" + onlinePayments.First().VoucherNo + "</payTransactionNo>"
                                            + "<payChnlID>" + (order.OrderSource == (int)Model.WorkflowStatus.OrderStatus.销售单来源.手机商城 ? "02" : "01") + "</payChnlID>"
                                            + "<payTime>" + onlinePayments.First().CreatedDate.ToString("yyyy-MM-dd HH:mm:ss") + "</payTime>"
                                            + "<payGoodsAmount>" + order.ProductAmount.ToString("F2") + "</payGoodsAmount>"
                                            + "<payTaxAmount>" + order.TaxFee.ToString("F2") + "</payTaxAmount>"
                                            + "<freight>" + order.FreightAmount.ToString("F2") + "</freight>"
                                            + "<payCurrency>142</payCurrency>"
                                            + "<payerName>" + receiveAddress.Name + "</payerName>"
                                            + "<payerDocumentType>01</payerDocumentType>"
                                            + "<payerDocumentNumber>" + receiveAddress.IDCardNo + "</payerDocumentNumber>"
                                            + "</MessageBody>"
                                            + "</MessageBodyList>"
                                            + "</VnbMessage>";

                        string sign      = FormsAuthentication.HashPasswordForStoringInConfigFile(string.Format(xmlTemplte, "") + payConfig.TLPaySignKey, "MD5").ToUpper();
                        string xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + string.Format(xmlTemplte, sign);

                        BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关推送报文:" + xmlString, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0);

                        HttpClient client = new HttpClient(payConfig.TLPayCustomsUrl);
                        string     back   = client.Post(xmlString);

                        BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关接口响应报文:" + back, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0);

                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(back);

                        XmlNode xmlNodeHead = xmlDoc.SelectSingleNode("//VnbMessage//MessageHead");
                        string  CommCode    = xmlNodeHead.SelectSingleNode("CommCode").InnerText;  //通讯状态码(请求方不填, 响应方返回)
                        string  BizStatus   = xmlNodeHead.SelectSingleNode("BizStatus").InnerText; //业务状态码(请求方不填, 响应方返回)

                        if (CommCode == "000000")
                        {
                            if (BizStatus != "BZ0001")
                            {
                                XmlNode xmlNodeBody = xmlDoc.SelectSingleNode("//VnbMessage//MessageBodyList//MessageBody");
                                string  retInfo     = xmlNodeBody.SelectSingleNode("retInfo").InnerText;
                                result.Message = retInfo;
                            }
                            else
                            {
                                result.Message = "请求已受理";
                                result.Status  = true;

                                //更新订单支付报关状态为处理中
                                Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo);
                                BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "TLPay推送接口调试成功!", LogStatus.系统日志目标类型.支付方式, order.SysNo, 0);
                            }
                        }
                        else
                        {
                            string retInfo = "通讯失败";
                            switch (CommCode)
                            {
                            case "HD0001":
                                retInfo = "无效的内容长度"; break;

                            case "HD0002":
                                retInfo = "请求报文为空"; break;

                            case "HD0003":
                                retInfo = "报文头格式错误"; break;

                            case "HD0004":
                                retInfo = "报文头必填字段为空"; break;

                            case "HD0005":
                                retInfo = "无效的报文消息码"; break;

                            case "HD0006":
                                retInfo = "无效的接入系统代码"; break;

                            case "HD0007":
                                retInfo = "无效的接入主机IP"; break;

                            case "HD0008":
                                retInfo = "签名验签错误,报文签名域不正确"; break;

                            default: break;
                            }
                            result.Message = retInfo;
                        }
                    }
                    else
                    {
                        result.Message = "该订单不存在!";
                    }
                }
                catch (Exception ex)
                {
                    result.Status  = false;
                    result.Message = ex.Message;
                    BLL.Log.SysLog.Instance.Error(LogStatus.系统日志来源.后台, "通联支付报关推送异常:" + ex.Message, ex);
                }
            }

            return(result);
        }
Пример #6
0
        /// <summary>
        /// 支付报关查询
        /// </summary>
        /// <param name="orderId">订单id</param>
        public override Result CustomsQuery(int orderId)
        {
            Result result = new Result()
            {
                Status     = false,
                StatusCode = 0,
                Message    = "未知错误"
            };

            //防止并发操作
            lock (lockHelper)
            {
                try
                {
                    var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderId);
                    if (order != null)
                    {
                        var onlinePaymentFilter = new ParaOnlinePaymentFilter()
                        {
                            OrderSysNo = order.SysNo,
                            Id         = 1
                        };

                        var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows;

                        DateTime dtNow = DateTime.Now;

                        string xmlTemplte = "<VnbMessage>"
                                            + "<MessageHead>"
                                            + "<MessageCode>VNB3PARTY_CUSTOMSQUERY</MessageCode>"
                                            + "<MessageID>" + dtNow.ToString("yyyyMMddHHmmss") + "0000" + "</MessageID>"
                                            + "<SenderID>" + payConfig.TLPaySenderID + "</SenderID>"
                                            + "<SendTime>" + dtNow.ToString("yyyy-MM-dd HH:mm:ss") + "</SendTime>"
                                            + "<Sign>{0}</Sign>"
                                            + "</MessageHead>"
                                            + "<MessageBodyList>"
                                            + "<MessageBody>"
                                            + "<orderNo>" + onlinePayments.First().BusinessOrderSysNo + "</orderNo>"
                                            + "<payDate>" + onlinePayments.First().CreatedDate.ToString("yyyy-MM-dd") + "</payDate>"
                                            + "</MessageBody>"
                                            + "</MessageBodyList>"
                                            + "</VnbMessage>";

                        string sign      = FormsAuthentication.HashPasswordForStoringInConfigFile(string.Format(xmlTemplte, "") + payConfig.TLPaySignKey, "MD5").ToUpper();
                        string xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + string.Format(xmlTemplte, sign);

                        BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关查询报文:" + xmlString, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0);

                        HttpClient client = new HttpClient(payConfig.TLPayCustomsUrl);
                        string     back   = client.Post(xmlString);

                        BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关查询接口响应报文:" + back, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0);

                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(back);

                        XmlNode xmlNodeHead = xmlDoc.SelectSingleNode("//VnbMessage//MessageHead");
                        string  CommCode    = xmlNodeHead.SelectSingleNode("CommCode").InnerText;  //通讯状态码(请求方不填, 响应方返回)
                        string  BizStatus   = xmlNodeHead.SelectSingleNode("BizStatus").InnerText; //业务状态码(请求方不填, 响应方返回)

                        if (CommCode == "000000")
                        {
                            XmlNode xmlNodeBody = xmlDoc.SelectSingleNode("//VnbMessage//MessageBodyList//MessageBody");
                            if (BizStatus != "BZ0001")
                            {
                                string retInfo = xmlNodeBody.SelectSingleNode("retInfo").InnerText;
                                result.Message = retInfo;
                            }
                            else
                            {
                                string returnCode = xmlNodeBody.SelectSingleNode("returnCode").InnerText;
                                string returnInfo = xmlNodeBody.SelectSingleNode("returnInfo").InnerText;

                                result.Message = returnInfo;

                                if (returnCode == "C01")
                                {
                                    result.Status = true;

                                    //更新订单支付报关状态为处理中
                                    Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.成功, 0, order.SysNo);
                                    BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "TLPay查询接口调试成功!", LogStatus.系统日志目标类型.支付方式, order.SysNo, 0);
                                }
                                else
                                {
                                    string customsStatus     = xmlNodeBody.SelectSingleNode("customsStatus").InnerText;
                                    string customsStatusInfo = "未上送";

                                    switch (customsStatus)
                                    {
                                    case "1":
                                        customsStatusInfo = "上送中"; break;

                                    case "2":
                                        customsStatusInfo = "上送完成"; break;

                                    case "3":
                                        customsStatusInfo = "已获取回执"; break;

                                    case "4":
                                        customsStatusInfo = "反馈成功"; break;

                                    case "5":
                                        customsStatusInfo = "反馈失败"; break;

                                    case "6":
                                        customsStatusInfo = "上送失败"; break;

                                    case "7":
                                        customsStatusInfo = "订单不存在"; break;

                                    default: break;
                                    }
                                    result.Message = customsStatusInfo;
                                }
                            }
                        }
                        else
                        {
                            string retInfo = "通讯失败";
                            switch (CommCode)
                            {
                            case "HD0001":
                                retInfo = "无效的内容长度"; break;

                            case "HD0002":
                                retInfo = "请求报文为空"; break;

                            case "HD0003":
                                retInfo = "报文头格式错误"; break;

                            case "HD0004":
                                retInfo = "报文头必填字段为空"; break;

                            case "HD0005":
                                retInfo = "无效的报文消息码"; break;

                            case "HD0006":
                                retInfo = "无效的接入系统代码"; break;

                            case "HD0007":
                                retInfo = "无效的接入主机IP"; break;

                            case "HD0008":
                                retInfo = "签名验签错误,报文签名域不正确"; break;

                            default: break;
                            }
                            result.Message = retInfo;
                        }
                    }
                    else
                    {
                        result.Message = "订单不存在!";
                    }
                }
                catch (Exception ex)
                {
                    result.Status  = false;
                    result.Message = ex.Message;
                    BLL.Log.SysLog.Instance.Error(LogStatus.系统日志来源.后台, "通联支付报关查询异常:" + ex.Message, ex);
                }
            }

            return(result);
        }
Пример #7
0
        /// <summary>
        /// 网上支付查询
        /// </summary>
        /// <param name="filter">查询条件</param>
        /// <returns>分页查询</returns>
        /// <remarks>2013-07-18 朱家宏 创建</remarks>
        public Pager <CBFnOnlinePayment> GetOnlinePayments(ParaOnlinePaymentFilter filter)
        {
            var pager = IFnOnlinePaymentDao.Instance.GetAll(filter);

            return(pager);
        }
Пример #8
0
        /// <summary>
        /// 海关报关
        /// </summary>
        /// <returns></returns>
        /// <remarks>2015-10-12 杨浩 创建</remarks>
        public override Result ApplyToCustoms(SoOrder order)
        {
            Result result = new Result()
            {
                Status = false
            };

            try
            {
                if (order != null)
                {
                    var ehkingMerchantId = config.EhkingMerhantId;
                    var ehkingKey        = config.EhkingKey;

                    var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);
                    if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店)
                    {
                        var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo);
                        if (dealer != null)
                        {
                            var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo);
                            if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝)
                            {
                                ehkingMerchantId = dealerPayType.AppKey;
                                ehkingKey        = dealerPayType.AppSecret;
                            }
                        }
                    }

                    var onlinePaymentFilter = new ParaOnlinePaymentFilter()
                    {
                        OrderSysNo = order.SysNo,
                        Id         = 1
                    };

                    var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows;

                    var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);

                    string nodeAuthorizationURL = config.EhkingNodeAuthorizationUrl;
                    string merchantId           = ehkingMerchantId;
                    string keyValue             = ehkingKey;
                    string serialNumber         = onlinePayments.First().VoucherNo;
                    string notifyUrl            = "http://admin.singingwhale.cn/ajax/notifyReceipt";// config.EhkingCustomsAsyncUrl;
                    string amount      = "0";
                    string Freight     = "0";
                    string GoodsAmount = "0";
                    string Tax         = "0";
                    //var customsConfig = Hyt.BLL.Config.Config.Instance.GetCustomsConfig();
                    string dxpid = "DXPENT0000012770";

                    //if(!string.IsNullOrEmpty(customsConfig.DxpId))
                    //    dxpid = customsConfig.DxpId;


                    StringBuilder sbHmac = new StringBuilder();

                    sbHmac.Append(merchantId);
                    sbHmac.Append(serialNumber);
                    sbHmac.Append(notifyUrl);

                    amount      = (order.CashPay * 100).ToString("F0");
                    Freight     = (order.FreightAmount * 100).ToString("F0");
                    GoodsAmount = (order.ProductAmount * 100).ToString("F0");
                    Tax         = (order.TaxFee * 100).ToString("F0");

                    sbHmac.Append(receiveAddress.Name);
                    sbHmac.Append(receiveAddress.IDCardNo);
                    sbHmac.Append(receiveAddress.MobilePhoneNumber);

                    sbHmac.Append(CustomsChannel);
                    sbHmac.Append(amount);
                    sbHmac.Append(Freight);
                    sbHmac.Append(GoodsAmount);
                    sbHmac.Append(Tax);
                    sbHmac.Append(dxpid);


                    string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue);

                    HttpClient client = new HttpClient(nodeAuthorizationURL);

                    string data = "{\"merchantId\":\"" + merchantId +
                                  "\",\"paySerialNumber\":\"" + serialNumber +
                                  "\",\"notifyUrl\":\"" + notifyUrl + "\"" +
                                  ",\"payer\": {" +
                                  "\"payerName\": \"" + receiveAddress.Name + "\"," +
                                  "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," +
                                  "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" +
                                  "}" +
                                  ",\"customsInfos\":[{\"customsChannel\":\"" + CustomsChannel +
                                  "\",\"amount\":\"" + amount +
                                  "\",\"freight\":\"" + Freight +
                                  "\",\"goodsAmount\":\"" + GoodsAmount +
                                  "\",\"tax\":\"" + Tax + "\",\"dxpid\":\"" + dxpid + "\"}],\"hmac\":\"" + hmac + "\"}";


                    BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data, "EhkingCustomsLog");

                    string responsestr = client.Post(data);

                    var back = JObject.Parse(responsestr);

                    if (back["status"].ToString() == "SUCCESS")
                    {
                        result.Message = "提交成功!";
                        result.Status  = true;
                        //更新订单支付报关状态为处理中
                        Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo);
                        BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + order.SysNo + ",支付信息报关提交成功!", LogStatus.系统日志目标类型.订单支付报关, order.SysNo, 0);
                    }
                    else if (back["status"].ToString() == "FAILED")
                    {
                        result.Message = "提交失败!";
                        result.Status  = false;
                        BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsLog");
                    }
                    else if (back["status"].ToString() == "ERROR")
                    {
                        if (back["error"].ToString() == "exception.record.exists.customsOrder")//已提交则设置状态为待处理
                        {
                            result.Message = "此订单已提交,请查询!";
                            Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo);
                        }
                        else
                        {
                            result.Message = "提交失败,错误代码:" + back["error"].ToString();
                        }

                        BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsERRORLog");
                        result.Status = false;
                    }
                    else
                    {
                        result.Message = "其他异常!";
                        result.Status  = false;
                        BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCustomsLog");
                    }
                    //推送国检
                    //Hyt.BLL.ApiPay.EhkingCip.PayProvider.ApplyToCustoms(order);
                }
            }
            catch (Exception ex)
            {
                result.Message = "报错!";
                result.Status  = false;
                BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsLog");
            }
            return(result);
        }
Пример #9
0
        /// <summary>
        /// 广州电子口岸海关申报
        /// </summary>
        /// <returns></returns>
        public override Result ApplyToCustomsDZ30(SoOrder order)
        {
            var result = base.ApplyToCustomsDZ30(order);

            try
            {
                if (order != null)
                {
                    var    ehkingMerchantId           = config.EhkingMerhantId;
                    var    ehkingKey                  = config.EhkingKey;
                    string EhkingNodeAuthorizationUrl = "https://api.ehking.com/customs/order";
                    string EhkingCustomsAsyncUrl      = "http://admin.gaopin999.com/Account/NotifyReceiptDZ30";

                    var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);
                    if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店)
                    {
                        var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo);
                        if (dealer != null)
                        {
                            var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo);
                            if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝)
                            {
                                ehkingMerchantId = dealerPayType.AppKey;
                                ehkingKey        = dealerPayType.AppSecret;
                            }
                        }
                    }

                    var onlinePaymentFilter = new ParaOnlinePaymentFilter()
                    {
                        OrderSysNo = order.SysNo,
                        Id         = 1
                    };

                    var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows;

                    var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);

                    string nodeAuthorizationURL = EhkingNodeAuthorizationUrl;       //请求地址
                    string merchantId           = ehkingMerchantId;                 //商户编号
                    string keyValue             = ehkingKey;                        //商户密钥
                    string customsChannels      = "GUANGZHOUSP";                    //报关通道:GUANGZHOUSP(广州公共服务)
                    string serialNumber         = onlinePayments.First().VoucherNo; //支付流水号
                    string notifyUrl            = EhkingCustomsAsyncUrl;            //异步回调
                    string amount               = "0";                              //报关金额
                    string Freight              = "0";                              //运费
                    string GoodsAmount          = "0";                              //支付货款
                    string Tax                  = "0";                              //税费
                    string insuredAmount        = "0";                              //保费
                    string merchantCommerceName = "广州鼎球生物科技有限公司";                   //企业备案名称
                    string merchantCommerceCode = "C011111100393744";               //企业在海关的备案号
                    string storeHouse           = "";                               //商品所在仓
                    string customsCode          = "5141";                           //广州机场    5141;南沙旅检    5165;南沙货港    5167;番禺东发    5169;广州邮办    5145;黄埔开发区  5208;太平海关驻沙田办事处  5216;广州萝岗    5130;佛山海关快件监管现场  5185
                    string ciqCode              = "442300";                         //机场的国检组织机构代码是:000067;黄埔开发区的组织机构代码:000077,黄埔状元谷组织机构代码:443433
                    string functionCode         = "BC";                             //单向海关-CUS,单向国检-CIQ,同时发送-BC
                    string businessType         = "B2C";                            //B2B2C,B2C

                    StringBuilder sbHmac = new StringBuilder();

                    sbHmac.Append(merchantId);
                    sbHmac.Append(serialNumber);
                    sbHmac.Append(notifyUrl);

                    amount      = (order.CashPay * 100).ToString("F0");
                    Freight     = (order.FreightAmount * 100).ToString("F0");
                    GoodsAmount = (order.ProductAmount * 100).ToString("F0");
                    Tax         = (order.TaxFee * 100).ToString("F0");

                    sbHmac.Append(receiveAddress.Name);
                    sbHmac.Append(receiveAddress.IDCardNo);
                    sbHmac.Append(receiveAddress.MobilePhoneNumber);

                    sbHmac.Append(customsChannels);
                    sbHmac.Append(amount);
                    sbHmac.Append(Freight);
                    sbHmac.Append(GoodsAmount);
                    sbHmac.Append(Tax);
                    sbHmac.Append(insuredAmount);
                    sbHmac.Append(merchantCommerceName);
                    sbHmac.Append(merchantCommerceCode);
                    sbHmac.Append(storeHouse);
                    sbHmac.Append(customsCode);
                    sbHmac.Append(ciqCode);
                    sbHmac.Append(functionCode);
                    sbHmac.Append(businessType);


                    string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue);

                    HttpClient client = new HttpClient(nodeAuthorizationURL);

                    string data = "{\"merchantId\":\"" + merchantId +
                                  "\",\"paySerialNumber\":\"" + serialNumber +
                                  "\",\"notifyUrl\":\"" + notifyUrl + "\"" +
                                  ",\"payer\": {" +
                                  "\"payerName\": \"" + receiveAddress.Name + "\"," +
                                  "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," +
                                  "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" +
                                  "}" +
                                  ",\"customsInfos\":[{\"customsChannel\":\"" + customsChannels +
                                  "\",\"amount\":\"" + amount +
                                  "\",\"freight\":\"" + Freight +
                                  "\",\"goodsAmount\":\"" + GoodsAmount +
                                  "\",\"tax\":\"" + Tax +
                                  "\",\"insuredAmount\":\"" + insuredAmount +
                                  "\",\"merchantCommerceName\":\"" + merchantCommerceName +
                                  "\",\"merchantCommerceCode\":\"" + merchantCommerceCode +
                                  "\",\"storeHouse\":\"" + storeHouse +
                                  "\",\"customsCode\":\"" + customsCode +
                                  "\",\"ciqCode\":\"" + ciqCode +
                                  "\",\"functionCode\":\"" + functionCode +
                                  "\",\"businessType\":\"" + businessType +
                                  "\"}],\"hmac\":\"" + hmac + "\"}";



                    string responsestr = client.Post(data);

                    BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data + ",------返回数据:" + responsestr, "EhkingCustomsDZ30Log");

                    var back = JObject.Parse(responsestr);

                    if (back["status"].ToString() == "SUCCESS")
                    {
                        result.Message = "提交成功!";
                        result.Status  = true;
                        //更新订单支付报关状态为处理中
                        Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo);
                        BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + order.SysNo + ",支付信息报关提交成功!", LogStatus.系统日志目标类型.订单支付报关, order.SysNo, 0);
                    }
                    else if (back["status"].ToString() == "FAILED")
                    {
                        result.Message = "提交失败!";
                        result.Status  = false;
                        BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsDZ30Log");
                    }
                    else if (back["status"].ToString() == "ERROR")
                    {
                        if (back["error"].ToString() == "exception.record.exists.customsOrder")//已提交则设置状态为待处理
                        {
                            //result.Message = "此订单已提交,请查询!";
                            //Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo);
                            result = CustomsQuery(order.SysNo);
                            return(result);
                        }
                        else
                        {
                            result.Message = "提交失败,错误代码:" + back["error"].ToString();
                        }

                        BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsDZ30ERRORLog");
                        result.Status = false;
                    }
                    else
                    {
                        result.Message = "其他异常!";
                        result.Status  = false;
                        BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCustomsDZ30Log");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Message = "报错!";
                result.Status  = false;
                BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsDZ30Log");
            }
            return(result);
        }
Пример #10
0
        /// <summary>
        /// 海关支付报关查询
        /// </summary>
        /// <param name="orderId">订单编号</param>
        /// <returns></returns>
        /// <remarks>2015-12-31 杨浩 创建</remarks
        public override Result CustomsQuery(int orderId)
        {
            Result result = new Result()
            {
                Status = false
            };

            var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderId);

            var ehkingMerchantId = config.EhkingMerhantId;
            var ehkingKey        = config.EhkingKey;

            var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);

            if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店)
            {
                var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo);
                if (dealer != null)
                {
                    var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo);
                    if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝)
                    {
                        ehkingMerchantId = dealerPayType.AppKey;
                        ehkingKey        = dealerPayType.AppSecret;
                    }
                }
            }

            var onlinePaymentFilter = new ParaOnlinePaymentFilter()
            {
                OrderSysNo = orderId,
                Id         = 1
            };
            var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows;

            if (onlinePayments.Count() <= 0)
            {
                result.Status  = false;
                result.Message = "订单没有支付信息!";
            }
            else
            {
                string responsestr = "";
                string data        = "";
                try
                {
                    string     serialNumber = onlinePayments.First().VoucherNo;
                    string     url          = "https://api.ehking.com/customs/query";//查询网关
                    string     hmac         = Digest.HmacSign(ehkingMerchantId + serialNumber, ehkingKey);
                    HttpClient client       = new HttpClient(url);
                    data        = "{\"merchantId\":\"" + ehkingMerchantId + "\",\"paySerialNumber\":\"" + serialNumber + "\",\"hmac\":\"" + hmac + "\"}";
                    responsestr = client.Post(data);

                    var back                  = JObject.Parse(responsestr);
                    var customsInfos          = back.Property("customsInfos") != null ? back["customsInfos"][0] : back;
                    OrderStatus.支付报关状态 status = OrderStatus.支付报关状态.失败;
                    if (customsInfos["status"].ToString() == "SUCCESS")
                    {
                        result.Message = "SUCCESS";
                        result.Status  = true;
                        status         = OrderStatus.支付报关状态.成功;
                    }
                    else if ("PROCESSING" == customsInfos["status"].ToString())
                    {
                        result.Message = "海关正在审核...,稍后再查询!";
                        status         = OrderStatus.支付报关状态.处理中;
                    }
                    else
                    {
                        //BLL.Log.LocalLogBo.Instance.Write("失败!" + responsestr, "CustomsQueryLog");
                        result.Message = "易宝返回状态:" + customsInfos["status"].ToString() + "(" + (back.Property("customsInfos") == null?customsInfos["error"].ToString():"") + ")";
                    }


                    Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)status, 0, orderId);
                }
                catch (Exception ex)
                {
                    result.Status  = false;
                    result.Message = "系统异常!";
                    BLL.Log.LocalLogBo.Instance.Write("\r\n报错!" + ex.Message + ";responsestr=" + responsestr + ";data=" + data, "CustomsQuery");
                }
            }

            return(result);
        }
Пример #11
0
        /// <summary>
        /// 添加交易订单
        /// </summary>
        /// <param name="orderId">销售订单系统编号</param>
        /// <returns></returns>
        /// <remarks></remarks>
        ///  <remarks>2016-3-8 杨浩 创建</remarks>
        ///  <remarks>2016-09-22 周 重构</remarks>
        public override Result AddOrderTrade(int orderId)
        {
            var result = new Result()
            {
                Status     = false,
                StatusCode = 0,
                Message    = "向" + this.Code + "物流推送订单失败"
            };

            #region
            try
            {
                var order = Hyt.BLL.Order.SoOrderBo.Instance.GetEntity(orderId);
                if (order == null)
                {
                    result.Status     = false;
                    result.Message    = string.Format("订单号{0}不存在!", orderId);
                    result.StatusCode = -100;
                }

                order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);
                order.OrderItemList  = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo);
                var filter = new ParaOnlinePaymentFilter();
                filter.OrderSysNo = orderId;
                var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault();

                if (onlinePayment == null)
                {
                    result.Message = "订单不存在在线支付记录";
                    return(result);
                }
                // 收货人 区 市 省
                BsArea receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo);
                BsArea receiverCity     = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo);
                BsArea receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo);
                // 发货人 市
                CBWhWarehouse  warehouse    = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);
                BsArea         shipperCity  = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo);
                DsDealer       dealer       = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo);
                LgDeliveryType deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo);

                var newOrder = new CreatedOrderApiRequest();
                newOrder.OutOrderNo                     = order.SysNo.ToString();
                newOrder.DeliveryCode                   = "3";//暂时默认1(后期此参数作废)
                newOrder.ReceiverName                   = TConvert.ToString(order.ReceiveAddress.Name);
                newOrder.ReceiverMobile                 = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber;
                newOrder.ReceiverProvince               = TConvert.ToString(receiverProvince.AreaName).Trim();
                newOrder.ReceiverCity                   = TConvert.ToString(receiverCity.AreaName).Trim();
                newOrder.ReceiverDistrict               = TConvert.ToString(receiverDistrict.AreaName).Trim();
                newOrder.ReceiverAddress                = TConvert.ToString(order.ReceiveAddress.StreetAddress).Trim();
                newOrder.ReceiverIdCard                 = TConvert.ToString(order.ReceiveAddress.IDCardNo);
                newOrder.ReceiverFrontIdCardImageUrl    = HttpContext.Current.Request.Url.Host + TConvert.ToString(order.ReceiveAddress.IDCardImgs);
                newOrder.ReceiverOppositeIdCardImageUrl = HttpContext.Current.Request.Url.Host + TConvert.ToString(order.ReceiveAddress.IDCardImgs);
                newOrder.UserRemark                     = order.Remarks;

                newOrder.ThirdPlatformPaymentName = Enum.GetName(typeof(Hyt.Model.CommonEnum.PayCode), order.PayTypeSysNo);
                var    payment       = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePaymentBySourceSysNo(orderId);
                string PaymentNumber = "";
                if (payment != null)
                {
                    PaymentNumber = payment.VoucherNo;
                }
                newOrder.ThirdPlatformPaymentNumber = PaymentNumber;

                newOrder.Items = new List <CreatedOrderItemRequest>();
                CreatedOrderItemRequest orderItem = new CreatedOrderItemRequest();

                foreach (var item in order.OrderItemList)
                {
                    var product = BLL.Product.PdProductBo.Instance.GetProductNoCache(item.ProductSysNo);
                    orderItem.SkuId    = product.ErpCode;
                    orderItem.Quantity = item.Quantity;
                    newOrder.Items.Add(orderItem);
                }
                var json = Newtonsoft.Json.JsonConvert.SerializeObject(newOrder);
                //推送订单
                var _result = CreatedOrder(newOrder);
                if (_result.ResultCode == 200)
                {
                    var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog();

                    soOrderSyncLogisticsLog.OrderSysNo = orderId;
                    soOrderSyncLogisticsLog.Code       = (int)this.Code;

                    soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
                    soOrderSyncLogisticsLog.StatusCode     = "";
                    soOrderSyncLogisticsLog.StatusMsg      = "";
                    soOrderSyncLogisticsLog.Packets        = json;
                    soOrderSyncLogisticsLog.ReceiptContent = _result.Tag.ToString();

                    soOrderSyncLogisticsLog.LastUpdateBy     = 0;
                    soOrderSyncLogisticsLog.LogisticsOrderId = "";

                    soOrderSyncLogisticsLog.CreateDate = DateTime.Now;
                    soOrderSyncLogisticsLog.CreatedBy  = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo;
                    SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog);
                    BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(1, 3, orderId);
                    result.Message = "向" + this.Code + "物流推送订单成功:回执单号:" + _result.Tag.ToString();
                }
                else
                {
                    result.Message = _result.Message;
                }
            }
            catch (Exception ex)
            {
                result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace;
                return(result);
            }
            #endregion

            return(result);
        }
Пример #12
0
        /// <summary>
        /// 添加交易订单
        /// </summary>
        /// <param name="orderSysno"></param>
        /// <returns>
        /// 2016-04-09 陈海裕 创建
        /// 2016-08-20 杨浩   重构
        /// </returns>
        public override Result AddOrderTrade(int orderSysno)
        {
            LogisticsLogin();

            var result = new Result <string>();

            result.Status     = false;
            result.StatusCode = 0;
            result.Message    = "接口调用失败";
            string url = RequestUrl + "Express/uploadOrders";

            if (orderSysno <= 0)
            {
                return(result);
            }

            try
            {
                var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysno);
                if (order == null)
                {
                    result.Message = "该订单不存在";
                    return(result);
                }

                order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);
                order.OrderItemList  = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo);
                var voucherFilter = new ParaVoucherFilter();
                voucherFilter.SourceSysNo = order.SysNo;
                var recVoucher = BLL.Finance.FinanceBo.Instance.GetReceiptVouchers(voucherFilter).Rows.FirstOrDefault();
                recVoucher.VoucherItems = BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherItem(recVoucher.SysNo);
                // 收货人 区 市 省
                BsArea receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo);
                BsArea receiverCity     = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo);
                BsArea receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo);
                // 发货人 市
                CBWhWarehouse warehouse       = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);
                BsArea        shipperDistrict = BLL.Basic.BasicAreaBo.Instance.GetAreaList(warehouse.CitySysNo).FirstOrDefault();
                BsArea        shipperCity     = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo);
                BsArea        shipperProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.ProvinceSysNo);

                DsDealer dealer = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo);

                LgDeliveryType deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo);

                ParaOnlinePaymentFilter filter = new ParaOnlinePaymentFilter();
                filter.OrderSysNo = orderSysno;
                var   onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault();
                Regex regex         = new Regex("\t|\n|\r");

                OrderList newOrderList = new OrderList();
                newOrderList.PrintType = "@1,@2";
                newOrderList.list      = new List <LGOrder>();
                LGOrder newOrder = new LGOrder();
                newOrder.Addr          = "中国," + receiverProvince.AreaName + "," + receiverCity.AreaName + "," + receiverDistrict.AreaName + "," + order.ReceiveAddress.StreetAddress;
                newOrder.Addr          = regex.Replace(newOrder.Addr, "");
                newOrder.CardNo        = order.ReceiveAddress.IDCardNo;
                newOrder.Create_Addr   = "中国," + shipperProvince.AreaName + "," + shipperCity.AreaName + "," + shipperDistrict.AreaName + ",";
                newOrder.Create_Addr   = regex.Replace(newOrder.Create_Addr, "");
                newOrder.Create_CardNo = "";
                newOrder.Create_Name   = "澳门爱勤";
                newOrder.Create_Phone  = !string.IsNullOrWhiteSpace(dealer.MobilePhoneNumber) ? dealer.MobilePhoneNumber : dealer.PhoneNumber;
                newOrder.id            = order.SysNo.ToString();
                newOrder.Name          = order.ReceiveAddress.Name;
                newOrder.OrderType     = "A";
                newOrder.PayCardNo     = order.ReceiveAddress.IDCardNo;
                newOrder.PayCurrency   = "CNY";
                newOrder.PayName       = order.ReceiveAddress.Name;
                newOrder.PayNo         = recVoucher.VoucherItems[0].VoucherNo;
                newOrder.PayPhone      = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber;
                newOrder.PayRemark     = "";
                newOrder.PayTime       = order.CreateDate.ToString();
                newOrder.PayType       = GetPayType(order.PayTypeSysNo);// "alipay";
                newOrder.PayUser       = order.CustomerSysNo.ToString();
                newOrder.Phone         = newOrder.PayPhone;
                newOrder.Price         = order.OrderAmount;
                newOrder.Remark        = order.DeliveryRemarks;
                newOrder.TaxFee        = order.TaxFee;
                newOrder.TranFee       = order.FreightAmount;
                newOrder.Content       = "";
                foreach (var item in order.OrderItemList)
                {
                    var productStock = BLL.Warehouse.PdProductStockBo.Instance.GetEntityByWP(order.DefaultWarehouseSysNo, item.ProductSysNo);
                    newOrder.Content += productStock.Barcode + "," + item.Quantity + "," + item.SalesUnitPrice + "|";
                }
                if (!string.IsNullOrWhiteSpace(newOrder.Content))
                {
                    newOrder.Content = newOrder.Content.Substring(0, newOrder.Content.Length - 1);
                }
                newOrderList.list.Add(newOrder);

                Dictionary <string, string> paramsData = new Dictionary <string, string>();
                paramsData.Add("token", IdentifyPass);
                paramsData.Add("postdata", Util.Serialization.JsonUtil.ToJson(newOrderList));
                string postData    = InitParams(paramsData);
                string responseStr = GetResponse(url, postData);


                var jObject = JObject.Parse(responseStr);


                var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog();

                soOrderSyncLogisticsLog.OrderSysNo = orderSysno;
                soOrderSyncLogisticsLog.Code       = (int)this.Code;

                soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
                soOrderSyncLogisticsLog.StatusCode     = "";
                soOrderSyncLogisticsLog.StatusMsg      = "";
                soOrderSyncLogisticsLog.Packets        = postData;
                soOrderSyncLogisticsLog.ReceiptContent = responseStr;

                string status = jObject["status"].ToString();

                if (status == "-1")
                {
                    result.Status  = false;
                    result.Message = "未登录,请重试!";
                    IdentifyPass   = string.Empty;//清空身份凭证
                }
                else if (status == "1")
                {
                    for (int i = 0; i < jObject["data"].Count(); i++)
                    {
                        if (jObject["data"][i]["status"].ToString() == "1")
                        {
                            soOrderSyncLogisticsLog.LastUpdateBy     = 0;
                            soOrderSyncLogisticsLog.LogisticsOrderId = jObject["data"][i]["id"].ToString();
                            soOrderSyncLogisticsLog.CreateDate       = DateTime.Now;
                            soOrderSyncLogisticsLog.CreatedBy        = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo;
                            SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog);
                            BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.已推送, 3, orderSysno);
                            result.Status  = true;
                            result.Message = "推单成功";
                        }
                        else
                        {
                            soOrderSyncLogisticsLog.CreateDate = DateTime.Now;
                            SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog);
                            result.Status  = false;
                            result.Message = jObject["data"][i]["message"].ToString();
                        }
                    }
                }
                else
                {
                    try
                    {
                        SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog);
                    }
                    catch { }

                    result.Status  = false;
                    result.Message = jObject["message"].ToString();
                }
            }
            catch (Exception ex)
            {
                result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace;
                return(result);
            }

            return(result);
        }
Пример #13
0
 /// <summary>
 /// 分页查询
 /// </summary>
 /// <param name="filter">查询参数</param>
 /// <returns>分页</returns>
 /// <remarks>2013-07-16 朱家宏 创建</remarks>
 public abstract Pager <CBFnOnlinePayment> GetAll(ParaOnlinePaymentFilter filter);
Пример #14
0
        /// <summary>
        /// 添加交易订单
        /// </summary>
        /// <param name="orderSysno"></param>
        /// <returns>2016-04-09 陈海裕 创建</returns>
        public override Result AddOrderTrade(int orderSysno)
        {
            // 订单id,用于日志记录
            _orderSysNo = orderSysno;

            var result = new Result <string>();

            result.Status     = false;
            result.StatusCode = 0;
            result.Message    = "接口调用失败";
            string url = RequestUrl + "order/create";

            if (orderSysno <= 0)
            {
                return(result);
            }

            try
            {
                var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysno);
                if (order == null)
                {
                    result.Message = "该订单不存在";
                    return(result);
                }
                order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);
                order.OrderItemList  = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo);
                var voucherFilter = new ParaVoucherFilter();
                voucherFilter.SourceSysNo = order.SysNo;
                var recVoucher = BLL.Finance.FinanceBo.Instance.GetReceiptVouchers(voucherFilter).Rows.FirstOrDefault();
                recVoucher.VoucherItems = BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherItem(recVoucher.SysNo);
                // 收货人 区 市 省
                var receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo);
                var receiverCity     = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo);
                var receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo);
                // 发货人 市
                var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);

                var shipperCity = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo);

                if (string.IsNullOrEmpty(warehouse.LogisWarehouseCode))
                {
                    Result <string> whResult = GetWarehouseId();
                    if (!whResult.Status)
                    {
                        return(whResult);
                    }
                    else
                    {
                        warehouse.LogisWarehouseCode = whResult.Data.Split(':')[0].Replace("{", "").Replace("}", "").Replace("\"", "").Trim();
                        BLL.Warehouse.WhWarehouseBo.Instance.Update(warehouse);
                    }
                }

                if (string.IsNullOrEmpty(receiverDistrict.AreaCode) || string.IsNullOrEmpty(receiverCity.AreaCode) ||
                    string.IsNullOrEmpty(receiverProvince.AreaCode) || string.IsNullOrEmpty(shipperCity.AreaCode))
                {
                    Result <List <YSArea> > areaResult = new Result <List <YSArea> >();
                    areaResult.Data = new List <YSArea>();
                    for (int i = 0; i < 8; i++)
                    {
                        areaResult.Data.AddRange(GetYSAreaData(i + 1).Data);
                    }
                    if (string.IsNullOrEmpty(receiverProvince.AreaCode))
                    {
                        YSArea ysArea = areaResult.Data.Find((p => p.area_name == receiverProvince.AreaName.Trim() || p.old_name == receiverProvince.AreaName.Trim()));
                        if (ysArea != null)
                        {
                            receiverProvince.AreaCode = ysArea.id.ToString();
                            BLL.Basic.BasicAreaBo.Instance.Update(receiverProvince);
                        }
                    }

                    if (string.IsNullOrEmpty(receiverCity.AreaCode))
                    {
                        YSArea ysArea = areaResult.Data.Find(p => (p.area_name == receiverCity.AreaName.Trim() || p.old_name == receiverCity.AreaName.Trim()) && p.pid.ToString() == receiverProvince.AreaCode);
                        if (ysArea != null)
                        {
                            receiverCity.AreaCode = ysArea.id.ToString();
                            BLL.Basic.BasicAreaBo.Instance.Update(receiverCity);
                        }
                    }
                    if (string.IsNullOrEmpty(receiverDistrict.AreaCode))
                    {
                        YSArea ysArea = areaResult.Data.Find(p => (p.area_name == receiverDistrict.AreaName.Trim() || p.old_name == receiverDistrict.AreaName.Trim()) && p.pid.ToString() == receiverCity.AreaCode);
                        if (ysArea != null)
                        {
                            receiverDistrict.AreaCode = ysArea.id.ToString();
                            BLL.Basic.BasicAreaBo.Instance.Update(receiverDistrict);
                        }
                    }


                    if (string.IsNullOrEmpty(shipperCity.AreaCode))
                    {
                        if (string.IsNullOrEmpty(shipperCity.AreaCode))
                        {
                            shipperCity.AreaCode = shipperCity.SysNo.ToString();
                        }

                        //YSArea ysArea = areaResult.Data.Find(p => p.area_name == receiverProvince.AreaName.Trim() || p.old_name == receiverDistrict.AreaName.Trim());
                        //if (ysArea != null)
                        //{
                        //    shipperCity.AreaCode = ysArea.id.ToString();
                        //    BLL.Basic.BasicAreaBo.Instance.Update(shipperCity);
                        //}
                    }
                }



                var dealer = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo);

                var deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo);

                var filter = new ParaOnlinePaymentFilter();
                filter.OrderSysNo = orderSysno;
                var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault();

                if (onlinePayment == null)
                {
                    result.Message = "订单不存在在线支付记录";
                    return(result);
                }

                string _deliveryType = "";
                if (deliveryType.DeliveryTypeName.Contains("顺丰"))
                {
                    _deliveryType = "SF";
                    //CustomerCode = SFCustomerCode;
                    //Key = SFKey;
                    Token = SFToken;
                }
                else if (deliveryType.DeliveryTypeName.Contains("中通"))
                {
                    _deliveryType = "ZTO";
                }
                if (_deliveryType == "")
                {
                    result.Message = "友信达物流目前只有支持顺丰和中通两种快递方式";
                    return(result);
                }

                // 易宝支付有限公司 PTE51001409230000001
                var paramsData = new Dictionary <string, string>();

                decimal grossWeight  = 0m;
                decimal netWeight    = 0m;
                var     error        = "";
                string  productSku   = "";
                string  supplierCode = "";
                string  productName  = "";
                string  qty          = "";
                string  price        = "";
                for (int i = 0; i < order.OrderItemList.Count; i++)
                {
                    var product = BLL.Product.PdProductBo.Instance.GetProduct(order.OrderItemList[i].ProductSysNo);
                    grossWeight += (product.GrosWeight) * order.OrderItemList[i].Quantity;
                    netWeight   += (product.NetWeight) * order.OrderItemList[i].Quantity;
                    var productStock = BLL.Warehouse.PdProductStockBo.Instance.GetEntityByWP(order.DefaultWarehouseSysNo, order.OrderItemList[i].ProductSysNo);

                    if (productStock == null)
                    {
                        error += order.OrderItemList[i].ProductSysNo + ",";
                        continue;
                    }

                    #region 条形码商品
                    var RefProductName     = order.OrderItemList[i].ProductName;
                    var RefProductSysNo    = order.OrderItemList[i].ProductSysNo;
                    var RefProductQuantity = order.OrderItemList[i].Quantity;
                    BLL.Product.PdProductBo.Instance.RefProductQuantity(ref RefProductSysNo, ref RefProductQuantity, ref RefProductName, order.SysNo);
                    #endregion

                    //// 订单商品
                    //paramsData.Add("products[" + i + "][product_sku]", product.ErpCode);
                    //paramsData.Add("products[" + i + "][supplier_code]", "");
                    ////paramsData.Add("products[" + i + "][product_name]", order.OrderItemList[i].ProductName);
                    ////paramsData.Add("products[" + i + "][qty]", order.OrderItemList[i].Quantity.ToString());
                    //paramsData.Add("products[" + i + "][product_name]", RefProductName);
                    //paramsData.Add("products[" + i + "][qty]", RefProductQuantity.ToString());
                    ////paramsData.Add("products[" + i + "][price]",(order.OrderItemList[i].SalesUnitPrice + order.OrderItemList[i].ChangeAmount).ToString());
                    productSku += "&products[" + i + "][product_sku]=" + product.ErpCode;
                    productSku += "&products[" + i + "][supplier_code]=";
                    productSku += "&products[" + i + "][product_name]=" + order.OrderItemList[i].ProductName;
                    productSku += "&products[" + i + "][qty]=" + RefProductQuantity;
                    decimal amount = Math.Round(((order.OrderItemList[i].SalesAmount + order.OrderItemList[i].ChangeAmount) / order.OrderItemList[i].Quantity), 4);
                    productSku += "&products[" + i + "][price]=" + amount;
                    //paramsData.Add("products[" + i + "][price]", amount.ToString());
                    //order.OrderItemList[i].SalesAmount+order.OrderItemList[i].ChangeAmount=(order.OrderItemList[i].SalesUnitPrice*order.OrderItemList[i].Quantity)  =>
                    //order.OrderItemList[i].SalesUnitPrice=(order.OrderItemList[i].SalesAmount + order.OrderItemList[i].ChangeAmount) / order.OrderItemList[i].Quantity
                }

                //2016-10-28 18:39 临时处理报错问题
                if (!string.IsNullOrWhiteSpace(error))
                {
                    result.Message = this.Code + ":商品编号(" + error.TrimEnd(',') + ")在库存中找不到,无法获取SKU,请入库。";
                    return(result);
                }
                paramsData.Add("address_remark", "");
                paramsData.Add("products", "products");
                paramsData.Add("card_no", order.ReceiveAddress.IDCardNo);
                paramsData.Add("card_type", "01");
                paramsData.Add("currency_code", "RMB");
                paramsData.Add("customize_category", "");
                paramsData.Add("express_method", "1");
                paramsData.Add("tracking_number", "");
                paramsData.Add("inter_tracking_number", "");
                paramsData.Add("note", "");
                paramsData.Add("freight", order.FreightAmount.ToString());
                paramsData.Add("gross_weight", grossWeight.ToString());
                paramsData.Add("net_weight", netWeight.ToString());
                paramsData.Add("is_valuation", "0");
                paramsData.Add("valuation_fee", order.TaxFee.ToString("0.00"));
                paramsData.Add("valuation_value", order.OrderAmount.ToString("0.00"));
                paramsData.Add("order_time", CreateTimeStamp(order.CreateDate).ToString());
                paramsData.Add("pay_company", "易宝支付有限公司");
                paramsData.Add("pay_company_no", config.CIECode);// 信营商检企业备案号
                paramsData.Add("pay_no", recVoucher.VoucherItems.FirstOrDefault().VoucherNo);
                paramsData.Add("receiver_city_id", receiverCity.AreaCode);
                paramsData.Add("receiver_district_id", receiverDistrict.AreaCode);
                paramsData.Add("receiver_name", order.ReceiveAddress.Name);
                //paramsData.Add("receiver_postcode", order.ReceiveAddress.ZipCode);
                paramsData.Add("receiver_postcode", "000000");// 无邮政编码,默认六个零
                paramsData.Add("receiver_province_id", receiverProvince.AreaCode);
                paramsData.Add("receiver_fax", receiverProvince.AreaCode);
                paramsData.Add("receiver_tel", order.ReceiveAddress.MobilePhoneNumber);
                paramsData.Add("receiver_tel2", order.ReceiveAddress.PhoneNumber);
                paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo);
                paramsData.Add("receiver_address", order.ReceiveAddress.StreetAddress);
                paramsData.Add("shipper_city", shipperCity.AreaName);
                paramsData.Add("shipper_country", "CN");
                //paramsData.Add("shipper_country", "HK");
                paramsData.Add("shipper_name", !string.IsNullOrWhiteSpace(warehouse.BackWarehouseName) ? warehouse.BackWarehouseName : dealer.ErpName);
                paramsData.Add("sm_code", _deliveryType);
                paramsData.Add("tax_amount", order.TaxFee.ToString());
                paramsData.Add("total_amount", order.OrderAmount.ToString());
                paramsData.Add("total_product_amount", (order.ProductAmount + order.ProductChangeAmount).ToString());
                //paramsData.Add("wrap_type", "2C1");
                paramsData.Add("wrap_type", "4M");
                paramsData.Add("warehouse_id", warehouse.LogisWarehouseCode);//广州白云
                paramsData.Add("shipper_tel", string.IsNullOrWhiteSpace(dealer.MobilePhoneNumber) ? dealer.PhoneNumber : dealer.MobilePhoneNumber);
                paramsData.Add("shipper_address", warehouse.StreetAddress);
                string postData   = InitParams(paramsData);
                string timerstamp = CreateTimeStamp();
                //postData += Key + timerstamp;
                postData = postData.Replace("&products=products", productSku + supplierCode + productName + qty + price);
                string responseStr = GetResponse(url, postData, timerstamp, Key);

                result = GetResult(JObject.Parse(responseStr), result);

                var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog();

                soOrderSyncLogisticsLog.OrderSysNo = orderSysno;
                soOrderSyncLogisticsLog.Code       = (int)this.Code;

                soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
                soOrderSyncLogisticsLog.StatusCode     = "";
                soOrderSyncLogisticsLog.StatusMsg      = "";
                soOrderSyncLogisticsLog.Packets        = postData;
                soOrderSyncLogisticsLog.ReceiptContent = responseStr;
                if (result.Status == true)
                {
                    soOrderSyncLogisticsLog.LastUpdateBy     = 0;
                    soOrderSyncLogisticsLog.LogisticsOrderId = JObject.Parse(responseStr)["data"]["order_sn"].ToString();

                    soOrderSyncLogisticsLog.CreateDate = DateTime.Now;
                    soOrderSyncLogisticsLog.CreatedBy  = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo;
                    SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog);

                    BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.已推送, 3, orderSysno);
                }
            }
            catch (Exception ex)
            {
                result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace;
                return(result);
            }

            return(result);
        }
Пример #15
0
        /// <summary>
        /// 查询订单物流信息
        /// </summary>
        /// <param name="orderSysNo">订单号</param>
        /// <returns></returns>
        /// <remarks>2016-04-09 陈海裕 创建</remarks>
        public override Result <string> GetLogisticsTracking(int orderSysNo)
        {
            Result <string> result = new Result <string>();

            result.Status     = false;
            result.StatusCode = 0;
            result.Message    = "接口调用失败";
            string url = RequestUrl + "order/tracking";

            if (orderSysNo <= 0)
            {
                return(result);
            }

            var orderInfo = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysNo);
            ParaOnlinePaymentFilter filter = new ParaOnlinePaymentFilter();

            filter.OrderSysNo = orderSysNo;
            var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault();

            if (onlinePayment == null)
            {
                result.Message = "订单不存在在线支付记录";
                return(result);
            }

            try
            {
                Dictionary <string, string> paramsData = new Dictionary <string, string>();
                paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo);
                paramsData.Add("type", "reference_no");

                string responseStr = GetResponse(url, InitParams(paramsData));
                var    jsonResult  = JObject.Parse(responseStr);

                if (jsonResult.Property("state") != null && jsonResult["state"].ToString() == "True")
                {
                    result.Status     = true;
                    result.StatusCode = 1;
                    result.Message    = "接口调用成功";

                    #region 查询订单
                    url         = RequestUrl + "order/view";
                    responseStr = GetResponse(url, InitParams(paramsData));
                    var _jsonResult = JObject.Parse(responseStr);
                    if (_jsonResult.Property("state") != null && _jsonResult["state"].ToString().ToLower() == "true")
                    {
                        string tracking_number = _jsonResult["data"]["tracking_number"].ToString();
                        if (tracking_number != "" && orderInfo.CBLogisticsSendStatus != (int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.成功)
                        {
                            if (orderInfo.Status == (int)OrderStatus.销售单状态.待创建出库单)
                            {
                                //BLL.Order.SoOrderBo.Instance.Ship(orderSysNo,tracking_number);
                            }

                            //BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.成功, 3, orderSysNo);
                        }
                        else
                        {
                            result.Status  = false;
                            result.Message = "等待友信达发货,请稍后再试!";
                        }
                    }
                    else
                    {
                        result.Status  = false;
                        result.Message = _jsonResult["message"].ToString();
                    }

                    #endregion


                    result.Status     = true;
                    result.Message    = "接口调用成功";
                    result.StatusCode = 10;
                    result.Data       = jsonResult["data"].ToString();
                }
                else
                {
                    result.Message += jsonResult["message"].ToString();
                }

                return(result);
            }
            catch (Exception ex)
            {
                result.Message = "查询订单物流状态报错:" + ex.StackTrace;
                return(result);
            }
        }
Пример #16
0
        /// <summary>
        /// 海关报关
        /// </summary>
        /// <returns></returns>
        /// <remarks>2016-12-26 周 创建</remarks>
        public static Result ApplyToCustoms(SoOrder order)
        {
            Result result = new Result()
            {
                Status = false
            };

            try
            {
                if (order != null)
                {
                    var ehkingMerchantId = EhkingMerhantId;
                    var ehkingKey        = EhkingKey;

                    var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo);
                    if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店)
                    {
                        var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo);
                        if (dealer != null)
                        {
                            var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo);
                            if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝)
                            {
                                ehkingMerchantId = dealerPayType.AppKey;
                                ehkingKey        = dealerPayType.AppSecret;
                            }
                        }
                    }

                    var onlinePaymentFilter = new ParaOnlinePaymentFilter()
                    {
                        OrderSysNo = order.SysNo,
                        Id         = 1
                    };

                    var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows;

                    var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);

                    string merchantId      = ehkingMerchantId;                                      //商户号
                    string paySerialNumber = onlinePayments.First().VoucherNo;                      //支付流水号
                    string notifyUrl       = "http://admin.gaopin999.com/Account/NotifyReceiptCip"; //支付成功后易汇金支付会向该地址发送两次成功通知,该地址可以带参数

                    string nodeAuthorizationURL = EhkingNodeAuthorizationUrl;
                    string keyValue             = ehkingKey;
                    string amount = "0";

                    StringBuilder sbHmac = new StringBuilder();

                    sbHmac.Append(merchantId);
                    sbHmac.Append(paySerialNumber);
                    sbHmac.Append(notifyUrl);

                    amount = (order.OrderAmount * 100).ToString("F0");

                    sbHmac.Append(receiveAddress.Name);              //用户姓名
                    sbHmac.Append(receiveAddress.IDCardNo);          //证件号码
                    sbHmac.Append(receiveAddress.MobilePhoneNumber); //手机号码

                    sbHmac.Append(CustomsChannel);                   //海关通道
                    sbHmac.Append(ciqCode);                          //国检组织代码
                    sbHmac.Append(amount);                           //支付金额,单位:分
                    sbHmac.Append(commerceCode);                     //国检备案号
                    sbHmac.Append(commerceName);                     //国检组织代码

                    string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue);

                    HttpClient client = new HttpClient(nodeAuthorizationURL);

                    string data = "{\"merchantId\":\"" + merchantId +
                                  "\",\"paySerialNumber\":\"" + paySerialNumber +
                                  "\",\"notifyUrl\":\"" + notifyUrl + "\"" +
                                  ",\"payer\": {" +
                                  "\"payerName\": \"" + receiveAddress.Name + "\"," +
                                  "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," +
                                  "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" +
                                  "}" +
                                  ",\"ciqInfos\":[{\"ciqChannel\":\"" + CustomsChannel +
                                  "\",\"ciqCode\":\"" + ciqCode +
                                  "\",\"amount\":\"" + amount +
                                  "\",\"commerceCode\":\"" + commerceCode +
                                  "\",\"commerceName\":\"" + commerceName + "\"}],\"hmac\":\"" + hmac + "\"}";

                    string responsestr = client.Post(data);

                    BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data + ",-------返回数据:" + responsestr, "EhkingCipLog");

                    var back = JObject.Parse(responsestr);

                    if (back["status"].ToString() == "SUCCESS")
                    {
                        result.Message = "提交成功!";
                        result.Status  = true;
                        //更新订单支付报关状态为处理中
                        Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付申报国检状态.处理中, 4, order.SysNo);
                        BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "订单编号:" + order.SysNo + ",支付信息报检提交成功!", LogStatus.系统日志目标类型.订单支付申报国检, order.SysNo, 0);
                    }
                    else if (back["status"].ToString() == "FAILED")
                    {
                        result.Message = "提交失败!";
                        result.Status  = false;
                        BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCipERRORLog");
                    }
                    else if (back["status"].ToString() == "ERROR")
                    {
                        if (back["error"].ToString() == "exception.record.exists")
                        {
                            //Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付申报国检状态.处理中, 4, order.SysNo);
                            result = CustomsQuery(order.SysNo);
                            return(result);
                        }
                        else
                        {
                            result.Message = "提交失败,错误代码:" + back["error"].ToString();
                        }

                        BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCipERRORLog");
                        result.Status = false;
                    }
                    else
                    {
                        result.Message = "其他异常!";
                        result.Status  = false;
                        BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCipLog");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Message = "报错!";
                result.Status  = false;
                BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsLog");
            }
            return(result);
        }