public ActionResult GetDay(int year, int month)
        {
            TaskTimeSet TaskTimeSet = new TaskTimeSet();
            DateTime    ODate       = new DateTime(year, month, 1);

            TaskTimeSet.ODate   = ODate;
            ViewBag.TaskTimeSet = TaskTimeSet;
            return(View());
        }
Beispiel #2
0
        public void Save(OrderHouse OrderHouse)
        {
            OrderHouse baseOrderHouse = Entity.OrderHouse.FirstOrDefault(n => n.Id == OrderHouse.Id);

            if (baseOrderHouse.OrderState == 2 && baseOrderHouse.PayState == 3)
            {
                baseOrderHouse.PayState = 4;
                Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == baseOrderHouse.OId);
                Orders.PayState = 4;
                //退款到余额
                Users baseUsers = Entity.Users.FirstOrDefault(n => n.Id == baseOrderHouse.UId);
                //计算退款金额
                //手续费=总房租*付房租系统费率
                decimal Poundage = baseOrderHouse.PayMoney * (decimal)baseOrderHouse.UserRate;
                //退款金额=交易总金额-支付手续费
                decimal Amoney = baseOrderHouse.Amoney - Poundage;
                //帐户变动记录
                int    USERSID = baseUsers.Id;
                string TNUM    = Orders.TNum;
                string SP_Ret  = Entity.SP_UsersMoney(USERSID, TNUM, Amoney, 6, "");
                if (SP_Ret != "3")
                {
                    Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", USERSID, TNUM, 6, Amoney, SP_Ret), "SP_UsersMoney");
                }


                baseOrderHouse     = baseOrderHouse.PayAgent(Entity, 2);
                Orders.AgentPayGet = (decimal)baseOrderHouse.AgentPayGet;
                Entity.SaveChanges();
                //======分润======
                Orders.SendMsg(Entity);//发送消息类
                //T0时增加配额
                if (baseOrderHouse.TrunType == 0)
                {
                    decimal     Money       = baseOrderHouse.PayMoney;
                    DateTime    Today       = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                    TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.ODate == Today);
                    if (TaskTimeSet != null)
                    {
                        if (TaskTimeSet.UsedMoney >= Money)
                        {
                            TaskTimeSet.UsedMoney -= Money;
                        }
                        else
                        {
                            TaskTimeSet.UsedMoney = 0;
                        }
                        Entity.SaveChanges();
                    }
                }
            }
            BaseRedirect();
        }
        private void AddDay(DateTime ODate, int sH, int sM, int sS, int eH, int eM, int eS, decimal AllMoney)
        {
            TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.TId == TId && n.ODate == ODate);

            if (TaskTimeSet == null)
            {
                TaskTimeSet       = new TaskTimeSet();
                TaskTimeSet.ODate = ODate;
            }
            DateTime STime = TaskTimeSet.ODate;
            DateTime ETime = TaskTimeSet.ODate;

            if (!sH.IsNullOrEmpty())
            {
                STime = STime.AddHours(sH);
            }
            if (!sM.IsNullOrEmpty())
            {
                STime = STime.AddMinutes(sM);
            }
            if (!sS.IsNullOrEmpty())
            {
                STime = STime.AddSeconds(sS);
            }
            if (!eH.IsNullOrEmpty())
            {
                ETime = ETime.AddHours(eH);
            }
            if (!eM.IsNullOrEmpty())
            {
                ETime = ETime.AddMinutes(eM);
            }
            if (!eS.IsNullOrEmpty())
            {
                ETime = ETime.AddSeconds(eS);
            }
            TaskTimeSet.STime    = STime;
            TaskTimeSet.ETime    = ETime;
            TaskTimeSet.AllMoney = AllMoney;
            if (TaskTimeSet.Id == 0)
            {
                TaskTimeSet.ODate   = ODate;
                TaskTimeSet.AddTime = DateTime.Now;
                TaskTimeSet.TId     = TId;
                Entity.TaskTimeSet.AddObject(TaskTimeSet);
            }
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[UsersHouse]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            //JObject pp = (JObject)p;
            Users Users = new Users();

            Users = JsonToObject.ConvertJsonToModel(Users, json);
            if (Users.Token.IsNullOrEmpty())
            {
                //
                DataObj.OutError("1000");
                return;
            }

            Users = Entity.Users.FirstOrDefault(n => n.Token == Users.Token);
            if (Users == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (Users.State != 1)
            {
                DataObj.OutError("2003");
                return;
            }
            if (Users.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (Users.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            int     Day        = (DateTime.Now - Users.AddTime).Days;
            int     OrderCount = Entity.Orders.Count(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == Users.Id);
            decimal OrderMoney = 0;

            if (OrderCount > 0)
            {
                OrderMoney = Entity.Orders.Where(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == Users.Id).Sum(n => n.Amoney);
            }
            int isT0 = 0;

            SysSet SysSet = Entity.SysSet.FirstOrDefault();

            SysSet.Cols   = "House,Cash0,ECash0,Cash1,ECash1,isT0";
            SysSet.Cash0  = Users.Cash0;
            SysSet.Cash1  = Users.Cash1;
            SysSet.ECash0 = Users.ECash0;
            SysSet.ECash1 = Users.ECash1;
            if (Day >= SysSet.CashDay && OrderCount >= SysSet.CashNum && OrderMoney >= SysSet.CashMoney)
            {
                isT0 = 1;
            }

            //验证是否在快速提现时段内
            TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.STime <= DateTime.Now && n.ETime >= DateTime.Now && n.TId == 1);

            if (TaskTimeSet == null)
            {
                isT0 = 2;
            }
            else
            {
                //验证配额是否满足
                decimal    Peier      = TaskTimeSet.AllMoney - TaskTimeSet.UsedMoney;
                decimal    minMoney   = 0.01M;
                SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "Cash" && n.State == 1);
                if (SysControl != null)
                {
                    minMoney = SysControl.SNum;
                }
                if (Peier < minMoney)
                {
                    isT0 = 3;
                }
            }

            SysSet.isT0 = isT0;

            DataObj.Data = SysSet.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderHouse]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }

            OrderHouse OrderHouse = new OrderHouse();

            OrderHouse = JsonToObject.ConvertJsonToModel(OrderHouse, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            string     Tag        = "House";
            SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag);
            SysControl syscontrol = SysControl.ChkState();

            if (syscontrol.State != 1)
            {
                DataObj.OutError("1005");
                return;
            }

            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderHouse.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            //开始处理参数
            if (OrderHouse.HouseOwner.IsNullOrEmpty() || OrderHouse.Bank.IsNullOrEmpty() || OrderHouse.Deposit.IsNullOrEmpty() || OrderHouse.CardNum.IsNullOrEmpty() || OrderHouse.Mobile.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.MonthRent.IsNullOrEmpty() || OrderHouse.PayMonth.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.X.IsNullOrEmpty() || OrderHouse.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.AId.IsNullOrEmpty())
            {//支付方式,用于取出支付费率信息,计算各接口金额
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.AId == 4)
            {//支付方式,用于取出支付费率信息,计算各接口金额
                DataObj.OutError("6022");
                return;
            }
            if (OrderHouse.SecurityMoney.IsNullOrEmpty())
            {
                OrderHouse.SecurityMoney = 0;
            }
            //获取用户支付配置
            //UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == OrderHouse.AId);
            //if (UserPay == null) {
            //    DataObj.OutError("1000");
            //    return;
            //}

            OrderHouse.SecurityMoney = OrderHouse.SecurityMoney.FormatMoney();
            OrderHouse.MonthRent     = OrderHouse.MonthRent.FormatMoney();

            //获取系统支付配置
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == OrderHouse.AId && n.State == 1);

            if (PayConfig == null)
            {
                DataObj.OutError("1000");
                return;
            }
            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();

            if (!baseUsers.Agent.IsNullOrEmpty())
            {
                SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            }
            //获取系统配置
            SysSet SysSet = Entity.SysSet.FirstOrDefault();

            if (OrderHouse.TrunType.IsNullOrEmpty())
            {
                OrderHouse.TrunType = 0;
            }
            if (OrderHouse.TrunType != 0)
            {
                OrderHouse.TrunType = 1;
            }
            decimal Peier = 0;

            if (OrderHouse.TrunType == 0)
            {
                if (baseUsers.HasT0 != 1)
                {
                    //T0黑名单
                    DataObj.OutError("6020");
                    return;
                }
                //验证是否满足T0
                int     Day        = (DateTime.Now - baseUsers.AddTime).Days;
                int     OrderCount = Entity.Orders.Count(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id);
                decimal?OrderMoney = Entity.Orders.Where(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id).Sum(n => (decimal?)n.Amoney);
                if (OrderMoney.IsNullOrEmpty())
                {
                    OrderMoney = 0;
                }
                if (Day >= SysSet.CashDay && OrderCount >= SysSet.CashNum && OrderMoney >= SysSet.CashMoney)
                {
                }
                else
                {
                    DataObj.OutError("6020");
                    return;
                }
                //验证是否在快速提现时段内
                TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.STime <= DateTime.Now && n.ETime >= DateTime.Now && n.TId == 1);
                if (TaskTimeSet == null)
                {
                    DataObj.OutError("6018");
                    return;
                }
                Peier = TaskTimeSet.AllMoney - TaskTimeSet.UsedMoney;
            }

            OrderHouse.UId = baseUsers.Id;
            double House = SysSet.House;
            double Cost  = (double)PayConfig.Cost;

            //余额支付不收手续费
            if (PayConfig.DllName == "Cash")
            {
                House = 0;
                Cost  = 0;
            }
            if (OrderHouse.TrunType == 0)
            {
                //总房租=月租金*月数+压金
                OrderHouse.PayMoney = OrderHouse.MonthRent * OrderHouse.PayMonth + OrderHouse.SecurityMoney;
                //手续费=总房租*(付房租系统费率+加急费率)+提现服务费
                OrderHouse.Poundage = OrderHouse.PayMoney * ((decimal)House + baseUsers.Cash0) + baseUsers.ECash0;
                //手续费进位
                OrderHouse.Poundage = OrderHouse.Poundage.Ceiling();
                //总付款金额=房租+手续费
                OrderHouse.Amoney = OrderHouse.PayMoney + OrderHouse.Poundage;
                //第三方支付通道率
                OrderHouse.SysRate = Cost;
                //商户费率
                OrderHouse.UserRate = House;
                //提现费率
                OrderHouse.CashRate = OrderHouse.PayMoney * SysSet.Cash0 + SysSet.ECash0;
                //这里是利润计算==========
                //利润=总支付金额-房租-支付手续费-提现服务费
                decimal GetAll = OrderHouse.Poundage - OrderHouse.PayMoney * ((decimal)Cost + SysSet.Cash0) - baseUsers.ECash0;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderHouse.AIdPayGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderHouse.AgentPayGet = 0;
            }
            else
            {
                //总房租=月租金*月数+压金
                OrderHouse.PayMoney = OrderHouse.MonthRent * OrderHouse.PayMonth + OrderHouse.SecurityMoney;
                //手续费=总房租*付房租系统费率
                OrderHouse.Poundage = OrderHouse.PayMoney * ((decimal)House + baseUsers.Cash1) + baseUsers.ECash1;
                //总付款金额=房租+手续费
                OrderHouse.Amoney = OrderHouse.PayMoney + OrderHouse.Poundage;
                //第三方支付通道率
                OrderHouse.SysRate = Cost;
                //商户费率
                OrderHouse.UserRate = House;
                //提现服务费--T+1无手续费
                OrderHouse.CashRate = OrderHouse.PayMoney * SysSet.Cash1 + SysSet.ECash1;
                //这里是利润计算==========
                //利润=总支付金额-房租-支付手续费
                decimal GetAll = OrderHouse.Poundage - OrderHouse.Amoney * ((decimal)Cost + SysSet.Cash1) - baseUsers.ECash1;
                //总利润
                OrderHouse.AIdPayGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderHouse.AgentPayGet = 0;
            }
            if (OrderHouse.TrunType == 0)//T0时才验证
            {
                //需要支付房东金额
                decimal TotalPrice = OrderHouse.PayMoney;
                //验证是否配额充足
                if (Peier < TotalPrice)
                {
                    DataObj.OutError("6019");
                    return;
                }
            }

            OrderHouse.Agent      = SysAgent.Id;//分支机构Id
            OrderHouse.AId        = baseUsers.AId;
            OrderHouse.FId        = 0;
            OrderHouse.OrderState = 1;
            OrderHouse.PayState   = 0;
            OrderHouse.AgentState = 0;
            OrderHouse.FState     = 0;
            OrderHouse.AddTime    = DateTime.Now;

            //写入前,判断交易金额限制
            if (OrderHouse.Amoney < syscontrol.SNum || OrderHouse.Amoney > syscontrol.ENum)
            {
                DataObj.OutError("1006");
                return;
            }
            //写入订单总表
            Orders Orders = new Orders();

            Orders.Remark = OrderHouse.Remark;
            Orders.UId    = OrderHouse.UId;
            Orders.TName  = OrderHouse.HouseOwner + "的房租";

            Orders.PayType = 0;
            Orders.PayName = "房租";

            Orders.RUId     = 0;
            Orders.RName    = string.Empty;
            Orders.TType    = 5;
            Orders.TState   = 1;
            Orders.Amoney   = OrderHouse.Amoney;
            Orders.Poundage = OrderHouse.Poundage;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 0;
            Orders.PayWay   = PayConfig.Id;

            Orders.Agent      = OrderHouse.Agent;
            Orders.AgentState = 0;
            Orders.AId        = OrderHouse.AId;
            Orders.FId        = 0;

            string OrderAddress = OrderHouse.OrderAddress;

            if (OrderAddress.IsNullOrEmpty())
            {
                OrderAddress = Utils.GetAddressByGPS(OrderHouse.X, OrderHouse.Y);
            }
            Orders.OrderAddress = OrderAddress;
            Orders.X            = OrderHouse.X;
            Orders.Y            = OrderHouse.Y;

            Orders.TrunType = OrderHouse.TrunType;

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            OrderHouse.OId = Orders.TNum;
            Entity.OrderHouse.AddObject(OrderHouse);
            Entity.SaveChanges();

            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = Orders.OrderAddress;
            UserTrack.GPSX       = Orders.X;
            UserTrack.GPSY       = Orders.Y;
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================

            Orders.SendMsg(Entity);//发送消息类
            DataObj.Data = Orders.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderCash]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            //System.Threading.Thread.Sleep(60000 * 60 * 24);
            OrderCash OrderCash = new OrderCash();

            OrderCash = JsonToObject.ConvertJsonToModel(OrderCash, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            if (OrderCash.TrunType.IsNullOrEmpty())
            {
                OrderCash.TrunType = 0;
            }
            if (OrderCash.TrunType != 0)
            {
                OrderCash.TrunType = 1;
            }

            string Tag = "Cash";

            if (OrderCash.TrunType == 0)
            {
                Tag = "CashT0";
            }
            if (OrderCash.TrunType == 1)
            {
                Tag = "CashT1";
            }
            SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag);
            SysControl syscontrol = SysControl.ChkState();

            if (syscontrol.State != 1)
            {
                DataObj.OutError("1005");
                return;
            }

            if (OrderCash.PayPwd.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderCash.PayPwd.Length < 6)//6位及以上
            {
                DataObj.OutError("1000");
                return;
            }
            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderCash.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            if (baseUsers.PayLock == 1)//密码错误太多次锁定
            {
                DataObj.OutError("2050");
                return;
            }
            if (baseUsers.StopPayState == 2)//禁止支付
            {
                DataObj.OutError("6060");
                return;
            }

            //获取系统配置
            SysSet SysSet = Entity.SysSet.FirstOrDefault();

            //这里是执行指纹解锁
            bool IfCheckOk = true;

            if (OrderCash.PayPwd.Substring(0, 3) == "HF_")
            {
                string PassWord = OrderCash.PayPwd;
                PassWord = PassWord.Replace("HF_", "");
                string Token = baseUsers.Token;
                Token = Token + "GoodPay";
                string Md5Token = Token.GetMD5().ToUpper();
                string Pass     = Md5Token.Substring(0, 4) + Md5Token.Substring(Md5Token.Length - 4, 4);
                if (Pass != PassWord)
                {
                    IfCheckOk = false;
                }
            }
            else if (baseUsers.PayPwd != OrderCash.PayPwd.GetPayMD5())
            {
                //原支付密码错误
                IfCheckOk = false;
            }
            if (!IfCheckOk)
            {
                //付密码错误
                baseUsers.PayErr++;
                if (baseUsers.PayErr >= SysSet.PayLock)
                {
                    baseUsers.PayLock = 1;
                }
                Entity.SaveChanges();
                Users Out = new Users();
                Out.PayErr   = SysSet.PayLock - baseUsers.PayErr;
                Out.Cols     = "PayErr";
                DataObj.Data = Out.OutJson();
                //DataObj.Code = "2010";
                DataObj.Code = "2002";
                if (Out.PayErr == 0)
                {
                    DataObj.Msg = "用户支付密码不正确,请明日再试或取回支付密码";
                }
                else
                {
                    DataObj.Msg = "用户支付密码不正确,您还可以尝试" + Out.PayErr + "次";
                }
                DataObj.OutString();
                return;
            }

            baseUsers.PayErr = 0;
            Entity.SaveChanges();

            //开始处理参数
            if (OrderCash.Amoney.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            OrderCash.Amoney = OrderCash.Amoney.FormatMoney();
            //提现金额大于余额
            if (OrderCash.Amoney > baseUsers.Amount)
            {
                DataObj.OutError("6001");
                return;
            }
            //冻结金额小于0不能提现
            if (baseUsers.Frozen < 0)
            {
                DataObj.OutError("6001");
                return;
            }
            if (OrderCash.X.IsNullOrEmpty() || OrderCash.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderCash.Owner.IsNullOrEmpty() || OrderCash.Bank.IsNullOrEmpty() || OrderCash.CardNum.IsNullOrEmpty() || OrderCash.Deposit.IsNullOrEmpty() || OrderCash.Mobile.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            UserBlackList UserBlackList = Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == OrderCash.CardNum && UBL.State == 3);

            if (UserBlackList != null)
            {
                //提示暂不支持该卡提现
                DataObj.OutError("2017");
                return;
            }
            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();

            if (!baseUsers.Agent.IsNullOrEmpty())
            {
                SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            }
            if (SysAgent.Id.IsNullOrEmpty())
            {
                SysAgent.Cash0Times = 0;
                SysAgent.Cash1Times = 0;
            }

            decimal Peier = 0;

            if (OrderCash.TrunType == 0)
            {
                if (baseUsers.HasT0 != 1)
                {
                    //T0黑名单
                    DataObj.OutError("6020");
                    return;
                }

                //验证是否满足T0
                int     Day        = (DateTime.Now - baseUsers.AddTime).Days;
                int     OrderCount = Entity.Orders.Count(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id);
                decimal?OrderMoney = Entity.Orders.Where(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id).Sum(n => (decimal?)n.Amoney);
                if (OrderMoney.IsNullOrEmpty())
                {
                    OrderMoney = 0;
                }
                if (Day >= SysSet.CashDay && OrderCount >= SysSet.CashNum && OrderMoney >= SysSet.CashMoney)
                {
                }
                else
                {
                    DataObj.OutError("6020");
                    return;
                }
                //验证是否在快速提现时段内
                TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.STime <= DateTime.Now && n.ETime >= DateTime.Now && n.TId == 1);
                if (TaskTimeSet == null)
                {
                    DataObj.OutError("6018");
                    return;
                }
                Peier = TaskTimeSet.AllMoney - TaskTimeSet.UsedMoney;
            }

            OrderCash.UId = baseUsers.Id;
            if (OrderCash.TrunType == 0)//加急提现
            {
                if (baseUsers.T0Times < SysAgent.Cash0Times)
                {
                    //用户提现服务费
                    OrderCash.UserRate = 0;
                    //加急费用
                    OrderCash.Cash = 0;
                    //提现服务费
                    OrderCash.ECash = 0;
                }
                else
                {
                    //用户提现服务费=提现金额*加急费率+提现服务费
                    OrderCash.UserRate = (double)(OrderCash.Amoney * baseUsers.Cash0 + baseUsers.ECash0);
                    //提现服务费进位
                    OrderCash.UserRate = OrderCash.UserRate.Ceiling();
                    //加急费用
                    OrderCash.Cash = baseUsers.Cash0;
                    //提现服务费
                    OrderCash.ECash = baseUsers.ECash0;
                }
                //系统提现费成本
                OrderCash.CashRate = OrderCash.Amoney * SysSet.SysCash0 + SysSet.SysECash0;
                //系统手续费进位
                OrderCash.CashRate = OrderCash.CashRate.Ceiling();

                //这里是利润计算==========
                //代理商分润
                double GetAgent = OrderCash.UserRate - (double)(OrderCash.Amoney * SysSet.AgentCash0 + SysSet.AgentECash0);
                if (GetAgent < 0)
                {
                    GetAgent = 0;
                }
                //利润=收取用户手续费-系统支出手续费
                double GetAll = OrderCash.UserRate - (double)OrderCash.CashRate - GetAgent;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderCash.AIdCashGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderCash.AgentCashGet = GetAgent;
            }
            else
            {
                if (baseUsers.T1Times < SysAgent.Cash1Times)
                {
                    //用户提现服务费
                    OrderCash.UserRate = 0;
                    //加急费用
                    OrderCash.Cash = 0;
                    //提现服务费
                    OrderCash.ECash = 0;
                }
                else
                {
                    //用户提现服务费=提现金额*加急费率+提现服务费
                    OrderCash.UserRate = (double)(OrderCash.Amoney * baseUsers.Cash1 + baseUsers.ECash1);
                    //提现服务费进位
                    OrderCash.UserRate = OrderCash.UserRate.Ceiling();
                    //加急费用
                    OrderCash.Cash = baseUsers.Cash1;
                    //提现服务费
                    OrderCash.ECash = baseUsers.ECash1;
                }

                //系统提现费成本
                OrderCash.CashRate = OrderCash.Amoney * SysSet.SysCash1 + SysSet.SysECash1;
                //系统手续费进位
                OrderCash.CashRate = OrderCash.CashRate.Ceiling();

                //这里是利润计算==========
                //代理商分润
                double GetAgent = OrderCash.UserRate - (double)(OrderCash.Amoney * SysSet.AgentCash1 + SysSet.AgentECash1);
                if (GetAgent < 0)
                {
                    GetAgent = 0;
                }
                //利润=收取用户手续费-系统支出手续费
                double GetAll = OrderCash.UserRate - (double)OrderCash.CashRate - GetAgent;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderCash.AIdCashGet = (double)GetAll;
                //分支机构佣金
                OrderCash.AgentCashGet = GetAgent;
            }
            decimal Money = OrderCash.Amoney - (decimal)OrderCash.UserRate;

            if (Money < 0)
            {
                DataObj.OutError("1006");
                return;
            }
            if (OrderCash.TrunType == 0)//T0时才验证
            {
                //付款金额

                //验证是否配额充足
                if (Peier < Money)
                {
                    DataObj.OutError("6019");
                    return;
                }
            }

            OrderCash.Agent      = SysAgent.Id;//分支机构Id
            OrderCash.AId        = baseUsers.AId;
            OrderCash.FId        = 0;
            OrderCash.OrderState = 1;
            OrderCash.PayState   = 1;
            OrderCash.AgentState = 0;
            OrderCash.FState     = 0;
            OrderCash.AddTime    = DateTime.Now;

            //写入前,判断交易金额限制
            if (OrderCash.Amoney < syscontrol.SNum || OrderCash.Amoney > syscontrol.ENum)
            {
                DataObj.OutError("1006");
                return;
            }
            //写入订单总表
            Orders Orders = new Orders();

            Orders.UId   = OrderCash.UId;
            Orders.TName = baseUsers.TrueName;

            Orders.PayType = 0;
            Orders.PayName = "提现";

            Orders.RUId     = 0;
            Orders.RName    = string.Empty;
            Orders.TType    = 2;
            Orders.TState   = 1;
            Orders.Amoney   = OrderCash.Amoney;
            Orders.Poundage = (decimal)OrderCash.UserRate;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 1;//提现为余额支付的一种特殊形式。
            Orders.PayWay   = 4;
            Orders.PayTime  = DateTime.Now;

            Orders.Agent      = OrderCash.Agent;
            Orders.AgentState = 0;
            Orders.AId        = OrderCash.AId;
            Orders.FId        = 0;

            Orders.UserCardId = baseUsers.CardId;

            string OrderAddress = OrderCash.OrderAddress;

            if (OrderAddress.IsNullOrEmpty())
            {
                OrderAddress = Utils.GetAddressByGPS(OrderCash.X, OrderCash.Y);
            }
            Orders.OrderAddress = OrderAddress;
            Orders.X            = OrderCash.X;
            Orders.Y            = OrderCash.Y;

            Orders.TrunType = OrderCash.TrunType;

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            OrderCash.OId = Orders.TNum;

            Entity.OrderCash.AddObject(OrderCash);
            Entity.SaveChanges();

            //帐户变动记录
            int     USERSID  = baseUsers.Id;
            string  TNUM     = OrderCash.OId;
            decimal PAYMONEY = Orders.Amoney;
            string  SP_Ret   = Entity.SP_UsersMoney(USERSID, TNUM, PAYMONEY, 3, "");

            if (SP_Ret != "3")
            {
                Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", USERSID, TNUM, 3, PAYMONEY, SP_Ret), "SP_UsersMoney");
                Orders.TState        = 0;
                Orders.PayState      = 0;
                OrderCash.OrderState = 0;
                OrderCash.PayState   = 0;
                Entity.SaveChanges();
                DataObj.OutError("8888");
                return;
            }

            if (OrderCash.TrunType == 0)//T0时减少配额
            {
                DateTime    Today       = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.ODate == Today);
                if (TaskTimeSet != null)
                {
                    TaskTimeSet.UsedMoney += Money;
                    Entity.SaveChanges();
                }
                baseUsers.T0Times = baseUsers.T0Times + 1;
            }
            else
            {
                baseUsers.T1Times = baseUsers.T1Times + 1;
            }
            if (SysSet.CashChecked == 1)
            {
                bool IsAuto = true;
                if (SysSet.EveryDayMaxCash > 0)//超出规定额度,变成人工审核。规定是0刚不执行
                {
                    DateTime Today      = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                    var      todaymoney = this.Entity.OrderCash.Where(o => (o.OrderState == 2 || o.OrderState == 1) && o.AddTime > Today && (o.PayState == 1 || o.PayState == 2) && o.UId == baseUsers.Id).Sum(o => (decimal?)o.Amoney) ?? 0m;
                    if (todaymoney > SysSet.EveryDayMaxCash)//当天累加提现 > 规定额度
                    {
                        IsAuto = false;
                    }
                }
                if (IsAuto)
                {
                    //帐户变动记录
                    string SP_Ret2 = Entity.SP_UsersMoney(USERSID, TNUM, PAYMONEY, 4, "");
                    if (SP_Ret2 != "3")
                    {
                        Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", USERSID, TNUM, 4, PAYMONEY, SP_Ret2), "SP_UsersMoney");
                        DataObj.OutError("8888");
                        return;
                    }
                    else
                    {
                        //自动审核
                        Orders.TState        = 2;
                        OrderCash.OrderState = 2;
                        OrderCash.AuditTime  = DateTime.Now;
                        Entity.SaveChanges();
                    }
                    if (SysSet.CashPayWay == 1)      //开启自动结算时执行
                    {
                        if (OrderCash.TrunType == 0) //T0时自动出款
                        {
                            if (OrderCash.Amoney <= SysSet.QCash0)
                            {
                                Utils.WriteLog("[S]" + Orders.TNum, "CashAuto");
                                OrderCash.PayCash(Orders, Entity);//去付款
                                Utils.WriteLog("[E]" + Orders.TNum, "CashAuto");
                            }
                            else
                            {
                                Utils.WriteLog("结算金额超出自动出款金额" + OrderCash.OId + ":提现金额[" + OrderCash.Amoney + "]自动出款金额[" + SysSet.QCash0 + "]", "OrderCash");
                            }
                        }
                        //else
                        //{
                        //    Utils.WriteLog("T0时自动出款没开启" + OrderCash.OId, "OrderCash");
                        //}
                    }
                    else
                    {
                        Utils.WriteLog("自动结算没开启" + OrderCash.OId, "OrderCash");
                    }
                }
                else
                {
                    Utils.WriteLog("单卡超过限定金额" + OrderCash.OId, "OrderCash");
                }
            }
            else
            {
                Utils.WriteLog("自动审核没开启" + OrderCash.OId, "OrderCash");
            }
            Entity.Refresh(RefreshMode.StoreWins, Orders);
            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = Orders.OrderAddress;
            UserTrack.GPSX       = Orders.X;
            UserTrack.GPSY       = Orders.Y;
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================

            Orders.SendMsg(Entity);//发送消息类

            if (Orders.PayState == 3 && Orders.Remark == "本银行卡今日提交超过限额!")
            {
                DataObj.OutError("1016");
                return;
            }
            //超过单日单卡(10W)到账限额
            DataObj.Data = Orders.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
        public ActionResult Save(OrderCash OrderCash)
        {
            OrderCash baseOrderCash = Entity.OrderCash.FirstOrDefault(n => n.Id == OrderCash.Id);
            string    tnum          = "TK" + baseOrderCash.OId;

            if (!this.GetRuningState(tnum))
            {
                this.SetRuningState(tnum);
                try
                {
                    OrdersPayOnly OPO = new OrdersPayOnly();
                    OPO.TNum    = tnum;
                    OPO.AddTime = DateTime.Now;
                    Entity.OrdersPayOnly.AddObject(OPO);
                    Entity.SaveChanges();
                }
                catch (Exception)
                {
                    ViewBag.ErrorMsg = "重复入帐!";
                    return(View("Error"));
                }
                //return null;
                if (baseOrderCash.OrderState == 2 && baseOrderCash.PayState == 3)
                {
                    var OrderCashLog = new OrderCashLog()
                    {
                        AddTime   = DateTime.Now,
                        AdminId   = this.AdminUser.Id,
                        AdminName = this.AdminUser.TrueName,
                        TNum      = baseOrderCash.OId,
                        Remark    = string.Empty,
                        LogType   = 3,
                    };
                    this.Entity.OrderCashLog.AddObject(OrderCashLog);
                    baseOrderCash.RefundTime = DateTime.Now;
                    baseOrderCash.PayState   = 4;
                    Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == baseOrderCash.OId);
                    Orders.PayState = 4;
                    //退款到余额
                    Users baseUsers = Entity.Users.FirstOrDefault(n => n.Id == baseOrderCash.UId);
                    //帐户变动记录
                    int     USERSID  = baseUsers.Id;
                    string  TNUM     = Orders.TNum;
                    decimal PAYMONEY = baseOrderCash.Amoney;
                    string  SP_Ret   = Entity.SP_UsersMoney(USERSID, TNUM, PAYMONEY, 6, "");
                    if (SP_Ret != "3")
                    {
                        Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", USERSID, TNUM, 6, PAYMONEY, SP_Ret), "SP_UsersMoney");
                    }
                    //======分润======
                    baseOrderCash      = baseOrderCash.PayAgent(Entity, 2);
                    Orders.AgentPayGet = (decimal)baseOrderCash.AgentCashGet;
                    Entity.SaveChanges();
                    Orders.SendMsg(Entity);//发送消息类
                    //T0时增加配额
                    if (baseOrderCash.TrunType == 0)
                    {
                        decimal     Money       = baseOrderCash.Amoney - (decimal)baseOrderCash.UserRate;
                        DateTime    Today       = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                        TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.ODate == Today);
                        if (TaskTimeSet != null)
                        {
                            if (TaskTimeSet.UsedMoney >= Money)
                            {
                                TaskTimeSet.UsedMoney -= Money;
                            }
                            else
                            {
                                TaskTimeSet.UsedMoney = 0;
                            }
                            Entity.SaveChanges();
                        }
                    }
                }
                BaseRedirect();
            }
            return(null);
        }