Exemplo n.º 1
0
 /// <summary>
 /// 添加工作流
 /// </summary>
 /// <param name="dto"></param>
 /// <param name="unitofworks"></param>
 /// <returns></returns>
 protected virtual bool AddOrder(SettlementDto dto, IList <IUnitofwork> unitofworks)
 {
     foreach (var order in dto.Orders)
     {
         var orderUnitofworks = OrderDomainService.Handle(order.Order);
         if (orderUnitofworks == null)
         {
             dto.Errors = dto.Errors ?? new List <ErrorInfo>();
             dto.Errors.AddList(order.Order.Errors);
             return(false);
         }
         unitofworks.AddList(orderUnitofworks);
         if (order.MerchantOrder != null)
         {
             var merchantOrderUnitofworks = MerchantOrderDomainService.Handle(order.MerchantOrder);
             if (merchantOrderUnitofworks == null)
             {
                 dto.Errors = dto.Errors ?? new List <ErrorInfo>();
                 dto.Errors.AddList(order.Order.Errors);
                 return(false);
             }
             unitofworks.AddList(merchantOrderUnitofworks);
         }
     }
     return(true);
 }
Exemplo n.º 2
0
 /// <summary>
 /// 验证
 /// </summary>
 /// <param name="dto"></param>
 /// <returns></returns>
 protected virtual bool CheckOrder(SettlementDto dto)
 {
     if (dto.AddressId > 0 && dto.Address == null)
     {
         dto.AddError("NoAddress");
         return(false);
     }
     if (dto.CouponId > 0 && dto.Coupon == null)
     {
         dto.AddError("NoCoupon");
         return(false);
     }
     if (dto.InvoiceId > 0 && dto.Invoice == null)
     {
         dto.AddError("NoInvoice");
         return(false);
     }
     if (dto.Products != null &&
         dto.Products.Count(it => it.ErrorMsg != null) > 0)
     {
         foreach (var settlementProduct in dto.Products)
         {
             dto.AddError(settlementProduct.ErrorMsg);
         }
         return(false);
     }
     if (dto.OrderType == OrderType.Custom && dto.Products != null && dto.Products.Count(it => it.Product != null && !it.Product.IsCustom) > 0)
     {
         dto.AddError("NotAllowCustomOrder");
         return(false);
     }
     return(CheckOrderLimitCount(dto) && CheckUnpayOrderCount(dto));
 }
