示例#1
0
        //[Authorize]
        public async Task <APIResult> GetMemberDetails([FromBody] ShopMember input)
        {
            var shopMember = await db.ShopMembers.FindAsync(input.Id);

            shopMember.ShopMemberLevel = await db.ShopMemberLevel.FindAsync(shopMember.ShopMemberLevelId);

            var shopMemberModel = _mapper.Map <ShopMemberModel>(shopMember);

            #region 直接拿小程序部分的代码使用

            IQueryable <GetBillModel> unionQuery = GetRecharge(shopMember);
            var rtn = unionQuery.OrderByDescending(m => m.BillDateTime)
                      .Select(m => new
            {
                m.Amount,
                m.BillType,
                BillDateTime = m.BillDateTime.ToString("yyyy-MM-dd HH:mm:ss")
            });

            #endregion

            return(await Task.FromResult(Success(new
            {
                shopMemberModel,
                rtn
            })));
        }
示例#2
0
        public static ShopMember GetShopMember(ShopDbContext shopDb, int shopId, int memberId)
        {
            ShopMember shopMember = shopDb.Query <ShopMember>()
                                    .Where(m => !m.IsDel && m.MemberId == memberId && m.ShopId == shopId)
                                    .FirstOrDefault();

            return(shopMember);
        }
示例#3
0
文件: ShopForm.cs 项目: bracikaa/gms
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                datareceived = sport.ReadLine();
                theNewId     = Int64.Parse(datareceived.Trim(), NumberStyles.HexNumber);


                using (SqlConnection connection = new SqlConnection(
                           global::GymMembershipSystem.Properties.Settings.Default.GymMembershipSystemDatabase))
                {
                    using (SqlCommand cmd = new SqlCommand("SELECT id, (Name + ' ' + Surname) AS Name, Gender, LastEntrance FROM Member WHERE CardId=@CardId", connection))
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.Parameters.AddWithValue("@CardId", theNewId);
                        connection.Open();

                        SqlDataReader dr = cmd.ExecuteReader();
                        if (dr.HasRows == true)
                        {
                            ShopMember shopmember = new ShopMember();
                            while (dr.Read())
                            {
                                string id           = dr["id"].ToString();
                                string name         = dr["Name"].ToString();
                                string gender       = dr["Gender"].ToString();
                                string lastentrance = dr["LastEntrance"].ToString();
                                shopmember.id           = dr["id"].ToString();
                                shopmember.Name         = dr["Name"].ToString();
                                shopmember.Gender       = dr["Gender"].ToString();
                                shopmember.LastEntrance = dr["LastEntrance"].ToString();

                                SetText(shopmember);
                                sport.Close();
                            }

                            sport.Open();
                        }
                        connection.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                List <Label> Labels = new List <Label>();
                Labels.Add(MyLabel.SetOKLabel("General Error"));
                Labels.Add(MyLabel.SetOKLabel(ex.Message));

                List <Button> Buttons = new List <Button>();
                Buttons.Add(MyButton.SetOKThemeButton());
                MyMessageBox.Show(
                    Labels,
                    "",
                    Buttons,
                    MyImage.SetFailed());
            }
        }
示例#4
0
 public ShopMemberServer(ShopDbContext shopDb, int shopId, int memberId)
 {
     this.shopDb = shopDb;
     mShopMember = GetShopMember(shopDb, shopId, memberId);
     if (mShopMember == null)
     {
         throw new Exception("会员信息不存在");
     }
 }
示例#5
0
        /// <summary>
        /// 获取用户消费记录
        /// </summary>
        /// <param name="shopMember"></param>
        /// <returns></returns>
        private IQueryable <GetBillModel> GetRecharge(ShopMember shopMember)
        {
            var rechargeQuery = db.Query <ShopMemberRecharge>()
                                .Where(m => !m.IsDel && m.Status == ShopMemberTransactionStatus.已完成)
                                .Where(m => m.ShopMemberId == shopMember.Id)
                                .Select(m => new GetBillModel()
            {
                Amount       = ((m.Amount + m.PresentedAmount) / 100m),
                BillType     = 1,
                BillDateTime = m.TransactionTime
            });
            var consumeQuery = db.Query <ShopMemberConsume>()
                               .Where(m => !m.IsDel && m.ShopMemberId == shopMember.Id)
                               .Select(m => new GetBillModel()
            {
                Amount       = (m.Amount / 100m),
                BillType     = 2,
                BillDateTime = m.TransactionTime
            });
            var refundQuery = db.Query <ShopMemberRufund>()
                              .Where(m => !m.IsDel && m.ShopMemberId == shopMember.Id)
                              .Select(m => new GetBillModel()
            {
                Amount       = (m.Amount / 100m),
                BillType     = 3,
                BillDateTime = m.TransactionTime
            });
            var unionQuery = rechargeQuery.Union(consumeQuery).Union(refundQuery);


            //var rechargeQuery = db.Query<ShopMemberRecharge>()
            //    .Where(m => !m.IsDel && m.Status == ShopMemberTransactionStatus.已完成)
            //    .Where(m => m.ShopMemberId == shopMember.Id)
            //    .Select(m => new GetBillModel()
            //    {
            //        Amount = (m.Amount + m.PresentedAmount) / 100m,
            //        BillType = 1,
            //        BillDateTime = m.TransactionTime
            //    });
            //var consumeQuery = db.Query<ShopMemberConsume>()
            //    .Where(m => !m.IsDel && m.ShopMemberId == shopMember.Id)
            //    .Select(m => new GetBillModel()
            //    {
            //        Amount = m.Amount / 100m,
            //        BillType = 2,
            //        BillDateTime = m.TransactionTime
            //    });
            //var unionQuery = rechargeQuery.Union(consumeQuery);
            return(unionQuery);
        }
