public async Task <Result> ResetPwd([FromBody] AdminForgetResetPwdRequest request)
        {
            var user = await _adminUserRepository.Query().FirstOrDefaultAsync(e => e.Tel == request.Tel);

            if (user == null)
            {
                return(Result.Fail(ResultCodes.UserNotExists));
            }

            var code = HttpContext.Session.GetString(request.Tel);

            if (string.IsNullOrEmpty(code))
            {
                return(Result.Fail(ResultCodes.RequestParamError, "验证码已过期或未获取验证码"));
            }
            if (!request.Code.Equals(code, System.StringComparison.InvariantCultureIgnoreCase))
            {
                return(Result.Fail(ResultCodes.RequestParamError, "验证码不正确"));
            }

            user.Pwd = request.Password.ToMD5Base64();

            await _adminUserRepository.UpdateAsync(user);

            HttpContext.Session.Remove(request.Tel);

            return(Result.Ok());
        }
Exemple #2
0
        public async Task <Result> Edit([FromBody] CustomerAddressEditRequest request)
        {
            var address = await _addressRepository.FirstOrDefaultAsync(request.Id);

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

            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));
                }
            }

            address.DetailInfo   = request.DetailInfo;
            address.AreaCode     = request.AreaCode;
            address.CityCode     = request.CityCode;
            address.IsDefault    = request.IsDefault;
            address.PostalCode   = request.PostalCode;
            address.ProvinceCode = request.ProvinceCode;
            address.TelNumber    = request.TelNumber;
            address.UserName     = request.UserName;

            await _addressRepository.UpdateAsync(address);

            return(Result.Ok());
        }
        public async Task <Result> Create([FromBody] CustomerAddressCreateRequest request)
        {
            var userId      = HttpContext.GetUserId();
            var userAddress = new CustomerAddress(userId, request.IsDefault, request.PostalCode, request.ProvinceCode, request.CityCode, request.AreaCode, request.DetailInfo, request.TelNumber, request.UserName);

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

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

                await _customerAddressRepository.UpdateAsync(defaultAddress);
            }

            await _customerAddressRepository.InsertAsync(userAddress, false);

            return(Result.Ok());
        }
Exemple #4
0
        public async Task <Result> RealName([FromBody] CustomerRealNameRequest request)
        {
            var user = await _customerManager.GetUserAsync();

            user.Name        = request.Name;
            user.PhoneNumber = request.PhoneNumber;
            user.IsRealName  = true;

            await _customerRepository.UpdateAsync(user);

            return(Result.Ok());
        }
Exemple #5
0
        public async Task <Result> Edit([FromBody] AdminGoodsOptionEditRequest request)
        {
            var goodsOption = await _goodsOptionRepository.FirstOrDefaultAsync(request.Id);

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

            goodsOption.Name = request.Name;

            await _goodsOptionRepository.UpdateAsync(goodsOption);

            return(Result.Ok());
        }
Exemple #6
0
        public async Task <Result> Cancel(int id)
        {
            var item = await _orderItemRepository.Query()
                       .Include(e => e.ReturnApply)
                       .FirstOrDefaultAsync(e => e.Id == id);

            if (item == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            var status = new[] { OrderItemStatus.RefundApply, OrderItemStatus.ConfirmApply };

            if (!status.Contains(item.Status))
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前商品状态不允许取消申请"));
            }

            item.Status             = OrderItemStatus.Shipped;
            item.ReturnApply.Status = ReturnAuditStatus.Cancel;

            await _orderItemRepository.UpdateAsync(item);

            return(Result.Ok());
        }
Exemple #7
0
        public async Task <Result> Edit([FromBody] AdminGoodsOptionDataEditRequest request)
        {
            var goodsOptionData = await _goodsOptionDataRepository.FirstOrDefaultAsync(request.Id);

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

            goodsOptionData.Value       = request.Value;
            goodsOptionData.Description = request.Description;

            await _goodsOptionDataRepository.UpdateAsync(goodsOptionData);

            return(Result.Ok());
        }
Exemple #8
0
        public async Task <Result> Edit(AdminCategoryEditRequest request)
        {
            var category = await _categoryRepository.FirstOrDefaultAsync(request.Id);

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

            category.Name = request.Name;
            category.Sort = request.Sort;

            await _categoryRepository.UpdateAsync(category);

            return(Result.Ok());
        }
