Exemplo n.º 1
0
        private ActionResult doProductPackage(WxPackageGetRequest request)
        {
            var productIds = request.ProductId.Split('-');
            var productId = int.Parse(productIds[1]);
            var storeId = int.Parse(productIds[2]);
            var sectionId = int.Parse(productIds[3]);
            var linq = Context.Set<ProductEntity>().Where(p=>p.Id == productId)
                        .Join(Context.Set<InventoryEntity>(), o => o.Id, i => i.ProductId, (o, i) => new { I = i, P = o })
                        .Join(Context.Set<ProductPropertyValueEntity>(), o => o.I.PColorId, i => i.Id, (o, i) => new { I = o.I, P = o.P, Color = i })
                        .Join(Context.Set<ProductPropertyValueEntity>(), o => o.I.PSizeId, i => i.Id, (o, i) => new { I = o.I, P = o.P, Color = o.Color, Size = i })
                        .OrderByDescending(p=>p.I.Amount).FirstOrDefault();
            if (linq == null)
                return new XmlResult(composePackageError(r => r.RetErrMsg = "商品不存在!"));

            if (linq.I.Amount < 1)
                return new XmlResult(composePackageError(r => r.RetErrMsg = "商品库存不足!"));

            //step1: register user if not exist
            var userEntity = _customerService.OutSiteLogin2(new OutSiteLoginRequest()
            {
                OutsiteNickname = request.OpenId,
                OutsiteUid = request.OpenId,
                OutsiteType = (int)OutsiteType.WX
            });
            if (userEntity == null)
                return new XmlResult(composePackageError(r => r.RetErrMsg = "用户信息有误!"));

            //step2: create order
            bool isCreateSuccess;
            var sectionEntity = Context.Set<SectionEntity>().Where(s => s.Id == sectionId)
                               .Join(Context.Set<StoreEntity>(), o => o.StoreId, i => i.Id, (o, i) => new { Store = i, Section = o }).FirstOrDefault();
            StringBuilder additional = new StringBuilder();
            if (sectionEntity == null)
                additional.Append(linq.P.Description);
            else
                additional.AppendFormat("{0}-{1}-{2}", sectionEntity.Store.Name, sectionEntity.Section.Location, sectionEntity.Section.Name);
            var orderRequestModel = new OrderRequestModel()
            {
                InvoiceDetail = string.Empty,
                InvoiceTitle = string.Empty,
                NeedInvoice = false,
                Memo = string.Empty,
                ShippingAddress = new ShippingAddressModel(){
                     ShippingAddress = additional.ToString()
                },

                Payment = new PaymentModel()
                {
                    PaymentCode = WxPayConfig.PaymentCode,
                    PaymentName = WxPayConfig.PaymentName,

                },
                Products = new List<OrderProductDetailRequest>() { 
                     new OrderProductDetailRequest(){
                          ProductId = linq.P.Id,
                          Desc = linq.P.Description,
                           Quantity = 1,
                            SectionId = sectionId,
                             StoreId = storeId,
                              Properties = new ProductPropertyValueRequest(){
                                 ColorValueId = linq.Color.Id,
                                  ColorValueName = linq.Color.ValueDesc,
                                   SizeValueId = linq.Size.Id,
                                    SizeValueName = linq.Size.ValueDesc
                              }
                     }
                }

            };
            var orderCreateResponse = OrderRule.Create(new OrderRequest()
            {
                Order = JsonConvert.SerializeObject(orderRequestModel),
                Channel = WxPayConfig.ORDER_SOURCE
            },
             new UserModel()
             {
                 Id = userEntity.Id,
                 Nickname = userEntity.Nickname
             }, out isCreateSuccess);
            if (!isCreateSuccess)
                return new XmlResult(composePackageError(r => r.RetErrMsg = "订单无法显示!"));
            var orderModel = orderCreateResponse.Data as ExecuteResult<OrderResponse>;
            var orderNewEntity = Context.Set<OrderEntity>().Where(o => o.OrderNo == orderModel.Data.OrderNo).FirstOrDefault();
            //step3: compose package message
           
            if (sectionEntity == null)
                additional.Append(linq.P.Description);
            else
                additional.AppendFormat("{0} {1} {2}", sectionEntity.Store.Name, sectionEntity.Section.Location, sectionEntity.Section.Name);
            return new XmlResult(composePackageSuccess(r =>
            {
                r.Package = new WxPackage()
                    {
                        Body = string.Format("{0} {1} {2}", linq.P.Name, linq.Color.ValueDesc, linq.Size.ValueDesc),
                        Attach = additional.ToString(),
                        OutTradeNo = orderModel.Data.ExOrderNo,
                        TotalFee = Util.Feng4Decimal(orderNewEntity.TotalAmount),
                        TransportFee = Util.Feng4Decimal(orderNewEntity.ShippingFee ?? 0m),
                        SPBill_Create_IP = clientIP(),
                        //  Time_Start = orderNewEntity.CreateDate.ToString("yyyyMMddHHmmss"),
                        // Time_End = orderNewEntity.CreateDate.AddHours(4).ToString("yyyyMMddHHmmss")

                    };
                r.TimeStamp = request.TimeStamp + 1;
            }));

        }
