public ActionResult Edit(JobOrders JobOrders)
 {
     if (JobOrders.Id != 0)
     {
         JobOrders = Entity.JobOrders.FirstOrDefault(n => n.Id == JobOrders.Id);
     }
     if (JobOrders == null)
     {
         ViewBag.ErrorMsg = "数据不存在";
         return(View("Error"));
     }
     if (!IsBelongToAgent(JobOrders.AgentId))
     {
         ViewBag.ErrorMsg = AgentLanguage.Surmount;
         return(View("Error"));
     }
     ViewBag.OrderProfitLog = Entity.OrderProfitLog.FirstOrNew(o => o.LogType == 2 && o.Agent == this.AdminUser.AgentId && o.TNum == JobOrders.TNum);
     ViewBag.SysAdmin       = Entity.SysAdmin.FirstOrNew(n => n.Id == JobOrders.AgentId);
     ViewBag.Users          = Entity.Users.FirstOrDefault(o => o.Id == JobOrders.UId);
     //前端没调用调出来做什么?By Lin 2017-12-19
     //ViewBag.JobPayWay = Entity.JobPayWay.FirstOrDefault(o => o.Id == JobOrders.PayWay);
     ViewBag.JobOrders = JobOrders;
     if (Request.UrlReferrer != null)
     {
         Session["Url"] = Request.UrlReferrer.ToString();
     }
     return(View());
 }
        public ActionResult IndexOrderProfitLog(string tnum)
        {
            JobOrders Orders = Entity.JobOrders.FirstOrDefault(n => n.TNum == tnum);

            if (Orders == null)
            {
                ViewBag.ErrorMsg = "查询的交易不存在";
                return(View("Error"));
            }
            var query = this.Entity.OrderProfitLog.Where(o => o.TNum == tnum);

            if (Orders.AgentId == this.BasicAgent.Id)
            {
                query = query.Where(o => (o.Agent == this.BasicAgent.Id || o.LogType == 1));
            }
            else
            {
                query = query.Where(o => o.Agent == this.BasicAgent.Id);
            }
            var OrderProfitLog = query.OrderByDescending(o => o.Id).ToList();

            ViewBag.OrderProfitLog = OrderProfitLog;

            var UIds         = OrderProfitLog.Select(o => o.UId).ToList();
            var UserNameList = this.Entity.Users.Where(o => UIds.Contains(o.Id)).ToDictionary(o => o.Id, o => o.TrueName);

            ViewBag.UserNameList = UserNameList;

            var SysAgent     = OrderProfitLog.Select(o => o.Agent).ToList();
            var SysAgentList = this.Entity.SysAgent.Where(o => SysAgent.Contains(o.Id)).ToDictionary(o => o.Id, o => o.Name);

            ViewBag.SysAgentList = SysAgentList;

            return(View());
        }
Example #3
0
        public async Task <IActionResult> GetJobOrders()
        {
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                try
                {
                    JobOrders jobs = await TempWorksAPI.SearchJobOrdersFromTempworksAsync();

                    foreach (JobOrder job in jobs.data)
                    {
                        try {
                            JobDetail detail = await TempWorksAPI.GetJobOrderDetailFromTempworksAsync(job.orderId);

                            DataLayer.TempWorks.AddJobOrderProc(con, detail, true);
                        }
                        catch (Exception ex)
                        {
                            _context.SaveErrorProc(con, "Error JobOrder " + job.orderId.ToString(), ex.Message);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _context.SaveErrorProc(con, "Error JobOrder", ex.Message);
                    return(BadRequest(ex.Message));
                }
            }
            return(Ok());
        }
        public ActionResult Index(JobOrders JobOrders, EFPagingInfo <JobOrders> p, DateTime?STime, DateTime?ETime, int IsFirst = 0)
        {
            IPageOfItems <JobOrders> JobOrdersList = null;

            if (IsFirst == 0)
            {
                JobOrders.State      = 99;
                JobOrders.AgentState = 99;
                JobOrdersList        = new PageOfItems <JobOrders>(new List <JobOrders>(), 0, 10, 0, new Hashtable());
            }
            else
            {
                p             = this.Condition(JobOrders, p, STime, ETime);
                JobOrdersList = Entity.Selects <JobOrders>(p);
            }
            List <int> UId = JobOrdersList.Select(o => o.UId).Distinct().ToList();

            ViewBag.UsersList     = Entity.Users.Where(n => n.State == 1 && UId.Contains(n.Id)).ToList();
            ViewBag.JobOrdersList = JobOrdersList;
            ViewBag.JobOrders     = JobOrders;
            ViewBag.Edit          = this.checkPower("Edit");
            ViewBag.ETime         = ETime;
            ViewBag.STime         = STime;
            ViewBag.ExcelExport   = this.checkPower("ExcelExport");
            ViewBag.SplitMoney    = this.checkPower("SplitMoney");
            ViewBag.JobPayWayList = Entity.JobPayWay.ToList();
            return(View());
        }
        public ActionResult Index(JobOrders JobOrders, EFPagingInfo <JobOrders> p, bool?IsShowSupAgent, int?LowerLevel, DateTime?STime, DateTime?ETime, int IsFirst = 0)
        {
            IPageOfItems <JobOrders> JobOrdersList = null;

            if (IsShowSupAgent == null)
            {
                IsShowSupAgent = false;
            }
            ViewBag.BasicAgent = BasicAgent;
            ViewBag.IsAll      = IsAll;
            LowerLevel         = LowerLevel == null ? 0 : LowerLevel;
            if (IsFirst == 0)
            {
                JobOrders.State = 99;
                JobOrdersList   = new PageOfItems <JobOrders>(new List <JobOrders>(), 0, 10, 0, new Hashtable());
            }
            else
            {
                p = this.Condition(JobOrders, p, STime, ETime);

                IList <SysAgent> SysAgentList = null;
                if ((bool)IsShowSupAgent)
                {
                    IList <int> UID = new List <int>();
                    if (LowerLevel != 0)
                    {
                        SysAgent LowerLevelAgent = Entity.SysAgent.Where(s => s.Id == LowerLevel).FirstOrNew();
                        SysAgentList = LowerLevelAgent.GetSupAgent(Entity, true);
                    }
                    else
                    {
                        SysAgentList = BasicAgent.GetSupAgent(Entity, true);//获取所有下级代理商信息
                    }
                    UID = SysAgentList.Select(o => o.Id).ToList();
                    p.SqlWhere.Add(f => UID.Contains(f.AgentId));
                }
                else
                {
                    p.SqlWhere.Add(f => f.AgentId == BasicAgent.Id);//读取全部分支机构
                }

                JobOrdersList = Entity.Selects <JobOrders>(p);
            }
            ViewBag.JobOrdersList  = JobOrdersList;
            ViewBag.JobOrders      = JobOrders;
            ViewBag.Edit           = this.checkPower("Edit");
            ViewBag.ETime          = ETime;
            ViewBag.STime          = STime;
            ViewBag.IsShowSupAgent = IsShowSupAgent;
            ViewBag.LowerLevel     = LowerLevel;
            List <int> UId = JobOrdersList.Select(o => o.UId).Distinct().ToList();

            ViewBag.UsersList = Entity.Users.Where(n => n.State == 1 && UId.Contains(n.Id)).ToList();
            return(View());
        }
        /// <summary>
        /// 统计
        /// </summary>
        /// <returns></returns>
        public ActionResult IndexStats(JobOrders JobOrders, EFPagingInfo <JobOrders> p, DateTime?STime, DateTime?ETime)
        {
            p = this.Condition(JobOrders, p, STime, ETime);
            var Iquery = this.Entity.JobOrders.AsQueryable();

            foreach (var item in p.SqlWhere)
            {
                Iquery = Iquery.Where(item);
            }
            ViewBag.SumAmoney   = Iquery.Sum(o => (decimal?)o.TotalMoney) ?? 0m;
            ViewBag.SumPoundage = Iquery.Sum(o => (decimal?)o.Poundage) ?? 0m;
            ViewBag.Count       = Iquery.Count();
            return(this.View());
        }
        /// <summary>
        /// 取消任务
        /// </summary>
        /// <param name="tnum"></param>
        /// <returns></returns>
        public JsonResult CancelJob(string tnum, string Rs)
        {
            JsonResult JR = new JsonResult()
            {
                ContentType = "text/html"
            };

            if (tnum.IsNullOrEmpty() || Rs.IsNullOrEmpty())
            {
                JR.Data = new { error = 1, info = "参数有误" };
                return(JR);
            }
            Entity.ExecuteStoreCommand("Exec SP_JobReSet '" + tnum + "',1");
            JobOrders baseJobOrders = Entity.JobOrders.FirstOrNew(o => o.TNum == tnum);

            if (baseJobOrders == null)
            {
                JR.Data = new { error = 1, info = "订单不存在" };
                return(JR);
            }
            if (baseJobOrders.State != 3)
            {
                JR.Data = new { error = 1, info = "当前订单状态不能取消操作" };
                return(JR);
            }
            bool IsItemRun = Entity.JobItem.Any(o => o.TNum == baseJobOrders.TNum && o.State == 2);

            if (IsItemRun)
            {
                JR.Data = new { error = 1, info = "子订单有正在执行中的状态,不能执行该操作" };
                return(JR);
            }

            baseJobOrders.Remark = Rs + ",时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            baseJobOrders.State  = 5;
            Entity.SaveChanges();
            //取消所有待执行订单
            Entity.ExecuteStoreCommand("Update JobItem Set State=0 Where TNum='" + baseJobOrders.TNum + "' and State=1");

            //重新统计成功与失败后金额
            if (baseJobOrders.Amount >= 1)
            {
                JR = CloseJob(baseJobOrders.TNum);
                return(JR);
            }
            JR.Data = new { error = 0, info = "取消订单成功!" };
            return(JR);
        }
        private EFPagingInfo <JobOrders> Condition(JobOrders JobOrders, EFPagingInfo <JobOrders> p, DateTime?STime, DateTime?ETime)
        {
            #region 筛选条件
            if (!JobOrders.PayWay.IsNullOrEmpty())
            {
                p.SqlWhere.Add(o => o.PayWay == JobOrders.PayWay);
            }

            if (!JobOrders.TNum.IsNullOrEmpty())
            {
                if (JobOrders.UId == 1)
                {
                    p.SqlWhere.Add(f => f.TNum == JobOrders.TNum);
                }
                else
                {
                    IList <Users> UList = Entity.Users.Where(n => n.TrueName.Contains(JobOrders.TNum) || n.NeekName.Contains(JobOrders.TNum) || n.UserName == JobOrders.TNum).ToList();
                    List <int>    UIds  = new List <int>();
                    foreach (var pp in UList)
                    {
                        UIds.Add(pp.Id);
                    }
                    p.SqlWhere.Add(f => UIds.Contains(f.UId));
                }
            }
            if (!STime.IsNullOrEmpty() && !ETime.IsNullOrEmpty())
            {
                DateTime ETime_temp = new DateTime(ETime.Value.Year, ETime.Value.Month, ETime.Value.Day, 23, 59, 59, 999);
                if (JobOrders.PayState == 1)
                {
                    p.SqlWhere.Add(f => f.AddTime >= STime && f.AddTime <= ETime_temp);
                }
                else
                {
                    p.SqlWhere.Add(f => f.PayTime >= STime && f.PayTime <= ETime_temp);
                }
            }
            if (JobOrders.State != 99)
            {
                p.SqlWhere.Add(f => f.State == JobOrders.State);
            }
            #endregion
            //p.SqlWhere.Add(o => o.AgentId == BasicAgent.Id);
            p.OrderByList.Add("Id", "DESC");

            return(p);
        }
        public ActionResult IndexJobOrders(string TNum)
        {
            JobOrders JobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == TNum);

            if (JobOrders == null)
            {
                ViewBag.ErrorMsg = "数据不存在";
                return(View("Error"));
            }
            if (!IsBelongToAgent(JobOrders.AgentId))
            {
                ViewBag.ErrorMsg = AgentLanguage.Surmount;
                return(View("Error"));
            }
            var JobItemList = this.Entity.JobItem.Where(o => o.TNum == TNum).OrderBy(o => o.RunTime).ToList();

            ViewBag.JobItemList = JobItemList;
            return(View());
        }
Example #10
0
 public ActionResult Edit(JobOrders JobOrders)
 {
     JobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == JobOrders.TNum);
     if (JobOrders == null)
     {
         ViewBag.ErrorMsg = "数据不存在";
         return(View("Error"));
     }
     ViewBag.JobOrders = JobOrders;
     ViewBag.Users     = Entity.Users.FirstOrNew(n => n.Id == JobOrders.UId);
     //ViewBag.Agents = Entity.Agents.FirstOrNew(n => n.Id == JobOrders.AgentId);
     //ViewBag.SysAdmin = Entity.SysAdmin.FirstOrNew(n => n.Id == JobOrders.AgentId);
     ViewBag.JobPayWay      = Entity.JobPayWay.FirstOrDefault(o => o.Id == JobOrders.PayWay);
     ViewBag.UserTrailIndex = this.checkPower("UserTrail", "Index");
     if (Request.UrlReferrer != null)
     {
         Session["Url"] = Request.UrlReferrer.ToString();
     }
     return(View("../JobOrders/Edit"));
 }