Exemple #9
0
        public async Task <Result> Agree(int id)
        {
            var apply = await _withdrawalHistoryRepository.FirstOrDefaultAsync(id);

            if (apply == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (apply.Status != WithdrawalStatus.Apply)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前申请状态不允许确认"));
            }

            var openId = await _custoemrRepository.Query()
                         .Where(e => e.Id == apply.CustomerId)
                         .Select(e => e.OpenId)
                         .FirstOrDefaultAsync();

            apply.Status  = WithdrawalStatus.Success;
            apply.Message = "提现成功";

            var wxRequest = new WeChatPayPromotionTransfersRequest
            {
                PartnerTradeNo = apply.PartnerTradeNo,
                OpenId         = openId,
                CheckName      = "FORCE_CHECK",//  "NO_CHECK"
                ReUserName     = apply.Name,
                Amount         = apply.Amount,
                Desc           = "提现"
            };
            var response = await _client.ExecuteAsync(wxRequest, _weChatPayOptions);

            if (response.ReturnCode != WeChatPayCode.Success || response.ResultCode != WeChatPayCode.Success)
            {
                apply.Status      = WithdrawalStatus.Failed;
                apply.Message     = "提现异常,请重新申请";
                apply.Description = response.ErrCodeDes;

                await _customerManager.UpdateAssets(apply.CustomerId, 0, apply.Total, -apply.ReservedAmount, "提现失败返回金额");
            }

            await _withdrawalHistoryRepository.UpdateAsync(apply);

            return(Result.Ok());
        }
Exemple #10
0
        public async Task <Result> ChangePwd([FromBody] AdminUserChangePwdRequest request)
        {
            var id   = HttpContext.GetUserId();
            var user = await _adminUserRepository.FirstOrDefaultAsync(id);

            var oldEntryPwd = request.OldPwd.ToMD5Base64();

            if (!user.Pwd.Equals(oldEntryPwd))
            {
                return(Result.Fail(ResultCodes.PasswordError));
            }

            var newEntryPwd = request.NewPwd.ToMD5Base64();

            user.Pwd = newEntryPwd;

            await _adminUserRepository.UpdateAsync(user);

            return(Result.Ok());
        }
        public async Task<Result> Edit([FromBody] AdminEmployeeEditRequest request)
        {
            var user = await _repository.FirstOrDefaultAsync(request.Id);
            if (user == null) return Result.Fail(ResultCodes.IdInvalid);

            if (user.Tel != request.Tel)
            {
                var anyTel = await _repository.Query().AnyAsync(e => e.Tel == request.Tel);
                if (anyTel) return Result.Fail(ResultCodes.RequestParamError, "手机号已存在");
            }

            user.NickName = request.NickName;
            if (!user.IsAdmin)
            {
                user.Role = request.Role;
            }
            user.Tel = request.Tel;

            await _repository.UpdateAsync(user);

            return Result.Ok();
        }
Exemple #12
0
        public async Task <Result> RefuseApply([FromBody] AdminRefundRefuseApplyRequest request)
        {
            var returnApply = await _returnApplyRepository.Query()
                              .Include(e => e.OrderItem)
                              .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (returnApply == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (returnApply.Status != ReturnAuditStatus.NotAudit)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前申请不允许拒绝"));
            }

            returnApply.Status           = ReturnAuditStatus.Failed;
            returnApply.AuditMessage     = request.AuditMessage;
            returnApply.OrderItem.Status = OrderItemStatus.ApplyFaild;

            await _returnApplyRepository.UpdateAsync(returnApply);

            return(Result.Ok());
        }
        public async Task <Result> Save(AdminLiteAppSaveRequest request)
        {
            var setting = await _repository.Query().FirstOrDefaultAsync();

            if (setting == null)
            {
                setting = new LiteAppSetting
                {
                    CityMembershipRights   = request.CityMembershipRights,
                    BranchMembershipRights = request.BranchMembershipRights,
                    Createat = DateTime.Now
                };
                await _repository.InsertAsync(setting);
            }
            else
            {
                setting.CityMembershipRights   = request.CityMembershipRights;
                setting.BranchMembershipRights = request.BranchMembershipRights;

                await _repository.UpdateAsync(setting);
            }

            return(Result.Ok());
        }
