Beispiel #1
0
        public static void ProductNotAuto_SetVirtualUpdate(ProductNotAutoSetVirtualEntity entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdateProductNotAuto_SetVirtualKey");
            command.SetParameterValue("@ProductSysNo", entity.ProductSysNo);
            command.SetParameterValue("@AbandonTime", entity.AbandonTime);
            command.SetParameterValue("@AbandonUserSysNo", entity.AbandonUserSysNo);
            command.SetParameterValue("@Note", entity.Note);
            command.SetParameterValue("@Status", entity.Status);
            command.SetParameterValue("@SysNo", entity.SysNo);

            command.ExecuteNonQuery();
        }
Beispiel #2
0
        private static void ProductNotAutoSetVirtualUpdate(ProductNotAutoSetVirtualEntity entity
                                                           , SecKillEntity oCountdown)
        {
            int ProductSysNo = entity.ProductSysNo;

            //作废禁设虚库记录
            SecKillDA.ProductNotAuto_SetVirtualUpdate(entity);

            if (!IsExistsNotAutoSetVirtual(ProductSysNo))
            {
                //更新总仓,分仓虚库数量
                //自动设虚库 20091214和shadow确认:先进行自动设虚库,在更改inventory的虚拟库存
                //SecKillDA.AotuSetStockVirtualQty(ProductSysNo);

                //把51+配置里的分仓的虚拟库存之和更新到inventory表的虚拟库存上
                //SecKillDA.Update_Inventory_VirtualQty(ProductSysNo);
            }
        }
Beispiel #3
0
        public static void SetVirtualQty_CountDownFinish(SecKillEntity countDown, int SysNo)
        {
            if (SysNo != -999 && SysNo > 0)
            {
                ProductNotAutoSetVirtualEntity entity = new ProductNotAutoSetVirtualEntity();

                entity.SysNo            = SysNo;
                entity.ProductSysNo     = countDown.ProductSysNo;
                entity.Note             = "CountDown  Interupted/Finished";
                entity.Status           = -1;
                entity.AbandonTime      = DateTime.Now;
                entity.AbandonUserSysNo = 493;
                entity.CountDownSysNo   = countDown.SysNo;
                SecKillDA.ProductNotAuto_SetVirtualUpdate(entity);
                //BatchUpdateStockVirtual_AfterRun(countDown);
                //ProductNotAutoSetVirtualUpdate(entity, countDown);
            }
        }
Beispiel #4
0
        public static ProductNotAutoSetVirtualEntity InsertProduct_NotAutoSetVirtual(ProductNotAutoSetVirtualEntity entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("InsertProduct_NotAutoSetVirtual");

            command.SetParameterValue("@ProductSysNo", entity.ProductSysNo);
            command.SetParameterValue("@NotAutoSetVirtualType", entity.NotAutoSetVirtualType);
            command.SetParameterValue("@CreateUserSysNo", entity.CreateUserSysNo);
            command.SetParameterValue("@CreateTime", entity.CreateTime);
            command.SetParameterValue("@CountDownSysNo", entity.CountDownSysNo);
            command.SetParameterValue("@AbandonUserSysNo", entity.AbandonUserSysNo);
            command.SetParameterValue("@AbandonTime", entity.AbandonTime);
            command.SetParameterValue("@Note", entity.Note);
            command.SetParameterValue("@Status", entity.Status);

            command.ExecuteEntity<ProductNotAutoSetVirtualEntity>();

            entity.SysNo = Convert.ToInt32(command.GetParameterValue("@SysNo"));

            return entity;
        }
Beispiel #5
0
        public static void SetVirtualQty_WhenCountDownAbandon(SecKillEntity countDown, int SysNo)
        {
            if (SysNo != -999 && SysNo > 0)
            {
                ProductNotAutoSetVirtualEntity entity = new ProductNotAutoSetVirtualEntity();

                entity.SysNo            = SysNo;
                entity.ProductSysNo     = countDown.ProductSysNo;
                entity.Note             = "CountDown  Abandon";
                entity.Status           = -1;
                entity.AbandonTime      = DateTime.Now;
                entity.AbandonUserSysNo = 493;
                entity.CountDownSysNo   = countDown.SysNo;

                //作废禁设虚库记录
                SecKillDA.ProductNotAuto_SetVirtualUpdate(entity);
                //更新总仓,分仓虚库数量
                //SecKillDA.UpdateInventoryVirtualQty(countDown.ProductSysNo);
                //SecKillDA.AotuSetStockVirtualQty(countDown.ProductSysNo);
            }
        }
Beispiel #6
0
 private static void ProductNotAutoSetVirtualInsert(ProductNotAutoSetVirtualEntity entity)
 {
     if (!IsExistsNotAutoSetVirtual(entity.ProductSysNo))
     {
         //更新总仓,分仓虚库数量
         //SecKillDA.UpdateInventoryVirtualQty(entity.ProductSysNo);
         //插入记录
         SecKillDA.InsertProduct_NotAutoSetVirtual(entity);
     }
     else
     {
         if (!IsExistsNotAutoSetVirtual(entity.ProductSysNo, entity.NotAutoSetVirtualType))
         {
             //插入记录
             SecKillDA.InsertProduct_NotAutoSetVirtual(entity);
         }
         else
         {
             throw new BusinessException("已存在同类型的有效的记录!商品编号:" + entity.ProductSysNo);
         }
     }
 }
