Example #1
0
        public Task ConsumeAsync(UserTicketMessage message)
        {
            System.Console.WriteLine("user {0} locked ticket {1}", message.UserId, message.TicketId);
            IServiceProvider service     = ServiceLocator.Instance;
            PaymentContext   _context    = service.CreateScope().ServiceProvider.GetService <PaymentContext>();
            PaymentItem      paymentItem = new PaymentItem
            {
                UserId     = message.UserId,
                TicketId   = message.TicketId,
                State      = "unpaid",
                CreateDate = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
                PayDate    = null
            };

            _context.PaymentItems.Add(paymentItem);
            _context.SaveChangesAsync();

            System.Console.WriteLine("payment id is {0}", paymentItem.Id);

            IBus _bus = service.CreateScope().ServiceProvider.GetService <IBus>();
            //发布一个信息,告诉Ticket去更新票的状态
            TicketMessage ticketMessage = new TicketMessage
            {
                TicketId = paymentItem.Id,
                State    = 3 //获得当前paymentId
            };

            _bus.PublishAsync(ticketMessage);
            return(Task.CompletedTask);
        }
Example #2
0
        private void handleTicketMessage(NewTicketMessage newTicketMessage)
        {
            TicketMessage ticket = new TicketMessage();

            ticket.clientId = newTicketMessage.clientId;
            ticket.sequence = databaseHandler.getNextSequence();
            messageSender.sendTicket(ticket);
        }
Example #3
0
        public ActionResult CreateTicket(TicketVewModel model)
        {
            int cid = Convert.ToInt32(Session["cid"]);

            model.Status = PopulateStatus(cid);
            var selectedItem = model.Status.Find(p => p.Value == model.StatusName.ToString());

            model.Type = PopulateType(cid);
            var selectedItem_t = model.Type.Find(p => p.Value == model.ticket_type.ToString());

            model.Priority = (TicketPriority)model.priority_type;

            if (!ModelState.IsValid)
            {
                return(View(model));
            }



            Ticket ticket = new Ticket();

            ticket.ticket_subject  = model.Subject;
            ticket.ticket_type     = Convert.ToInt64(model.ticket_type);
            ticket.ticket_priority = (int)model.priority_type;
            ticket.ticket_status   = selectedItem.Text.ToString();
            ticket.ticket_date     = DateTime.UtcNow;
            ticket.date_created    = DateTime.UtcNow;
            ticket.date_modified   = DateTime.UtcNow;
            ticket.uid             = Convert.ToInt32(Session["uid"]);
            ticket.cid             = Convert.ToInt32(Session["cid"]);
            ticket.custom_field_1  = model.custom_field_1;
            ticket.created_via     = 1;
            ticket = ticket.CreateTicket(ticket);

            TicketMessage msg = new TicketMessage();

            msg.Tid           = ticket.Tid;
            msg.uid           = Convert.ToInt32(Session["uid"]);
            msg.Message       = model.Description;
            msg.date_created  = DateTime.UtcNow;
            msg.date_modified = DateTime.UtcNow;
            msg = msg.Create(msg);


            var enumData = from TicketPriority e in Enum.GetValues(typeof(TicketPriority))
                           select new
            {
                ID   = (int)e,
                Name = e.ToString()
            };

            ViewBag.EnumList = new SelectList(enumData, "ID", "Name");



            return(View(model));
        }
Example #4
0
        public void sendTicket(TicketMessage ticket)
        {
            string json = JsonSerializer.Serialize(ticket);

            using (var producer = new ProducerBuilder <Null, string>(config).Build())
            {
                producer.Produce(ticketTopic, new Message <Null, string> {
                    Value = json
                });
                producer.Flush();
            }
        }
Example #5
0
        public TicketMessage AddTicketMessage(AddTicketMessageReq model)
        {
            //Take user and check if it exists
            var user = _context.Users
                       .Where(u => u.Id == model.UserId)
                       .SingleOrDefault();

            if (user == null)
            {
                return(null);
            }

            //Take ticket and check if it exists
            var ticket = _context.Tickets
                         .Where(t => t.Id == model.TicketId)
                         .SingleOrDefault();

            if (ticket == null || ticket.Status == "closed")
            {
                return(null);
            }

            //Open ticket if the replyer is admin
            if (user.IsAdmin == true)
            {
                ticket.Status = "opened";
            }
            //Update ticket's last action date
            ticket.LastActionDate = DateTime.Now;
            _context.SaveChanges();

            //Build ticket message data
            TicketMessage ticketMessage = new TicketMessage {
                Id      = 0,
                Date    = DateTime.Now,
                User    = user,
                Ticket  = ticket,
                Content = model.Content
            };

            //Add ticket message
            _context.TicketMessages.Add(ticketMessage);
            _context.SaveChanges();

            //Check if it is added succesfuly
            if (ticketMessage.Id == 0)
            {
                return(null);
            }

            return(ticketMessage);
        }