Example #11
0
        public static async System.Threading.Tasks.Task <JobOrders> SearchJobOrdersFromTempworksAsync()
        {
            using (HttpClient client = new HttpClient())
            {
                // Call asynchronous network methods in a try/catch block to handle exceptions
                client.DefaultRequestHeaders.Add("x-tw-token", APIKey);
                var result = await client.GetAsync("https://api.ontempworks.com/search/joborders/?skip=0&take=100000");

                //if(result.StatusCode!=System.Net.HttpStatusCode.OK)
                //throw new Exception(result.Content.)
                //string contnet = await result.Content.ReadAsStringAsync();
                JobOrders jobs = await result.Content.ReadFromJsonAsync <JobOrders>();


                // Above three lines can be replaced with new helper method below
                // string responseBody = await client.GetStringAsync(uri);

                return(jobs);
            }
        }
        public ActionResult IndexJobOrders(string TNum)
        {
            JobOrders JobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == TNum);

            if (JobOrders == null)
            {
                ViewBag.ErrorMsg = "数据不存在";
                return(View("Error"));
            }
            ViewBag.JobOrders = JobOrders;

            var JobItemList = this.Entity.JobItem.Where(o => o.TNum == TNum).OrderBy(o => o.RunTime).ToList();

            ViewBag.PaywayList       = Entity.JobPayWay.ToList();
            ViewBag.UsersCardList    = Entity.UserCard.Where(o => o.UId == JobOrders.UId).ToList();
            ViewBag.JobItemList      = JobItemList;
            ViewBag.CloseJob         = this.checkPower("CloseJob");
            ViewBag.RetSetItem       = this.checkPower("RetSetItem");
            ViewBag.RepairCloseJob   = this.checkPower("RepairCloseJob");
            ViewBag.RepairRetSetItem = this.checkPower("RepairRetSetItem");

            ViewBag.CancelJob   = this.checkPower("CancelJob");
            ViewBag.SetTimeSave = this.checkPower("SetTimeSave");

            SP_JobReSet SP_JobReSet             = new SP_JobReSet();
            Dictionary <string, string> dicChar = new Dictionary <string, string>();

            dicChar.Add("TNum", TNum);
            dicChar.Add("Type", "3");
            IList <SP_JobReSet> SP_JobReSetList = Entity.GetSPExtensions <SP_JobReSet>("SP_JobReSet", dicChar);

            if (SP_JobReSetList.Count > 0)
            {
                SP_JobReSet = SP_JobReSetList.FirstOrNew();
            }
            ViewBag.SP_JobReSet = SP_JobReSet;
            return(View());
        }
 public ActionResult Edit(JobOrders JobOrders)
 {
     if (JobOrders.Id != 0)
     {
         JobOrders = Entity.JobOrders.FirstOrDefault(n => n.Id == JobOrders.Id);
     }
     else if (!JobOrders.TNum.IsNullOrEmpty())
     {
         JobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == JobOrders.TNum);
     }
     if (JobOrders == null)
     {
         ViewBag.ErrorMsg = "数据不存在";
         return(View("Error"));
     }
     ViewBag.Users     = Entity.Users.FirstOrDefault(o => o.Id == JobOrders.UId);
     ViewBag.JobPayWay = Entity.JobPayWay.FirstOrDefault(o => o.Id == JobOrders.PayWay);
     ViewBag.JobOrders = JobOrders;
     if (Request.UrlReferrer != null)
     {
         Session["Url"] = Request.UrlReferrer.ToString();
     }
     return(View());
 }
        private DataObj CloseJob(string tnum)
        {
            DataObj DataObj = new DataObj();

            if (tnum.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return(DataObj);
            }
            //重新统计成功与失败后金额
            Entity.ExecuteStoreCommand("Exec SP_JobReSet '" + tnum + "',1");

            JobOrders baseJobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == tnum);

            if (baseJobOrders == null)
            {
                DataObj.OutError("1000");
                return(DataObj);
            }
            if (baseJobOrders.State != 5)
            {
                DataObj.Msg = "当前订单状态不能结清操作";
                DataObj.OutError("1000");
                return(DataObj);
            }
            if (baseJobOrders.Amount < 1)
            {
                DataObj.Msg = "本订单余额小于0无需再次清算";
                DataObj.OutError("1000");
                return(DataObj);
            }
            int count = Entity.JobItem.Count(n => n.TNum == tnum && n.State != 3 && n.State != 4 && n.State != 0);

            if (count > 0)
            {
                DataObj.Msg = "本订单有" + count + "笔交易未达到最终状态,暂不可操作。";
                DataObj.OutError("1000");
                return(DataObj);
            }
            DateTime Now     = DateTime.Now;
            DateTime RunTime = Now;

            if (RunTime.Hour < 12)
            {
                RunTime.AddHours(12 - RunTime.Hour);
            }
            //生成多一单还款计划就OK了
            JobItem JobItem = new JobItem();

            JobItem.UId      = baseJobOrders.UId;
            JobItem.TNum     = baseJobOrders.TNum;
            JobItem.RunMoney = baseJobOrders.Amount;


            JobItem.RunTime  = RunTime;
            JobItem.Poundage = 0;
            JobItem.RunGet   = JobItem.RunMoney * baseJobOrders.CashRate;
            if (JobItem.RunGet < baseJobOrders.CashMin)
            {
                JobItem.RunGet = baseJobOrders.CashMin;
            }
            if (JobItem.RunGet > baseJobOrders.CashMax)
            {
                JobItem.RunGet = baseJobOrders.CashMax;
            }
            JobItem.RunGet   = JobItem.RunGet.Ceiling();//通道成本
            JobItem.AgentGet = 0;
            //利润=用户手续费-代理分润-通道成本
            JobItem.HFGet      = JobItem.Poundage - JobItem.AgentGet - JobItem.RunGet;
            JobItem.State      = 1;
            JobItem.AddTime    = Now;
            JobItem.RunType    = 2;
            JobItem.RunState   = 0;
            JobItem.PayWay     = baseJobOrders.CashWay;
            JobItem.UserCardId = baseJobOrders.UserCardId;
            JobItem.Remark     = "任务失败退回剩余金额";
            JobItem.RunSort    = 9999;
            Entity.JobItem.AddObject(JobItem);
            Entity.SaveChanges();
            DataObj.Code = "0000";
            return(DataObj);
        }
        /// <summary>
        ///  补单并重启任务
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public JsonResult RepairRetSetItem(int Id)
        {
            JsonResult JR = new JsonResult()
            {
                ContentType = "text/html"
            };

            if (Id.IsNullOrEmpty())
            {
                JR.Data = new { error = 1, info = "参数有误" };
                return(JR);
            }
            JobItem JobItem = Entity.JobItem.FirstOrDefault(n => n.Id == Id);

            if (JobItem == null)
            {
                JR.Data = new { error = 1, info = "交易不存在" };
                return(JR);
            }
            if (JobItem.State != 4)
            {
                JR.Data = new { error = 1, info = "当前交易状态不能重启操作" };
                return(JR);
            }
            JobOrders JobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == JobItem.TNum);

            if (JobOrders == null)
            {
                JR.Data = new { error = 1, info = "订单不存在" };
                return(JR);
            }
            if (JobOrders.State != 5 && JobOrders.State != 1)
            {
                JR.Data = new { error = 1, info = "当前订单状态不能重启操作" };
                return(JR);
            }
            int count = Entity.JobItem.Count(n => n.TNum == JobItem.TNum && n.State != 3 && n.State != 4 && n.State != 0);

            if (count > 0)
            {
                JR.Data = new { error = 1, info = "本订单有" + count + "笔交易未达到最终状态,暂不可操作。" };
                return(JR);
            }

            //这里要验证进出帐是否是平的
            decimal D1 = Entity.JobItem.Where(n => n.TNum == JobItem.TNum && n.RunType == 1 && (n.State == 0 || n.State == 3 || (n.State == 4 && n.Id == Id))).Sum(n => n.RunMoney);
            decimal D2 = Entity.JobItem.Where(n => n.TNum == JobItem.TNum && n.RunType == 1 && (n.State == 0 || n.State == 3 || (n.State == 4 && n.Id == Id))).Sum(n => n.Poundage);
            decimal E1 = Entity.JobItem.Where(n => n.TNum == JobItem.TNum && n.RunType == 2 && (n.State == 0 || n.State == 3)).Sum(n => n.RunMoney);
            decimal A0 = D1 - D2 - E1;

            if (A0 < 0)
            {
                JR.Data = new { error = 1, info = "检查到任务不平帐" };
                return(JR);
            }
            if (A0 > 0.5M)
            {
                JR.Data = new { error = 1, info = "检查到任务不平帐" };
                return(JR);
            }
            count = Entity.JobItem.Count(n => n.TNum == JobItem.TNum && n.State == 0 && n.RunTime < DateTime.Now);
            if (count > 0)
            {
                JR.Data = new { error = 99, info = "当前需要调整后续费任务时间", item = JobItem.Id };
                return(JR);
            }
            //增加检测排序执行时间
            IList <JobItem> JobItemList = Entity.JobItem.Where(n => n.TNum == JobItem.TNum && n.State == 0).OrderBy(n => n.RunSort).ThenBy(n => n.Id).ToList();

            if (JobItemList.Count == 0)
            {
                JR.Data = new { error = 1, info = "没有需要重启的交易" };
                return(JR);
            }
            DateTime RT     = JobItemList.First().RunTime;
            bool     CanRun = true;

            foreach (var p in JobItemList.Skip(1))
            {
                if (RT > p.RunTime)
                {
                    JR.Data = new { error = 99, info = p.RunNum + "执行时间比前一笔交易慢" };
                    CanRun  = false;
                    break;
                }
                RT = p.RunTime;
            }
            if (!CanRun)
            {
                return(JR);
            }
            //查询订单状态
            JobItem.State    = 2;
            JobItem.RunState = 2;
            Entity.SaveChanges();
            JobItem = JobItem.PayQuery(Entity);
            if (JobItem.State != 3)
            {
                JR.Data = new { error = 1, info = "当前订单补单失败!" };
                return(JR);
            }
            Entity.SaveChanges();
            Entity.ExecuteStoreCommand("Exec SP_JobReSet '" + JobItem.TNum + "',2");
            JR.Data = new { error = 0, info = "处理成功" };
            return(JR);
        }
        /// <summary>
        /// 重启任务
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="RunTime"></param>
        /// <returns></returns>
        public JsonResult RetSetItem(int Id, DateTime RunTime)
        {
            JsonResult JR = new JsonResult()
            {
                ContentType = "text/html"
            };

            if (Id.IsNullOrEmpty())
            {
                JR.Data = new { error = 1, info = "参数有误" };
                return(JR);
            }
            JobItem OldItem = Entity.JobItem.FirstOrDefault(n => n.Id == Id);

            if (OldItem == null)
            {
                JR.Data = new { error = 1, info = "交易不存在" };
                return(JR);
            }
            if (OldItem.State != 4)
            {
                JR.Data = new { error = 1, info = "当前交易状态不能重启操作" };
                return(JR);
            }
            JobOrders JobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == OldItem.TNum);

            if (JobOrders == null)
            {
                JR.Data = new { error = 1, info = "订单不存在" };
                return(JR);
            }
            if (JobOrders.State != 5)
            {
                JR.Data = new { error = 1, info = "当前订单状态不能重启操作" };
                return(JR);
            }
            int count = Entity.JobItem.Count(n => n.TNum == OldItem.TNum && n.State != 3 && n.State != 4 && n.State != 0);

            if (count > 0)
            {
                JR.Data = new { error = 1, info = "本订单有" + count + "笔交易未达到最终状态,暂不可操作。" };
                return(JR);
            }
            string Remark = "重启自" + OldItem.RunNum;
            //复制多一单还款计划
            JobItem JobItem = Entity.JobItem.FirstOrDefault(n => n.TNum == OldItem.TNum && n.Remark == Remark && n.State == 0 && n.RunState == 0);

            if (JobItem == null)
            {
                JobItem = new JobItem();

                JobItem.UId        = OldItem.UId;
                JobItem.TNum       = OldItem.TNum;
                JobItem.RunNum     = OldItem.RunNum;
                JobItem.RunMoney   = OldItem.RunMoney;
                JobItem.Poundage   = OldItem.Poundage;
                JobItem.AgentGet   = OldItem.AgentGet;
                JobItem.HFGet      = OldItem.HFGet;
                JobItem.RunGet     = OldItem.RunGet;
                JobItem.RunType    = OldItem.RunType;
                JobItem.PayWay     = OldItem.PayWay;
                JobItem.UserCardId = OldItem.UserCardId;
                JobItem.RunSort    = OldItem.RunSort;

                JobItem.RunTime   = RunTime;
                JobItem.RunState  = 0;
                JobItem.State     = 0;
                JobItem.AddTime   = DateTime.Now;
                JobItem.RunedTime = null;
                JobItem.Remark    = Remark;
                Entity.JobItem.AddObject(JobItem);
                Entity.SaveChanges();
            }
            else
            {
                JobItem.RunTime = RunTime;
                Entity.SaveChanges();
            }
            //这里要验证进出帐是否是平的
            decimal D1 = Entity.JobItem.Where(n => n.TNum == OldItem.TNum && n.RunType == 1 && (n.State == 0 || n.State == 3)).Sum(n => n.RunMoney);
            decimal D2 = Entity.JobItem.Where(n => n.TNum == OldItem.TNum && n.RunType == 1 && (n.State == 0 || n.State == 3)).Sum(n => n.Poundage);
            decimal E1 = Entity.JobItem.Where(n => n.TNum == OldItem.TNum && n.RunType == 2 && (n.State == 0 || n.State == 3)).Sum(n => n.RunMoney);
            decimal A0 = D1 - D2 - E1;

            if (A0 < 0)
            {
                JR.Data = new { error = 1, info = "检查到任务不平帐" };
                return(JR);
            }
            if (A0 > 0.5M)
            {
                JR.Data = new { error = 1, info = "检查到任务不平帐" };
                return(JR);
            }
            //验证是否有比它还晚的交易
            count = Entity.JobItem.Count(n => n.TNum == OldItem.TNum && n.State == 0 && n.RunTime < RunTime && n.Id != JobItem.Id);
            if (count > 0)
            {
                JR.Data = new { error = 99, info = "当前需要调整后续费任务时间", item = JobItem.Id };
                return(JR);
            }
            count = Entity.JobItem.Count(n => n.TNum == OldItem.TNum && n.State == 0 && n.RunTime < DateTime.Now && n.Id != JobItem.Id);
            if (count > 0)
            {
                JR.Data = new { error = 99, info = "当前需要调整后续费任务时间", item = JobItem.Id };
                return(JR);
            }
            //增加检测排序执行时间
            IList <JobItem> JobItemList = Entity.JobItem.Where(n => n.TNum == OldItem.TNum && n.State == 0).OrderBy(n => n.RunSort).ThenBy(n => n.Id).ToList();

            if (JobItemList.Count == 0)
            {
                JR.Data = new { error = 1, info = "没有需要重启的交易" };
                return(JR);
            }
            DateTime RT     = JobItemList.First().RunTime;
            bool     CanRun = true;

            foreach (var p in JobItemList.Skip(1))
            {
                if (RT > p.RunTime)
                {
                    JR.Data = new { error = 99, info = p.RunNum + "执行时间比前一笔交易慢" };
                    CanRun  = false;
                    break;
                }
                RT = p.RunTime;
            }
            if (!CanRun)
            {
                return(JR);
            }
            Entity.ExecuteStoreCommand("Exec SP_JobReSet '" + OldItem.TNum + "',2");
            JR.Data = new { error = 0, info = "处理成功" };
            return(JR);
        }
        /// <summary>
        /// 关闭任务
        /// </summary>
        /// <param name="tnum"></param>
        /// <returns></returns>
        public JsonResult CloseJob(string tnum)
        {
            JsonResult JR = new JsonResult()
            {
                ContentType = "text/html"
            };

            if (tnum.IsNullOrEmpty())
            {
                JR.Data = new { error = 1, info = "参数有误" };
                return(JR);
            }
            //重新统计成功与失败后金额
            Entity.ExecuteStoreCommand("Exec SP_JobReSet '" + tnum + "',1");

            JobOrders JobOrders = Entity.JobOrders.FirstOrDefault(n => n.TNum == tnum);

            if (JobOrders == null)
            {
                JR.Data = new { error = 1, info = "订单不存在" };
                return(JR);
            }
            if (JobOrders.State != 5)
            {
                JR.Data = new { error = 1, info = "当前订单状态不能结清操作" };
                return(JR);
            }
            if (JobOrders.Amount < 1)
            {
                JR.Data = new { error = 1, info = "本订单余额小于0无需再次清算" };
                return(JR);
            }
            int count = Entity.JobItem.Count(n => n.TNum == tnum && n.State != 3 && n.State != 4 && n.State != 0);

            if (count > 0)
            {
                JR.Data = new { error = 1, info = "本订单有" + count + "笔交易未达到最终状态,暂不可操作。" };
                return(JR);
            }
            DateTime Now     = DateTime.Now;
            DateTime RunTime = Now;

            if (RunTime.Hour < 12)
            {
                RunTime.AddHours(12 - RunTime.Hour);
            }
            //生成多一单还款计划就OK了
            JobItem JobItem = new JobItem();

            JobItem.UId      = JobOrders.UId;
            JobItem.TNum     = JobOrders.TNum;
            JobItem.RunMoney = JobOrders.Amount;


            JobItem.RunTime  = RunTime;
            JobItem.Poundage = 0;
            JobItem.RunGet   = JobItem.RunMoney * JobOrders.CashRate;
            if (JobItem.RunGet < JobOrders.CashMin)
            {
                JobItem.RunGet = JobOrders.CashMin;
            }
            if (JobItem.RunGet > JobOrders.CashMax)
            {
                JobItem.RunGet = JobOrders.CashMax;
            }
            JobItem.RunGet   = JobItem.RunGet.Ceiling();//通道成本
            JobItem.AgentGet = 0;
            //利润=用户手续费-代理分润-通道成本
            JobItem.HFGet      = JobItem.Poundage - JobItem.AgentGet - JobItem.RunGet;
            JobItem.State      = 1;
            JobItem.AddTime    = Now;
            JobItem.RunType    = 2;
            JobItem.RunState   = 0;
            JobItem.PayWay     = JobOrders.CashWay;
            JobItem.UserCardId = JobOrders.UserCardId;
            JobItem.Remark     = "任务失败退回剩余金额";
            JobItem.RunSort    = 9999;
            Entity.JobItem.AddObject(JobItem);
            Entity.SaveChanges();
            JR.Data = new { error = 0, info = "处理成功" };
            return(JR);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="JobOrders"></param>
        /// <param name="p"></param>
        /// <param name="IsShowSupAgent">是否显示下级</param>
        /// <param name="LowerLevel">下级代理商</param>
        /// <returns></returns>
        public ActionResult Index(JobOrders JobOrders, EFPagingInfo <JobOrders> p, DateTime?STime, DateTime?ETime, bool?IsShowSupAgent, int?LowerLevel, int IsFirst = 0)
        {
            #region 条件校验
            if (IsShowSupAgent == null)
            {
                IsShowSupAgent = false;
            }
            LowerLevel = LowerLevel == null ? 0 : LowerLevel;
            p.SqlWhere.Add(f => f.PayState != 0);
            p.SqlWhere.Add(f => f.AgentState != 0);
            if (!JobOrders.TNum.IsNullOrEmpty())
            {
                p.SqlWhere.Add(f => f.TNum == JobOrders.TNum);
            }
            if (!JobOrders.Code.IsNullOrEmpty())
            {
                IList <Users> UList = Entity.Users.Where(n => n.TrueName == JobOrders.Code || n.NeekName == JobOrders.Code || n.UserName == JobOrders.Code).ToList();
                List <int>    UIds  = new List <int>();
                foreach (var pp in UList)
                {
                    UIds.Add(pp.Id);
                }
                p.SqlWhere.Add(f => UIds.Contains(f.UId));
            }
            if (!JobOrders.AgentId.IsNullOrEmpty())
            {
                p.SqlWhere.Add(f => f.AgentId == JobOrders.AgentId);
            }
            if (!JobOrders.AgentState.IsNullOrEmpty())
            {
                p.SqlWhere.Add(f => f.AgentState == JobOrders.AgentState);
            }
            if (!STime.IsNullOrEmpty())
            {
                p.SqlWhere.Add(f => f.PayTime > STime);
            }
            else
            {
                STime = DateTime.Now.AddMonths(-1);
            }
            if (!ETime.IsNullOrEmpty())
            {
                p.SqlWhere.Add(f => f.PayTime < ETime);
            }
            else
            {
                ETime = DateTime.Now;
            }
            TimeSpan TS   = ETime.Value.Subtract(STime.Value);
            int      Days = TS.Days;
            if (Days > 31)
            {
                ViewBag.ErrorMsg = "统计时间间隔不能超过31天!";
                return(View("Error"));
            }
            IList <SysAgent> AgentsList = null;
            if ((bool)IsShowSupAgent)
            {
                IList <int> UID = new List <int>();
                if (LowerLevel != 0)
                {
                    SysAgent LowerLevelAgent = Entity.SysAgent.Where(s => s.Id == LowerLevel).FirstOrNew();
                    AgentsList = LowerLevelAgent.GetSupAgent(Entity, true);
                }
                else
                {
                    AgentsList = BasicAgent.GetSupAgent(Entity, true);//获取所有下级代理商信息
                }
                UID = AgentsList.Select(o => o.Id).ToList();
                p.SqlWhere.Add(f => UID.Contains(f.AgentId));
            }
            else
            {
                p.SqlWhere.Add(f => f.AgentId == BasicAgent.Id);//读取全部分支机构
            }
            #endregion
            p.OrderByList.Add("Id", "DESC");
            IPageOfItems <JobOrders> JobOrdersList = null;
            if (IsFirst == 0)
            {
                JobOrdersList = new PageOfItems <JobOrders>(new List <JobOrders>(), 0, 10, 0, new Hashtable());
            }
            else
            {
                JobOrdersList = Entity.Selects <JobOrders>(p);
            }

            ViewBag.JobOrdersList = JobOrdersList;
            ViewBag.JobOrders     = JobOrders;
            //统计查询
            if (JobOrdersList.TotalCount > 0)
            {
                var iquery = Entity.JobOrders.AsQueryable();
                foreach (var item in p.SqlWhere)
                {
                    iquery = iquery.Where(item);
                }
                //总金额
                decimal SumAmoney = iquery.Sum(o => o.TotalMoney);
                ViewBag.SumAmoney = SumAmoney;
                //我的总佣金
                decimal?SumMyProfit = Entity.OrderProfitLog.Where(o => o.Agent == BasicAgent.Id && o.OrderType == 31).Join(iquery, op => op.TNum, o => o.TNum, (op, o) => op.Profit).Sum(o => (decimal?)o);
                ViewBag.SumMyProfit = SumMyProfit;
            }

            //商户查询
            IList <JobOrders> List = JobOrdersList.GroupBy(n => n.UId).Select(n => n.First()).ToList();
            List <int>        UId  = new List <int>();
            foreach (var pp in List)
            {
                UId.Add(pp.UId);
            }
            Dictionary <string, decimal> DicOrderProfitLog = new Dictionary <string, decimal>();
            IList <Users> UsersList = Entity.Users.Where(n => UId.Contains(n.Id)).ToList();
            foreach (var item in JobOrdersList)
            {
                DicOrderProfitLog.Add(item.TNum, Entity.OrderProfitLog.Where(o => o.TNum == item.TNum && o.Agent == BasicAgent.Id).Select(o => o.Profit).FirstOrDefault());
            }
            ViewBag.DicOrderProfitLog = DicOrderProfitLog;
            ViewBag.UsersList         = UsersList;
            ViewBag.SysAdminList      = Entity.SysAdmin.Where(n => n.State == 1 && n.AgentId == AdminUser.AgentId).ToList();
            ViewBag.IsShowSupAgent    = IsShowSupAgent;
            ViewBag.BasicAgent        = BasicAgent;
            SysSet SysSet = Entity.SysSet.FirstOrNew();
            ViewBag.SysSet     = SysSet;
            ViewBag.LowerLevel = LowerLevel;
            ViewBag.Edit       = this.checkPower("Edit");
            ViewBag.STime      = STime;
            ViewBag.ETime      = ETime;
            return(View());
        }
        /// <summary>
        /// 导出
        /// </summary>
        /// <returns></returns>
        public ActionResult ExcelExport(JobOrders JobOrders, EFPagingInfo <JobOrders> p, DateTime?STime, DateTime?ETime, int IsFirst = 0)
        {
            IPageOfItems <JobOrders> JobOrdersList = null;

            if (IsFirst == 0)
            {
                JobOrdersList = new PageOfItems <JobOrders>(new List <JobOrders>(), 0, 10, 0, new Hashtable());
            }
            else
            {
                if (STime.IsNullOrEmpty())
                {
                    STime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                }
                if (ETime.IsNullOrEmpty())
                {
                    ETime = DateTime.Now;
                }
                TimeSpan TS   = Convert.ToDateTime(ETime) - Convert.ToDateTime(STime);
                int      Days = TS.Days;
                if (Days > 10)
                {
                    ViewBag.ErrorMsg = "导出时间间隔不能超过10天!";
                    return(View("Error"));
                }
                p          = this.Condition(JobOrders, p, STime, ETime);
                p.PageSize = 9999999;
                p.SqlWhere.Add(f => f.PayState == 1);
                p.OrderByList.Add("PayState", "ASC");
                JobOrdersList = Entity.Selects <JobOrders>(p);
            }

            List <string> TNumList = JobOrdersList.Select(o => o.TNum).Distinct().ToList();
            //IList<JobItem> JobItemList = Entity.JobItem.Where(n => TNumList.Contains(n.TNum)).OrderBy(n=>n.RunTime).ToList();

            DataTable table = new DataTable();
            DataRow   row   = null;

            // 创建 datatable
            table.Columns.Add(new DataColumn("订单号", typeof(string)));
            table.Columns.Add(new DataColumn("订单创建时间", typeof(string)));
            table.Columns.Add(new DataColumn("订单支付时间", typeof(string)));
            table.Columns.Add(new DataColumn("订单状态", typeof(string)));
            table.Columns.Add(new DataColumn("交易号", typeof(string)));
            table.Columns.Add(new DataColumn("金额", typeof(string)));
            table.Columns.Add(new DataColumn("执行时间", typeof(string)));
            table.Columns.Add(new DataColumn("手续费", typeof(string)));
            table.Columns.Add(new DataColumn("利润", typeof(string)));
            table.Columns.Add(new DataColumn("成本", typeof(string)));
            table.Columns.Add(new DataColumn("分润", typeof(string)));
            table.Columns.Add(new DataColumn("状态", typeof(string)));
            table.Columns.Add(new DataColumn("类型", typeof(string)));
            string state = "";

            //订单按照支付时间排序
            foreach (var temp in JobOrdersList)
            {
                IList <JobItem> JobItemList = Entity.JobItem.Where(n => n.TNum == temp.TNum).OrderBy(n => n.RunTime).ToList();
                if (JobOrders.PayState == 3)
                {
                    DateTime ETime_temp = new DateTime(ETime.Value.Year, ETime.Value.Month, ETime.Value.Day, 23, 59, 59, 999);
                    JobItemList = JobItemList.Where(o => o.RunTime >= STime && o.RunTime <= ETime_temp).ToList();
                }
                // 填充数据
                #region 明细
                foreach (var item in JobItemList)
                {
                    row     = table.NewRow();
                    row[0]  = item.TNum;
                    row[1]  = temp.AddTime.ToString("yyyy-MM-dd HH:mm");
                    row[2]  = temp.PayTime.Value.ToString("yyyy-MM-dd HH:mm");
                    row[3]  = temp.GetState();
                    row[4]  = item.RunNum;
                    row[5]  = item.RunMoney.ToString("F2");
                    row[6]  = item.RunTime.ToString("yyyy-MM-dd HH:mm");
                    row[7]  = item.Poundage.ToString("F2");
                    row[8]  = item.HFGet.ToString("F2");
                    row[9]  = item.RunGet.ToString("F2");
                    row[10] = item.AgentGet.ToString("F2");
                    switch (item.State)
                    {
                    case 0:
                        state = "取消";
                        break;

                    case 1:
                        state = "待执行";
                        break;

                    case 2:
                        state = "执行中";
                        break;

                    case 3:
                        state = "执行完成";
                        break;

                    case 4:
                        state = "执行失败";
                        break;
                    }
                    row[11] = state;
                    row[12] = item.RunType == 1 ? "消费" : "还款";
                    table.Rows.Add(row);
                }
                #endregion
            }
            string Time = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(10, 99);
            return(this.ExportExcelBase(table, "任务订单明细-" + Time));
        }
Example #20
0
        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("[JobOrders]:", "【Data】" + Data, Ex);
                DataObj.OutError("1000");
                return;
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            JobOrders JobOrders = new JobOrders();

            JobOrders = JsonToObject.ConvertJsonToModel(JobOrders, json);

            #region 获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == JobOrders.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            #endregion

            EFPagingInfo <JobOrders> p = new EFPagingInfo <JobOrders>();
            if (!JobOrders.Pg.IsNullOrEmpty())
            {
                p.PageIndex = JobOrders.Pg;
            }
            if (!JobOrders.Pgs.IsNullOrEmpty())
            {
                p.PageSize = JobOrders.Pgs;
            }
            p.SqlWhere.Add(f => f.UId == baseUsers.Id);

            //这里JobOrders.State=1进行中 JobOrders.State=2已完成
            if (JobOrders.State == 1)
            {
                p.SqlWhere.Add(f => f.State == 2 || f.State == 3);
            }
            else if (JobOrders.State == 2)
            {
                p.SqlWhere.Add(f => f.State == 4 || f.State == 5);
            }

            p.OrderByList.Add("Id", "DESC");
            IPageOfItems <JobOrders> List = Entity.Selects <JobOrders>(p);
            var             tnums         = List.Select(o => o.TNum).ToList();
            var             UserCardIds   = List.Select(o => o.UserCardId).ToList();
            List <JobItem>  JobItemList   = Entity.JobItem.Where(n => tnums.Contains(n.TNum)).ToList();
            List <UserCard> UserCardList  = Entity.UserCard.Where(n => UserCardIds.Contains(n.Id)).ToList();
            foreach (var item in List)
            {
                item.Cols = item.Cols + ",Items,UsersCard";

                var itemList         = JobItemList.Where(o => o.TNum == item.TNum).ToList();
                var JobItemModelList = itemList.GroupBy(o => o.RunTime.Date, (x, o) => new JobItemModel
                {
                    date = x,
                    item = o.OrderBy(k => k.RunType).ToList().EntityToJson(),
                }).OrderBy(o => o.date).ToList();
                item.Items = JobItemModelList.EntityToJson();

                var     UserCard    = UserCardList.FirstOrNew(o => o.Id == item.UserCardId);
                string  UserCardStr = UserCard.OutJson();
                JObject JS          = new JObject();
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(UserCardStr);
                }
                catch (Exception Ex)
                {
                    Log.Write("[JobOrders]:", "【JsStr】" + UserCardStr, Ex);
                }
                item.UsersCard = JS;
            }
            IList <JobOrders> iList = List.ToList();
            StringBuilder     sb    = new StringBuilder("");
            sb.Append("{");
            sb.Append(List.PageToString());
            sb.Append(",");
            sb.Append(iList.EntityToString());
            sb.Append("}");
            string data = sb.ToString();
            data         = data.Replace("\"[{", "[{").Replace("}]\"", "}]").Replace("\\", "").Replace("]\"}", "]}");
            DataObj.Data = data;
            DataObj.Code = "0000";
            DataObj.OutString();
        }
        private EFPagingInfo <JobOrders> Condition(JobOrders JobOrders, EFPagingInfo <JobOrders> p, DateTime?STime, DateTime?ETime)
        {
            #region 筛选条件
            if (!JobOrders.PayWay.IsNullOrEmpty())
            {
                p.SqlWhere.Add(o => o.PayWay == JobOrders.PayWay);
            }

            if (!JobOrders.TNum.IsNullOrEmpty())
            {
                if (JobOrders.UId == 1)
                {
                    p.SqlWhere.Add(f => f.TNum == JobOrders.TNum);
                }
                else if (JobOrders.UId == 2)
                {
                    IList <Users> UList = Entity.Users.Where(n => n.TrueName.Contains(JobOrders.TNum) || n.NeekName.Contains(JobOrders.TNum) || n.UserName == JobOrders.TNum).ToList();
                    List <int>    UIds  = new List <int>();
                    foreach (var pp in UList)
                    {
                        UIds.Add(pp.Id);
                    }
                    p.SqlWhere.Add(f => UIds.Contains(f.UId));
                }
                else if (JobOrders.UId == 3)
                {
                    JobItem JobItem = Entity.JobItem.FirstOrNew(o => o.RunNum == JobOrders.TNum);
                    p.SqlWhere.Add(f => f.TNum == JobItem.TNum);
                }
            }
            if (!STime.IsNullOrEmpty() && !ETime.IsNullOrEmpty())
            {
                DateTime ETime_temp = new DateTime(ETime.Value.Year, ETime.Value.Month, ETime.Value.Day, 23, 59, 59, 999);
                if (JobOrders.PayState == 1)
                {
                    p.SqlWhere.Add(f => f.AddTime >= STime && f.AddTime <= ETime_temp);
                }
                else if (JobOrders.PayState == 2)
                {
                    p.SqlWhere.Add(f => f.PayTime >= STime && f.PayTime <= ETime_temp);
                }
                else if (JobOrders.PayState == 3)
                {
                    IList <JobItem> joblist = Entity.JobItem.Where(o => o.RunTime >= STime && o.RunTime <= ETime_temp).ToList();
                    List <string>   tnums   = joblist.Select(o => o.TNum).Distinct().ToList();
                    p.SqlWhere.Add(f => tnums.Contains(f.TNum));
                }
            }
            if (JobOrders.State != 99)
            {
                p.SqlWhere.Add(f => f.State == JobOrders.State);
            }
            if (JobOrders.AgentState != 99)
            {
                p.SqlWhere.Add(f => f.AgentState == JobOrders.AgentState);
            }
            #endregion
            p.OrderByList.Add("Id", "DESC");

            return(p);
        }
        /// <summary>
        /// 分润
        /// </summary>
        /// <param name="O"></param>
        /// <param name="Entity"></param>
        /// <returns></returns>
        public static JobOrders PayAgent(this JobOrders JobOrders, LokFuEntity Entity)
        {
            SysSet SysSet = Entity.SysSet.FirstOrNew();

            if (JobOrders.AgentId.IsNullOrEmpty())
            {//代理商没有情况下
                return(JobOrders);
            }
            //if (JobOrders.AgentGet.IsNullOrEmpty())
            //{//没有佣金
            //    return JobOrders;
            //}
            Users OrderUser = Entity.Users.FirstOrDefault(n => n.Id == JobOrders.UId);//读取订单用户

            #region 结算
            if (JobOrders.AgentState != 0)
            {//已结算,不能重复结算
                return(JobOrders);
            }
            JobOrders.AgentState = 1;
            Entity.SaveChanges();
            //获取各级代理商
            SysAgent SysAgent = new SysAgent();
            SysAgent.Id = JobOrders.AgentId;
            IList <SysAgent> SysAgentList = SysAgent.GetAgentsById(Entity);
            decimal          AIdPayGet    = 0; //总佣金
            decimal          AgengtGet    = 0; //分润
            decimal          Amount       = JobOrders.TotalMoney - JobOrders.Poundage;
            int tier = 1;
            foreach (var p in SysAgentList)
            {
                if (p.State == 1)
                {
                    decimal PayGet = SysAgent.GetJobSplit(p.Tier, Entity);
                    AIdPayGet = Amount * PayGet;//当前级总佣金,需获取是否有下级拆分他的佣金
                    AIdPayGet = AIdPayGet.Floor();

                    decimal AIdPayGetNext = 0;//定义下一级佣金
                    if (tier < SysAgentList.Count)
                    {
                        //不是最后一级,需计算下级拆分金额
                        SysAgent SysAgentNext = SysAgentList.Skip(tier).Take(1).FirstOrDefault();
                        if (SysAgentNext != null)
                        {
                            if (SysAgentNext.State == 1)
                            {//下级状态有效时才计算,如关闭了则不正计算下级
                                decimal PayGetNext = SysAgent.GetJobSplit(SysAgentNext.Tier, Entity);
                                AIdPayGetNext = Amount * PayGetNext;
                                AIdPayGetNext = AIdPayGetNext.Floor();
                            }
                        }
                    }
                    decimal AIdPayGetMy = AIdPayGet - AIdPayGetNext; //当前级所能得到真实佣金

                    decimal UsersGetAll = 0;                         //定义所有用户佣金
                    //最后一级代理商 处理用户分润
                    #region 最后一级代理商 处理用户分润
                    if (tier == SysAgentList.Count)
                    {
                        int MaxLevel = SysSet.GlobaPromoteMaxLevel;
                        //有用户分润,开始执行用户分润
                        Users Users = new Users();
                        Users.Id = JobOrders.UId;
                        //获取用户各级关系,最大级不超过用户配置级数。返回数据包含当前用户,当前用户级数标识Tier为0
                        IList <Users> UsersList = Users.GetUsersById(Entity, MaxLevel);
                        int           UsersTier = 1;
                        foreach (var U in UsersList.Where(n => n.Tier > 0 && n.State == 1))
                        {
                            //UsersGetAll
                            //UserPromoteGet UserPromoteGet = UserPromoteGetList.FirstOrDefault(n => n.PromoteLevel == U.Tier);
                            //if (UserPromoteGet != null)
                            //{
                            decimal PromoteGet = Users.GetUsersJobSplit(Entity, U.Tier);
                            decimal UsersGet   = Amount * PromoteGet;
                            UsersGet = UsersGet.Floor();
                            if (UsersTier == 1)
                            {
                                UsersGetAll = UsersGet;
                            }
                            //UsersGetSum += UsersGet;

                            if (UsersTier < UsersList.Count)
                            {
                                //不是最后一级,需计算下级拆分金额
                                byte  nexttier  = (byte)(U.Tier + 1);
                                Users UsersNext = UsersList.FirstOrDefault(o => o.Tier == nexttier);
                                if (UsersNext != null)
                                {
                                    if (UsersNext.State == 1)
                                    {//下级状态有效时才计算,如关闭了则不正计算下级
                                        decimal PayGetNext     = Users.GetUsersJobSplit(Entity, UsersNext.Tier);
                                        decimal UserPayGetNext = Amount * PayGetNext;
                                        UserPayGetNext = UserPayGetNext.Floor();
                                        //减掉下级用户的金额
                                        UsersGet = UsersGet - UserPayGetNext;
                                    }
                                }
                            }
                            if (UsersGet > 0)
                            {
                                //帐户变动记录
                                string Remark = string.Format("{0}[{1}]", "卡管家分润", JobOrders.TNum);
                                string SP_Ret = Entity.SP_UsersMoney(U.Id, JobOrders.TNum, UsersGet, 8, Remark, 0);
                                if (SP_Ret != "3")
                                {
                                    Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", U.Id, JobOrders.TNum, 8, UsersGet, SP_Ret), "SP_UsersMoney");
                                }
                                //记录清分记录
                                OrderProfitLog OPL = new OrderProfitLog();
                                OPL.AddTime   = DateTime.Now;
                                OPL.UId       = U.Id;
                                OPL.Agent     = 0;
                                OPL.TNum      = JobOrders.TNum;
                                OPL.LogType   = 1;
                                OPL.Tier      = U.Tier;
                                OPL.Profit    = UsersGet;
                                OPL.Amoney    = Amount;
                                OPL.OrderType = 31;
                                OPL.UserName  = OrderUser.UserName;
                                Entity.OrderProfitLog.AddObject(OPL);
                                //=====增加统计记录=====
                                //ShareTotal ShareTotal = Entity.ShareTotal.FirstOrDefault(n => n.UId == U.Id && n.Tier == U.Tier);
                                //if (ShareTotal == null)
                                //{
                                //    ShareTotal = new ShareTotal();
                                //    ShareTotal.UId = U.Id;
                                //    ShareTotal.AddTime = DateTime.Now;
                                //    ShareTotal.ShareNum = 0;
                                //    ShareTotal.Amount = JobOrders.Amount;
                                //    ShareTotal.Profit = UsersGet;
                                //    ShareTotal.Tier = U.Tier;
                                //    Entity.ShareTotal.AddObject(ShareTotal);
                                //}
                                //else
                                //{
                                //    ShareTotal.Amount += JobOrders.Amount;
                                //    ShareTotal.Profit += UsersGet;
                                //}
                                AgengtGet = AgengtGet + UsersGet;
                            }
                            UsersTier++;
                            // }
                        }
                    }
                    #endregion
                    //20160704 Lin 增加统计用户拆分多少,最后一级代理金额减掉这部分金额即可。
                    //解决用户分剩下钱规系统逻辑问题
                    AIdPayGetMy = AIdPayGetMy - UsersGetAll;

                    #region 最后一级代理商 处理同级分润
                    if (tier == SysAgentList.Count)
                    {
                        if (!p.SameAgent.IsNullOrEmpty() && AIdPayGet > 0)
                        {
                            SysMoneySet SysMoneySet = Entity.SysMoneySet.FirstOrNew();
                            decimal     SameMoney   = AIdPayGet * SysMoneySet.SameAgent;
                            SameMoney = SameMoney.Floor();
                            SysAgent SameSysAgent = Entity.SysAgent.FirstOrNew(o => o.Id == p.SameAgent);
                            if (SameSysAgent.State == 1 && !SameSysAgent.MyUId.IsNullOrEmpty())
                            {
                                //帐户变动记录
                                string Remark = string.Format("{0}[{1}]", "卡管家同级分润", JobOrders.TNum);
                                string SP_Ret = Entity.SP_UsersMoney(SameSysAgent.MyUId, JobOrders.TNum, SameMoney, 8, Remark, 0);
                                if (SP_Ret != "3")
                                {
                                    Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", SameSysAgent.MyUId, JobOrders.TNum, 8, SameMoney, SP_Ret), "SP_UsersMoney");
                                }
                                //记录清分记录
                                OrderProfitLog OPL = new OrderProfitLog();
                                OPL.AddTime   = DateTime.Now;
                                OPL.UId       = SameSysAgent.MyUId;
                                OPL.Agent     = SameSysAgent.Id;
                                OPL.TNum      = JobOrders.TNum;
                                OPL.LogType   = 3;
                                OPL.Tier      = p.Tier;
                                OPL.Profit    = SameMoney;
                                OPL.Amoney    = Amount;
                                OPL.OrderType = 31;
                                OPL.UserName  = OrderUser.UserName;
                                Entity.OrderProfitLog.AddObject(OPL);
                                JobOrders.SameGet = SameMoney;
                            }
                        }
                    }
                    #endregion

                    if (!p.MyUId.IsNullOrEmpty() && AIdPayGetMy > 0)//某一级未绑定钱包,钱留给系统^-^
                    {
                        //获取钱包信息
                        //为了减少系统开销,这里不读取用户信息——By Lin
                        //Users Users = Entity.Users.FirstOrDefault(n => n.Id == p.MyUId);
                        if (p.MyUId > 0)
                        {
                            //帐户变动记录
                            string Remark = string.Format("{0}[{1}]", "卡管家分润", JobOrders.TNum);
                            string SP_Ret = Entity.SP_UsersMoney(p.MyUId, JobOrders.TNum, AIdPayGetMy, 8, Remark, 0);
                            if (SP_Ret != "3")
                            {
                                Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", p.MyUId, JobOrders.TNum, 8, AIdPayGetMy, SP_Ret), "SP_UsersMoney");
                            }
                            //记录清分记录
                            OrderProfitLog OPL = new OrderProfitLog();
                            OPL.AddTime   = DateTime.Now;
                            OPL.UId       = p.MyUId;
                            OPL.Agent     = p.Id;
                            OPL.TNum      = JobOrders.TNum;
                            OPL.LogType   = 2;
                            OPL.Tier      = p.Tier;
                            OPL.Profit    = AIdPayGetMy;
                            OPL.Amoney    = Amount;
                            OPL.OrderType = 31;
                            OPL.UserName  = OrderUser.UserName;
                            Entity.OrderProfitLog.AddObject(OPL);
                            AgengtGet = AgengtGet + AIdPayGetMy;
                        }
                    }
                }
                tier++;
            }

            Entity.SaveChanges();
            //统计所有分润
            //decimal Profit = 0;
            //if (Entity.OrderProfitLog.Count(n => n.TNum == JobOrders.TNum) > 0)
            //{
            //    Profit = Entity.OrderProfitLog.Where(n => n.TNum == JobOrders.TNum).Sum(n => n.Profit);//是否会为空的情况
            //}
            JobOrders.AgentGet = AgengtGet;//记录总佣金支出,以便总系统计算利润
            decimal RunGet = Entity.JobItem.Where(o => o.TNum == JobOrders.TNum && o.RunType == 1).Sum(o => o.RunGet);
            JobOrders.HFGet     = JobOrders.Poundage - AgengtGet - RunGet - JobOrders.CashGet;
            JobOrders.AgentTime = DateTime.Now;
            Entity.SaveChanges();
            #endregion
            return(JobOrders);
        }
        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("[JobOrders]:", "【Data】" + Data, Ex);
                DataObj.OutError("1000");
                return;
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            JobOrders JobOrders = new JobOrders();

            JobOrders = JsonToObject.ConvertJsonToModel(JobOrders, json);

            if (JobOrders.TNum.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }

            #region 获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == JobOrders.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            #endregion
            Entity.ExecuteStoreCommand("Exec SP_JobReSet '" + JobOrders.TNum + "',1");
            JobOrders baseJobOrders = Entity.JobOrders.FirstOrNew(o => o.TNum == JobOrders.TNum && o.UId == baseUsers.Id);
            if (baseJobOrders == null)
            {
                DataObj.OutError("1000");
                return;
            }
            if (baseJobOrders.State != 3)
            {
                DataObj.Msg = "当前订单状态不能取消";
                DataObj.OutError("1000");
                return;
            }
            bool IsItemRun = Entity.JobItem.Any(o => o.TNum == baseJobOrders.TNum && o.State == 2);
            if (IsItemRun)
            {
                DataObj.Msg = "子订单有正在执行中的状态,不能执行该操作";
                DataObj.OutError("1000");
                return;
            }
            baseJobOrders.State  = 5;
            baseJobOrders.Remark = "用户自主取消订单,时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            Entity.SaveChanges();
            //取消所有待执行订单
            Entity.ExecuteStoreCommand("Update JobItem Set State=0 Where TNum='" + baseJobOrders.TNum + "' and State=1");

            //重新统计成功与失败后金额
            if (baseJobOrders.Amount >= 1)
            {
                DataObj = this.CloseJob(JobOrders.TNum);
            }
            DataObj.Data = "取消订单成功";
            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("[UserCardDelete]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            UserCard UserCard = new UserCard();

            UserCard = JsonToObject.ConvertJsonToModel(UserCard, json);
            //获取用户信息
            string Token = UserCard.Token;

            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == 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;
            }

            UserCard = Entity.UserCard.FirstOrDefault(n => n.Id == UserCard.Id && n.UId == baseUsers.Id && n.State == 1);
            if (UserCard == null)//不存在
            {
                DataObj.OutError("1001");
                return;
            }
            if (UserCard.Type == 1)
            {
                //借记卡需要判断是否用于一户一码
                FastUser FastUser = Entity.FastUser.FirstOrDefault(o => o.UId == baseUsers.Id);
                if (FastUser != null)
                {
                    if (!FastUser.Card.IsNullOrEmpty())
                    {
                        if (FastUser.Card == UserCard.Card)
                        {
                            DataObj.OutError("1105");
                            return;
                        }
                    }
                }
            }
            if (UserCard.Type == 2)
            {
                //借记卡需要判断是否用还款任务
                //任务正在使用的银行卡不能删除
                JobOrders JobOrders = Entity.JobOrders.Where(o => o.UId == baseUsers.Id && (o.State == 2 || o.State == 3) && o.UserCardId == UserCard.Id).FirstOrDefault();
                if (JobOrders != null)
                {
                    DataObj.Msg = "您的还款任务正在使用本银行卡,暂不能删除";
                    DataObj.OutError("7004");
                    return;
                }
                //24小时内有还款失败
                DateTime T24     = DateTime.Now.AddHours(-24);
                JobItem  JobItem = Entity.JobItem.Where(o => o.UId == baseUsers.Id && o.State == 4 && o.UserCardId == UserCard.Id && o.RunTime > T24).FirstOrDefault();
                if (JobItem != null)
                {
                    DataObj.Msg = "最近1天您本银行卡有执行失败的还款任务,请隔1天再解除绑卡。";
                    DataObj.OutError("7004");
                    return;
                }
                //这里需要增加处理,是否开通授权,是的话需要把授权设置为0
                //这里无法取得是哪个通道,系统每张卡只能绑定一个通道,所以只要把正常的关掉就可以了-Lin
                Entity.ExecuteStoreCommand("Update UserCardOpen Set State=0 Where UId=" + baseUsers.Id + " and CardNum = '" + UserCard.Card + "' And State=1");
            }
            UserCard.State         = 0;
            UserCard.UnBindingTime = DateTime.Now;
            Entity.SaveChanges();

            //Entity.UserCard.DeleteObject(UserCard);
            //string SQL = "Update UserCard Set IsDel=1 Where Id=" + UserCard.Id;
            //Entity.ExecuteStoreCommand(SQL);
            //Entity.SaveChanges();

            //if (HasCache)
            //{
            //    string CashName = "UserCard_" + UserCard.Type + "_" + Token;
            //    CacheBuilder.EntityCache.Remove(CashName, null);
            //}

            DataObj.Data = UserCard.ToJson();
            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("[JobCreate]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);
            if (UserTrack.X.IsNullOrEmpty() || UserTrack.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JobSet  JobSet  = Entity.JobSet.FirstOrNew(); //获取配置
            decimal Floated = JobSet.Floated;             //浮动因子

            #region 处理验证参数
            if (json["token"] == null || json["money"] == null || json["card"] == null)
            {
                DataObj.OutError("1004");
                return;
            }
            string Token = json["token"].ToString();
            string money = json["money"].ToString();
            string card  = json["card"].ToString();
            if (Token.IsNullOrEmpty() || money.IsNullOrEmpty() || card.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            string mymoney = "";
            string number  = "";
            JArray dates   = null;
            if (json["mymoney"] != null)
            {
                mymoney = json["mymoney"].ToString();
                if (mymoney.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else if (json["number"] != null && json["dates"] != null)
            {
                number = json["number"].ToString();
                dates  = (JArray)json["dates"];
                if (number.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else
            {
                DataObj.OutError("1004");
                return;
            }
            int Number = 0, Money = 0, MyMoney = 0, Card = 0;
            try {
                Money = Int32.Parse(money);
                Card  = Int32.Parse(card);
                if (!number.IsNullOrEmpty())
                {
                    Number = Int32.Parse(number);
                }
                if (!mymoney.IsNullOrEmpty())
                {
                    MyMoney = Int32.Parse(mymoney);
                }
            }catch (Exception) {
                DataObj.OutError("1000");
                return;
            }
            if (Money <= 0)
            {
                DataObj.Msg = "帐单金额需大于零";
                DataObj.OutError("1000");
                return;
            }
            if (MyMoney > Money)
            {
                DataObj.Msg = "还款金额不能大于帐单金额";
                DataObj.OutError("1000");
                return;
            }
            int        Days  = 0;
            DateTime[] Dates = null;
            if (dates != null)
            {
                Days  = dates.Count;
                Dates = new DateTime[Days];
                int  Count   = 0;
                bool NoFaile = true;
                foreach (var p in dates)
                {
                    string date = p["date"].ToString();
                    try
                    {
                        DateTime Date = DateTime.Parse(date);
                        Dates[Count] = Date;
                    }
                    catch (Exception)
                    {
                        NoFaile = false;
                    }
                    Count++;
                }
                if (!NoFaile)
                {
                    DataObj.OutError("1000");
                    return;
                }
            }

            DateTime Now   = DateTime.Now;
            DateTime Today = DateTime.Parse(Now.ToString("yyyy-MM-dd"));
            //这里启用智能计算
            if (MyMoney > 0)
            {
                //计算最少几天还款
                //如果按MyMoney付的话,控制不超的话,应该去掉手续费
                decimal maxMoney = (decimal)MyMoney * (1 - JobSet.Cost) - JobSet.Cash;
                Days = (int)Math.Ceiling((decimal)Money * (1 + Floated) / maxMoney);//计算还款需要几天
                if (Days > JobSet.MaxDay)
                {
                    Days = JobSet.MaxDay;//限制最大天数
                }
                //这里增加修正,如果笔数过多,则修正笔数
                while (Money < JobSet.MinMoney * Days && maxMoney * (Days - 1) > Money)
                {
                    Days = Days - 1;//减少一天还款
                }
                if (Days < 2)
                {
                    Days = 2;
                }
                Dates = new DateTime[Days];
                //这里不能直接用传进来的计划金额去计算,应该总金额-传进来金额再平均
                int everyDayMoney = (Money - MyMoney) / (Days - 1);
                int bei           = (int)Math.Ceiling(everyDayMoney / JobSet.DayMoney);//超过一定金额拆分笔数
                if (bei > JobSet.MaxPay)
                {
                    bei = JobSet.MaxPay;//每天刷笔数过大取最大
                }
                if (bei == 0)
                {
                    bei = 1;
                }
                Number   = (Days - 1) * bei + 1;//第一天只能刷一笔
                Dates[0] = Today;
                for (var i = 1; i < Days; i++)
                {
                    if (Now > Today.AddHours(23))//超过23点了
                    {
                        Dates[i] = Today.AddDays(i + 1);
                    }
                    else
                    {
                        Dates[i] = Today.AddDays(i);
                    }
                }
            }
            if (Number <= 0)
            {
                DataObj.OutError("1000");
                return;
            }
            if (Card <= 0)
            {
                DataObj.OutError("1000");
                return;
            }

            if (Days <= 0)
            {
                DataObj.OutError("1000");
                return;
            }
            if (Days > JobSet.MaxDay)
            {
                DataObj.Msg = "最大还款天数为" + JobSet.MaxDay + "天";
                DataObj.OutError("1000");
                return;
            }
            if (Days > Number)
            {
                DataObj.Msg = "刷卡笔数必需大于等于还款天数";
                DataObj.OutError("1000");
                return;
            }
            int MaxPayNum = (Days - 1) * JobSet.MaxPay + 1;
            if (Number > MaxPayNum)
            {
                DataObj.Msg = Days + "天最多刷卡笔数为" + MaxPayNum + "笔";
                DataObj.OutError("1000");
                return;
            }
            decimal EP = (decimal)Money / (decimal)Number;
            if (EP < JobSet.MinMoney)
            {
                if (MyMoney > 0)
                {
                    DataObj.Msg = "经测算每天还款金额不足" + JobSet.MinMoney.ToMoney() + "元。";
                }
                else
                {
                    DataObj.Msg = "账单金额不能低于" + (Number * JobSet.MinMoney).ToMoney() + "元";
                }
                DataObj.OutError("1000");
                return;
            }
            if (EP > JobSet.MaxMoney)
            {
                DataObj.Msg = "账单金额不能大于" + (Number * JobSet.MaxMoney).ToMoney() + "元";
                DataObj.OutError("1000");
                return;
            }

            decimal EM = Money / Days;
            if (EM < JobSet.MinMoney)
            {
                DataObj.Msg = "每天最小还款金额为" + (Days * JobSet.MinMoney).ToString("f2") + "元";
                DataObj.OutError("1000");
                return;
            }
            if (EM > JobSet.MaxMoney)
            {
                DataObj.Msg = "每天最大还款金额为" + JobSet.MaxMoney.ToMoney() + "元";
                DataObj.OutError("1000");
                return;
            }
            //数据排序,避免前端大小乱排上送数据造成错误
            Array.Sort(Dates);
            if (!Dates.GroupBy(o => o).All(o => o.Count() <= 1))
            {
                DataObj.Msg = "日期不能重复";
                DataObj.OutError("1000");
                return;
            }
            if (!Dates.All(o => o >= Today))
            {
                DataObj.Msg = "还款日期已过期";
                DataObj.OutError("1000");
                return;
            }

            DateTime FirstDate = Dates.First();
            DateTime LastDate  = Dates.Last();
            //if (FirstDate < Today) {
            //    DataObj.Msg = "还款日期已过期";
            //    DataObj.OutError("1000");
            //    return;
            //}
            TimeSpan TS  = FirstDate.Subtract(LastDate).Duration();
            TimeSpan TSs = new TimeSpan(JobSet.EqDays, 0, 0, 0);
            if (TS > TSs)
            {
                DataObj.Msg = "还款日期跨度过大";
                DataObj.OutError("1000");
                return;
            }
            #endregion

            byte AdvCost = JobSet.AdvCost; //预收刷卡手续费
            byte AdvCash = JobSet.AdvCash; //预收代付手续费
            int  MaxRand = JobSet.MaxRand; //最大失败次数
            //Money Number DateTime[] Dates

            #region 获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == 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.StopPayState == 2)//禁止支付
            {
                DataObj.OutError("6060");
                return;
            }
            #endregion

            UserCard UserCard = Entity.UserCard.FirstOrDefault(n => n.Id == Card && n.UId == baseUsers.Id && n.Type == 2 && n.State == 1);
            if (UserCard == null)
            {
                DataObj.OutError("1000");
                return;
            }
            UserCardOpen UserCardOpen = Entity.UserCardOpen.FirstOrDefault(n => n.State == 1 && n.CardNum == UserCard.Card && n.UId == baseUsers.Id);
            if (UserCardOpen == null)
            {
                DataObj.OutError("6032");
                return;
            }
            //if (UserCardOpen.PayWay == 1) {
            //    DataObj.Msg = "您的银行卡授权已过期,请删除后重新绑卡授权。";
            //    DataObj.OutError("6032");
            //    return;
            //}
            JobPayWay JobPayWay = Entity.JobPayWay.FirstOrDefault(n => n.State == 1 && n.GroupType == "Pay" && n.Id == UserCardOpen.PayWay);//从开卡记录中取通道
            if (JobPayWay == null)
            {
                DataObj.OutError("6031");
                return;
            }
            JobPayWay JobCashWay = Entity.JobPayWay.FirstOrDefault(n => n.State == 1 && n.GroupType == "Cash" && n.DllName == JobPayWay.DllName);//匹配出一条还款通道
            if (JobCashWay == null)
            {
                DataObj.OutError("6031");
                return;
            }
            bool IsRun = Entity.JobOrders.Where(o => (o.State == 2 || o.State == 3) && o.UId == baseUsers.Id && o.UserCardId == UserCard.Id).Select(o => o.UserCardId).FirstOrDefault() != 0 ? true : false;
            if (IsRun)
            {
                DataObj.OutError("7006");
                return;
            }
            decimal Cost = JobSet.Cost; //刷卡手续费
            decimal Cash = JobSet.Cash; //还款手续费
            //if (baseUsers.IsVIP == 1) {
            //    Cost = JobSet.VIPCost;
            //    Cash = JobSet.VIPCash;
            //}
            //开始任务
            RandItems      RandItems = Rand.Create(Dates, Money, Number, Floated);
            List <jobitem> JobList   = RandItems.JobList;
            //这里要加上验证
            //============================================================

            if (AdvCost == 0 || AdvCash == 0)
            {
                bool CheckOk = false;
                int  CTimes  = 0;
                while (!CheckOk && CTimes < MaxRand)
                {
                    CheckOk = true;
                    List <jobitem> JobListCash  = JobList.Where(n => n.JobType == 2).ToList();
                    jobitem        first        = JobListCash.FirstOrDefault();
                    List <jobitem> JobListCashT = JobListCash.Skip(1).ToList();
                    foreach (var p in JobListCashT)
                    {
                        //只需验证还款金额
                        decimal AddMoney = 0;
                        if (AdvCost == 0)
                        {
                            AddMoney += p.Money * Cost;
                            AddMoney  = AddMoney.Ceiling();
                        }
                        if (AdvCash == 0)
                        {
                            AddMoney += Cash;
                        }
                        if (first.Money < p.Money + AddMoney)
                        {
                            CheckOk = false;
                            break;
                        }
                        first = p;
                    }
                    //============================================================
                    if (MyMoney > 0)
                    {
                        jobitem firstpay = JobList.Where(n => n.JobType == 1).OrderByDescending(n => n.Money).First();
                        //这里检测第一笔加上手续费后大于输入金额则重新生成
                        decimal Poundage1, Poundage2;
                        if (AdvCost == 1)             //预收
                        {
                            Poundage1 = Money * Cost; //预收总金额*手续费
                        }
                        else
                        {
                            Poundage1 = firstpay.Money * Cost;//任务金额*手续费
                        }
                        Poundage1 = Poundage1.Ceiling();
                        if (AdvCash == 1)//预收
                        {
                            int AllPayNum = JobList.Count(n => n.JobType == 1);
                            Poundage2 = AllPayNum * Cash;//预收总笔数*手续费
                        }
                        else
                        {
                            Poundage2 = Cash;//第一天只有一笔交易和代付
                        }
                        decimal Poundage = Poundage1 + Poundage2;
                        if (firstpay.Money + Poundage > MyMoney)
                        {
                            CheckOk = false;
                        }
                    }
                    //============================================================
                    if (!CheckOk)
                    {
                        //失败了重新生成
                        RandItems = Rand.Create(Dates, Money, Number, Floated);
                        JobList   = RandItems.JobList;
                    }
                    CTimes++;
                }
                ;
                if (!CheckOk)
                {
                    DataObj.OutError("6033");
                    return;
                }
            }
            //============================================================
            //生成订单
            JobOrders JobOrders = new JobOrders();
            JobOrders.UId        = baseUsers.Id;
            JobOrders.Amount     = 0;
            JobOrders.State      = 0;//0取消 1待付款 2待执行 3执行中 4执行完成 5执行失败 6暂停(预留)
            JobOrders.AddTime    = DateTime.Now;
            JobOrders.PayState   = 0;
            JobOrders.PayedState = 0;
            JobOrders.PayWay     = JobPayWay.Id;
            JobOrders.CashWay    = JobCashWay.Id;

            JobOrders.AgentId    = baseUsers.Agent;
            JobOrders.AgentState = 0;
            JobOrders.AgentGet   = 0;//代理分润,等分润执行时写回

            JobOrders.PayRate  = JobPayWay.Cost;
            JobOrders.PayMin   = JobPayWay.MinCost;
            JobOrders.PayMax   = JobPayWay.MaxCost;
            JobOrders.CashRate = JobCashWay.Cost;
            JobOrders.CashMin  = JobCashWay.MinCost;
            JobOrders.CashMax  = JobCashWay.MaxCost;

            JobOrders.UPayRate  = Cost;
            JobOrders.UPayMin   = 0;
            JobOrders.UPayMax   = 999999999;
            JobOrders.UCashRate = 0;
            JobOrders.UCashMin  = Cash;
            JobOrders.UCashMax  = 999999999;

            JobOrders.TotalMoney   = 0;           //总订单金额
            JobOrders.Poundage     = 0;           //总手续费
            JobOrders.HFGet        = 0;           //总成本
            JobOrders.PayPoundage  = 0;           //交易手续费
            JobOrders.CashPoundage = 0;           //代付手续费
            JobOrders.PayGet       = 0;           //交易成本
            JobOrders.CashGet      = 0;           //代付成本
            JobOrders.UserCardId   = UserCard.Id; //计划对应的信用卡
            JobOrders.AdvCost      = JobSet.AdvCost;
            JobOrders.AdvCash      = JobSet.AdvCash;

            Entity.JobOrders.AddObject(JobOrders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, JobOrders);
            IList <JobItem> JobItemList = new List <JobItem>();
            //============================================================
            DateTime FirstRun = Today;
            //获取代理商分润
            //SysAgent SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            //IList<SysAgent> SysAgentList = SysAgent.GetAgentsById(Entity);
            //SysAgent TopAgent = SysAgentList.FirstOrNew();
            //decimal PaySplit = 0;//代理商费率
            //PaySplit = SysAgent.GetSplit(TopAgent.Tier, Entity);
            foreach (var p in JobList)
            {
                JobItem JobItem = new JobItem();
                JobItem.TNum       = JobOrders.TNum;
                JobItem.UId        = JobOrders.UId;
                JobItem.RunTime    = p.RunTime;
                JobItem.RunType    = p.JobType;
                JobItem.State      = 0;//状态:0取消 1待执行 2执行中 3执行完成 4执行失败
                JobItem.RunState   = 0;
                JobItem.RunSort    = 0;
                JobItem.AddTime    = DateTime.Now;
                JobItem.UserCardId = UserCard.Id;

                DateTime NowDate = DateTime.Parse(JobItem.RunTime.ToString("yyyy-MM-dd"));
                decimal  Poundage = 0, Poundage1 = 0, Poundage2 = 0;
                if (NowDate == Today)
                {
                    //第一笔
                    if (p.JobType == 1)
                    {
                        //消费
                        if (AdvCost == 1)             //预收
                        {
                            Poundage1 = Money * Cost; //预收总金额*手续费
                        }
                        else
                        {
                            Poundage1 = p.Money * Cost;//任务金额*手续费
                        }
                        Poundage1 = Poundage1.Ceiling();
                        //2017-11-06收到新需求,每笔刷卡加金额,代付不收费用
                        if (AdvCash == 1)//预收
                        {
                            int AllPayNum = JobList.Count(n => n.JobType == 1);
                            Poundage2 = AllPayNum * Cash;//预收总笔数*手续费
                        }
                        else
                        {
                            Poundage2 = Cash;//第一天只有一笔交易和代付
                        }
                        Poundage           = Poundage1 + Poundage2;
                        JobItem.RunMoney   = p.Money + Poundage;
                        JobItem.Poundage   = Poundage;
                        JobItem.PayWay     = JobPayWay.Id;
                        JobItem.UserCardId = 0;
                    }
                    if (p.JobType == 2)
                    {
                        //还款
                        JobItem.RunMoney = p.Money;
                        JobItem.Poundage = 0;
                        JobItem.PayWay   = JobCashWay.Id;
                    }
                }
                else
                {
                    if (p.JobType == 1)
                    {
                        //消费
                        if (AdvCost == 0)               //实收
                        {
                            Poundage1 = p.Money * Cost; //预收总金额
                            Poundage1 = Poundage1.Ceiling();
                        }
                        if (AdvCash == 0)//实收
                        {
                            //2017-11-06收到新需求,每笔刷卡加金额,代付不收费用
                            Poundage2 = Cash;
                            //每天只有一笔代付
                            //==================当天第一笔要加,其它不需要加
                            //if (FirstRun != NowDate) {
                            //Poundage2 = Cash;
                            //FirstRun = NowDate;
                            //}
                        }
                        Poundage         = Poundage1 + Poundage2;
                        JobItem.RunMoney = p.Money + Poundage;
                        JobItem.Poundage = Poundage;
                        JobItem.PayWay   = JobPayWay.Id;
                    }
                    if (p.JobType == 2)
                    {
                        //还款
                        JobItem.RunMoney = p.Money;
                        JobItem.Poundage = 0;
                        JobItem.PayWay   = JobCashWay.Id;
                    }
                }
                decimal AgentPoundage = JobItem.Poundage;
                if (JobItem.RunType == 1)
                {
                    JobItem.RunGet = p.Money * JobPayWay.Cost;
                    if (JobItem.RunGet < JobPayWay.MinCost)
                    {
                        JobItem.RunGet = JobPayWay.MinCost;
                    }
                    if (JobItem.RunGet > JobPayWay.MaxCost)
                    {
                        JobItem.RunGet = JobPayWay.MaxCost;
                    }
                    AgentPoundage = p.Money * JobPayWay.CostAgent;
                    if (AgentPoundage < JobPayWay.MinAgentCost)
                    {
                        AgentPoundage = JobPayWay.MinAgentCost;
                    }
                    if (AgentPoundage > JobPayWay.MaxAgentCost)
                    {
                        AgentPoundage = JobPayWay.MaxAgentCost;
                    }
                }
                if (JobItem.RunType == 2)
                {
                    JobItem.RunGet = p.Money * JobCashWay.Cost;
                    if (JobItem.RunGet < JobCashWay.MinCost)
                    {
                        JobItem.RunGet = JobCashWay.MinCost;
                    }
                    if (JobItem.RunGet > JobCashWay.MaxCost)
                    {
                        JobItem.RunGet = JobCashWay.MaxCost;
                    }
                    AgentPoundage = p.Money * JobCashWay.CostAgent;
                    if (AgentPoundage < JobCashWay.MinAgentCost)
                    {
                        AgentPoundage = JobCashWay.MinAgentCost;
                    }
                    if (AgentPoundage > JobCashWay.MaxAgentCost)
                    {
                        AgentPoundage = JobCashWay.MaxAgentCost;
                    }
                }
                JobItem.RunGet = JobItem.RunGet.Ceiling();//通道成本
                //AgentPoundage = AgentPoundage.Ceiling();//代理手续费

                //JobItem.AgentGet = Poundage1 - AgentPoundage;//代理分润
                JobItem.AgentGet = 0;
                JobItem.HFGet    = 0;
                //利润=用户手续费-代理分润-通道成本
                //JobItem.HFGet = JobItem.Poundage - JobItem.AgentGet - JobItem.RunGet;
                Entity.JobItem.AddObject(JobItem);
                JobItemList.Add(JobItem);
            }
            decimal TotalPoundage  = JobItemList.Sum(n => n.Poundage);
            decimal TotalHFGet     = JobItemList.Sum(n => n.HFGet);
            decimal TotalAgentGet  = JobItemList.Sum(n => n.AgentGet);
            decimal TotalPoundage1 = JobItemList.Where(n => n.RunType == 1).Sum(n => n.Poundage);
            decimal TotalPoundage2 = JobItemList.Where(n => n.RunType == 2).Sum(n => n.Poundage);
            decimal TotalRunGet1   = JobItemList.Where(n => n.RunType == 1).Sum(n => n.RunGet);
            decimal TotalRunGet2   = JobItemList.Where(n => n.RunType == 2).Sum(n => n.RunGet);

            JobOrders.TotalMoney   = Money + TotalPoundage; //总订单金额
            JobOrders.Poundage     = TotalPoundage;         //总手续费
            JobOrders.AgentGet     = TotalAgentGet;         //代理分润
            JobOrders.HFGet        = TotalHFGet;            //利润
            JobOrders.PayPoundage  = TotalPoundage1;        //交易手续费
            JobOrders.CashPoundage = TotalPoundage2;        //代付手续费
            JobOrders.PayGet       = TotalRunGet1;          //交易成本
            JobOrders.CashGet      = TotalRunGet2;          //代付成本
            JobOrders.State        = 1;                     //0取消 1待付款 2待执行 3执行中 4执行完成 5执行失败 6暂停(预留)
            JobOrders.SameGet      = 0;
            Entity.SaveChanges();
            JobOrders.Cols = JobOrders.Cols + ",Items,UsersCard,SetCost,SetCash,XFCount,AdvCost,AdvCash";
            JobItemList    = Entity.JobItem.Where(n => n.TNum == JobOrders.TNum).OrderBy(n => n.RunTime).ToList();
            //============================================================
            int RunSort = 1;
            foreach (var p in JobItemList)
            {
                if (RunSort == JobList.Count)
                {
                    //最后一笔特别标识
                    p.RunSort = 999;
                }
                else
                {
                    p.RunSort = RunSort;
                }
                RunSort++;
            }
            Entity.SaveChanges();
            //============================================================
            //这里加上修正有分问题
            IList <JobItem> JobItemPay = JobItemList.Where(n => n.RunType == 1).ToList();
            JobItem         FirstItem  = JobItemPay.First();
            JobItem         LastItem   = JobItemPay.Last();
            if (JobItemPay.Count > 1)
            {
                decimal RunAu   = 0;    //用于存放差额
                decimal Adv     = 0;    //用于存放每笔调整金额
                bool    CanSvae = true; //用于判断是否能修正
                foreach (var p in JobItemPay)
                {
                    if (p.Id == FirstItem.Id)
                    {
                        //第一笔
                        if (MyMoney > p.RunMoney)
                        {
                            RunAu      = MyMoney - p.RunMoney;
                            p.RunMoney = MyMoney;
                            Adv        = (RunAu / (JobItemPay.Count - 1)).Ceiling();//后台平均一笔要增减金额
                        }
                    }
                    else if (p.Id == LastItem.Id)
                    {
                        //最后一笔
                        p.RunMoney = p.RunMoney - RunAu;//修正差额
                        if (p.RunMoney < 0)
                        {
                            CanSvae = false;
                        }
                    }
                    else
                    {
                        decimal RunMoney  = p.RunMoney;            //任务金额
                        decimal Run10     = (RunMoney - Adv) * 10; //放大十倍
                        decimal Run10U    = Math.Ceiling(Run10);   //向上取整个
                        decimal RunMoneyU = Run10U / 10;           //缩小十倍
                        p.RunMoney = RunMoneyU;                    //重新赋值
                        RunAu     += (RunMoneyU - RunMoney);       //记录差额
                    }
                }
                if (CanSvae)
                {
                    Entity.SaveChanges();
                }
            }
            //============================================================
            UserTrack.UId        = baseUsers.Id;
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = "创建还款订单";
            UserTrack.GPSAddress = UserTrack.GPSAddress;
            UserTrack.GPSX       = UserTrack.X;
            UserTrack.GPSY       = UserTrack.Y;
            UserTrack.UserName   = JobOrders.TNum;
            UserTrack.SeavGPSLog(Entity);
            //=======================================
            //最后检测整个任务是否有单笔小于1元的
            if (JobItemList.Count(n => n.RunMoney < 1) > 0)
            {
                DataObj.OutError("6033");
                return;
            }
            //=======================================
            //这里之后不能执行SaveChanges,否则很严重
            foreach (var p in JobItemList)
            {
                p.State = 1;
            }
            var JobItemModelList = JobItemList.GroupBy(o => o.RunTime.Date, (x, o) => new JobItemModel
            {
                date = x,
                item = o.OrderBy(k => k.RunType).ThenBy(n => n.RunTime).ToList().EntityToJson(),
            }).OrderBy(o => o.date).ToList();
            JobOrders.Items   = JobItemModelList.EntityToJson();
            JobOrders.XFCount = JobItemList.Where(o => o.RunType == 1).Count();;
            JobOrders.SetCost = JobOrders.UPayRate;
            JobOrders.SetCash = JobOrders.UCashMin;

            string  UserCardStr = UserCard.OutJson();
            JObject JS          = new JObject();
            try
            {
                JS = (JObject)JsonConvert.DeserializeObject(UserCardStr);
            }
            catch (Exception Ex)
            {
                Log.Write("[JobCreate]:", "【JsStr】" + UserCardStr, Ex);
            }
            JobOrders.UsersCard = JS;

            string data = JobOrders.OutJson();
            data         = data.Replace("\"[{", "[{").Replace("}]\"", "}]").Replace("\\", "").Replace("]\"}", "]}");
            DataObj.Data = data;
            DataObj.Code = "0000";
            DataObj.OutString();
        }
Example #26
0
        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("[JobPay]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            JobOrders JobOrders = new JobOrders();

            JobOrders = JsonToObject.ConvertJsonToModel(JobOrders, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);
            if (UserTrack.X.IsNullOrEmpty() || UserTrack.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }

            Users Users = new Users();

            Users = JsonToObject.ConvertJsonToModel(Users, json);
            #region 初始化与校验
            if (JobOrders.TNum.IsNullOrEmpty() || JobOrders.CardId.IsNullOrEmpty() || Users.PayPwd.IsNullOrEmpty() || Users.Token.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            #region 用户验证
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == Users.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            if (baseUsers.PayLock == 1)//密码错误太多次锁定
            {
                DataObj.OutError("2050");
                return;
            }
            //这里是执行指纹解锁
            bool IfCheckOk = true;
            if (Users.PayPwd.Substring(0, 3) == "HF_")
            {
                string PassWord = Users.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 != Users.PayPwd.GetPayMD5())
            {
                //原支付密码错误
                IfCheckOk = false;
            }
            if (!IfCheckOk)
            {
                //付密码错误
                SysSet SysSet = Entity.SysSet.FirstOrNew();
                //系统统一修改标识SAME002
                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";
                if (Out.PayErr == 0)
                {
                    DataObj.Msg = "支付密码不正确,请明日再试或取回支付密码";
                }
                else
                {
                    DataObj.Msg = "支付密码不正确,您还可以尝试" + Out.PayErr + "次";
                }
                DataObj.OutString();
                return;
            }
            baseUsers.PayErr = 0;
            #endregion

            JobOrders baseJobOrders = this.Entity.JobOrders.Where(o => o.TNum == JobOrders.TNum && o.UId == baseUsers.Id).FirstOrDefault();
            if (baseJobOrders == null)
            {
                DataObj.OutError("1001");
                return;
            }
            if (baseJobOrders.State != 1)
            {
                DataObj.OutError("1001");
                return;
            }
            JobItem FirstJobItem = this.Entity.JobItem.Where(o => o.TNum == baseJobOrders.TNum && o.RunType == 1).OrderBy(o => o.RunTime).FirstOrDefault();
            if (FirstJobItem == null)
            {
                DataObj.OutError("1001");
                return;
            }
            FirstJobItem.UserCardId = JobOrders.CardId;
            FirstJobItem.RunedTime  = DateTime.Now;
            FirstJobItem.State      = 2;//按Job的流程,这里需设置执行中才能进入支付
            this.Entity.SaveChanges();
            #endregion
            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = "支付还款订单";
            UserTrack.GPSAddress = UserTrack.GPSAddress;
            UserTrack.GPSX       = UserTrack.X;
            UserTrack.GPSY       = UserTrack.Y;
            UserTrack.UserName   = FirstJobItem.TNum;
            UserTrack.UId        = baseUsers.Id;
            UserTrack.SeavGPSLog(Entity);
            //=======================================
            FirstJobItem = FirstJobItem.Pay(Entity);
            //0取消 1待执行 2执行中 3执行完成 4执行失败
            if (FirstJobItem.State == 3)
            {
                FirstJobItem.RunTime = DateTime.Now;
                Entity.SaveChanges();
                DataObj.OutError("0000");
            }
            else if (FirstJobItem.State == 2)
            {
                DataObj.OutError("6028");
            }
            else
            {
                //DataObj.Msg = FirstJobItem.Remark;
                DataObj.OutError("6027");
            }
        }
        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("[JobOrders]:", "【Data】" + Data, Ex);
                DataObj.OutError("1000");
                return;
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            JobOrders JobOrders = new JobOrders();

            JobOrders = JsonToObject.ConvertJsonToModel(JobOrders, json);
            JobSet JobSet = Entity.JobSet.FirstOrNew();//获取配置

            #region 获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == JobOrders.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            #endregion

            JobOrders baseJobOrders = this.Entity.JobOrders.FirstOrDefault(o => o.TNum == JobOrders.TNum);
            if (baseJobOrders == null)
            {
                DataObj.OutError("1001");
                return;
            }
            baseJobOrders.Cols = baseJobOrders.Cols + ",Items,UsersCard,HPayMoney,XPayMoney,SetCost,SetCash,XFCount,AdvCost,AdvCash";

            //处理统计
            SP_JobReSet SP_JobReSet             = new SP_JobReSet();
            Dictionary <string, string> dicChar = new Dictionary <string, string>();
            dicChar.Add("TNum", baseJobOrders.TNum);
            dicChar.Add("Type", "3");
            var tl = Entity.GetSPExtensions <SP_JobReSet>("SP_JobReSet", dicChar);
            if (tl.Count > 0)
            {
                SP_JobReSet = tl.FirstOrNew();
            }
            baseJobOrders.HPayMoney = SP_JobReSet.HPayMoney.ToString("f2");
            baseJobOrders.XPayMoney = SP_JobReSet.XPayMoney.ToString("f2");

            //处理订单明细
            List <JobItem> JobItemList      = this.Entity.JobItem.Where(o => o.TNum == baseJobOrders.TNum).OrderBy(o => o.RunedTime).ToList();
            var            JobItemModelList = JobItemList.GroupBy(o => o.RunTime.Date, (x, o) => new JobItemModel
            {
                date = x,
                item = o.OrderBy(k => k.RunType).ThenBy(n => n.RunTime).ToList().EntityToJson(),
            }).OrderBy(o => o.date).ToList();
            baseJobOrders.Items   = JobItemModelList.EntityToJson();
            baseJobOrders.XFCount = JobItemList.Where(o => o.RunType == 1).Count();
            baseJobOrders.SetCost = baseJobOrders.UPayRate;
            baseJobOrders.SetCash = baseJobOrders.UCashMin;

            //处理银行卡信息
            UserCard UserCard    = this.Entity.UserCard.FirstOrNew(o => o.Id == baseJobOrders.UserCardId && o.State == 1);
            string   UserCardStr = UserCard.OutJson();
            JObject  JS          = new JObject();
            try
            {
                JS = (JObject)JsonConvert.DeserializeObject(UserCardStr);
            }
            catch (Exception Ex)
            {
                Log.Write("[JobOrders]:", "【JsStr】" + UserCardStr, Ex);
            }
            baseJobOrders.UsersCard = JS;

            string data = baseJobOrders.OutJson();
            data         = data.Replace("\"[{", "[{").Replace("}]\"", "}]").Replace("\\", "").Replace("]\"}", "]}");
            DataObj.Data = data;
            DataObj.Code = "0000";
            DataObj.OutString();
        }
Example #28
0
        /// <summary>
        /// Processing of input queue
        /// </summary>
        public void OnSenderTimer(object sender, System.Timers.ElapsedEventArgs args)
        {
            SenderMonitorEvent.SendMonitorEvent(EventLog, "Monitoring the send command activity", EventLogEntryType.Information, 3);
            m_SenderTimer.Stop();

            string lLastError         = string.Empty;
            int    CountJobsToProcess = 0;

            try
            {
                KEPSSenderdbData senderDbData  = new KEPSSenderdbData(OdataServiceUrl);
                JobOrders        jobsToProcess = senderDbData.GetJobsToProcess();
                CountJobsToProcess = jobsToProcess.JobOrdersObj.Count;
                SenderMonitorEvent.SendMonitorEvent(EventLog, "Jobs to process: " + CountJobsToProcess, EventLogEntryType.Information, 3);

                string sendState = string.Empty;
                if (CountJobsToProcess > 0)
                {
                    // Step 1 -- Connect to UA server
                    SenderMonitorEvent.SendMonitorEvent(EventLog, "Step 1 -- Connect to OPC server", EventLogEntryType.Information, 4);
                    //string discoveryUrl = "opc.tcp://127.0.0.1:49320";
                    using (Session AMSession = ClientUtils.CreateSession(OPCServerUrl, "ArcelorMittal.UA.SenderCommand"))
                    {
                        SenderMonitorEvent.SendMonitorEvent(EventLog, "Loop through jobs", EventLogEntryType.Information, 4);
                        foreach (JobOrders.JobOrdersValue jobVal in jobsToProcess.JobOrdersObj)
                        {
                            try
                            {
                                SenderMonitorEvent.SendMonitorEvent(EventLog, "new SenderJobProps", EventLogEntryType.Information, 4);
                                SenderJobProps job = new SenderJobProps(jobVal.ID,
                                                                        jobVal.Command,
                                                                        (string)(jobVal.CommandRule));
                                SenderMonitorEvent.SendMonitorEvent(EventLog, "WriteToKEPServer", EventLogEntryType.Information, 4);
                                if (WriteToKEPServer(AMSession, job))
                                {
                                    sendState = "Done";
                                    if (wmiProductInfo != null)
                                    {
                                        wmiProductInfo.LastActivityTime = DateTime.Now;
                                    }
                                }
                                else
                                {
                                    sendState = "Failed";
                                }
                                lLastError = string.Format("JobOrderID: {0}. Send to KEP Server element {1} = {2}. Status: {3}", job.JobOrderID, job.Command, job.CommandRule, sendState);

                                if (sendState == "Done")
                                {
                                    Requests.UpdateJobStatus(OdataServiceUrl, job.JobOrderID, sendState);
                                }
                                else if (sendState == "Failed")
                                {
                                    if (wmiProductInfo != null)
                                    {
                                        wmiProductInfo.LastServiceError = string.Format("{0}. On {1}", lLastError, DateTime.Now);
                                    }
                                }
                                SenderMonitorEvent.SendMonitorEvent(EventLog, lLastError, EventLogEntryType.Information, 5);
                            }
                            catch (Exception ex)
                            {
                                lLastError = "Error sending command: " + ex.ToString();
                                SenderMonitorEvent.SendMonitorEvent(EventLog, lLastError, EventLogEntryType.Error, 4);
                                lLastError = "Reconecting...";
                                SenderMonitorEvent.SendMonitorEvent(EventLog, lLastError, EventLogEntryType.Information, 4);
                                AMSession.Reconnect();
                            }
                        }
                        // Step 3 -- Clean up
                        //AMSession.Close();
                        AMSession.KeepAlive -= ClientUtils.Session_KeepAlive;
                    }
                }
            }
            catch (Exception ex)
            {
                try
                {
                    string details = string.Empty;
                    if (ex is System.Net.WebException)
                    {
                        var resp = new System.IO.StreamReader((ex as System.Net.WebException).Response.GetResponseStream()).ReadToEnd();

                        try
                        {
                            dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject(resp);
                            details = obj.error.message;
                        }
                        catch
                        {
                            details = resp;
                        }
                    }
                    lLastError = "Error getting jobs: " + ex.ToString() + " Details: " + details;
                    SenderMonitorEvent.SendMonitorEvent(EventLog, lLastError, EventLogEntryType.Error, 4);
                    if (wmiProductInfo != null)
                    {
                        wmiProductInfo.LastServiceError = string.Format("{0}. On {1}", lLastError, DateTime.Now);
                    }
                }
                catch (Exception exc)
                {
                    SenderMonitorEvent.SendMonitorEvent(EventLog, exc.Message, EventLogEntryType.Error, 4);
                }
            }
            if (wmiProductInfo != null)
            {
                wmiProductInfo.SendCommandsCount += CountJobsToProcess;
                wmiProductInfo.PublishInfo();
            }
            SenderMonitorEvent.SendMonitorEvent(EventLog, string.Format("Send command is done. {0} tasks", CountJobsToProcess), EventLogEntryType.Information, 3);

            m_SenderTimer.Start();
        }
        public JsonResult SplitMoney(string tnum)
        {
            JsonResult JR = new JsonResult()
            {
                ContentType = "text/html"
            };

            if (tnum.IsNullOrEmpty())
            {
                JR.Data = new { error = 1, info = "参数有误" };
                return(JR);
            }
            JobOrders JobOrders = Entity.JobOrders.FirstOrNew(o => o.TNum == tnum);

            if (JobOrders == null)
            {
                JR.Data = new { error = 1, info = "订单不存在" };
                return(JR);
            }
            if (JobOrders.State != 5)
            {
                JR.Data = new { error = 1, info = "当前订单状态不能分润" };
                return(JR);
            }
            if (JobOrders.AgentState != 0)
            {
                JR.Data = new { error = 1, info = "当前订单已分润" };
                return(JR);
            }
            IList <JobItem> JobItemList = Entity.JobItem.Where(n => n.State == 3 && n.TNum == JobOrders.TNum).ToList();

            if (JobItemList.Count == 0)
            {
                JR.Data = new { error = 1, info = "当前任务没有执行成功的交易" };
                return(JR);
            }
            decimal TotalPoundage  = JobItemList.Sum(n => n.Poundage);
            decimal TotalHFGet     = JobItemList.Sum(n => n.HFGet);
            decimal TotalAgentGet  = JobItemList.Sum(n => n.AgentGet);
            decimal TotalPoundage1 = JobItemList.Where(n => n.RunType == 1).Sum(n => n.Poundage);
            decimal TotalPoundage2 = JobItemList.Where(n => n.RunType == 2).Sum(n => n.Poundage);
            decimal TotalRunGet1   = JobItemList.Where(n => n.RunType == 1).Sum(n => n.RunGet);
            decimal TotalRunGet2   = JobItemList.Where(n => n.RunType == 2).Sum(n => n.RunGet);

            JobOrders.Cols = "Id,Poundage,AgentGet,HFGet,PayPoundage,CashPoundage,PayGet,CashGet";
            string OldData = JobOrders.ToJson();

            JobOrders.RemarkSplit  = "操作人:" + AdminUser.TrueName + ",操作时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "【" + OldData + "】";
            JobOrders.Poundage     = TotalPoundage;  //总手续费
            JobOrders.AgentGet     = TotalAgentGet;  //代理分润
            JobOrders.HFGet        = TotalHFGet;     //利润
            JobOrders.PayPoundage  = TotalPoundage1; //交易手续费
            JobOrders.CashPoundage = TotalPoundage2; //代付手续费
            JobOrders.PayGet       = TotalRunGet1;   //交易成本
            JobOrders.CashGet      = TotalRunGet2;   //代付成本
            if (JobOrders.AgentGet == 0)
            {
                JobOrders.AgentState = 1;
                JobOrders.AgentTime  = DateTime.Now;
            }
            Entity.SaveChanges();

            if (JobOrders.AgentGet > 0)
            {
                JobOrders = JobOrders.PayAgent(Entity);
            }
            JR.Data = new { error = 0, info = "取消订单成功!" };
            return(JR);
        }
Example #30
0
        /// <summary>
        /// Processing of input queue
        /// </summary>
        public void OnSenderTimer(object sender, System.Timers.ElapsedEventArgs args)
        {
            SenderMonitorEvent.sendMonitorEvent(vpEventLog, "Monitoring the send command activity", EventLogEntryType.Information);
            m_SenderTimer.Stop();

            string lLastError         = string.Empty;
            int    CountJobsToProcess = 0;

            try
            {
                KEPSSenderdbData senderDbData  = new KEPSSenderdbData(OdataServiceUrl);
                JobOrders        jobsToProcess = senderDbData.getJobsToProcess();
                CountJobsToProcess = jobsToProcess.JobOrdersObj.Count;
                SenderMonitorEvent.sendMonitorEvent(vpEventLog, "Jobs to process: " + CountJobsToProcess, EventLogEntryType.Information);

                string sendState = string.Empty;
                if (CountJobsToProcess > 0)
                {
                    // Step 1 -- Connect to UA server
                    //string discoveryUrl = "opc.tcp://127.0.0.1:49320";
                    using (Session AMSession = ClientUtils.CreateSession(OPCServerUrl, "ArcelorMittal.UA.SenderCommand"))
                    {
                        foreach (JobOrders.JobOrdersValue jobVal in jobsToProcess.JobOrdersObj)
                        {
                            try
                            {
                                SenderJobProps job = new SenderJobProps(jobVal.ID,
                                                                        jobVal.Command,
                                                                        (string)(jobVal.CommandRule));

                                if (WriteToKEPServer(AMSession, job))
                                {
                                    sendState = "Done";
                                    wmiProductInfo.LastActivityTime = DateTime.Now;
                                }
                                else
                                {
                                    sendState = "Failed";
                                }
                                lLastError = String.Format("JobOrderID: {0}. Send to KEP Server element {1} = {2}. Status: {3}", job.JobOrderID, job.Command, job.CommandRule, sendState);

                                if (sendState == "Done")
                                {
                                    Requests.updateJobStatus(OdataServiceUrl, job.JobOrderID, sendState);
                                }
                                else if (sendState == "Failed")
                                {
                                    wmiProductInfo.LastServiceError = string.Format("{0}. On {1}", lLastError, DateTime.Now);
                                }
                            }
                            catch (Exception ex)
                            {
                                lLastError = "Error sending command: " + ex.ToString();
                                SenderMonitorEvent.sendMonitorEvent(vpEventLog, lLastError, EventLogEntryType.Error);
                                lLastError = "Reconecting...";
                                SenderMonitorEvent.sendMonitorEvent(vpEventLog, lLastError, EventLogEntryType.Information);
                                AMSession.Reconnect();
                            }
                        }
                        // Step 3 -- Clean up
                        AMSession.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                lLastError = "Error getting jobs: " + ex.ToString();
                SenderMonitorEvent.sendMonitorEvent(vpEventLog, lLastError, EventLogEntryType.Error);
                wmiProductInfo.LastServiceError = string.Format("{0}. On {1}", lLastError, DateTime.Now);
            }
            wmiProductInfo.SendCommandsCount += CountJobsToProcess;
            wmiProductInfo.PublishInfo();
            SenderMonitorEvent.sendMonitorEvent(vpEventLog, string.Format("Send command is done. {0} tasks", CountJobsToProcess), EventLogEntryType.Information);

            m_SenderTimer.Start();
        }