示例#6
0
        public APIResult GetBill([FromBody] GetBillArgsModel args)
        {
            if (!args.ShopId.HasValue)
            {
                throw new Exception("ShopId不能为空");
            }
            int        memberId   = GetMemberId();
            ShopMember shopMember = db.Query <ShopMember>()
                                    .Where(m => !m.IsDel && m.MemberId == memberId && m.ShopId == args.ShopId.Value)
                                    .FirstOrDefault();

            var rechargeQuery = db.Query <ShopMemberRecharge>()
                                .Where(m => !m.IsDel && m.Status == ShopMemberTransactionStatus.已完成)
                                .Where(m => m.ShopMemberId == shopMember.Id)
                                .Select(m => new GetBillModel()
            {
                Amount       = ((m.Amount + m.PresentedAmount) / 100m).ToString("#0.00"),
                BillType     = 1,
                BillDateTime = m.TransactionTime
            });
            var consumeQuery = db.Query <ShopMemberConsume>()
                               .Where(m => !m.IsDel && m.ShopMemberId == shopMember.Id)
                               .Select(m => new GetBillModel()
            {
                Amount       = (m.Amount / 100m).ToString("#0.00"),
                BillType     = 2,
                BillDateTime = m.TransactionTime
            });
            var refundQuery = db.Query <ShopMemberRufund>()
                              .Where(m => !m.IsDel && m.ShopMemberId == shopMember.Id)
                              .Select(m => new GetBillModel()
            {
                Amount       = (m.Amount / 100m).ToString("#0.00"),
                BillType     = 3,
                BillDateTime = m.TransactionTime
            });
            var unionQuery = rechargeQuery.Union(consumeQuery).Union(refundQuery);
            var rtn        = unionQuery.OrderByDescending(m => m.BillDateTime)
                             .ToPagedList(args.PageIndex, args.PageSize);
            decimal balance = shopMember == null ? 0 : shopMember.Balance / 100m;

            return(Success(new GetBillReturnModel()
            {
                Balance = balance,
                Bill = rtn
            }));
        }
示例#7
0
        public APIResult Register([FromBody] RegisterArgsModel args)
        {
            if (!CheckVerificationCode(args.Phone, args.Code))
            {
                return(Error("验证码错误"));
            }
            int memberId = GetMemberId();
            var model    = db.Query <ShopMember>()
                           .FirstOrDefault(m => !m.IsDel && m.MemberId == memberId && m.ShopId == args.ShopId.Value);

            if (model != null)
            {
                throw new Exception("该会员已注册过");
            }
            var members    = memberDb.Members.Find(memberId);
            var shopMember = new ShopMember()
            {
                ShopId   = args.ShopId.Value,
                AddIp    = GetIp(),
                AddTime  = DateTime.Now,
                MemberId = memberId,
                Sex      = args.Sex,
                Phone    = args.Phone,
                Credits  = 0,
                Balance  = 0,
                BirthDay = args.BirthDay.Value,
                Name     = members.NickName
            };

            db.Add(shopMember);
            var shopMemberServer = new ShopMemberServer(db, shopMember);

            if (!shopMemberServer.CheckPhoneNumCanUse(args.Phone, args.ShopId.Value))
            {
                return(Error("该手机号码已注册"));
            }
            //shopMemberServer.SetPassword(args.Password);
            db.SaveChanges();
            //更新会员等级
            ShopMemberLevelServer.UpdateMemberLevel(db, db.ShopMemberSet.FirstOrDefault(m => m.ShopId.Equals(args.ShopId) && !m.IsDel), memberId, args.ShopId.Value, _logger);

            return(Success(new
            {
                shopMember.Id
            }));
        }
