Пример #1
0
        public async Task <Result> Create([FromBody] CustomerAddressCreateRequest request)
        {
            var address = new AdminAddress
            {
                AreaCode     = request.AreaCode,
                CityCode     = request.CityCode,
                Createat     = DateTime.Now,
                DetailInfo   = request.DetailInfo,
                IsDefault    = request.IsDefault,
                PostalCode   = request.PostalCode,
                ProvinceCode = request.ProvinceCode,
                TelNumber    = request.TelNumber,
                UserName     = request.UserName
            };

            if (request.IsDefault)
            {
                var defaultAddress = await _addressRepository.Query().FirstOrDefaultAsync(e => e.IsDefault);

                if (defaultAddress != null)
                {
                    defaultAddress.IsDefault = false;

                    await _addressRepository.UpdateProperyAsync(defaultAddress, nameof(defaultAddress.IsDefault));
                }
            }

            await _addressRepository.InsertAsync(address);

            return(Result.Ok());
        }
        public async Task <Result> ChangeDefult(int id)
        {
            var address = await _customerAddressRepository.FirstOrDefaultAsync(id);

            if (address == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }

            var userId = HttpContext.GetUserId();

            var defaultAddress = await _customerAddressRepository.Query().FirstOrDefaultAsync(e => e.CustomerId == userId && e.IsDefault);

            if (defaultAddress != null)
            {
                defaultAddress.IsDefault = false;

                await _customerAddressRepository.UpdateProperyAsync(defaultAddress, nameof(defaultAddress.IsDefault));
            }

            address.IsDefault = true;
            await _customerAddressRepository.UpdateProperyAsync(address, nameof(address.IsDefault));

            return(Result.Ok());
        }
Пример #3
0
        public async Task <Result> ConfirmSend(int id)
        {
            var billing = await _orderBillRepository.FirstOrDefaultAsync(id);

            if (billing.IsInvoiced)
            {
                return(Result.Fail(ResultCodes.IdInvalid, "已开票,不得重复确认"));
            }

            billing.IsInvoiced = true;

            await _orderBillRepository.UpdateProperyAsync(billing, nameof(billing.IsInvoiced));

            return(Result.Ok());
        }
Пример #4
0
        public async Task <Result> Edit([FromBody] AdminOrderEditRequest request)
        {
            var order = await _orderRepository.Query()
                        .Include(e => e.OrderItems).ThenInclude(e => e.CommissionHistory)
                        .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (order == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            var status = new[] { OrderStatus.Closed, OrderStatus.PaymentReceived, OrderStatus.Complete };

            if (status.Contains(order.OrderStatus))
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前订单状态不允许修改"));
            }

            var totalCommission = 0;
            var totalAmount     = 0;
            var commissions     = order.OrderItems.Where(e => e.CommissionHistory != null).Select(e => e.CommissionHistory);

            if (commissions.Count() > 0)
            {
                foreach (var item in commissions)
                {
                    if (order.IsFirstOrder)
                    {
                        totalAmount        += item.Commission;
                        item.Status         = CommissionStatus.Complete;
                        item.SettlementTime = DateTime.Now;
                    }
                    else
                    {
                        item.Status      = CommissionStatus.PendingSettlement;
                        totalCommission += item.Commission;
                    }
                }
            }

            order.PaymentType   = request.PaymentType;
            order.PaymentMethod = request.PaymentMethod;
            order.PaymentTime   = DateTime.Now;
            order.PaymentFee    = order.ActuallyAmount;
            order.OrderStatus   = OrderStatus.PaymentReceived;

            _orderRepository.Update(order, false);

            using (var transaction = _orderRepository.BeginTransaction())
            {
                await _orderRepository.SaveAsync();

                if (totalCommission > 0 || totalAmount > 0)
                {
                    var parentId = commissions.Select(e => e.CustomerId).FirstOrDefault();
                    await _customerManager.UpdateAssets(parentId, totalCommission, totalAmount, "下级首单返佣金");
                }

                if (!string.IsNullOrEmpty(order.ExtendParams))
                {
                    var result = Enum.TryParse <PartnerRole>(order.ExtendParams, true, out var role);
                    if (result)
                    {
                        await _customerRepository.UpdateProperyAsync(new Customer
                        {
                            Id   = order.CustomerId,
                            Role = role
                        }, nameof(Customer.Role));
                    }
                }

                transaction.Commit();
            }

            return(Result.Ok());
        }
