コード例 #1
0
        public async System.Threading.Tasks.Task <IHttpActionResult> PostAsync(string id_order)
        {
            try
            {
                var order = _context.Orders.Find(id_order);
                if (order == null)
                {
                    return(NotFound());
                }
                JWTManagement jwtObject = new JWTManagement();
                var           token     = jwtObject.getToken();
                string        uri       = "https://sandbox-api.baokim.vn/payment/api/v4/order/detail?mrc_order_id=" + id_order + "&jwt=" + token;

                HttpClient          client   = new HttpClient();
                HttpResponseMessage response = await client.GetAsync(uri);

                HttpContent content = response.Content;
                string      data    = await content.ReadAsStringAsync();

                dynamic d    = JObject.Parse(data);
                var     stat = d.stat;

                bool rs = false;
                if (stat == "c")
                {
                    rs = true;
                    var trans = _context.Transactions.Where(x => x.id_order == id_order).ToList();
                    if (trans.Count != 0)
                    {
                        return(Ok(trans));
                    }

                    byte[] buffer   = Guid.NewGuid().ToByteArray();
                    var    trans_id = BitConverter.ToInt64(buffer, 0).ToString();
                    if (trans.Count == 0)
                    {
                        _context.Transactions.Add(new Transaction
                        {
                            id_transaction = trans_id,
                            id_order       = id_order,
                            money          = order.total_amount,
                            created_time   = DateTime.Now,
                        });
                        _context.SaveChanges();
                        return(Ok(trans));
                    }
                }


                if (rs == false)
                {
                    return(NotFound());
                }
                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
コード例 #2
0
ファイル: OrderController.cs プロジェクト: cuongtp/HNProject
        public IHttpActionResult Post(OrderVM model)
        {
            JWTManagement jwtObject = new JWTManagement();
            var           _token    = jwtObject.getToken();

            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                if (model == null)
                {
                    return(NotFound());
                }

                var           address_market   = _context.Addresses.FirstOrDefault(x => x.id_address == model.id_address);
                var           address_customer = _context.Addresses.FirstOrDefault(s => s.id_address == model.customer_address_id);
                GeoCoordinate sCoor            = new GeoCoordinate(address_market.lat ?? 0, address_market.@long ?? 0);
                GeoCoordinate cCoor            = new GeoCoordinate(address_customer.lat ?? 0, address_customer.@long ?? 0);
                var           distance_s_to_m  = sCoor.GetDistanceTo(cCoor);
                double        ship_cost        = 0;
                double        _point           = 0;
                if (distance_s_to_m > 1000)
                {
                    ship_cost = distance_s_to_m * 10;
                }
                else
                {
                    ship_cost = 10000;
                }
                var stime = new TimeSpan(17, 00, 00);
                var etime = new TimeSpan(19, 00, 00);
                if ((stime.CompareTo(model.time_to_ship ?? new TimeSpan(00, 00, 00)) < 0) && (etime.CompareTo(model.time_to_ship ?? new TimeSpan(00, 00, 00)) > 0))
                {
                    ship_cost = ship_cost + 10000;
                    _point   += 2;
                }
                byte[] buffer     = Guid.NewGuid().ToByteArray();
                var    order_code = BitConverter.ToInt64(buffer, 0).ToString().Substring(9);


                if (distance_s_to_m > 1000)
                {
                    _point += distance_s_to_m / 100;
                }
                else
                {
                    _point += 10;
                }

                ship_cost = (int)ship_cost;
                int nguyen = (int)ship_cost / 1000;
                int du     = (int)ship_cost % 1000;
                if (du < 500 && du > 0)
                {
                    ship_cost = (nguyen * 1000) + 500;
                }
                else
                {
                    ship_cost = (nguyen * 1000) + 1000;
                }

                distance_s_to_m = distance_s_to_m / 1000;
                distance_s_to_m = double.Parse(distance_s_to_m.ToString("0.0"));

                var    list_order_details = model.OrderDetails.ToList();
                double total = 0;
                foreach (var item in list_order_details)
                {
                    total += item.price * item.quanlity ?? 0;
                }
                total = total + ship_cost + 10000;
                DateTime dt    = DateTime.Now;
                var      order = _context.Orders.Add(new Models.Order
                {
                    id_order            = model.id_order,
                    created_date        = dt,
                    id_customer         = model.id_customer,
                    id_shipper          = model.id_shipper,
                    state               = 0,
                    id_group_image      = model.id_group_image,
                    dis_cus_to_market   = distance_s_to_m,
                    id_address          = model.id_address,
                    point               = (int)_point,
                    shipping_cost       = ship_cost,
                    time_to_ship        = model.time_to_ship.Value,
                    customer_address_id = model.customer_address_id,
                    phone               = model.phone,
                    name             = model.name,
                    taking_time      = null,
                    done_time        = null,
                    order_code       = order_code,
                    customer_comment = model.customer_comment,
                    system_cost      = 10000,
                    total_amount     = total,
                    token            = _token,
                    OrderDetails     = model.OrderDetails.Select(x => new OrderDetail
                    {
                        id_orderdetail = x.id_orderdetail,
                        id_order       = x.id_order,
                        id_product     = x.id_product,
                        id_market      = x.id_market,
                        price          = x.price,
                        quanlity       = x.quanlity,
                        priority       = x.priority
                    }).ToList()
                });
                _context.SaveChanges();
                return(Ok(order));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
コード例 #3
0
ファイル: OrderController.cs プロジェクト: cuongtp/HNProject
        public IHttpActionResult PostCost(CalculateVM model)
        {
            JWTManagement jwtObject = new JWTManagement();
            var           _token    = jwtObject.getToken();

            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                if (model == null)
                {
                    return(NotFound());
                }

                var           address_market   = _context.Addresses.FirstOrDefault(x => x.id_address == model.id_address);
                var           address_customer = _context.Addresses.FirstOrDefault(s => s.id_address == model.customer_address_id);
                GeoCoordinate sCoor            = new GeoCoordinate(address_market.lat ?? 0, address_market.@long ?? 0);
                GeoCoordinate cCoor            = new GeoCoordinate(address_customer.lat ?? 0, address_customer.@long ?? 0);
                var           distance_s_to_m  = sCoor.GetDistanceTo(cCoor);
                double        ship_cost        = 0;
                double        _point           = 0;
                if (distance_s_to_m > 1000)
                {
                    ship_cost = distance_s_to_m * 10;
                }
                else
                {
                    ship_cost = 10000;
                }
                var stime = new TimeSpan(17, 00, 00);
                var etime = new TimeSpan(19, 00, 00);
                if ((stime.CompareTo(model.time_to_ship ?? new TimeSpan(00, 00, 00)) < 0) && (etime.CompareTo(model.time_to_ship ?? new TimeSpan(00, 00, 00)) > 0))
                {
                    ship_cost = ship_cost + 10000;
                    _point   += 2;
                }
                byte[] buffer     = Guid.NewGuid().ToByteArray();
                var    order_code = BitConverter.ToInt64(buffer, 0).ToString().Substring(9);


                if (distance_s_to_m > 1000)
                {
                    _point += distance_s_to_m / 100;
                }
                else
                {
                    _point += 10;
                }

                ship_cost = (int)ship_cost;
                int nguyen = (int)ship_cost / 1000;
                int du     = (int)ship_cost % 1000;
                if (du < 500 && du > 0)
                {
                    ship_cost = (nguyen * 1000) + 500;
                }
                else
                {
                    ship_cost = (nguyen * 1000) + 1000;
                }

                distance_s_to_m = distance_s_to_m / 1000;
                distance_s_to_m = double.Parse(distance_s_to_m.ToString("0.0"));

                var    list_order_details = model.OrderDetails.ToList();
                double total = 0;
                foreach (var item in list_order_details)
                {
                    total += item.price * item.quanlity ?? 0;
                }
                double total_amount = 0;
                total_amount = total + ship_cost + 10000;

                DateTime dt = DateTime.Now;

                var CostObject = new
                {
                    shippingcost     = ship_cost,
                    system_cost      = 10000,
                    total            = total,
                    total_amount_all = total_amount,
                };
                return(Ok(CostObject));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
コード例 #4
0
        public async System.Threading.Tasks.Task <IHttpActionResult> GetAsync(string created_at, string id, string mrc_order_id, string stat, string total_amount, string txn_id, string updated_at, string checksum)
        {
            Redirect("smarket://market/");
            //if(stat=="p")
            //{
            //    return Redirect("smarket://market");
            //}
            //Customer from order
            var customer = _context.Orders.Select(x => x.Account);

            ////Shipper from order
            //var shipper = _context.Orders.Select(x => x.Account1);

            //order từ order_code
            var order_fcm = _context.Orders.Find(mrc_order_id);

            var    __order     = _context.Orders.Find(mrc_order_id);
            double latitude    = _context.Addresses.Find(__order.id_address).lat ?? 0;
            double longtitude  = _context.Addresses.Find(__order.id_address).@long ?? 0;
            var    order_total = __order.total_amount ?? 0;

            try
            {
                Redirect("smarket://market/");
                JWTManagement checkOut = new JWTManagement();
                bool          rs       = checkOut.verifyPaymentUrl(id, mrc_order_id, txn_id, total_amount, stat, created_at, updated_at, checksum);
                byte[]        buffer   = Guid.NewGuid().ToByteArray();
                var           trans_id = BitConverter.ToInt64(buffer, 0).ToString();
                //rs = true;
                //if(order_total != double.Parse(total_amount))
                //{
                //    rs = false;
                //    //Notify Customer
                //    Console.WriteLine("false");
                //    HubConnection hubConnection = new HubConnection("https://localhost:44333");

                //    IHubProxy hubProxy = hubConnection.CreateHubProxy("NotifyHub");


                //    string msg = "Thanh toán thất bại!";
                //    int count = 1;
                //    Account _customer = _context.Accounts.Find(__order.id_customer);
                //    var connectionID_cus = _customer.connection_id;
                //    await hubConnection.Start();

                //    var change = hubConnection.State;
                //    var connection_id = hubConnection.ConnectionId;
                //    await hubProxy.Invoke("NotifyCustomer", connectionID_cus, msg);

                //    return Redirect("smarket://market");

                //}
                //rs = true;
                if (rs == true)
                {
                    //HubConnection hubConnection = new HubConnection("https://localhost:44333");

                    //IHubProxy hubProxy = hubConnection.CreateHubProxy("NotifyHub");
                    //var json_object = new
                    //{
                    //    msg = "Thanh toán thành công!",
                    //    id_order = mrc_order_id,
                    //};

                    //JavaScriptSerializer serializer = new JavaScriptSerializer();
                    //var Json_str  = serializer.Serialize(json_object);


                    //string msg = Json_str;
                    //Account _customer = _context.Accounts.Find(__order.id_customer);
                    //var connectionID_cus = _customer.connection_id;
                    //await hubConnection.Start();

                    //var change = hubConnection.State;
                    //var connection_id = hubConnection.ConnectionId;

                    //await hubProxy.Invoke("NotifyCustomer", connectionID_cus, msg);

                    Redirect("smarket://market/" + mrc_order_id);
                }

                if (rs == false)
                {
                    Console.WriteLine("false");
                    HubConnection hubConnection = new HubConnection("http://localhost:44333");

                    IHubProxy hubProxy = hubConnection.CreateHubProxy("NotifyHub");

                    var json_object = new
                    {
                        msg      = "Thanh toán thất bại!",
                        id_order = mrc_order_id,
                    };

                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    var    Json_str = serializer.Serialize(json_object);
                    string msg      = Json_str;

                    Account _customer        = _context.Accounts.Find(__order.id_customer);
                    var     connectionID_cus = _customer.connection_id;
                    await hubConnection.Start();

                    var change        = hubConnection.State;
                    var connection_id = hubConnection.ConnectionId;
                    await hubProxy.Invoke("NotifyCustomer", connectionID_cus, msg);

                    return(Redirect("smarket://market/" + mrc_order_id));
                }


                __order.state = 1;
                _context.Transactions.Add(new Transaction
                {
                    id_transaction = trans_id,
                    id_order       = mrc_order_id,
                    money          = double.Parse(total_amount),
                    created_time   = DateTime.Now
                });
                _context.SaveChanges();



                //var order = _context.Orders.Find(id_order);
                var          sCoord          = new GeoCoordinate(latitude, longtitude);
                List <Order> list_order_true = new List <Order>();

                var order_has_shipper = _context.Orders.Where(x => x.id_shipper != null).ToList();
                foreach (var item in order_has_shipper)
                {
                    var id_or = item.id_order;
                    if (CheckShipper_has_Order(id_or, mrc_order_id, latitude, longtitude) == true)
                    {
                        list_order_true.Add(item);
                    }
                }

                var list_id_shipper_in_order = order_has_shipper.Select(x => x.id_shipper).ToList();

                var _shipper = new List <ShipperVM>();
                foreach (var item in list_order_true)
                {
                    _shipper = _context.Accounts.AsEnumerable().Where(x => x.id_account == item.id_shipper && x.isSelected == 0 && x.connection_id != "0" && x.state == 0).Select(x => new ShipperVM

                    {
                        id          = x.id_account,
                        username    = x.username,
                        lat         = x.GroupAddress.Addresses.FirstOrDefault().lat,
                        @long       = x.GroupAddress.Addresses.FirstOrDefault().@long,
                        levels      = x.Levels.Select(xx => xx.point).FirstOrDefault(),
                        fcm_token   = x.fcm_token,
                        isSelected  = x.isSelected ?? 0,
                        getDistance = sCoord.GetDistanceTo(new GeoCoordinate(x.GroupAddress.Addresses.FirstOrDefault().lat ?? 0, x.GroupAddress.Addresses.FirstOrDefault().@long ?? 0))
                    }).ToList();
                }

                var list_shipper_has_order = _shipper.GroupBy(x => x.id).Select(y => y.First());
                var list_shipper_no_order  = _context.Accounts.AsEnumerable().Where(x => x.id_role == "1" && x.isSelected == 0 && x.connection_id != "0" && x.state == 0).Select(x => new ShipperVM
                {
                    id          = x.id_account,
                    username    = x.username,
                    lat         = x.GroupAddress.Addresses.FirstOrDefault().lat,
                    @long       = x.GroupAddress.Addresses.FirstOrDefault().@long,
                    levels      = x.Levels.Select(xx => xx.point).FirstOrDefault(),
                    fcm_token   = x.fcm_token,
                    id_order    = mrc_order_id,
                    isSelected  = x.isSelected ?? 0,
                    getDistance = sCoord.GetDistanceTo(new GeoCoordinate(x.GroupAddress.Addresses.FirstOrDefault().lat ?? 0, x.GroupAddress.Addresses.FirstOrDefault().@long ?? 0))
                }).ToList() ?? null;
                //if (_shipper.Count > 0)
                //{
                //    foreach (var item in list_shipper_no_order.AsEnumerable())
                //    {
                //        foreach (var item1 in _shipper)
                //        {
                //            if (item.id == item1.id && list_id_shipper_in_order.Count >0)
                //            {
                //                list_shipper_no_order.Remove(item);
                //            }
                //        }
                //    }
                //}



                //var address = _context.Accounts.AsEnumerable().Where(x => x.id_role == "1" && x.isSelected != 0).Select(x => new ShipperVM
                //{
                //    id = x.id_account,
                //    username = x.username,
                //    lat = x.GroupAddress.Addresses.FirstOrDefault().lat,
                //    @long = x.GroupAddress.Addresses.FirstOrDefault().@long,
                //    levels = x.Levels.Select(xx => xx.point).FirstOrDefault(),
                //    fcm_token = x.fcm_token,
                //    id_order = mrc_order_id,
                //    getDistance = sCoord.GetDistanceTo(new GeoCoordinate(x.GroupAddress.Addresses.FirstOrDefault().lat ?? 0, x.GroupAddress.Addresses.FirstOrDefault().@long ?? 0))
                //}).ToList().OrderBy(x => x.getDistance);

                var list  = new List <ShipperVM>();
                var list1 = new List <ShipperVM>();
                var list2 = new List <ShipperVM>();


                foreach (var item in list_shipper_no_order)
                {
                    if (item.getDistance <= 10000)
                    {
                        list.Add(item);
                    }
                }

                foreach (var item in list_shipper_has_order)
                {
                    if (!list.Any(s => s.id == item.id))
                    {
                        list.Add(item);
                    }
                }


                foreach (var item in list.OrderBy(x => x.levels).Reverse().Take(5))
                {
                    list1.Add(item);
                }
                //if(id_shipper != null)
                //{
                //    var temp = list1.FirstOrDefault(x => x.id == id_shipper);
                //    if (temp != null)
                //    {
                //        list1.Remove(temp);
                //    }
                //}


                if (list1.Count == 0)
                {
                    //Redirect("smarket://market");

                    Console.WriteLine("false");
                    HubConnection hubConnection = new HubConnection("https://localhost:44333");

                    IHubProxy hubProxy = hubConnection.CreateHubProxy("NotifyHub");


                    var json_object = new
                    {
                        msg      = "Không tìm thấy shipper",
                        id_order = mrc_order_id,
                    };

                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    var     Json_str         = serializer.Serialize(json_object);
                    string  msg              = Json_str;
                    Account _customer        = _context.Accounts.Find(__order.id_customer);
                    var     connectionID_cus = _customer.connection_id;
                    await hubConnection.Start();

                    var change        = hubConnection.State;
                    var connection_id = hubConnection.ConnectionId;
                    await hubProxy.Invoke("NotifyCustomer", connectionID_cus, msg);

                    return(Redirect("smarket://market/" + mrc_order_id));
                }
                else
                {
                    var accoutShipper = _context.Accounts.Find(list1.First().id);
                    accoutShipper.isSelected = 1;
                    _context.SaveChanges();
                    //list1.Reverse();
                    HubConnection hubConnection = new HubConnection("https://localhost:44333");
                    IHubProxy     hubProxy      = hubConnection.CreateHubProxy("NotifyHub");

                    string    msg                  = "Bạn có một đơn hàng!";
                    int       count                = 1;
                    ShipperVM shipper_             = list1.First();
                    var       connectionID_shipper = _context.Accounts.Where(x => x.id_role == "1" && x.id_account == shipper_.id).Select(x => x.connection_id).FirstOrDefault();
                    await hubConnection.Start();

                    var change        = hubConnection.State;
                    var connection_id = hubConnection.ConnectionId;
                    //while (hubConnection.ConnectionId == "" || hubConnection.ConnectionId == null) { }
                    //var conn_id = hubProxy.Invoke("getConnectionId");
                    await hubProxy.Invoke("NotifyShipper", connectionID_shipper, mrc_order_id, count, msg, shipper_.id, latitude, longtitude);

                    return(Redirect("smarket://market/" + mrc_order_id));
                    //return Ok(list1);

                    //WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
                    //tRequest.Method = "post";
                    ////serverKey - Key from Firebase cloud messaging server
                    //tRequest.Headers.Add(string.Format("Authorization: key={0}", "AIzaSyDN6yImcd7eWPRiN86cn1C7iecVNaF945M"));
                    ////Sender Id - From firebase project setting
                    //tRequest.Headers.Add(string.Format("Sender: id={0}", "462404511537"));
                    //tRequest.ContentType = "application/json";


                    //var fcm_s = "eg8nUQs-lbQ:APA91bHPgVKmMy8d0vnpt-u0UMJPivSvU9kaGPyttY1-ZP-gcu6qkt7VuJ9MG-uDPOPCIkDxpgWJ0TfdP_axotwn-mZEcBOpkEXpn1QfD_HeueUMt-myWeS3ZATw_R11s5D2-N83Sq6U";

                    //ShipperVM shipper = list1.First();

                    //fcm_s = _context.Accounts.AsEnumerable().Where(x => x.id_role == "1" && x.id_account == shipper.id).Select(x => x.fcm_token).FirstOrDefault();
                    //var payload = new
                    //{
                    //    to = fcm_s,
                    //    priority = "high",
                    //    content_available = true,
                    //    notification = new
                    //    {
                    //        body = "Test",
                    //        title = "Test",
                    //        badge = 1
                    //    },

                    //};

                    //string postbody = JsonConvert.SerializeObject(payload).ToString();
                    //Byte[] byteArray = Encoding.UTF8.GetBytes(postbody);
                    //tRequest.ContentLength = byteArray.Length;
                    //using (Stream dataStream = tRequest.GetRequestStream())
                    //{
                    //    dataStream.Write(byteArray, 0, byteArray.Length);
                    //    using (WebResponse tResponse = tRequest.GetResponse())
                    //    {
                    //        using (Stream dataStreamResponse = tResponse.GetResponseStream())
                    //        {
                    //            if (dataStreamResponse != null) using (StreamReader tReader = new StreamReader(dataStreamResponse))
                    //                {
                    //                    String sResponseFromServer = tReader.ReadToEnd();
                    //                    //result.Response = sResponseFromServer;
                    //                }
                    //        }
                    //    }
                    //}
                }
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
コード例 #5
0
 public HttpResult Login([FromBody] User user)
 {
     try
     {
         //Kiểm tra thông tin đầu vào
         if (string.IsNullOrWhiteSpace(user.Email))
         {
             return new HttpResult {
                        MessageCode = Entities.Enum.Enums.MessageCode.Error, Message = "Email is null"
             }
         }
         ;
         if (string.IsNullOrWhiteSpace(user.Password))
         {
             return new HttpResult {
                        MessageCode = Entities.Enum.Enums.MessageCode.Error, Message = "Password is null"
             }
         }
         ;
         //Kiểm tra User
         var checkuser = UnitOfWork.User.CheckInfoUser(user);
         if (!checkuser)
         {
             return new HttpResult {
                        MessageCode = Entities.Enum.Enums.MessageCode.Error, Message = "User does not exists."
             }
         }
         ;
         //Kiểm tra token còn hạn hay không
         var getToken = UnitOfWork.Token.GetTokenByUser(user.Email);
         if (getToken.Rows.Count != 0)
         {
             return(new HttpResult
             {
                 MessageCode = Entities.Enum.Enums.MessageCode.Success,
                 Content = new Token
                 {
                     Email = user.Email,
                     TokenId = getToken.Rows[0]["TokenId"].ToString(),
                     expiredin = (DateTime)(getToken.Rows[0]["ExpiredTime"]),
                     User_Type = getToken.Rows[0]["User_Type"].ToString()
                 }
             });
         }
         //Tạo mới token
         DateTime expiredDate = DateTime.Now.AddDays(3);
         string   tokenvalue  = JWTManagement.GenerateToken(user.Email, expiredDate);
         Token    token       = new Token
         {
             Email     = user.Email,
             TokenId   = tokenvalue,
             expiredin = expiredDate
         };
         //Lưu Token vào DB
         var SaveToken = UnitOfWork.Token.SaveToken(token);
         //Trả kết quả
         if (SaveToken.Rows.Count == 0)
         {
             return(new HttpResult
             {
                 MessageCode = Entities.Enum.Enums.MessageCode.Error,
                 Message = "Cannot save token."
             });
         }
         token.User_Type = SaveToken.Rows[0]["User_Type"].ToString();
         return(new HttpResult
         {
             MessageCode = Entities.Enum.Enums.MessageCode.Success,
             Content = token
         });
     }
     catch (Exception ex)
     {
         return(new HttpResult
         {
             MessageCode = Entities.Enum.Enums.MessageCode.Exception,
             Message = ex.Message
         });
     }
 }