Example #1
0
        public ActionResult go(string ac, string code, string tk, string ml, string city, string lat, string lng)
        {
            THC_Library.Error error;
            THC_Library.Reward.RewardConvertor reward;
            string gender, age, Mobil, iid, addr;
            int    iLogKey;
            int    eventKey;

            Models.CodeRender codeRender = new Models.CodeRender();
            bool bWin = codeRender.go(ac, code, tk, ml, city, lat, lng, out eventKey,
                                      out gender, out age, out Mobil, out iid, out addr, out reward,
                                      out iLogKey, out error);

            if (error != null)
            {
                switch (error.Number)
                {
                case THC_Library.CodeRenderException.ACTIVITY_FINISHED:
                    ViewBag.Message     = "活動已結束";
                    ViewBag.MessageInfo = error.ErrorMessage;
                    return(View("outOfPage"));

                case THC_Library.CodeRenderException.ACTIVITY_NOT_START:
                    ViewBag.Message     = "活動尚未開始";
                    ViewBag.MessageInfo = error.ErrorMessage;
                    return(View("outOfPage"));

                case THC_Library.CodeRenderException.INVAILD_ACTIVITY:
                    ViewBag.Message = "無效的活動";
                    break;

                case THC_Library.CodeRenderException.INVAILD_CODE:
                    ViewBag.Message = "無效的碼號";
                    break;

                //return View("wrongPage");
                case THC_Library.CodeRenderException.REPEAT_SCAN:
                    ViewBag.TICKET  = tk;
                    ViewBag.ACC     = ml;
                    ViewBag.EVENT   = eventKey.ToString();
                    ViewBag.CITY    = city;
                    ViewBag.Message = "已掃描";
                    string[] strSplit = error.ErrorMessage.Split(' ');
                    ViewBag.RepeatDate = strSplit[0];
                    ViewBag.RepeatTime = strSplit[1];
                    ViewBag.DOMAIN     = Models.Domain.REMOTE_ACCESS_DOMAIN;
                    return(View("repeatPage"));

                case THC_Library.CodeRenderException.LOGIN_INVALID:
                    ViewBag.Message = "無效的登入";
                    break;

                case THC_Library.CodeRenderException.SYSTEM_ERROR:
                    ViewBag.Message = error.ErrorMessage;     //"系統錯誤";
                    break;
                }
                return(View("wrongPage"));
            }
            else
            {
                if (bWin)
                {
                    ViewBag.ACTIVITY = ac;
                    ViewBag.CODE     = code;
                    ViewBag.TICKET   = tk;
                    ViewBag.ACC      = ml;
                    ViewBag.MOBIL    = Mobil;
                    ViewBag.GENDER   = gender;
                    ViewBag.AGE      = age;
                    ViewBag.IID      = iid;
                    ViewBag.ADDRESS  = addr;
                    ViewBag.LOG_KEY  = iLogKey.ToString();

                    ViewBag.CITY = city;
                    ViewBag.LAT  = lat;
                    ViewBag.LONG = lng;

                    ViewBag.RWD_NAME       = reward.RewardName;
                    ViewBag.RWD_IMG        = reward.RewardImage;
                    ViewBag.RWD_COUPNUMBER = reward.CouponNumber;

                    if (reward.RewardType == THC_Library.Reward.RewardType.ElectricCoupon)
                    {
                        if (reward is THC_Library.Reward.Edenred)
                        {
                            THC_Library.Reward.Edenred edenred = reward as THC_Library.Reward.Edenred;
                            ViewBag.RWD_DATE = edenred.ValidPeriod;
                        }
                        //虛擬獎項
                        return(View("rewardPage"));
                    }
                    else
                    {
                        if (reward is THC_Library.Reward.Phyicalenred)
                        {
                            THC_Library.Reward.Phyicalenred phyenred = reward as THC_Library.Reward.Phyicalenred;
                            ViewBag.RWD_DESC = phyenred.Description;
                        }
                        //實體獎項
                        return(View("rewardPhyicalPage"));
                    }
                }
                else
                {
                    ViewBag.EVENT  = eventKey.ToString();
                    ViewBag.TICKET = tk;
                    ViewBag.ACC    = ml;
                    ViewBag.DOMAIN = Models.Domain.REMOTE_ACCESS_DOMAIN;
                    return(View("tryAgain"));
                }
            }
        }