示例#8
0
 private void SetText(ShopMember shopmember)
 {
     // InvokeRequired required compares the thread ID of the
     // calling thread to the thread ID of the creating thread.
     // If these threads are different, it returns true.
     if (label12.InvokeRequired)
     {
         SetTextCallback d = new SetTextCallback(SetText);
         this.Invoke(d, new object[] { shopmember });
     }
     else
     {
         label12.Text = shopmember.id;
         label13.Text = shopmember.Name;
         label15.Text = shopmember.Gender;
         label17.Text = shopmember.LastEntrance;
     }
 }
示例#9
0
        public APIResult Add([FromBody] AddArgsModel args)
        {
            //TODO:这里还需要进行锁操作,保证每个店铺的库存不是负数
            if (args.Items == null || args.Items.Count <= 0)
            {
                throw new Exception("商品内容不能为空");
            }
            bool isTakeOut = args.IsTakeOut == null ? false : args.IsTakeOut.Value;
            bool isThird   = false;
            var  memberId  = GetMemberId();
            var  shop      = db.Query <Shop>()
                             .Where(m => !m.IsDel)
                             .Where(m => m.Id == args.ShopId)
                             .FirstOrDefault();

            if (shop == null)
            {
                throw new Exception("商铺纪录不存在");
            }

            ShopMember shopMember      = ShopMemberServer.GetShopMember(db, shop.Id, memberId);
            var        shopMemberSet   = ShopMemberServer.GetShopMemberSet(db, shop.Id);
            bool       IsTopUpDiscount = shopMemberSet == null ? false : shopMemberSet.IsTopUpDiscount;
            double     memberDiscount  = 1;

            if (shopMember != null)
            {
                var shopMemberLevel = db.GetSingle <ShopMemberLevel>(shopMember.ShopMemberLevelId);
                if (shopMemberLevel != null)
                {
                    memberDiscount = shopMemberLevel.Discount;
                }
            }

            var shoptakeoutinfo = db.ShopTakeOutInfo.FirstOrDefault(r => r.ShopId == args.ShopId && !r.IsDel);

            if (shoptakeoutinfo != null && shoptakeoutinfo.TakeDistributionType == TakeDistributionType.达达配送 && isTakeOut && args.TakeWay == TakeWay.送货上门)
            {
                isThird = true;
            }

            var model = new ShopOrder()
            {
                AddTime              = DateTime.Now,
                MemberId             = memberId,
                ShopId               = args.ShopId,
                Remark               = args.Remark,
                AddUser              = $"member{memberId}",
                AddIp                = GetIp(),
                Flag                 = Guid.NewGuid().ToString(),
                IsTakeOut            = isTakeOut,
                Status               = ShopOrderStatus.待支付,
                takeDistributionType = isThird == true ? TakeDistributionType.达达配送 : TakeDistributionType.商家配送
            };
            ShopOrderServer shopOrderServer = new ShopOrderServer(model);

            db.AddTo(model);
            if (isTakeOut)
            {
                shopOrderServer.RecordTakeout(db, shop, memberId, args.TakeWay.Value, args.PickupTime);
            }
            else if (args.IsSelfHelp.HasValue && args.IsSelfHelp.Value)
            {
                shopOrderServer.RecordShopOrderSelfHelp(db, shop.Id, args.IsSelfHelpTakeOut ?? false);
            }
            else if (!string.IsNullOrEmpty(args.ShopPartFlag))
            {
                shopOrderServer.RecordScancode(db, args.ShopPartFlag);
            }
            else
            {
                throw new Exception("请先扫描桌上二唯码");
            }
            int cartCount = 0;

            args.Items.ForEach(m => cartCount += m.Count);
            shopOrderServer.RecordOtherFee(db, args.TakeWay, cartCount);
            var commodityIdAndCounts = new Dictionary <int, int>();

            //商铺库存判断
            foreach (var item in args.Items)
            {
                var stock = db.Query <ShopCommodityStock>()
                            .Where(m => !m.IsDel)
                            .Where(m => m.ShopId == shop.Id)
                            .Where(m => m.Sku.Flag == item.SkuFlag)
                            .Select(m => new
                {
                    m.Id,
                    m.Stock,
                    IsCombo       = m.Sku.Commodity.CategoryId == 0, //是否套餐
                    CommodityName = m.Sku.Commodity.Name,
                    m.Sku.CommodityId,
                    m.CostPrice,
                    m.SalePrice,
                    m.MarketPrice,
                    HasVipPrice = m.Sku.Commodity.UseMemberPrice,
                    SkuSummary  = m.Sku.Summary
                })
                            .FirstOrDefault();
                if (stock == null)
                {
                    throw new Exception("商品不存在或者商铺商品未上架");
                }
                if (stock.Stock <= 0 || stock.Stock < item.Count)
                {
                    throw new Exception("库存不足");
                }

                db.AddStock(stock.Id, -item.Count);

                //纪录下commodity的count
                if (commodityIdAndCounts.ContainsKey(stock.CommodityId))
                {
                    commodityIdAndCounts[stock.CommodityId] += item.Count;
                }
                else
                {
                    commodityIdAndCounts.Add(stock.CommodityId, item.Count);
                }


                var orderItem = new ShopOrderItem()
                {
                    CommodityName    = stock.CommodityName,
                    CommodityStockId = stock.Id,
                    AddIp            = model.AddIp,
                    AddTime          = model.AddTime,
                    AddUser          = model.AddUser,
                    CostPrice        = stock.CostPrice,
                    SalePrice        = (stock.HasVipPrice && !stock.IsCombo && (!IsTopUpDiscount || args.IsBalance)) ? ShopMemberServer.GetMemberPrice(stock.SalePrice, memberDiscount) : stock.SalePrice,
                    PrimePrice       = stock.SalePrice,
                    ShopOrder        = model,
                    Count            = item.Count,
                    SkuSummary       = stock.SkuSummary
                };
                db.AddTo(orderItem);

                model.Amount += orderItem.SalePrice * orderItem.Count;
            }

            if (args.ComboPrice.HasValue)
            {
                model.Amount += args.ComboPrice.Value;
            }

            //这里尝试扣钱
            //var memberAmount = db.GetMemberAmountList(memberId);
            //var availAmount = memberAmount.GetAvailAmount();
            //if (availAmount >= model.Amount)
            //{
            //    memberAmount.DecreaseAvailAmount(model.Amount, 0, $"{shop.Name}消费", Newtonsoft.Json.JsonConvert.SerializeObject(new { shopId = shop.Id, orderFlag = model.Flag }), FinaceType.商品购买支出);
            //    memberAmount.UpdateMemberAmountCache();
            //    model.PayTime = DateTime.Now;

            //    //更新商品的销售量
            //    //注意,这里如果有一个品牌,多个店铺的情况,会出现销售额共享的情况
            //    var commodityIds = commodityIdAndCounts.Select(m => m.Key).ToList();
            //    var commoditys = db.Query<ShopBrandCommodity>()
            //            .Where(m => commodityIds.Contains(m.Id))
            //            .ToList();
            //    foreach (var item in commoditys)
            //    {
            //        item.SalesForMonth += commodityIdAndCounts[item.Id];
            //    }
            //    db.SaveChanges();
            //    AfterOrderPlacing(model, shop.Name);
            //}
            //else
            //{
            //    db.SaveChanges();
            //}
            model.OrderNumber = shopOrderServer.GenerateOrderNumber();

            shopOrderServer.ComputePayment(db);
            db.SaveChanges();
            model.Shop = null;  //不返回商店信息
            return(Success(model));
        }
