示例#1
0
        //寄信團員選擇視圖
        public ActionResult _ChangeSendMemberPartial(ChangeMem MyMember)
        {
            //取得團員,但不顯示自己及管理者
            var MyID = Helper.GetUserMail();
            var Myid = AnyDMorBuy.GetUserID_UseEmail(MyID);

            var Member = db.Users.Where(m => m.ID != Myid && m.Identity != 1);

            if (MyMember.Member != null)
            {
                //文字不見了要補上
                foreach (var item in MyMember.Member)
                {
                    int Num = Int32.Parse(item.Value);
                    foreach (var userN in Member)
                    {
                        if (userN.ID == Num)
                        {
                            item.Text = userN.Name;
                            break;
                        }
                    }
                }

                ChangeMem Check2 = MyMember;
                return(PartialView("_ChangeSendMemberPartial", Check2));
            }


            var result = new List <SelectListItem>();

            foreach (var item in Member)
            {
                result.Add(
                    new SelectListItem {
                    Text = item.Name, Value = item.ID.ToString(), Selected = true
                }
                    );
            }

            var Check = new ChangeMem()
            {
                Member = result
            };

            return(PartialView("_ChangeSendMemberPartial", Check));
        }
示例#2
0
        public ActionResult SendMyMessage(EmailModelView MailC, string YearDate2)
        {
            NewDrinkDB dbR = new NewDrinkDB();

            //接收Model
            //接收使用者OrderID
            if (!ModelState.IsValid || String.IsNullOrEmpty(YearDate2))
            {
                ViewBag.DetailID = MailC.OrderID;
                if (String.IsNullOrEmpty(YearDate2))
                {
                    ViewBag.Message = "時間欄位未填.";
                }
                return(View(MailC));
            }
            //勾選系統關團的狀況
            ////有勾未填時間
            //if (String.IsNullOrEmpty(MailC.EndOverTime) && MailC.CheckEnd == true)
            //{
            //    ViewBag.Message = "您尚未填寫關團時間.";
            //    ViewBag.DetailID = MailC.OrderID;
            //    return View(MailC);
            //}
            ////填時間未勾
            //if (!String.IsNullOrEmpty(MailC.EndOverTime) && MailC.CheckEnd == false)
            //{
            //    ViewBag.Message = "請勾選系統自動關團.";
            //    ViewBag.DetailID = MailC.OrderID;
            //    return View(MailC);
            //}

            string EtimeEnd  = null;
            string MyTime    = null;
            var    time2     = DateTime.Now;
            var    InputTime = Convert.ToDateTime(YearDate2);

            //判斷時間是否非法
            if (time2 > InputTime)
            {
                ViewBag.DetailID = MailC.OrderID;
                ViewBag.Message  = "時間不可以是過去式.";
                return(View(MailC));
            }
            EtimeEnd = "截止日期: " + YearDate2;
            MyTime   = YearDate2;


            //判斷時間格式
            //須判斷: 月份,日期
            //"", "NaN-NaN-NaN"
            //int Hour = Int32.Parse(hours);
            //if (String.IsNullOrEmpty(YearDate) || YearDate == "NaN-NaN-NaN")
            //{
            //    var time2 = DateTime.Now;
            //    time2 = time2.AddHours(Hour);
            //    EtimeEnd = "截止日期: " + time2;
            //    MyTime = time2.ToString();
            //}

            //if (!String.IsNullOrEmpty(YearDate))
            //{
            //    DateTime ETimeM = Convert.ToDateTime(YearDate);
            //    var time2 = DateTime.Now;

            //    int EMon = Int32.Parse(ETimeM.ToString("MM"));
            //    int NMon = Int32.Parse(time2.ToString("MM"));
            //    //月份小
            //    if (EMon < NMon)
            //    {
            //        //回傳錯誤
            //        ViewBag.Message = "時間不可以是過去式.";
            //        ViewBag.DetailID = MailC.OrderID;
            //        ViewBag.Member = MailC.Member;
            //        return View(MailC);
            //    }
            //    //月份同
            //    if (EMon == NMon)
            //    {
            //        int EDate = Int32.Parse(ETimeM.ToString("dd"));
            //        int NDate = Int32.Parse(time2.ToString("dd"));
            //        //日期小
            //        if (EDate < NDate)
            //        {
            //            //回傳錯誤
            //            ViewBag.Message = "時間不可以是過去式.";
            //            ViewBag.DetailID = MailC.OrderID;
            //            ViewBag.Member = MailC.Member;
            //            return View(MailC);
            //        }
            //    }
            //    //[月份大],[月份同,日期大](直接加輸入的小時)
            //    if (EMon > NMon)
            //    {
            //        DateTime ETime = Convert.ToDateTime(YearDate);
            //        ETime = ETime.AddHours(Hour);
            //        MyTime = ETime.ToString();
            //        EtimeEnd = "截止日期: " + ETime;
            //    }

            //}

            ////取出所有有勾選的成員(不寄給自己)
            var PickM = new ChangeMem()
            {
                Member = MailC.Member
            };
            var AllMember = Models.AnyDMorBuy.CheckMem(PickM);

            if (AllMember == null || AllMember.Count() == 0)
            {
                ViewBag.DetailID = MailC.OrderID;
                ViewBag.EmptyM   = "請至少選擇一位成員.";
                return(View(MailC));
            }

            var time = DateTime.Now;
            ////取出使用者ID
            string UserMail = Helper.GetUserMail();
            int    UserID   = Models.AnyDMorBuy.GetUserID_UseEmail(UserMail);

            //這裡要先判斷使用者寄信的狀態,及時間(0為無寄信, 1為寄信中或上次寄信錯誤)
            //若為1則返回錯誤訊息(限制5分鐘後才可再寄信)
            var CheckYesSend = dbR.Users.Find(UserID);

            //判斷時間
            bool CheckThisTime = Models.AnyDMorBuy.CheckCanSend_Message(time, CheckYesSend.SendTime);

            if (CheckYesSend.SendOrNot == 1 && CheckThisTime == true)
            {
                ViewBag.DetailID    = MailC.OrderID;
                TempData["message"] = "Error";
                ViewBag.Error       = "Error";
                return(View(MailC));
            }
            else
            {
                //若為0寄信,並更改寄信狀態,紀錄時間
                CheckYesSend.SendOrNot = 1;
                CheckYesSend.SendTime  = time;
                dbR.SaveChanges();
            }

            //截止日期
            DateTime ETime2 = Convert.ToDateTime(MyTime);

            AesCryptoServiceProvider aes = new AesCryptoServiceProvider();

            //到時要循環寄出////////////////////////////////////////////////////////////////////////////////////////////
            //還要判斷是否重複寄出了
            //若重覆了則決定要updata時間還是讓使用者重建菜單

            //var AllMember = db.Users.Where(m => m.ID != UserID);
            //循環寄出
            foreach (var item in AllMember)
            {
                NewDrinkDB dbM = new NewDrinkDB();
                //取出成員資料
                var MemList = dbM.Users.Find(item);

                //http://172.16.8.4:42118
                //http://172.16.8.59:52118
                //作Guid加解密(作唯一鍵值)
                string plainText   = MemList.ID.ToString() + MailC.OrderID.ToString();
                Guid   userGuid    = System.Guid.NewGuid();
                var    dataAndGuid = Models.AnyDMorBuy.GuidwithOrderLogin(userGuid, plainText);

                string SendLink = "http://172.16.8.4:42118/Account/Get_MyOrder?ID=" + dataAndGuid;
                string NewBody  = MailC.Body + "菜單連結: http://172.16.8.4:42118/Account/Get_MyOrder?ID=" + dataAndGuid;

                if (!String.IsNullOrEmpty(EtimeEnd) && MailC.CheckEnd == true)
                {
                    NewBody = NewBody + EtimeEnd;
                }

                //團員mail
                string to = MemList.Email.ToString();
                //團長mail
                string from = UserMail;

                string      subject     = MailC.Subject;
                MailMessage mailMessage = new MailMessage(from, to);
                mailMessage.Subject = subject;
                mailMessage.Body    = NewBody;
                //string smtpServer = "mail.bingotimes.com.tw";
                string smtpServer = "smtp.gmail.com";
                //string smtpServer = "127.0.0.1";
                SmtpClient client = new SmtpClient(smtpServer, 25);
                //client.EnableSsl = true;

                //寄之前暫停1秒
                int millsecondsTimeout = 1000;
                System.Threading.Thread.Sleep(millsecondsTimeout);

                try
                {
                    client.Send(mailMessage);
                }
                catch (Exception e)
                {
                    ViewBag.DetailID    = MailC.OrderID;
                    TempData["message"] = "Error";
                    ViewBag.Error       = "Error";
                    return(View(MailC));
                }

                //還要判斷是否重複寄出了
                //若重覆了則決定要updata時間還是讓使用者重建菜單
                var CheckRepeat = db.SendMessageViews.Where(m => m.UserID == item && m.OrderID == MailC.OrderID && m.SentUser == UserID);
                if (CheckRepeat.FirstOrDefault() != null)
                {
                    //已經寄過了,更新時間及link
                    foreach (var update in CheckRepeat)
                    {
                        update.SendTime    = time;
                        update.SentAlink   = SendLink;
                        update.SentBody    = MailC.Body;
                        update.SentSubject = MailC.Subject;
                        update.ReadOrNot   = false;
                        db.SaveChanges();
                    }
                }
                else
                {
                    //第一次寄
                    //寫入資料庫(到時ID要改成其他人對應的ID)
                    dbM.SendMessageViews.Add(new SendMessageView()
                    {
                        ID          = dataAndGuid,
                        OrderID     = MailC.OrderID,
                        UserID      = MemList.ID,
                        SendTime    = time,
                        SentUser    = UserID,
                        SentBody    = MailC.Body,
                        SentAlink   = SendLink,
                        SentSubject = MailC.Subject,
                        ReadOrNot   = false,
                        EndOverTime = ETime2
                    });
                    dbM.SaveChanges();
                }
            }//End foreach.

            //循環結束 ///////////////////////////////////////////////////////////////////////////////////////////

            //這邊團長自己的也要判斷(link寫團長自己的ID)
            var CheckLeader = dbR.LeaderSendMessages.Where(m => m.SentUser == UserID && m.OrderID == MailC.OrderID);
            //取出MenuID
            var MenuID = dbR.CreateBuyOrder_LeaderOrders.Find(MailC.OrderID);
            //作Token加解密
            string plainTextU   = UserID.ToString() + MailC.OrderID.ToString();
            Guid   leaderGuid   = System.Guid.NewGuid();
            var    dataAndGuidU = Models.AnyDMorBuy.GuidwithOrderLogin(leaderGuid, plainTextU);
            //string LeaderID = PasswordUtility.AESEncryptor(UserID.ToString(), aes.Key, aes.IV);
            string LeaderLink = "http://172.16.8.59:52118/Account/Get_LeaderMyOrder?ID=" + dataAndGuidU;


            //寫入資料庫
            if (CheckLeader.FirstOrDefault() != null)
            {
                //已經寄過了,更新時間及link
                foreach (var item in CheckLeader)
                {
                    //item.ID = dataAndGuidU;
                    item.Subject = MailC.Subject;
                    item.Body    = MailC.Body;
                    //item.Alink = LeaderLink;
                    item.SendTime    = time;
                    item.EndOverTime = ETime2;
                }

                //寫入成員表(這裡要判斷不要重覆寫入)
                var AddmyAllMember  = dbR.CreateBuyOrder_MemberOrders.Where(m => m.OrderID == MailC.OrderID);
                var AddmyAllMember2 = new List <CreateBuyOrder_MemberOrder>();
                foreach (var item in AllMember)
                {
                    var HaveV = true;
                    foreach (var memC in AddmyAllMember)
                    {
                        if (item == memC.UserID)
                        {
                            //依狀況更新
                            memC.Together = true;
                            dbR.SaveChanges();
                            break;
                        }
                        HaveV = false;
                    }
                    if (HaveV == false)
                    {
                        //新增
                        AddmyAllMember2.Add(new CreateBuyOrder_MemberOrder()
                        {
                            UserID   = item,
                            OrderID  = MailC.OrderID,
                            Together = true
                        });
                    }
                }
                dbR.CreateBuyOrder_MemberOrders.AddRange(AddmyAllMember2);
            }
            else
            {
                dbR.LeaderSendMessages.Add(new LeaderSendMessage()
                {
                    ID          = dataAndGuidU,
                    SentUser    = UserID,
                    OrderID     = MailC.OrderID,
                    Subject     = MailC.Subject,
                    Body        = MailC.Body,
                    Alink       = LeaderLink,
                    SendTime    = time,
                    EndOverTime = ETime2
                });

                //寫入成員表(第一次寫入)
                var AddmyAllMember = new List <CreateBuyOrder_MemberOrder>()
                {
                };
                foreach (var item in AllMember)
                {
                    AddmyAllMember.Add(new CreateBuyOrder_MemberOrder()
                    {
                        UserID   = item,
                        OrderID  = MailC.OrderID,
                        Together = true
                    });
                }
                dbR.CreateBuyOrder_MemberOrders.AddRange(AddmyAllMember);
            }

            //將團長的訂單填入截止日期
            if (!String.IsNullOrEmpty(MyTime))
            {
                NewDrinkDB dbO      = new NewDrinkDB();
                var        OrderEnd = dbO.CreateBuyOrder_LeaderOrders.Find(MailC.OrderID);
                OrderEnd.EndThisTime = ETime2;
                OrderEnd.CheckEnd    = MailC.CheckEnd;
                dbO.SaveChanges();
            }

            //寄完所有信件後,將狀態改成0
            CheckYesSend.SendOrNot = 0;

            dbR.SaveChanges();

            //轉向已送出訊息檢視
            return(RedirectToAction("MessageView_Sent", "Home"));
        }