Example #6
0
        public Ticket AddTicket(CreateTicketReq model)
        {
            Ticket ticket = new Ticket();

            //Take the user
            var user = _context.Users
                       .Where(u => u.Id == model.UserId)
                       .SingleOrDefault();

            //Check if user is admin or does not exist
            if (user == null || user.IsAdmin == true)
            {
                return(null);
            }

            //Set ticket data
            ticket.Id             = 0;
            ticket.LastActionDate = DateTime.Now;
            ticket.OriginDate     = DateTime.Now;
            ticket.Title          = model.Title;
            ticket.User           = user;
            ticket.Status         = "requested";

            //Add ticket
            _context.Tickets.Add(ticket);
            _context.SaveChanges();
            if (ticket.Id == 0)
            {
                return(null);
            }

            //Set first ticket message data
            TicketMessage msg = new TicketMessage {
                Id      = 0,
                Date    = DateTime.Now,
                Content = model.Content,
                User    = user,
                Ticket  = ticket
            };

            //Add first ticket message
            _context.TicketMessages.Add(msg);
            _context.SaveChanges();

            if (msg.Id == 0)
            {
                return(null);
            }

            return(ticket);
        }
        public async Task <Unit> Handle(CreateTicketCommand request, CancellationToken cancellationToken)
        {
            var ticket = new Ticket {
                Topic = request.Topic, Status = TicketStatus.Open
            };

            var ticketMessage = new TicketMessage {
                Text = request.Description
            };

            ticket.Messages.Add(ticketMessage);

            _context.Tickets.Add(ticket);
            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
Example #8
0
        public static List <TicketMessage> GetTicketMessages(string htmlContent, int dateFormatId)
        {
            MatchCollection matches;

            htmlContent = htmlContent.Replace("&nbsp;", "");
            Regex obRegEx = new Regex(@"<tr>\r\n\s*<td\sclass='head'\swidth='15'\salign='center'><img\ssrc='style/images/ip\.gif'\swidth='12'\sheight='11'\stitle='(?<IpAddress>.*?)'></td>\r\n\s*<td\sclass='head'\scolspan='2'><b>(?<Nick>.*?)</b></td>\r\n\s*<td\sclass='head'\salign='right'\swidth='150'>(?<DateTime>.*?)</td>\r\n\s*</tr>\r\n\s*(<tr>\r\n\s*<td\sclass='text'></td>\r\n\s*<td\sclass='text'><b>.*?</b></td>\r\n\s*<td\sclass='text'\scolspan='2'>.*?</td>\r\n\s*</tr>\r\n\s*<tr><td\sclass='text'\scolspan='4'></td></tr>\r\n\s*)?<tr>\r\n\s*<td\sclass='text'></td>\r\n\s*<td\sclass='text'\svalign='top'\swidth='150'><b>.*?</b></td>\r\n\s*<td\sclass='text'\scolspan='2'><div\sstyle='width:640px;'>(?<Message>.*?)</div></td>\r\n\s*</tr>");

            //Regex obRegEx = new Regex(@"<tr>\r\n\s*<td\sclass='head'\swidth='15'\salign='center'><img\ssrc='style/images/ip\.gif'\swidth='12'\sheight='11'\stitle='(?<IpAddress>.*?)'></td>\r\n\s*<td\sclass='head'\scolspan='2'><b>(?<Nick>.*?)</b></td>\r\n\s*<td\sclass='head'\salign='right'\swidth='150'>(?<DateTime>\d{4}-\d{2}-\d{2},?\s*\d{2}:\d{2})</td>\r\n\s*</tr>\r\n\s*(<tr>\r\n\s*<td\sclass='text'></td>\r\n\s*<td\sclass='text'><b>Subject</b></td>\r\n\s*<td\sclass='text'\scolspan='2'>.*?</td>\r\n\s*</tr>\r\n\s*<tr><td\sclass='text'\scolspan='4'></td></tr>\r\n\s*)?<tr>\r\n\s*<td\sclass='text'></td>\r\n\s*<td\sclass='text'\svalign='top'\swidth='150'><b>Message</b></td>\r\n\s*<td\sclass='text'\scolspan='2'><div\sstyle='width:640px;'>(?<Message>.*?)</div></td>\r\n\s*</tr>");
            matches = obRegEx.Matches(htmlContent);
            List <TicketMessage> ticketMessageList = new List <TicketMessage>();

            foreach (Match match in matches)
            {
                TicketMessage   message = new TicketMessage();
                GroupCollection groups  = match.Groups;
                message.IpAddress       = groups["IpAddress"].Value.Trim();
                message.NickName        = groups["Nick"].Value.Trim();
                message.Message         = ReplaceHTMLEntities(groups["Message"].Value.Trim());
                message.MessageDateTime = ConvertToDatetimeTicket(dateFormatId, groups["DateTime"].Value.Trim());
                ticketMessageList.Add(message);
            }

            return(ticketMessageList);
        }
Example #9
0
        public async Task <string> Post([FromBody] Paying paying)
        {
            var paymentItem = await _context.PaymentItems.FindAsync(paying.Id);

            if (paymentItem == null)
            {
                return("there is no payment id:" + paying.Id);
            }

            if (paying.opertion.Equals("pay"))
            {
                if (!paymentItem.State.Equals("unpaid"))
                {
                    return("payment id " + paying.Id + " is not unpaid");
                }
                paymentItem.State   = "paid";
                paymentItem.PayDate = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                _context.Entry(paymentItem).State = EntityState.Modified;
                await _context.SaveChangesAsync();

                //发布一个信息,告诉Ticket去更新票的状态
                TicketMessage ticketMessage = new TicketMessage
                {
                    TicketId = paymentItem.TicketId,
                    State    = 1
                };
                await _bus.PublishAsync(ticketMessage);

                string mess = "payment id " + paying.Id + " is paid and ticket " + paymentItem.TicketId + " is sold now";
                return(mess);
            }
            else if (paying.opertion.Equals("cancel"))
            {
                if (!paymentItem.State.Equals("unpaid"))
                {
                    return("payment id " + paying.Id + " is not unpaid");
                }
                paymentItem.State = "cancelled";
                _context.Entry(paymentItem).State = EntityState.Modified;
                await _context.SaveChangesAsync();

                //发布一个信息,告诉Ticket去更新票的状态
                TicketMessage ticketMessage = new TicketMessage
                {
                    TicketId = paymentItem.TicketId,
                    State    = 2
                };
                await _bus.PublishAsync(ticketMessage);

                string mess = "payment id " + paying.Id + " is cancelled and ticket " + paymentItem.TicketId + " is available now";
                return(mess);
            }
            else if (paying.opertion.Equals("refund"))
            {
                if (!paymentItem.State.Equals("paid"))
                {
                    return("payment id " + paying.Id + " is not paid");
                }

                paymentItem.State = "refund";
                _context.Entry(paymentItem).State = EntityState.Modified;
                await _context.SaveChangesAsync();

                //发布一个信息,告诉Ticket去更新票的状态
                TicketMessage ticketMessage = new TicketMessage
                {
                    TicketId = paymentItem.TicketId,
                    State    = 2
                };
                await _bus.PublishAsync(ticketMessage);

                string mess = "payment id " + paying.Id + " is refund and ticket " + paymentItem.TicketId + " is available now";
                return(mess);
            }
            else
            {
                string mess = "opertion should be pay, cancel or refund ";
                return(mess);
            }
        }
Example #10
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        //public ActionResult Message(int? id)
        //{
        //    using (var db = new KiaGalleryContext())
        //    {
        //        ViewBag.UserList = db.User.Where(x => x.Branch.BranchType == BranchType.Branch || x.Branch.BranchType == BranchType.Other).ToList();

        //    }
        //    ViewBag.Id = id;
        //    return View();
        //}
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        //public ActionResult List()
        //{

        //    return View();
        //}
        /// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public JsonResult Save(TicketViewModel model)
        {
            Response response;

            var currentUser = GetAuthenticatedUser();

            try
            {
                if (model.toUserId == currentUser.Id)
                {
                    response = new Response()
                    {
                        status  = 500,
                        message = "شما نمیتوانید به این کاربر پیام بدهید;"
                    };
                    return(Json(response, JsonRequestBehavior.AllowGet));
                }
                using (var db = new KiaGalleryContext())
                {
                    if (model.id != null && model.id > 0)
                    {
                        var entity = db.TicketMessage.Where(x => x.Id == model.id).Single();
                        entity.Text         = model.text;
                        entity.ModifyUserId = currentUser.Id;
                        entity.ModifyDate   = DateTime.Now;
                        entity.Ip           = Request.UserHostAddress;
                        db.SaveChanges();
                        response = new Response()
                        {
                            status = 200,
                        };
                    }
                    else
                    {
                        if (model.ticketId != null && model.ticketId > 0)
                        {
                            var ticket = db.Ticket.Single(x => x.Id == model.ticketId);
                            if (currentUser.Id == ticket.ToUserId)
                            {
                                ticket.TicketStatus = TicketStatus.Opened;
                            }
                            var ticketMessage = new TicketMessage()
                            {
                                TicketId     = model.ticketId.Value,
                                FileName     = model.fileName,
                                Text         = model.text,
                                CreateUserId = currentUser.Id,
                                ModifyUserId = currentUser.Id,
                                CreateDate   = DateTime.Now,
                                ModifyDate   = DateTime.Now,
                            };
                            var notification = new Notification()
                            {
                                Seen         = false,
                                TicketId     = model.ticketId.Value,
                                UserId       = ticket.ToUserId.Value,
                                CreateUserId = currentUser.Id,
                                CreateDate   = DateTime.Now,
                            };
                            //Task.Factory.StartNew(() =>
                            //{
                            //    NikSmsWebServiceClient.SendSmsNik("همکار گرامی شما یک تیکت جدید دارید لطفا جهت پاسخ،به پورتال کیا گالری مراجعه  فرمایید." + "\n" + model.title, ticket.ToUser.PhoneNumber);
                            //});
                            db.Notification.Add(notification);
                            db.TicketMessage.Add(ticketMessage);
                            db.SaveChanges();
                            response = new Response()
                            {
                                status = 200,
                                data   = ticketMessage.TicketId
                            };
                        }
                        else
                        {
                            var ticketItem = new Ticket()
                            {
                                Title        = model.title,
                                FromUserId   = currentUser.Id,
                                DepartmentId = model.departmentId,
                                ToUserId     = model.toUserId,
                                TicketStatus = TicketStatus.New,
                                CreateUserId = currentUser.Id,
                                ModifyUserId = currentUser.Id,
                                CreateDate   = DateTime.Now,
                                ModifyDate   = DateTime.Now,
                            };
                            var ticketMessage = new TicketMessage()
                            {
                                Ticket       = ticketItem,
                                Text         = model.text,
                                FileName     = model.fileName,
                                CreateUserId = currentUser.Id,
                                ModifyUserId = currentUser.Id,
                                CreateDate   = DateTime.Now,
                                ModifyDate   = DateTime.Now,
                            };
                            var notification = new Notification()
                            {
                                Seen         = false,
                                Ticket       = ticketItem,
                                UserId       = ticketItem.ToUserId.Value,
                                CreateUserId = currentUser.Id,
                                CreateDate   = DateTime.Now,
                            };

                            db.Notification.Add(notification);
                            db.Ticket.Add(ticketItem);
                            db.TicketMessage.Add(ticketMessage);
                            db.SaveChanges();
                            var ToUserPhoneNumber = db.User.Single(x => x.Id == model.toUserId).PhoneNumber;
                            Task.Factory.StartNew(() =>
                            {
                                NikSmsWebServiceClient.SendSmsNik("همکار گرامی شما یک تیکت جدید دارید لطفا جهت پاسخ،به پورتال کیا گالری مراجعه  فرمایید." + "\n" + model.title, ToUserPhoneNumber);
                            });

                            response = new Response()
                            {
                                status  = 200,
                                message = "تیکت شما با موفقیت ارسال شد."
                            };
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                response = Core.GetExceptionResponse(ex);
            }
            return(Json(response, JsonRequestBehavior.AllowGet));
        }
Example #11
0
 private void handleTicketMessage(TicketMessage ticketMessage)
 {
     databaseHandler.updateSequence(ticketMessage.clientId, ticketMessage.sequence);
 }