Exemplo n.º 3
0
        public virtual void Order()
        {
            var settlement = new SettlementDto
            {
                IsGenerate  = true,
                AccountId   = 30310,
                ChannelType = ChannelType.Website,
                Products    = new List <OrderProductDto>
                {
                    new OrderProductDto
                    {
                        ProductId = 10930,
                        Count     = 1
                    },
                    new OrderProductDto
                    {
                        ProductId = 10931,
                        Count     = 1
                    },
                    new OrderProductDto
                    {
                        ProductId = 10932,
                        Count     = 1
                    }
                }
            };

            Ioc.Resolve <IOrderApplicationService>().Create(settlement);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 检查未支付订单数量
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        protected virtual bool CheckOrderLimitCount(SettlementDto dto)
        {
            if (dto.Products == null)
            {
                return(true);
            }
            var promotions   = dto.Products.Where(it => it.Product != null && it.Product.Promotion != null && it.Product.Promotion.OrderLimitCount > 0);
            var promotionIds = promotions.Select(it => it.Product.Promotion.Id).ToArray();

            if (promotionIds.Length == 0)
            {
                return(true);
            }
            var query = new QueryInfo();

            query.Query <OrderProductEntity>()
            .Where(it => it.Order.Account.Id == dto.AccountId && it.IsCount && promotionIds.Contains(it.Promotion.Id))
            .Select(it => new object[] { it.Count, it.Promotion.Id });
            var infos = Repository.GetEntities <OrderProductEntity>(query);

            if (infos == null || infos.Count == 0)
            {
                return(true);
            }
            if (promotions.Count(it =>
                                 infos.Where(s => s.Promotion != null && s.Promotion.Id == it.Product.Promotion.Id).Sum(s => s.Count) + it.Count > it.OrderLimitCount)
                > 0)
            {
                dto.AddError("ProductOrderLimitCountError");
                return(false);
            }
            return(true);
        }
Exemplo n.º 5
0
 /// <summary>
 /// 创建订单
 /// </summary>
 /// <returns></returns>
 public virtual void Generate(SettlementDto dto)
 {
     lock (CreateLock)
     {
         if (!CheckOrder(dto))
         {
             return;
         }
         dto.Generate();
         if (dto.Orders == null || dto.Orders.Count == 0)
         {
             return;
         }
         var unitofworks = new List <IUnitofwork>();
         var rev         = AddOrder(dto, unitofworks) &&
                           AddCoupon(dto.Coupon, dto, unitofworks);
         if (!rev)
         {
             return;
         }
         rev = Winner.Creator.Get <IContext>().Commit(unitofworks);
         if (rev)
         {
             Action <SettlementDto> action = RemoveShopcart;
             action.BeginInvoke(dto, null, null);
         }
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// 设置支付方式
        /// </summary>
        /// <param name="dto"></param>
        protected virtual void SetPayTypes(SettlementDto dto)
        {
            var query = new QueryInfo();

            query.Query <PayTypeEntity>()
            .Where(it => !string.IsNullOrEmpty(it.Url))
            .Select(it => new object[] { it.Name, it.Url, it.Tag });
            dto.PayTypes = Repository.GetEntities <PayTypeEntity>(query);
        }
Exemplo n.º 7
0
 /// <summary>
 /// 得到结算
 /// </summary>
 /// <param name="dto"></param>
 /// <returns></returns>
 public virtual SettlementDto Create(SettlementDto dto)
 {
     SetSettlementDto(dto);
     dto.Create();
     if (dto.IsGenerate)
     {
         Generate(dto);
     }
     return(dto);
 }
Exemplo n.º 8
0
        /// <summary>
        /// 加载汇总
        /// </summary>
        protected virtual void LoadSummary(SettlementDto dto)
        {
            var kindCount  = dto.Products == null ? 0 : dto.Products.Count;
            var totalCount = dto.Products == null ? 0 : dto.Products.Sum(it => it.Count);

            lblKindCount.Text    = kindCount.ToString();
            lblTotalCount.Text   = totalCount.ToString();
            lblFeightPrice.Text  = dto.Orders == null?"": dto.Orders.Sum(it => it.FreightPrice).ToString();
            lblFactPrice.Text    = dto.Orders == null ? "" : dto.Orders.Sum(it => it.FactPrice).ToString();
            lblProductPrice.Text = dto.Orders == null ? "" : dto.Orders.Sum(it => it.ProductPrice).ToString();
        }
Exemplo n.º 9
0
        /// <summary>
        /// 请求
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        protected virtual ActionResult Settlement(SettlementDto dto)
        {
            dto.IsGenerate = false;
            var model = new SettlementModel();

            SetAddresses(model);
            SetCoupons(model);
            SetInvoices(model);
            model.SettlementDto = Ioc.Resolve <IOrderApplicationService>().Create(dto);
            SetPartners(model);
            return(View("Settlement", model));
        }
Exemplo n.º 10
0
        public async Task <TransactionSettlementDto> GenerateSettlement(long transId)
        {
            try
            {
                var trans = await _walletTransactionService.GetTransactionRequestById(transId);

                var user = await _userService.GetUserByUserId(trans.UserId);



                var nSettle = new SettlementDto
                {
                    TransactionId    = transId,
                    SettlementStatus = SettlementStatus.Success.Description(),
                    ReferenceId      = Guid.NewGuid().ToString().Trim(),
                    DateOfSettlement = DateTime.UtcNow,
                };
                var walletTransaction = new WalletTransactionDto
                {
                    Id                = transId,
                    RequestAmount     = trans.RequestAmount,
                    RequestCurrency   = trans.RequestCurrency,
                    ResponseCurrency  = trans.RequestCurrency,
                    TransactionStatus = (int)TransactionStatus.Responded,
                    UserId            = trans.UserId
                };
                var userDto = new UserDto
                {
                    Id                 = user.Id,
                    Fullname           = user.Fullname,
                    EmailAddress       = user.EmailAddress,
                    CountryOfOrigin    = user.CountryOfOrigin,
                    Gender             = user.Gender,
                    CountryOfResidence = user.CountryOfResidence,
                    Status             = Status.True.Description(),
                };

                var transactionSettlement = new TransactionSettlementDto
                {
                    User              = userDto,
                    Settlement        = nSettle,
                    WalletTransaction = walletTransaction,
                };

                return(transactionSettlement);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 11
0
 /// <summary>
 /// 设置
 /// </summary>
 /// <param name="dto"></param>
 protected virtual void SetSettlementDto(SettlementDto dto)
 {
     if (dto.AccountId > 0)
     {
         dto.Account = Repository.Get <AccountEntity>(dto.AccountId);
     }
     SetCoupon(dto);
     SetAddress(dto);
     SetInvoice(dto);
     SetAgent(dto);
     SetSettlementProductDtos(dto);
     SetArea(dto);
     SetPayTypes(dto);
 }
Exemplo n.º 12
0
        /// <summary>
        /// 下单
        /// </summary>
        /// <returns></returns>
        protected virtual SettlementDto GetSettlementDto(long accountId)
        {
            var dto = new SettlementDto
            {
                ChannelType = ChannelType.Admin,
                OrderType   = OrderType.Standard,
                AddressId   = Request.Form["Address"].Convert <long>(),
                InvoiceId   = Request.Form["Invoice"].Convert <long>(),
                AccountId   = accountId,
                Products    =
                    string.IsNullOrEmpty(hfProducts.Value)
                        ? null
                        : Newtonsoft.Json.JsonConvert.DeserializeObject <List <OrderProductDto> >(hfProducts.Value)
            };

            return(dto);
        }
Exemplo n.º 13
0
        /// <summary>
        /// 下单
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        public virtual ActionResult Order(SettlementDto dto)
        {
            dto.IsGenerate = true;
            Ioc.Resolve <IOrderApplicationService>().Create(dto);
            if (dto.IsSaveSuccess)
            {
                return(RedirectToAction("Sucessful"));
            }
            var model = new SettlementModel {
                SettlementDto = dto
            };

            SetAddresses(model);
            SetCoupons(model);
            SetPartners(model);
            return(View("Settlement", model));
        }
Exemplo n.º 14
0
        /// <summary>
        /// 得到信息
        /// </summary>
        /// <returns></returns>
        protected virtual void SetAddress(SettlementDto dto)
        {
            if (dto.AddressId == 0)
            {
                return;
            }
            var query = new QueryInfo();

            query.Query <AddressEntity>().Where(it => it.Account.Id == dto.AccountId && it.Id == dto.AddressId)
            .Select(it => new object[] { it.Id, it.Province, it.City, it.County, it.Address, it.Email, it.Mobile, it.Recipient, it.Company, it.Postcode, it.Telephone, it.Tag });
            var infos = Repository.GetEntities <AddressEntity>(query);

            if (infos == null)
            {
                return;
            }
            dto.Address = infos.FirstOrDefault();
        }
Exemplo n.º 15
0
        /// <summary>
        /// 设置区域
        /// </summary>
        /// <param name="dto"></param>
        protected virtual void SetArea(SettlementDto dto)
        {
            if (!dto.IsArea)
            {
                return;
            }
            if (dto.Address == null || dto.Products == null)
            {
                return;
            }
            if (dto.Products.Count(it => it.Product != null && it.Product.Goods != null && it.Product.Goods.Freight != null && it.Product.Goods.Freight.IsDelivery) == 0)
            {
                return;
            }
            var match = AreaRepository.Match(dto.Address.City, string.Format("{0}{1}", dto.Address.County, dto.Address.Address), "Freight");

            dto.Area = match == null || match.Areas == null ? null : match.Areas.FirstOrDefault();
        }
Exemplo n.º 16
0
        /// <summary>
        /// 发票
        /// </summary>
        /// <returns></returns>
        protected virtual void SetInvoice(SettlementDto dto)
        {
            if (dto.InvoiceId <= 0)
            {
                return;
            }
            var query = new QueryInfo();

            query.Query <InvoiceEntity>().Where(it => it.Account.Id == dto.AccountId && it.Id == dto.InvoiceId)
            .Select(it => new object[] { it });
            var infos = Repository.GetEntities <InvoiceEntity>(query);

            if (infos == null)
            {
                return;
            }
            dto.Invoice = infos.FirstOrDefault();
        }
Exemplo n.º 17
0
 /// <summary>
 /// 添加优惠券
 /// </summary>
 /// <param name="coupon"></param>
 /// <param name="dto"></param>
 /// <param name="unitofworks"></param>
 /// <returns></returns>
 protected virtual bool AddCoupon(CouponEntity coupon, SettlementDto dto, IList <IUnitofwork> unitofworks)
 {
     if (coupon != null)
     {
         coupon.IsUsed   = true;
         coupon.SaveType = SaveType.Modify;
         coupon.SetProperty(it => it.IsUsed);
         var units = CouponDomainService.Handle(coupon);
         if (units == null)
         {
             dto.Errors = dto.Errors ?? new List <ErrorInfo>();
             dto.Errors.AddList(coupon.Errors);
             return(false);
         }
         unitofworks.AddList(units);
     }
     return(true);
 }
Exemplo n.º 18
0
        /// <summary>
        /// 得到商品
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        protected virtual void SetSettlementProductDtos(SettlementDto dto)
        {
            if (dto.Products == null || dto.Products.Count == 0)
            {
                return;
            }
            var ids   = dto.Products.Select(it => it.ProductId).ToArray();
            var query = new QueryInfo();

            query.Query <ProductEntity>()
            .Where(it => ids.Contains(it.Id))
            .Select(it => new object[]
            {
                it.Id, it.Name, it.Cost, it.Price, it.DepositRate, it.IsReturn, it.IsCustom,
                it.Sku, it.IsSales, it.FileName, it.Count, it.OrderMinCount, it.OrderStepCount, it.Goods.PayTypes,
                it.Goods.Account.Id, it.Goods.Account.RealName, it.Goods.Freight.Id,
                it.Goods.Freight.FreeProfit, it.Goods.Freight.FreeRegion,
                it.Goods.Freight.Carries.Select(s => new object[] { s.Id, s.Region, s.DefaultCount, s.DefaultPrice, s.ContinueCount, s.ContinuePrice })
            });
            var infos = Repository.GetEntities <ProductEntity>(query);

            if (infos == null)
            {
                return;
            }
            var promotions = GetPromotions(infos.Select(it => it.Id).ToArray());

            if (promotions == null)
            {
                return;
            }
            foreach (var product in dto.Products)
            {
                product.Product = infos.FirstOrDefault(it => it.Id == product.ProductId);
                if (product.Product == null)
                {
                    continue;
                }
                product.Product.Promotion = promotions.FirstOrDefault(it => it.Product != null && it.Product.Id == product.ProductId);
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// 得到信息
        /// </summary>
        /// <returns></returns>
        protected virtual void SetCoupon(SettlementDto dto)
        {
            if (dto.CouponId <= 0)
            {
                return;
            }
            var query = new QueryInfo();

            query.Query <CouponEntity>()
            .Where(
                it =>
                it.Account.Id == dto.AccountId && it.Id == dto.CouponId && it.IsUsed &&
                it.EndDate >= DateTime.Now.Date)
            .Select(it => new object[] { it.Id, it.Name, it.EndDate, it.Amount });
            var infos = Repository.GetEntities <CouponEntity>(query);

            if (infos == null)
            {
                return;
            }
            dto.Coupon = infos.FirstOrDefault();
        }
Exemplo n.º 20
0
        /// <summary>
        /// 检查未支付订单数量
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        protected virtual bool CheckUnpayOrderCount(SettlementDto dto)
        {
            if (dto.Account != null)
            {
                return(true);
            }
            var query = new QueryInfo();

            query.Query <OrderEntity>()
            .Where(it => it.Account.Id == dto.AccountId && it.PayAmount == 0)
            .Select(it => it.Id);
            Repository.GetEntities <OrderEntity>(query);
            var json       = Configuration.ConfigurationManager.GetSetting <string>("Order").DeserializeJson <dynamic>();
            int unpayCount = json == null ? 5 : json.UnpayCount;

            if (query.DataCount >= unpayCount)
            {
                dto.AddError("UnpayCountOver", query.DataCount);
                return(false);
            }
            return(true);
        }
Exemplo n.º 21
0
        /// <summary>
        /// 添加购物车
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        protected virtual void RemoveShopcart(SettlementDto dto)
        {
            var query = new QueryInfo();

            query.Query <ShopcartEntity>()
            .Where(
                it =>
                it.Account.Id == dto.AccountId &&
                dto.Products.Select(s => s.ProductId).ToArray().Contains(it.Product.Id))
            .Select(it => it.Id);
            var infos = Repository.GetEntities <ShopcartEntity>(query);

            if (infos == null || infos.Count == 0)
            {
                return;
            }
            foreach (var info in infos)
            {
                info.SaveType = SaveType.Remove;
            }
            var unitofworks = ShopcartDomainService.Handle(infos);

            Winner.Creator.Get <IContext>().Commit(unitofworks);
        }