Exemple #14
0
        /// <summary>
        /// 修改资产
        /// </summary>
        /// <param name="assets"></param>
        /// <param name="commission"></param>
        /// <param name="amount"></param>
        /// <param name="repurchase"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task UpdateAssets(Assets assets, int commission, int amount, int repurchase, string message)
        {
            assets.AvailableAmount  += amount;
            assets.TotalCommission  += commission;
            assets.RepurchaseAmount += repurchase;
            assets.TotalAssets       = assets.AvailableAmount + assets.RepurchaseAmount;
            assets.UpdateTime        = DateTime.Now;

            await _assetsRepository.UpdateAsync(assets);

            if (amount != 0)
            {
                var history = new AssetsHistory
                {
                    CustomerId  = assets.CustomerId,
                    TotalAmount = assets.AvailableAmount,
                    Amount      = amount,
                    Createat    = DateTime.Now,
                    Message     = message
                };

                await _assetsHistoryRepository.InsertAsync(history);
            }
        }
        public async Task <Result> Create(AdminOrderCreateRequest request)
        {
            var customer = await _customerRepository.Query()
                           .Include(e => e.Parent)
                           .FirstOrDefaultAsync(e => e.Id == request.CustomerId);

            if (customer == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (customer.Role == PartnerRole.Default && request.PartnerRole == PartnerRole.Default)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "请选择合伙人角色"));
            }
            if (customer.Role != PartnerRole.Default && request.Goods.Count == 0)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "请选择商品"));
            }

            var now             = DateTime.Now;
            var isFirstOrder    = false;
            var totalFee        = 0;
            var actuallyAmount  = 0;
            var extendParams    = string.Empty;
            var totalCommission = 0;
            var commissionRatio = 0f;
            var orderItems      = new List <OrderItem>();
            var parentUser      = customer.Parent;

            if (request.PartnerRole != PartnerRole.Default)
            {
                if (customer.Role != PartnerRole.Default)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, $"用户:{customer.NickName} 为{customer.Role.GetDescription()} 不能重复设置角色"));
                }
                var partner = await _partnerApplyRepository.Query()
                              .Include(e => e.PartnerApplyGoods).ThenInclude(e => e.Goods).ThenInclude(e => e.ThumbnailImage)
                              .Where(e => e.PartnerRole == request.PartnerRole)
                              .FirstOrDefaultAsync();

                if (partner == null)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, $"角色{request.PartnerRole.GetDescription()}未设置商品"));
                }
                if (partner.PartnerApplyGoods.Count == 0)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, "没有商品"));
                }

                if (parentUser != null)
                {
                    if (parentUser.Role == partner.PartnerRole)
                    {
                        if (partner.ReferralCommissionRatio > 0)
                        {
                            commissionRatio = partner.ReferralCommissionRatio / 100f;
                        }
                    }
                    else
                    {
                        var ratio = await _partnerApplyRepository.Query()
                                    .Where(e => e.PartnerRole == parentUser.Role)
                                    .Select(e => e.RepurchaseCommissionRatio)
                                    .FirstOrDefaultAsync();

                        if (ratio > 0)
                        {
                            commissionRatio = ratio / 100f;
                        }
                    }
                }

                isFirstOrder   = true;
                customer.Role  = request.PartnerRole;
                extendParams   = Enum.GetName(typeof(PartnerRole), request.PartnerRole);
                totalFee       = partner.OriginalPrice == 0 ? partner.TotalAmount : partner.OriginalPrice;
                actuallyAmount = partner.TotalAmount;
                var goodsQuantity = partner.PartnerApplyGoods.Sum(e => e.Quantity);
                var averagePrice  = partner.TotalAmount / goodsQuantity;
                var quantity      = 0;
                foreach (var item in partner.PartnerApplyGoods)
                {
                    quantity += item.Quantity;
                    if (quantity == goodsQuantity)
                    {
                        averagePrice = partner.TotalAmount - ((quantity - 1) * averagePrice);
                    }
                    var commission = (int)(averagePrice * commissionRatio);
                    totalCommission = item.Quantity * commission;
                    for (int i = 0; i < item.Quantity; i++)
                    {
                        var orderItem = new OrderItem
                        {
                            GoodsId           = item.GoodsId,
                            GoodsName         = item.Goods.Name,
                            GoodsPrice        = item.Goods.Price,
                            DiscountAmount    = item.Goods.Price,
                            GoodsMediaUrl     = item.Goods.ThumbnailImage?.Url,
                            Quantity          = 1,
                            Remarks           = string.Empty,
                            Status            = OrderItemStatus.Default,
                            Createat          = now,
                            IsFirstBatchGoods = true
                        };

                        orderItem.SetCommissionHistory(customer.ParentId, commission, (int)(commissionRatio * 100), CommissionStatus.Complete);

                        orderItems.Add(orderItem);
                    }
                }
            }
            else if (request.Goods.Count > 0)
            {
                if (customer.Role == PartnerRole.Default)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, $"用户:{customer.NickName} 为未设置合伙人角色"));
                }
                if (parentUser != null)
                {
                    var ratio = await _partnerApplyRepository.Query()
                                .Where(e => e.PartnerRole == parentUser.Role)
                                .Select(e => e.RepurchaseCommissionRatio)
                                .FirstOrDefaultAsync();

                    if (ratio > 0)
                    {
                        commissionRatio = ratio / 100f;
                    }
                }
                var goodsIds = request.Goods.Select(e => e.Id).Distinct();
                var goodses  = await _goodsRepository.Query()
                               .Include(e => e.ThumbnailImage)
                               .Where(e => goodsIds.Contains(e.Id))
                               .ToListAsync();

                foreach (var item in goodses)
                {
                    var first = request.Goods.FirstOrDefault(e => e.Id == item.Id);
                    if (first == null)
                    {
                        return(Result.Fail(ResultCodes.RequestParamError, $"产品{item.Name}不存在"));
                    }
                    if (!item.IsPublished)
                    {
                        return(Result.Fail(ResultCodes.RequestParamError, $"产品{item.Name}未发布"));
                    }

                    var discountRate = 100f;
                    if (customer.Role == PartnerRole.CityPartner && item.CityDiscount > 0)
                    {
                        discountRate = item.CityDiscount;
                    }
                    else if (customer.Role == PartnerRole.BranchPartner && item.BranchDiscount > 0)
                    {
                        discountRate = item.BranchDiscount;
                    }

                    var amount     = (int)(item.Price * (discountRate / 100f));
                    var commission = (int)(amount * commissionRatio);
                    totalCommission += first.Quantity * commission;

                    for (int i = 0; i < first.Quantity; i++)
                    {
                        var orderItem = new OrderItem
                        {
                            GoodsId        = item.Id,
                            GoodsName      = item.Name,
                            GoodsPrice     = item.Price,
                            DiscountAmount = amount, //折扣
                            GoodsMediaUrl  = item.ThumbnailImage?.Url,
                            Quantity       = 1,
                            Remarks        = first.Remarks,
                            Status         = OrderItemStatus.Default,
                            Createat       = now,
                        };

                        orderItem.SetCommissionHistory(customer.ParentId, commission, (int)(commissionRatio * 100), CommissionStatus.PendingSettlement);

                        orderItems.Add(orderItem);
                    }
                }
                totalFee       = orderItems.Sum(e => e.Quantity * e.GoodsPrice);
                actuallyAmount = orderItems.Sum(e => e.Quantity * e.DiscountAmount);
            }

            var order = new Orders(GenerateHelper.GenOrderNo())
            {
                CustomerId     = customer.Id,
                OrderStatus    = OrderStatus.PaymentReceived,
                PaymentType    = request.PaymentType,
                PaymentMethod  = request.PaymentMethod,
                PaymentFee     = actuallyAmount,
                PaymentTime    = now,
                Remarks        = request.Remarks,
                Createat       = now,
                TotalFee       = totalFee,
                ActuallyAmount = actuallyAmount,
                ExtendParams   = extendParams,
                IsFirstOrder   = isFirstOrder,
                OrderItems     = orderItems
            };

            _orderRepository.Insert(order, false);

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

                if (parentUser != null && totalCommission > 0)
                {
                    if (isFirstOrder)
                    {
                        await _customerManager.UpdateAssets(parentUser.Id, 0, totalCommission, "下级首单返佣金");
                    }
                    else
                    {
                        await _customerManager.UpdateCommission(parentUser.Id, totalCommission);
                    }
                }

                if (isFirstOrder)
                {
                    await _customerRepository.UpdateAsync(customer);
                }

                transaction.Commit();
            }

            return(Result.Ok());
        }