Beispiel #7
0
        private static bool SetRunning(int countdownSysNo)
        {
            //必须是Ready状态,切换价格和库存
            SecKillEntity countdownItem = SecKillDA.GetCountDownItemBySysno(countdownSysNo);

            if (countdownItem.Status != (int)CountdownStatus.Ready)
            {
                throw new BusinessException("不是就绪状态");
            }
            TransactionOptions transactionOptions = new TransactionOptions();

            transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
            {
                //最前端修改,不会影响其他逻辑
                if (countdownItem.IsReservedQty == 1)
                {
                    //这里改,更新库存.
                    UpdateReservedQTY(countdownItem);
                }

                countdownItem.Status = (int)CountdownStatus.Running;
                #region 设置限时抢购为原始价格并记录抢购价格//获取商品价格
                ItemEntity itemPrice = SecKillDA.LoadItemPrice(countdownItem.ProductSysNo);

                countdownItem.SnapShotCurrentPrice = itemPrice.CurrentPrice;
                countdownItem.SnapShotCashRebate   = itemPrice.CashRebate;
                countdownItem.SnapShotPoint        = itemPrice.Point;

                itemPrice.CurrentPrice = countdownItem.CountDownCurrentPrice;
                itemPrice.CashRebate   = countdownItem.CountDownCashRebate;
                itemPrice.Point        = countdownItem.CountDownPoint;

                #endregion

                InventoryEntity inventory = SecKillDA.GetInventoryByProductSysNo(countdownItem.ProductSysNo);
                countdownItem.AffectedVirtualQty = inventory.VirtualQty;

                //获取当前的分仓的虚库数量
                List <InventoryStockEntity> Invstocklist = SecKillDA.GetInventoryStock(countdownItem.ProductSysNo);
                StringBuilder stockonlineqty             = new StringBuilder();
                foreach (InventoryStockEntity itemStock in Invstocklist)
                {
                    stockonlineqty.Append(string.Format("{0}:{1};", itemStock.StockSysNo
                                                        , itemStock.AvailableQty + itemStock.ConsignQty + itemStock.VirtualQty));
                }

                //判断是否满足各分仓的OnlineQty>=各分仓的限时抢购数量
                //--逻辑已经修改,不满足分仓数量也可以限时抢购
                string curVirtualQty = string.Empty;
                IsCanRunningCountDown(Invstocklist, countdownItem, out curVirtualQty);
                countdownItem.SnapShotCurrentVirtualQty = curVirtualQty;

                #region   设置记录为不自动设置虚拟库存
                ProductNotAutoSetVirtualEntity oEntity = new ProductNotAutoSetVirtualEntity();
                oEntity.CountDownSysNo        = countdownSysNo;
                oEntity.CreateTime            = DateTime.Now;
                oEntity.CreateUserSysNo       = 493;
                oEntity.NotAutoSetVirtualType = (int)NotAutoSetVirtualType.CountDown;
                oEntity.Note         = "CountDown Run";
                oEntity.ProductSysNo = countdownItem.ProductSysNo;
                oEntity.Status       = 0;
                ProductNotAutoSetVirtualInsert(oEntity);

                #endregion

                #region  通过虚库控制库存 注释此间代码
                if (1 == 2)
                {
                    #region 获取当前商品总库信息
                    string curStockQty = string.Empty;
                    if (!BatchUpdateStockVirtual_Run(countdownItem, stockonlineqty.ToString()))
                    {
                        return(false);
                    }

                    List <InventoryStockEntity> inventoryStocklist = SecKillDA.GetInventoryStock(countdownItem.ProductSysNo);
                    //处理库存差额, 库存差额是为计算可用库存做准备的。最小为0,为0代表实际库存就是可卖库存。
                    int AffectedVirtualQty = 0;
                    foreach (InventoryStockEntity stock in inventoryStocklist)
                    {
                        AffectedVirtualQty += stock.VirtualQty;
                        curStockQty        += stock.StockSysNo + ":" + (stock.AvailableQty + stock.ConsignQty + stock.VirtualQty).ToString() + ";";
                    }

                    if (!(countdownItem.IsLimitedQty == 1 && countdownItem.IsReservedQty == 1))
                    {
                        countdownItem.AffectedStock = curStockQty;
                    }

                    #endregion

                    ////更改总仓虚库
                    //if (!SetVirtualQty(countdownItem.ProductSysNo, AffectedVirtualQty))
                    //{
                    //    return false;
                    //}
                    InventoryEntity inventory2 = SecKillDA.GetInventoryByProductSysNo(countdownItem.ProductSysNo);
                    if (countdownItem.IsLimitedQty == 0 && countdownItem.IsReservedQty == 0)
                    {
                        countdownItem.CountDownQty = inventory2.AvailableQty + inventory2.ConsignQty;// +inventory2.VirtualQty;
                    }
                    else if (countdownItem.IsLimitedQty == 0 &&
                             inventory2.AvailableQty + inventory2.ConsignQty + inventory2.VirtualQty != countdownItem.CountDownQty)
                    {
                        countdownItem.CountDownQty = inventory2.AvailableQty + inventory2.ConsignQty;// +inventory2.VirtualQty;
                    }
                }
                #endregion
                SecKillDA.CountDownStartWithholdQty(countdownItem.SysNo);
                SecKillDA.UpdateCountdown(countdownItem);
                SecKillDA.UpdateItemPrice(itemPrice);
                if (countdownItem.IsPromotionSchedule == 1)
                {
                    SecKillDA.UpdateMaxPerOrder(countdownItem.ProductSysNo, countdownItem.MaxPerOrder);
                }
                if (!string.IsNullOrEmpty(countdownItem.PromotionType) && countdownItem.PromotionType.ToUpper() == "DC")
                {
                    SecKillDA.UpdateProduct_Ex(countdownItem.ProductSysNo, "DC");
                }
                ts.Complete();
            }
            return(true);
        }