Пример #5
0
        public async Task <Result> LiteAppLogin([FromBody] WeChatLiteAppLoginRequest request)
        {
            string errorMsg = string.Empty;

            try
            {
                JsCode2JsonResult jsonResult = SnsApi.JsCode2Json(WechatService.WxOpenAppId, WechatService.WxOpenAppSecret, request.Code);
                if (jsonResult != null && jsonResult.errcode == ReturnCode.请求成功)
                {
                    var customer = await _customerRepository.Query()
                                   .FirstOrDefaultAsync(e => e.OpenId == jsonResult.openid);

                    if (customer == null)
                    {
                        int?parentId  = null;
                        var anyParent = await _customerRepository.Query().AnyAsync(e => e.Id == request.ParentId);

                        if (anyParent)
                        {
                            parentId = request.ParentId;
                        }

                        var userInfo = request.UserInfo;
                        customer = new Customer
                        {
                            NickName   = userInfo.NickName,
                            OpenId     = jsonResult.openid,
                            SessionKey = jsonResult.session_key,
                            UnionId    = jsonResult.unionid,
                            Gender     = userInfo.Gender,
                            Country    = userInfo.Country,
                            Province   = userInfo.Province,
                            City       = userInfo.City,
                            AvatarUrl  = userInfo.AvatarUrl,
                            Language   = userInfo.Language,
                            ParentId   = parentId,
                            Createat   = DateTime.Now,
                            Assets     = new Assets()
                            {
                                TotalAssets     = 0,
                                AvailableAmount = 0,
                                TotalCommission = 0,
                                UpdateTime      = DateTime.Now,
                                Createat        = DateTime.Now
                            }
                        };
                        await _customerRepository.InsertAsync(customer);

                        if (parentId.HasValue)
                        {
                            await _mediator.Publish(new CustomerRelationEvent
                            {
                                ParentId   = request.ParentId,
                                ChildrenId = customer.Id
                            });
                        }
                    }
                    else
                    {
                        if (!customer.ParentId.HasValue && request.ParentId > 0)
                        {
                            var anyParent = await _customerRepository.Query().AnyAsync(e => e.Id == request.ParentId);

                            if (anyParent)
                            {
                                customer.ParentId = request.ParentId;
                                await _mediator.Publish(new CustomerRelationEvent
                                {
                                    ParentId   = request.ParentId,
                                    ChildrenId = customer.Id
                                });
                            }
                        }
                        if (customer.SessionKey != jsonResult.session_key)
                        {
                            customer.SessionKey = jsonResult.session_key;
                            await _customerRepository.UpdateProperyAsync(customer, nameof(customer.SessionKey), nameof(customer.ParentId));
                        }
                    }

                    List <Claim> claims = new List <Claim>();
                    claims.Add(new Claim("id", customer.Id.ToString()));
                    // claims.Add(new Claim("openId", customer.OpenId));

                    var token       = _tokenService.JwtToken(claims);
                    var customerRes = _mapper.Map <CustomerResponse>(customer);

                    return(Result.Ok(new WeChatLiteAppLoginResponse(token, customerRes)));
                }
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
            }
            return(Result.Fail(ResultCodes.RequestParamError, errorMsg));
        }
Пример #6
0
        /// <summary>
        /// 支付接收
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task PaymentReceived(PaymentReceivedRequest request)
        {
            var order = await _orderRepository.Query()
                        .Include(e => e.OrderItems)
                        .ThenInclude(e => e.CommissionHistory)
                        .FirstOrDefaultAsync(e => e.OrderNo == request.OrderNo);

            if (order == null)
            {
                return;
            }

            var status = new OrderStatus[] { OrderStatus.PendingPayment, OrderStatus.PaymentFailed };

            if (!status.Contains(order.OrderStatus))
            {
                return;
            }

            var         roleResult = false;
            PartnerRole role       = PartnerRole.Default;

            if (!string.IsNullOrEmpty(order.ExtendParams))
            {
                roleResult = Enum.TryParse <PartnerRole>(order.ExtendParams, true, out role);
            }

            var totalCommission = 0;
            var totalAmount     = 0;
            var commissions     = order.OrderItems.Where(e => e.CommissionHistory != null).Select(e => e.CommissionHistory);

            if (commissions.Count() > 0)
            {
                foreach (var item in commissions)
                {
                    if (order.IsFirstOrder)
                    {
                        totalAmount        += item.Commission;
                        item.Status         = CommissionStatus.Complete;
                        item.SettlementTime = DateTime.Now;
                    }
                    else
                    {
                        totalCommission += item.Commission;
                        item.Status      = CommissionStatus.PendingSettlement;
                    }
                }
            }

            order.OrderStatus   = OrderStatus.PaymentReceived;
            order.PaymentMethod = request.PaymentMethod;
            order.PaymentTime   = request.PaymentTime;
            order.PaymentFee    = request.PaymentFee;

            _orderRepository.Update(order, false);

            using (var transaction = _orderRepository.BeginTransaction())
            {
                await _orderRepository.SaveAsync();

                if (roleResult)
                {
                    await _customerRepository.UpdateProperyAsync(new Customer
                    {
                        Id   = order.CustomerId,
                        Role = role
                    }, nameof(Customer.Role));
                }

                if (totalCommission > 0 || totalAmount > 0)
                {
                    var parentId = commissions.Select(e => e.CustomerId).FirstOrDefault();
                    await _customerManager.UpdateAssets(parentId, totalCommission, totalAmount, "下级首单返佣金");
                }

                if (order.WalletAmount > 0)
                {
                    await _customerManager.UpdateAssets(order.CustomerId, 0, 0, -order.WalletAmount, "商品抵扣金额");
                }

                transaction.Commit();
            }
        }