Example #2
0
        public bool go(string ac, string code, string tk, string ml, string city, string lat, string lng, out int event_no,
                       out string gender, out string age, out string mobil, out string iid, out string addr,
                       out THC_Library.Reward.RewardConvertor rwd, out int logkey, out THC_Library.Error error)
        {
            error    = null;
            rwd      = null;
            event_no = -1;
            gender   = "";
            age      = "";
            mobil    = "";
            iid      = "";
            addr     = "";
            logkey   = -1;
            DateTime datNow     = DateTime.Now;
            DateTime datNowDate = new DateTime(datNow.Year, datNow.Month, datNow.Day);
            //int iIdentityKey;
            //int eventKey = -1;
            string   eventName = "";
            DateTime startTime = DateTime.MaxValue;
            DateTime endTime   = DateTime.MinValue;

            SqlParameter         sqlParam;
            IDataReader          dataReader;
            IList <SqlParameter> paraList = new System.Collections.Generic.List <SqlParameter>();
            DataBaseControl      dbCtl    = new DataBaseControl();
            //paraList.Add(new SqlParameter("@EQCH002", event_key));
            string strSQL = "select * from activity_event where AE002=@AE002";

            paraList.Add(new SqlParameter("@AE002", ac));

            bool bRightEvent = false;
            bool bKeyExist   = false;
            bool bWin        = false;

            try
            {
                dbCtl.Open();

                dataReader = dbCtl.GetReader(strSQL, paraList);
                if (dataReader.Read())
                {
                    bRightEvent = true;
                    event_no    = int.Parse(dataReader["AE001"].ToString());
                    eventName   = dataReader["AE003"].ToString();
                    startTime   = Convert.ToDateTime(dataReader["AE005"]);
                    endTime     = Convert.ToDateTime(dataReader["AE006"]);
                }
                dataReader.Close();

                if (!bRightEvent)
                {
                    throw new THC_Library.CodeRenderException(THC_Library.CodeRenderException.INVAILD_ACTIVITY, "無效的活動");
                }
                else
                {
                    if (startTime.Subtract(datNowDate).TotalDays > 0)
                    {
                        //未開始
                        THC_Library.CodeRenderException codeException =
                            new THC_Library.CodeRenderException(THC_Library.CodeRenderException.ACTIVITY_NOT_START, "活動尚未開始");
                        codeException.AdditionalMessage = string.Format("{0} 活動期間 {1} - {2}", eventName, startTime, endTime);
                        throw codeException;
                    }
                    if (endTime.Subtract(datNowDate).TotalDays < 0)
                    {
                        //結束
                        THC_Library.CodeRenderException codeException = new THC_Library.CodeRenderException(THC_Library.CodeRenderException.ACTIVITY_FINISHED, "活動已結束");
                        codeException.AdditionalMessage = string.Format("{0} 活動期間 {1} - {2}", eventName, startTime, endTime);
                        throw codeException;
                    }
                }

                //確認登入
                bool bLoginChecked = false;

                string  jsonString = THC_Library.APPCURL.GetAccountInfo(ml, tk);
                dynamic jsonResult = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);

                if (jsonResult.Number == 0)
                {
                    //AccountInfo
                    bLoginChecked = true;
                    mobil         = jsonResult.Mobil;
                    addr          = jsonResult.Address;
                    iid           = jsonResult.IId;
                    gender        = jsonResult.Gender;
                    age           = jsonResult.Age;
                }
                else
                {
                    //Result
                    bLoginChecked = false;
                }

                if (!bLoginChecked)
                {
                    THC_Library.CodeRenderException codeException =
                        new THC_Library.CodeRenderException(THC_Library.CodeRenderException.LOGIN_INVALID, "無效登入");
                    throw codeException;
                }

                //

                //strSQL = "select * from qr_record where QRC015=@QRC015";
                strSQL = "select qr_record.*,AEP003,AEP005,AEP007,AEP011,AEP012 " +
                         "from qr_record left join activity_rewards on QRC018=AEP001 where QRC015=@QRC015";

                paraList.Clear();
                paraList.Add(new SqlParameter("@QRC015", code));
                dataReader = dbCtl.GetReader(strSQL, paraList);
                object EC      = "";
                string rwdType = "";

                if (dataReader.Read())
                {
                    rwdType = dataReader["AEP003"].ToString();
                    int iScanCounter = int.Parse(dataReader["QRC012"].ToString());
                    if (iScanCounter == 0)
                    {
                        //未掃描過
                        //中獎與否
                        EC = dataReader["QRC008"];
                        if (EC != DBNull.Value && EC.ToString().Length > 0)
                        {
                            bWin = true;
                            THC_Library.Reward.RewardConvertor rwdConvertor;
                            if (dataReader["AEP003"].ToString() == "0")
                            {
                                //虛擬
                                rwdConvertor = new THC_Library.Reward.Edenred();
                                THC_Library.Reward.Edenred edenred = rwdConvertor as THC_Library.Reward.Edenred;
                                edenred.RewardName   = dataReader["AEP005"].ToString(); //dataReader["QRC011"].ToString();
                                edenred.RewardType   = THC_Library.Reward.RewardType.ElectricCoupon;
                                edenred.CouponNumber = EC.ToString();
                                if (dataReader["QRC018"] != DBNull.Value)
                                {
                                    edenred.ValidPeriod = dataReader["AEP012"].ToString();
                                    edenred.RewardImage = dataReader["AEP011"].ToString();
                                    //string strJSon = dataReader["QRC017"].ToString();
                                    //if (strJSon.Length > 0)
                                    //{
                                    //    dynamic jsonReward = Newtonsoft.Json.JsonConvert.DeserializeObject(strJSon);
                                    //    edenred.ValidPeriod = jsonReward.v_date;
                                    //    edenred.RewardImage = jsonReward.img;
                                    //}
                                }
                            }
                            else
                            {
                                //實體
                                rwdConvertor = new THC_Library.Reward.Phyicalenred();
                                THC_Library.Reward.Phyicalenred phyenred = rwdConvertor as THC_Library.Reward.Phyicalenred;
                                phyenred.RewardName   = dataReader["AEP005"].ToString();
                                phyenred.RewardType   = THC_Library.Reward.RewardType.PhyicalReward;
                                phyenred.CouponNumber = EC.ToString();
                                if (dataReader["QRC018"] != DBNull.Value)
                                {
                                    phyenred.Description = dataReader["AEP007"].ToString();
                                    phyenred.RewardImage = dataReader["AEP011"].ToString();
                                    //string strJSon = dataReader["QRC017"].ToString();
                                    //if (strJSon.Length > 0)
                                    //{
                                    //    dynamic jsonReward = Newtonsoft.Json.JsonConvert.DeserializeObject(strJSon);
                                    //    phyenred.Description = jsonReward.desc;
                                    //    phyenred.RewardImage = jsonReward.img;
                                    //}
                                }
                            }

                            rwd = rwdConvertor;
                        }
                        bKeyExist = true;
                    }
                    else
                    {
                        //重覆掃描
                        DateTime lastTime;
                        DateTime.TryParse(dataReader["QRC013"].ToString(), out lastTime);
                        dataReader.Close();

                        THC_Library.CodeRenderException codeException =
                            new THC_Library.CodeRenderException(THC_Library.CodeRenderException.REPEAT_SCAN, lastTime.ToString("yyyy/MM/dd HH:mm"));
                        codeException.AdditionalMessage = lastTime.ToString("yyyy/MM/dd HH:mm"); //string.Format("上次掃描時間 <br/>{0}", lastTime.ToString("MM/dd HH:mm:ss"));
                        throw codeException;
                    }
                }
                dataReader.Close();

                if (!bKeyExist)
                {
                    //掃描的 code 不再發行裡面
                    throw new THC_Library.CodeRenderException(THC_Library.CodeRenderException.INVAILD_CODE, "無效的發碼");
                }
                if (!bWin)
                {
                    //取得地區溫度與天氣代碼
                    Int16 iTemp    = 15;
                    int   iWeather = 3200;
                    if (city.Length > 0)
                    {
                        strSQL = "select WH002,WH003 from weather where WH001 like @WH001 + '%'";
                        paraList.Clear();
                        sqlParam       = new SqlParameter("@WH001", SqlDbType.NVarChar);
                        sqlParam.Value = city;
                        paraList.Add(sqlParam);
                        dataReader = dbCtl.GetReader(strSQL, paraList);
                        if (dataReader.Read())
                        {
                            if (!Int16.TryParse(dataReader["WH002"].ToString(), out iTemp))
                            {
                                iTemp = 15;
                            }
                            if (!int.TryParse(dataReader["WH003"].ToString(), out iWeather))
                            {
                                iWeather = 3200;
                            }
                        }
                        dataReader.Close();
                    }
                    else
                    {
                        strSQL = "select WH002,WH003 from weather where WH001='平均'";
                        paraList.Clear();
                        dataReader = dbCtl.GetReader(strSQL, paraList);
                        if (dataReader.Read())
                        {
                            if (!Int16.TryParse(dataReader["WH002"].ToString(), out iTemp))
                            {
                                iTemp = 15;
                            }
                        }
                        dataReader.Close();
                    }

                    dbCtl.BeginTransaction();
                    //未中獎 log 紀錄
                    strSQL = "insert into event_user_records (EUR002,EUR003,EUR004,EUR005,EUR006,EUR007,EUR008,EUR009,EUR010,EUR011,EUR012) values " +
                             "(@EUR002,@EUR003,@EUR004,@EUR005,@EUR006,@EUR007,@EUR008,@EUR009,@EUR010,@EUR011,@EUR012);";

                    paraList.Clear();
                    sqlParam       = new SqlParameter("@EUR002", SqlDbType.Int);
                    sqlParam.Value = event_no;
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR003", SqlDbType.VarChar);
                    sqlParam.Value = code;
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR004", SqlDbType.DateTime);
                    sqlParam.Value = datNow;
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR005", SqlDbType.VarChar);
                    sqlParam.Value = ml; //帳號
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR006", SqlDbType.Char);
                    sqlParam.Value = age; //年紀
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR007", SqlDbType.Char);
                    sqlParam.Value = gender; //性別
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR008", SqlDbType.NVarChar);
                    sqlParam.Value = city; //地區
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR009", SqlDbType.SmallInt);
                    sqlParam.Value = iTemp; //溫度
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR010", SqlDbType.Int);
                    sqlParam.Value = iWeather; //天氣
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR011", SqlDbType.Float);
                    sqlParam.Value = lat; //緯度
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@EUR012", SqlDbType.Float);
                    sqlParam.Value = lng; //經度
                    paraList.Add(sqlParam);

                    dbCtl.ExecuteScalar(strSQL, paraList);

                    //未中獎
                    strSQL = "update qr_record set QRC012=QRC012+1, QRC013=@QRC013 where QRC015=@QRC015;";
                    paraList.Clear();
                    sqlParam       = new SqlParameter("@QRC013", SqlDbType.DateTime);
                    sqlParam.Value = datNow;
                    paraList.Add(sqlParam);
                    sqlParam       = new SqlParameter("@QRC015", SqlDbType.VarChar);
                    sqlParam.Value = code;
                    paraList.Add(sqlParam);
                    dbCtl.ExecuteCommad(strSQL, paraList);

                    dbCtl.CommintTransaction();

                    jsonString = THC_Library.APPCURL.ScanRecord(event_no.ToString(), code,
                                                                datNow.ToString(), ml, age, gender, city, iTemp.ToString(), iWeather.ToString(),
                                                                lat, lng, rwdType, tk);
                    jsonResult = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
                }
            }
            catch (THC_Library.CodeRenderException codeex)
            {
                dbCtl.RollBackTransaction();
                error              = new THC_Library.Error();
                error.Number       = codeex.Number;
                error.ErrorMessage = codeex.AdditionalMessage;
            }
            catch (Exception ex)
            {
                dbCtl.RollBackTransaction();
                error              = new THC_Library.Error();
                error.Number       = THC_Library.THCException.SYSTEM_ERROR;
                error.ErrorMessage = "系統發生異常錯誤,請稍後再上線使用。";//ex.Message;
            }
            finally
            {
                dbCtl.Close();
            }

            return(bWin);
        }