Exemplo n.º 2
0
 private ActionResult doErpOrderPackage(string orderNo, WxPackageGetRequest request)
 {
    if (string.IsNullOrEmpty(orderNo))
        return new XmlResult(composePackageError(r =>
        {
            r.RetErrMsg = "订单不存在!";
            r.TimeStamp = request.TimeStamp + 1;
        }));
    dynamic erpOrder = null;
    bool isSuccess = ErpServiceHelper.SendHttpMessage(ConfigManager.ErpBaseUrl
                     , new { func = "GetSalesInfo", sales_sid = orderNo }
                     ,r=>erpOrder = r.Result
                     , null);
    if (!isSuccess || erpOrder.productDetail == null)
        return new XmlResult(composePackageError(r =>
        {
            r.RetErrMsg = "订单无法获取!";
            r.TimeStamp = request.TimeStamp + 1;
        }));
     decimal totalAmount = erpOrder.totalamount;
     if (totalAmount <=0)
         return new XmlResult(composePackageError(r =>
         {
             r.RetErrMsg = "订单金额不正确!";
             r.TimeStamp = request.TimeStamp + 1;
         }));
     return new XmlResult(composePackageSuccess(r =>
     {
         r.Package = new WxPackage()
             {
                 Body = "银泰商业微信支付",
                 OutTradeNo = orderNo,
                 TotalFee = Util.Feng4Decimal(totalAmount),
                 TransportFee = 0,
                 SPBill_Create_IP = clientIP(),
                 NotifyUrl = WxPayConfig.NOTIFY_ERP_URL
             };
         r.TimeStamp = request.TimeStamp + 1;
     }));
 }
Exemplo n.º 3
0
 public ActionResult WxPackage(WxPackageGetRequest request)
 {
     if (request == null )
     {
         return new XmlResult(composePackageError(r => r.RetErrMsg = "请求数据异常!"));
     }
     if (string.Compare(request.ValidSign, request.AppSignature, false) != 0)
     {
         Log.Debug(JsonConvert.SerializeObject(request));
         Log.Debug(request.ValidSign);
         return new XmlResult(composePackageError(r => r.RetErrMsg = "请求没有授权!"));
     }
     var productId = request.ProductId;
     var productIds = productId.Split('-');
     if (productIds.Length < 2)
         return new XmlResult(composePackageError(r => r.RetErrMsg = "商品信息有误!"));
     var packageType = int.Parse(productIds[0]);
     switch (packageType)
     { 
         case (int)WxPackageType.Order:
             return doOrderPackage(productIds[1], request);
         case (int)WxPackageType.Sku:
              return doSkuPackage(request);
         case (int)WxPackageType.Product:
              return doProductPackage(request);
         case (int)WxPackageType.ErpOrder:
              return doErpOrderPackage(productIds[1],request);
         case (int)WxPackageType.Erp2Order:
              return doErp2OrderPackage(productIds[1], request);
         default:
             return new XmlResult(composePackageError(r => r.RetErrMsg = "订单类型有误!"));
     }
   
         
 }
Exemplo n.º 4
0
        private ActionResult doOrderPackage(string orderNo, WxPackageGetRequest request)
        {
            var orderEntity = Context.Set<OrderEntity>().Where(o => o.OrderNo == orderNo)
                            .Join(Context.Set<Order2ExEntity>(), o => o.OrderNo, i => i.OrderNo, (o, i) => new { O = o, OE = i })
                            .GroupJoin(Context.Set<OrderItemEntity>(), o => o.O.OrderNo, i => i.OrderNo, (o, i) => new { O = o.O, OE = o.OE, OI = i }).FirstOrDefault();

            if (orderEntity == null)
                return new XmlResult(composePackageError(r => r.RetErrMsg = "订单不存在!"));
            if (orderEntity.O.Status != (int)OrderStatus.Create)
                return new XmlResult(composePackageError(r => r.RetErrMsg = "订单状态无法支付!"));
            var orderItemEntity = orderEntity.OI.First();
            return new XmlResult(composePackageSuccess(r => r.Package = new WxPackage()
            {
                Body = orderItemEntity.ProductName,
                Attach = orderItemEntity.ProductDesc,
                OutTradeNo = orderEntity.OE.ExOrderNo,
                TotalFee = Util.Feng4Decimal(orderEntity.O.TotalAmount),
                TransportFee = Util.Feng4Decimal(orderEntity.O.ShippingFee ?? 0m),
                SPBill_Create_IP = clientIP(),
                Time_Start = orderEntity.O.CreateDate.ToString("yyyyMMddHHmmss"),
                Time_End = orderEntity.O.CreateDate.AddHours(0.5).ToString("yyyyMMddHHmmss")

            }));
        }
Exemplo n.º 5
0
 private ActionResult doErp2OrderPackage(string orderNo, WxPackageGetRequest request)
 {
     if (string.IsNullOrEmpty(orderNo))
         return new XmlResult(composePackageError(r =>
         {
             r.RetErrMsg = "订单不存在!";
             r.TimeStamp = request.TimeStamp + 1;
         }));
     dynamic erpOrder = null;
     bool isSuccess = Erp2ServiceHelper.SendHttpMessage(Erp2Config.PACKAGE_URL
                      , new { saleno = orderNo }
                      , r => erpOrder = r
                      , null);
     if (!isSuccess)
         return new XmlResult(composePackageError(r =>
         {
             r.RetErrMsg = "订单无法获取!";
             r.TimeStamp = request.TimeStamp + 1;
         }));
     decimal totalAmount = erpOrder.Data;
     if (totalAmount <= 0)
         return new XmlResult(composePackageError(r =>
         {
             r.RetErrMsg = "订单金额不正确!";
             r.TimeStamp = request.TimeStamp + 1;
         }));
     return new XmlResult(composePackageSuccess(r =>
     {
         r.Package = new WxPackage()
         {
             Body = "银泰商业微信支付",
             OutTradeNo = orderNo,
             TotalFee = Util.Feng4Decimal(totalAmount),
             TransportFee = 0,
             SPBill_Create_IP = clientIP(),
             NotifyUrl = WxPayConfig.NOTIFY_ERP2_URL
         };
         r.TimeStamp = request.TimeStamp + 1;
     }));
 }