public IHttpActionResult AdminCompleteOrder(int id) { try { Order order = orderService.GetOrder(id); User traveler = order.Traveller; if (order != null) { notificationService.CreateNotification(new Notification() { DateCreated = DateTime.UtcNow.AddHours(7), IsActive = true, IsDelete = false, IsRead = false, Message = "Bạn nhận được " + order.Total + " VNĐ từ đơn hàng hoàn tất", Title = "Hệ thống xác nhận đơn hàng hoàn tất", UserId = traveler.Id }); notificationService.SaveNotification(); if (traveler.SignalConnect != null) { HubUtilities.GetHub().Clients.Client(traveler.SignalConnect).admincompleteorder(order.Total + " VNĐ", "1"); } } } catch (Exception) { return(Ok()); } return(Ok()); }
public IHttpActionResult CreateRating([FromBody] Rating request) { string username = Utilities.GetUserNameFromRequest(Request); if (username == null) { return(BadRequest("Access Denied")); } try { User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username)); if (user == null) { return(Ok()); } request.UserRateId = user.Id; request.DateCreated = DateTime.Now; request.IsDelete = false; ratingService.CreateRating(request); ratingService.SaveRating(); IEnumerable <Rating> list = null; if (request.Type == (int)RateRole.Buyer) { list = ratingService.GetRatings().Where(r => r.UserRatedId.Equals(user.Id) && r.Type == (int)RateRole.Traveller); user.BuyerScore = list.Average(r => r.Point); } else { list = ratingService.GetRatings().Where(r => r.UserRatedId.Equals(user.Id) && r.Type == (int)RateRole.Buyer); user.TravelerScore = list.Average(r => r.Point); } userService.UpdateUser(user); userService.SaveUser(); string con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(request.UserRatedId))?.SignalConnect; if (con != null) { Order order = orderService.GetOrder(request.OrderId); notificationService.CreateNotification(new Notification { DateCreated = DateTime.UtcNow.AddHours(7), IsRead = false, Message = user.LastName + " đã cho bạn " + request.Point + " sao", Title = "Đơn hàng " + order.Offer.Post.ProductName, UserId = request.UserRatedId }); notificationService.SaveNotification(); HubUtilities.GetHub().Clients.Client(con).completeOrder(user.LastName + " đã cho bạn " + request.Point + " sao", order.Id); } } catch (Exception ex) { return(BadRequest(ex.ToString())); } return(Ok()); }
public IHttpActionResult BuyerMakeOffer(int tripId, int postId) { string username = Utilities.GetUserNameFromRequest(Request); if (username == null) { return(Unauthorized()); } try { User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username)); Post post = postService.GetPost(postId); Trip trip = tripService.GetTrip(tripId); if (user == null || post == null || trip == null) { return(BadRequest("Access Denied")); } Offer offer = new Offer() { PostId = postId, DateCreated = DateTime.UtcNow.AddHours(7), IsActive = true, IsDelete = false, ShippingFee = post.ShippingFee, DeliveryDate = post.DeliveryDate, TripId = tripId, TravellerId = trip.UserId, BuyerId = post.UserId, DateUpdated = DateTime.UtcNow.AddHours(7), Type = (int)OfferType.BuyerOffer }; offerService.CreateOffer(offer); offerService.SaveOffer(); var con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(offer.TravellerId)).SignalConnect; if (con != null) { notificationService.CreateNotification(new Notification { DateCreated = DateTime.UtcNow.AddHours(7), IsRead = false, Message = "Nhận được 1 đề nghị mới", Title = "Chuyến đi " + offer.Trip.FromCity.Name + ", " + offer.Trip.FromCity.Country.Name + offer.Trip.ToCity.Name + ", " + offer.Trip.ToCity.Country.Name, UserId = offer.BuyerId }); notificationService.SaveNotification(); HubUtilities.GetHub().Clients.Client(con).receivedOffer("Có 1 đề nghị mới cho chuyến đi ", tripId); } } catch (Exception) { return(BadRequest("Can't make offer")); } return(Ok()); }
public IHttpActionResult UpdateOffer(OfferViewModel offerVM) { string username = Utilities.GetUserNameFromRequest(Request); if (username == null) { return(Unauthorized()); } User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username)); if (user == null) { return(BadRequest("Access Denied")); } try { Offer offer = offerService.GetOffer(offerVM.OfferId); if (offer == null) { return(BadRequest("Not found offer")); } offer.ShippingFee = int.Parse(offerVM.ShippingFee); offer.DeliveryDate = DateTime.ParseExact(offerVM.DeliveryDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture); offer.Message = offerVM.Message; offer.DateUpdated = DateTime.UtcNow.AddHours(7); offerService.UpdateOffer(offer); offerService.SaveOffer(); offerVM.Id = offer.Id; var con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(offer.BuyerId)).SignalConnect; HubUtilities.GetHub().Clients.Client(con).receivedOffer("Nhận được 1 đề nghị mới " + offer.Post.ProductName, offerVM.PostId); } catch (Exception) { return(BadRequest("Can't make offer")); } return(Ok(offerVM)); }
public void TestSingleSignalR() { var con = ApplicationUserManager.FindByEmail("*****@*****.**").SignalConnect; HubUtilities.GetHub().Clients.Client(con).helloFromServer("riêng mình mày đó"); }
public IHttpActionResult CreateOrder(OfferViewModel offerViewModel) { try { string username = Utilities.GetUserNameFromRequest(Request); var user = userService.GetUsers().Where(u => u.UserName == username).FirstOrDefault(); Post post = postService.GetPost(offerViewModel.PostId); Offer offer = offerService.GetOffer(offerViewModel.OfferId); if (post == null || offer == null) { return(BadRequest("Not found data")); } CreatePostResponse response = new CreatePostResponse(); if (offerViewModel.Deposit > 0) { if (offerViewModel.Deposit > user.Current_Money) { response.Status_code = "E01"; } else { transactionService.CreateTransaction(new Transaction() { DateCreated = DateTime.Now, Description = "Nạp tiền vào đơn hàng " + post.ProductName, IsSuccess = true, PostId = post.Id, Type = Transaction.TypeTrans.PostIn, IsDelete = false, Value = offerViewModel.Deposit, UserId = user.Id, }); user.Current_Money -= offerViewModel.Deposit; post.Deposit += offerViewModel.Deposit; postService.UpdatePost(post); userService.UpdateUser(user); transactionService.SaveTransaction(); } } //update create Order order = new Order() { IsActive = true, IsDelete = false, BuyerId = user.Id, TravellerId = offerViewModel.TravelerId, Total = post.Price * post.Quantity + offer.ShippingFee, ShippingFee = offer.ShippingFee, DateCreated = DateTime.UtcNow.AddHours(7), DeliveryDate = DateTime.UtcNow.AddHours(7), DateUpdated = DateTime.UtcNow.AddHours(7), Status = (int)OrderType.Transit, OfferId = offer.Id, }; orderService.CreateOrder(order); orderService.SaveOrder(); //update post post.Type = Post.PostType.Transit; // post.Deposit = post.Deposit == null ? offerViewModel.Deposit : (offerViewModel.Deposit + post.Deposit); postService.UpdatePost(post); postService.SavePost(); var traveler = userService.GetUsers().FirstOrDefault(t => t.Id.Equals(offerViewModel.TravelerId)).SignalConnect; if (traveler != null) { notificationService.CreateNotification(new Notification { DateCreated = DateTime.UtcNow.AddHours(7), IsRead = false, Message = "Đề nghị cho đơn hàng " + post.ProductName + " đã được đồng ý", Title = "Chuyến đi " + order.TripId, UserId = offerViewModel.TravelerId }); notificationService.SaveNotification(); HubUtilities.GetHub().Clients.Client(traveler).acceptOffer("Để nghị đã được đồng ý ", offerViewModel.OfferId); } //delete post on redis Utilities.DeleteonRedis(post, post.Id.ToString()); response.Current_Money = user.Current_Money; return(Ok(response)); } catch { return(BadRequest("Error")); } }
public IHttpActionResult CompleteOrder(PostViewModel model) { string username = Utilities.GetUserNameFromRequest(Request); if (String.IsNullOrEmpty(username)) { return(Unauthorized()); } CompleteOrderResponse response = new CompleteOrderResponse(); try { var user = userService.GetUsers().Where(u => u.UserName.Equals(username)).FirstOrDefault(); if (user == null) { return(Unauthorized()); } var order = orderService.GetOrders().Where(o => o.Offer.PostId == model.Id).FirstOrDefault(); var post = order.Offer.Post; double amount = order.Total - post.Deposit; bool IsHasMoney = true; if (amount > 0) // nếu chưa thanh toán hết total => kiểm tra ví => tạo transaction => cập nhật post { // 1. kiểm tra tiền trong ví if (amount > user.Current_Money) // không đủ tiền { response.Status_code = "E01"; IsHasMoney = false; } else // đủ tiền { // 2. tạo transaction transactionService.CreateTransaction(new Transaction() { DateCreated = DateTime.Now, IsActive = true, IsDelete = false, IsSuccess = true, Value = order.Total - post.Deposit, OrderId = order.Id, UserId = user.Id, PostId = post.Id, Type = Transaction.TypeTrans.PostIn, Description = "Hoàn tất đơn hàng " + order.Offer.Post.ProductName }); user.Current_Money -= amount; userService.UpdateUser(user); } } // Chưa thanh toán hết: đủ tiền => IsHasMoney = true / không đủ tiền => IsHasMoney = false // Đã thanh toán hết: IsHasMoney = true if (IsHasMoney) { // cập nhật lại phần đã thanh toán. Complete => thanh toán hết post.Deposit = order.Total; post.Type = Post.PostType.Completed; postService.UpdatePost(post); // cập nhật lại trạng thái order -> completed order.Status = (int)OrderType.WaitAdmin; order.DateUpdated = DateTime.UtcNow.AddHours(7); orderService.UpdateOrder(order); //save to db orderService.SaveOrder(); response.Status_code = "E00"; response.Deposit = post.Deposit; response.OrderId = order.Id; response.Current_Money = user.Current_Money; trackingOrderService.CreateTrackingOrder(new TrackingOrder() { Status = (int)TrackingOrder.TrackingOrderType.Finished, OrderId = order.Id, IsDelete = false, }); trackingOrderService.SaveTrackingOrder(); // notify cho thằng traveler: buyer đã xác nhận string con = order.Offer.Traveller.SignalConnect; if (con != null) { notificationService.CreateNotification(new Notification { DateCreated = DateTime.UtcNow.AddHours(7), IsRead = false, Message = user.LastName + " đã xác nhận hoàn thành đơn hàng " + order.Offer.Post.ProductName, Title = "Chuyến đi " + order.TripId, UserId = order.Offer.TravellerId }); notificationService.SaveNotification(); HubUtilities.GetHub().Clients.Client(con).completeOrder(user.LastName + " đã xác nhận hoàn thành đơn hàng " + order.Offer.Post.ProductName, order.Id); } } } catch { return(BadRequest()); } return(Ok(response)); }
public void TestSR(string id) { HubUtilities.GetHub().Clients.All.receivedOffer("Nhận được 1 đề nghị mới", id); HubUtilities.GetHub().Clients.All.hello("connected"); }
public IHttpActionResult UpdateTimeline(TrackingOrder model) { try { model.IsActive = true; model.IsDelete = false; model.DateCreated = DateTime.UtcNow.AddHours(7); trackingOrderService.CreateTrackingOrder(model); Order order = orderService.GetOrder(model.OrderId); if (order != null) { User buyer = order.Buyer; if (buyer != null) { if (model.Status == (int)TrackingOrderType.Cancel) { buyer.Current_Money += order.Offer.Post.Deposit; Post post = order.Offer.Post; transactionService.CreateTransaction(new Transaction() { PostId = post.Id, IsActive = true, IsDelete = false, IsSuccess = true, UserId = buyer.Id, DateCreated = DateTime.UtcNow.AddHours(7), Value = post.Deposit, Type = Transaction.TypeTrans.PostOut, }); post.Deposit = 0; userService.UpdateUser(buyer); postService.UpdatePost(post); } } if (buyer.SignalConnect != null) { string status = "Đang ở "; switch (model.Status) { case (int)TrackingOrderType.Started: status = "Đang ở " + model.Description; break; case (int)TrackingOrderType.Arrived: status = "Đã mua được hàng"; break; case (int)TrackingOrderType.Buyed: status = "Có thể giao hàng"; break; case (int)TrackingOrderType.CameBack: status = "Không thể mua hàng"; break; case (int)TrackingOrderType.CanShipping: status = "Đơn hàng đã bị hủy"; break; case (int)TrackingOrderType.Finished: status = "Giao hàng thành công"; break; } notificationService.CreateNotification(new Notification() { DateCreated = DateTime.UtcNow.AddHours(7), IsActive = true, IsDelete = false, IsRead = true, Message = status, Title = "Đơn hàng " + order.Id, UserId = buyer.Id }); notificationService.SaveNotification(); HubUtilities.GetHub().Clients.Client(buyer.SignalConnect).newTimeline(status, order.Id); } } trackingOrderService.SaveTrackingOrder(); TrackingOrderViewModel tracking = new TrackingOrderViewModel() { DateCreated = model.DateCreated.GetValueOrDefault().ToString("HH:mm dd/MM/yyyy"), Status = model.Status, Longitude = model.Longitude, Latitude = model.Latitude, OrderId = model.OrderId, Description = model.Description }; return(Ok(tracking)); } catch (Exception ex) { return(BadRequest(ex.ToString())); } }
public IHttpActionResult MakeOffer(OfferViewModel offerVM) { string username = Utilities.GetUserNameFromRequest(Request); if (username == null) { return(Unauthorized()); } User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username)); if (user == null) { return(BadRequest("Access Denied")); } try { Offer offer = new Offer() { PostId = offerVM.PostId, DateCreated = DateTime.UtcNow.AddHours(7), IsActive = true, IsDelete = false, ShippingFee = int.Parse(offerVM.ShippingFee), DeliveryDate = DateTime.ParseExact(offerVM.DeliveryDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture), TripId = offerVM.TripId, TravellerId = user.Id, BuyerId = postService.GetPost(offerVM.PostId)?.UserId, DateUpdated = DateTime.UtcNow.AddHours(7), Message = offerVM.Message, Type = (int)OfferType.TravelerOffer }; offerService.CreateOffer(offer); offerService.SaveOffer(); offerVM.Id = offer.Id; var con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(offer.BuyerId))?.SignalConnect; if (con != null) { notificationService.CreateNotification(new Notification { DateCreated = DateTime.UtcNow.AddHours(7), IsRead = false, Message = "Nhận được 1 đề nghị mới", Title = "Đơn hàng " + offer.Post.ProductName, UserId = offer.BuyerId }); notificationService.SaveNotification(); HubUtilities.GetHub().Clients.Client(con).receivedOffer("Nhận được 1 đề nghị mới", offerVM.PostId); } //update post on redis var post = postService.GetPost(offerVM.PostId); Utilities.updatePostRedis(post, true); } catch (Exception) { return(BadRequest("Can't make offer")); } return(Ok(offerVM)); }