/// <summary>
        /// 获取订单结算信息
        /// </summary>
        /// <param name="orderid"></param>
        /// <returns></returns>
        public Hashtable GetOrderSettlement(string orderid)
        {
            Hashtable result = new Hashtable();

            UserInfoManager   userManager    = new UserInfoManager();
            OrdersManager     ordersManager  = new OrdersManager();
            VehicleManager    vehicleManager = new VehicleManager();
            SysSettingManager settingManager = new SysSettingManager();
            Hashtable         order_ht       = ordersManager.GetOrderInfoByID(orderid);

            string orderState = SiteHelper.GetHashTableValueByKey(order_ht, "OrderState");
            string userID     = SiteHelper.GetHashTableValueByKey(order_ht, "UserID");

            if (OrderState.Valid.GetHashCode().ToString() == orderState)
            {
                #region 未结算订单

                int     minutes     = 0;
                float   mileage     = 0.00f;
                decimal minutePrice = 0.00m;
                decimal kmPrice     = 0.00m;
                decimal minPrice    = 0.00m;
                decimal maxPrice    = 0.00m;
                decimal totalMoney  = 0.00m;

                int orderFreeMinutes = 0;
                int.TryParse(settingManager.GetValueByKey("OrderFreeMinutes"), out orderFreeMinutes);
                double orderFreeKm = 0;
                double.TryParse(settingManager.GetValueByKey("OrderFreeKm"), out orderFreeKm);

                float.TryParse(SiteHelper.GetHashTableValueByKey(order_ht, "Mileage"), out mileage);

                Hashtable vehicle_ht = vehicleManager.GetVehicleInfoByID(SiteHelper.GetHashTableValueByKey(order_ht, "VehicleID"));
                Hashtable user_ht    = userManager.GetUserInfoByUserID(userID);
                DataTable price_dt   = GetPriceInfo(SiteHelper.GetHashTableValueByKey(order_ht, "CityID"), SiteHelper.GetHashTableValueByKey(vehicle_ht, "Model"));
                if (price_dt != null && price_dt.Rows.Count > 0)
                {
                    decimal.TryParse(price_dt.Rows[0]["MinutePrice"].ToString(), out minutePrice);
                    decimal.TryParse(price_dt.Rows[0]["KmPrice"].ToString(), out kmPrice);
                    decimal.TryParse(price_dt.Rows[0]["MinPrice"].ToString(), out minPrice);
                    decimal.TryParse(price_dt.Rows[0]["MaxPrice"].ToString(), out maxPrice);
                }
                minutes = ordersManager.GetOrderBillingTime(SiteHelper.GetHashTableValueByKey(order_ht, "OrderNum"));
                if (minutes > 0)
                {
                    //totalMoney = minutePrice * minutes + kmPrice * (decimal)mileage;
                    totalMoney = minutePrice * (minutes - (minutes > orderFreeMinutes ? orderFreeMinutes : 0)) + kmPrice * (decimal)(mileage - (mileage > orderFreeKm ? orderFreeKm : 0));
                    if (totalMoney < minPrice)
                    {
                        totalMoney = minPrice;
                    }
                    if (totalMoney > maxPrice)
                    {
                        totalMoney = maxPrice;
                    }
                }

                //用车5分钟以内或骑行100米以内还车都不收费
                if (minutes < orderFreeMinutes || mileage < orderFreeKm)
                {
                    totalMoney = 0.00m;
                }

                result["MinutePrice"] = minutePrice;
                result["KmPrice"]     = kmPrice;
                result["Minutes"]     = minutes;
                result["TotalMoney"]  = totalMoney;

                #endregion
            }
            else
            {
                #region 已结算订单

                result["MinutePrice"] = SiteHelper.GetHashTableValueByKey(order_ht, "MinutePrice");
                result["KmPrice"]     = SiteHelper.GetHashTableValueByKey(order_ht, "KMPrice");
                result["Minutes"]     = SiteHelper.GetHashTableValueByKey(order_ht, "Minutes");
                result["TotalMoney"]  = SiteHelper.GetHashTableValueByKey(order_ht, "TotalMoney");

                #endregion
            }

            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// 根据订单号取消订单
        /// </summary>
        /// <param name="OrderNum"></param>
        /// <returns></returns>
        public bool CancelOrder(string orderNum, int type)
        {
            Log Logger = LogFactory.GetLogger(typeof(OrdersManager));

            try
            {
                VehicleManager vehicleManager = new VehicleManager();
                Hashtable      orderInfo      = GetOrderByNum(orderNum);
                string         orderState     = SiteHelper.GetHashTableValueByKey(orderInfo, "OrderState");
                string         startTime      = SiteHelper.GetHashTableValueByKey(orderInfo, "StartTime");
                if (orderInfo != null && orderInfo.Keys.Count > 0 && orderState == "1" && string.IsNullOrEmpty(startTime))
                {
                    string    orderid      = SiteHelper.GetHashTableValueByKey(orderInfo, "ID");
                    string    vid          = SiteHelper.GetHashTableValueByKey(orderInfo, "VehicleID");
                    Hashtable vehicleInfo  = vehicleManager.GetVehicleInfoByID(vid);
                    string    currentSpeed = SiteHelper.GetHashTableValueByKey(vehicleInfo, "CurrentSpeed");
                    decimal   speed        = 0m;
                    decimal.TryParse(currentSpeed, out speed);
                    Logger.Warn("订单ID:" + orderid + ",订单号:" + orderNum + ",车辆ID:" + vid + ",StartTime 为空,速度:" + speed + ",自动取消订单");
                    vehicleManager.CloseVehicle(vid);

                    if (!string.IsNullOrEmpty(orderid))
                    {
                        List <StringBuilder> sqls = new List <StringBuilder>();
                        List <object>        objs = new List <object>();

                        //更改车辆状态
                        StringBuilder sbUpdateVehicle = new StringBuilder();
                        sbUpdateVehicle.Append("UPDATE yr_vehicles SET UseState=@UseState from yr_orders WHERE yr_orders.VehicleID=yr_vehicles.ID and yr_orders.ID=@ID");
                        SqlParam[] updateVehicleParam = new SqlParam[] {
                            new SqlParam("@ID", orderid),
                            new SqlParam("@UseState", VehicleUseState.Free.GetHashCode())
                        };
                        sqls.Add(sbUpdateVehicle);
                        objs.Add(updateVehicleParam);

                        string remark = "客户取消订单";
                        if (type == 1)
                        {
                            remark = "系统自动取消订单";
                        }
                        //更改订单状态
                        StringBuilder sbUpdateOrder = new StringBuilder();
                        sbUpdateOrder.Append(@"UPDATE yr_orders SET TotalMoney=@TotalMoney,Minutes=@Minutes,SettlementMoney=@SettlementMoney,PayMoney=@PayMoney,PayState=@PayState,OrderState=@OrderState,EndTime=@EndTime,FinishedTime=@FinishedTime,OrderRemark=@OrderRemark where ID=@ID and OrderState=" + OrderState.Valid.GetHashCode());
                        SqlParam[] updateOrderParam = new SqlParam[] {
                            new SqlParam("@TotalMoney", "0.00"),
                            new SqlParam("@Minutes", "0"),
                            new SqlParam("@SettlementMoney", "0.00"),
                            new SqlParam("@PayMoney", "0.00"),
                            new SqlParam("@EndTime", DateTime.Now),
                            new SqlParam("@PayState", OrderPayState.NotPay.GetHashCode()),
                            new SqlParam("@OrderState", OrderState.Invalid.GetHashCode()),
                            new SqlParam("@FinishedTime", DateTime.Now),
                            new SqlParam("@OrderRemark", remark),
                            new SqlParam("@ID", orderid)
                        };
                        sqls.Add(sbUpdateOrder);
                        objs.Add(updateOrderParam);

                        return(DataFactory.SqlDataBase().BatchExecuteBySqlWithTrans(sqls.ToArray(), objs.ToArray()));
                    }
                }
                return(false);
            }
            catch
            {
                return(false);
            }
        }