예제 #1
0
 public void map(DailyClickInfo oParam, DataRow tempdr)
 {
     oParam.SysNo        = Util.TrimIntNull(tempdr["SysNo"]);
     oParam.ProductSysNo = Util.TrimIntNull(tempdr["ProductSysNo"]);
     oParam.ClickDate    = Util.TrimNull(tempdr["ClickDate"]);
     oParam.ClickCount   = Util.TrimIntNull(tempdr["ClickCount"]);
 }
예제 #2
0
        public int Insert(DailyClickInfo oParam)
        {
            string sql = @"INSERT INTO Product_DailyClick
                            (
                            ProductSysNo, ClickDate, ClickCount
                            )
                            VALUES (
                            @ProductSysNo, @ClickDate, @ClickCount
                            );set @SysNo = SCOPE_IDENTITY();";

            SqlCommand cmd = new SqlCommand(sql);

            SqlParameter paramSysNo        = new SqlParameter("@SysNo", SqlDbType.Int, 4);
            SqlParameter paramProductSysNo = new SqlParameter("@ProductSysNo", SqlDbType.Int, 4);
            SqlParameter paramClickDate    = new SqlParameter("@ClickDate", SqlDbType.NVarChar, 10);
            SqlParameter paramClickCount   = new SqlParameter("@ClickCount", SqlDbType.Int, 4);

            paramSysNo.Direction = ParameterDirection.Output;

            if (oParam.ProductSysNo != AppConst.IntNull)
            {
                paramProductSysNo.Value = oParam.ProductSysNo;
            }
            else
            {
                paramProductSysNo.Value = System.DBNull.Value;
            }
            if (oParam.ClickDate != AppConst.StringNull)
            {
                paramClickDate.Value = oParam.ClickDate;
            }
            else
            {
                paramClickDate.Value = System.DBNull.Value;
            }
            if (oParam.ClickCount != AppConst.IntNull)
            {
                paramClickCount.Value = oParam.ClickCount;
            }
            else
            {
                paramClickCount.Value = System.DBNull.Value;
            }

            cmd.Parameters.Add(paramSysNo);
            cmd.Parameters.Add(paramProductSysNo);
            cmd.Parameters.Add(paramClickDate);
            cmd.Parameters.Add(paramClickCount);

            return(SqlHelper.ExecuteNonQuery(cmd, out oParam.SysNo));
        }
예제 #3
0
        public int Click(DailyClickInfo oClick)
        {
            string sql = @"
					if exists( select top 1 * from product_dailyclick where productsysno=@productsysno and clickdate=@clickdate)
						update product_dailyclick set clickcount = clickcount + @clickcount where productsysno=@productsysno and clickdate=@clickdate
					else
						insert into product_dailyclick(productsysno, clickdate, clickcount) values(@productsysno, @clickdate, @clickcount)"                        ;

            sql = sql.Replace("@productsysno", oClick.ProductSysNo.ToString());
            sql = sql.Replace("@clickdate", Util.ToSqlString(oClick.ClickDate));
            sql = sql.Replace("@clickcount", oClick.ClickCount.ToString());

            SqlCommand cmd = new SqlCommand(sql);

            return(SqlHelper.ExecuteNonQuery(cmd));
        }
예제 #4
0
        public void Import()
        {
            if (!AppConfig.IsImportable)
            {
                throw new BizException("Is Importable is false");
            }

            /*  do not  use the following code after Data Pour in */
            string  sql = " select top 1 * from product_dailyclick ";
            DataSet ds  = SqlHelper.ExecuteDataSet(sql);

            if (Util.HasMoreRow(ds))
            {
                throw new BizException("the table product_dailyclick is not empty");
            }

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //仅导3月份以来的数据
                string  sql1 = @"select 
								pdc.sysno, con_product.newsysno as productsysno, countdate as clickdate, countnum as clickcount
							from
								ipp2003..product_daily_count as pdc,
								ippconvert..productbasic as con_product
							where 
								pdc.productsysno = con_product.oldsysno
							and convert(datetime, pdc.countdate, 120) >= convert(datetime, '2005-03-01', 120)"                            ;
                DataSet ds1  = SqlHelper.ExecuteDataSet(sql1);
                foreach (DataRow dr1 in ds1.Tables[0].Rows)
                {
                    DailyClickInfo oInfo = new DailyClickInfo();
                    map(oInfo, dr1);
                    oInfo.ClickDate = Util.TrimDateNull(oInfo.ClickDate).ToString(AppConst.DateFormat);
                    new DailyClickDac().Insert(oInfo);
                }

                scope.Complete();
            }
        }
예제 #5
0
        public void Click(int productSysNo)
        {
            //说明参见biz.online.dailyClickManager.Count()
            lock ( locker )
            {
                if (!ht.Contains(productSysNo))
                {
                    //如果不包含这个produtSysNo,就生成一个。
                    DailyClickInfo oClick = new DailyClickInfo();

                    oClick.ClickDate    = DateTime.Now.ToString(AppConst.DateFormat);
                    oClick.ClickCount   = 1;
                    oClick.ProductSysNo = productSysNo;
                    ht.Add(productSysNo, oClick);
                }
                else
                {
                    DailyClickInfo oClick  = ht[productSysNo] as DailyClickInfo;
                    string         nowTime = DateTime.Now.ToString(AppConst.DateFormat);

                    //如果ht中的productSysNo不是今天的记录,就先更新昨天的记录数到数据库。并将今天这个productSysNo设置为1。
                    if (oClick.ClickDate != nowTime)
                    {
                        new DailyClickDac().Click(oClick);
                        oClick.ClickCount = 1;
                        oClick.ClickDate  = nowTime;
                    }
                    else
                    {
                        //如果是今天的,计数加一
                        oClick.ClickCount++;
                        //如果当前计数大于500,就更新到数据库。
                        if (oClick.ClickCount >= 5)
                        {
                            new DailyClickDac().Click(oClick);
                            oClick.ClickCount = 0;
                        }
                    }
                }
            }
        }