示例#10
0
 public ShopMemberServer(ShopDbContext shopDb, ShopMember shopMember)
 {
     this.shopDb = shopDb;
     mShopMember = shopMember;
 }
示例#11
0
        /// <summary>
        /// 升级(不开启降级使用)
        /// </summary>
        /// <param name="count"></param>
        /// <param name="shopId"></param>
        /// <returns></returns>
        private async static Task <ShopMemberLevel> GetLevelUp(ShopDbContext db, int count, int shopId, ShopMember shopMember, ILogger _logger)
        {
            ShopMemberLevel shopMemberLevel  = null;
            var             shopMemberLevels = db.ShopMemberLevel.OrderBy(m => m.Sort).Where(m => !m.IsDel && m.ShopId.Equals(shopId));

            if (shopMemberLevels.Count() == 0)
            {
                return(await Task.FromResult(new ShopMemberLevel()
                {
                    Id = 0, LevelName = "", MemberLevel = ""
                }));
            }
            var maxIntegralshopMemberLevels = await shopMemberLevels.MaxAsync(m => m.MaxIntegral);

            if (count > maxIntegralshopMemberLevels)
            {
                return(await Task.FromResult(await shopMemberLevels.LastOrDefaultAsync()));
            }
            foreach (var item in shopMemberLevels)
            {
                if (count >= item.MinIntegral && count <= item.MaxIntegral)
                {
                    shopMemberLevel = item;
                }
            }
            var oldShopMemberLevel = await shopMemberLevels.FirstOrDefaultAsync(m => !m.IsDel && m.Id.Equals(shopMember.ShopMemberLevelId));

            if (oldShopMemberLevel != null)
            {
                if (oldShopMemberLevel.Sort >= shopMemberLevel.Sort)
                {
                    return(await Task.FromResult(oldShopMemberLevel));
                }
            }
            return(await Task.FromResult(shopMemberLevel));
        }