Пример #1
0
        public void Receive(string message)
        {
            LogHelper.WriteLog("receive message:" + message);
            MiaoShaMessage mm     = JsonConvert.DeserializeObject <MiaoShaMessage>(message);
            MiaoShaUser    user   = mm.MiaoShaUser;
            var            goodId = mm.GoodId;
            var            good   = goodBO.Value.GetGoodById(goodId);
            var            stock  = good.StockCount;

            if (stock <= 0)
            {
                return;
            }
            //判断是否已经秒杀到了
            MiaoShaOrder order = miaoShaOrderBO.Value.GetMiaoshaOrderByUserIdGoodsId(user.Id, goodId);

            if (order != null)
            {
                return;
            }
            ////减库存 下订单 写入秒杀订单
            var orderInfo = orderInfoBO.Value.MiaoSha(user, good);
        }
Пример #2
0
        /// <summary>
        /// 秒杀功能
        /// </summary>
        /// <param name="miaoShaUser"></param>
        /// <param name="good"></param>
        /// <returns></returns>
        public OrderInfo MiaoSha(MiaoShaUser miaoShaUser, Good good)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(@"DECLARE @OrderIdPri bigint
                        SET @OrderIdPri=0
                        BEGIN TRY 
                        BEGIN TRAN 
                        update MiaoShaGood SET StockCount=StockCount-1 WHERE GoodId=@GoodId and StockCount>0
                        IF @@rowcount<=0   BEGIN
                        SELECT * FROM OrderInfo WHERE Id=@OrderIdPri
                        END
                        ELSE BEGIN
                        INSERT INTO [dbo].[OrderInfo]
                                   ([UserId]
                                   ,[GoodId]
                                   ,[DeliveryAddrId]
                                   ,[GoodName]
                                   ,[GoodCount]
                                   ,[GoodPrice]
                                   ,[OrderChannel]
                                   ,[Status]
                                   ,[CreateTime]
                                   ,[PayTime])
                             VALUES
                                   (@UserId
                                   ,@GoodId
                                   ,@DeliveryAddrId
                                   ,@GoodName
                                   ,@GoodCount
                                   ,@GoodPrice
                                   ,@OrderChannel
                                   ,@Status
                                   ,GETDATE()
                                   ,GETDATE() )select @OrderIdPri=@@identity
                        INSERT INTO [dbo].[MiaoShaOrder]
                                   ([UserId]
                                   ,[OrderId]
                                   ,[GoodId])
                             VALUES
                                   (@UserId,@OrderIdPri,@GoodId)
                    SELECT * FROM OrderInfo WHERE Id=@OrderIdPri
                    END  COMMIT TRAN  END TRY  BEGIN CATCH  ROLLBACK TRAN   SELECT * FROM OrderInfo WHERE Id=0   END CATCH ");
            IDictionary param = new Hashtable();

            param.Add("GoodId", good.Id);
            param.Add("UserId", miaoShaUser.Id);
            param.Add("DeliveryAddrId", 0);
            param.Add("GoodName", good.Name);
            param.Add("GoodCount", 1);
            param.Add("GoodPrice", good.MiaoShaPrice);
            param.Add("OrderChannel", 0);
            param.Add("Status", 0);
            var list = base.Query(sb.ToString(), param);

            if (list != null && list.Count > 0)
            {
                return(list[0]);
            }
            else
            {
                return(null);
            }
        }
Пример #3
0
 /// <summary>
 /// 秒杀功能
 /// </summary>
 /// <param name="miaoShaUser"></param>
 /// <param name="good"></param>
 /// <returns></returns>
 public virtual OrderInfo MiaoSha(MiaoShaUser miaoShaUser, Good good)
 {
     return(this.GetResult(() => DataAccess.MiaoSha(miaoShaUser, good)));
 }