Пример #1
0
        /// <summary>
        /// Calculates the total income with equal principal by quart.
        /// </summary>
        /// <param name="inverstParas">The inverst paras.</param>
        /// <returns>InvestmentTotalIncome.</returns>
        ///  创 建 者:解志辉
        ///  创建日期:2016-05-17 10:43:07
        private static InvestmentTotalIncome CalculateTotalIncomeWithEqualPrincipalByQuart(InvestmentParameters inverstParas)
        {
            InvestmentTotalIncome income = new InvestmentTotalIncome();

            if (inverstParas.CircleType == 1)
            {
                double num = Math.Ceiling((double)(((double)inverstParas.Circle) / 3.0));
                income.Reward          = inverstParas.Amount * ((decimal)(inverstParas.RewardRate / 100.0));
                income.ActualYearRate  = (inverstParas.NominalYearRate * (1.0 - (inverstParas.OverheadsRate / 100.0))) + ((inverstParas.RewardRate / num) * 4.0);
                income.ActualMonthRate = income.ActualYearRate / 12.0;
                decimal num2 = (((decimal)inverstParas.NominalYearRate) / 4M) / 100M;
                income.Interest    = (inverstParas.Amount * ((decimal)(((double)Sum((int)num)) / num))) * num2;
                income.TotalIncome = inverstParas.Amount + income.Interest;
                income.Overheads   = income.Interest * (((decimal)inverstParas.OverheadsRate) / 100M);
                return(income);
            }
            if (inverstParas.CircleType == 3)
            {
                income = CalculateTotalIncomeWithLumpSumPrincipalAndInterest(inverstParas);
            }
            return(income);
        }
Пример #2
0
        /// <summary>
        /// 计算总付本金和利息收入总额 天为单位
        /// </summary>
        /// <param name="inverstParas">The inverst paras.</param>
        /// <returns>InvestmentTotalIncome.</returns>
        ///  <remarks>
        ///  创 建 者:解志辉
        ///  创建日期:2016-05-17 10:43:02
        /// </remarks>
        private static InvestmentTotalIncome CalculateTotalIncomeWithLumpSumPrincipalAndInterest(InvestmentParameters inverstParas)
        {
            InvestmentTotalIncome income = new InvestmentTotalIncome();
            double circle = inverstParas.Circle;

            if (inverstParas.CircleType == 3)
            {
                circle = ((double)inverstParas.Circle) / 30.0;
            }
            income.Reward          = inverstParas.Amount * ((decimal)(inverstParas.RewardRate / 100.0));
            income.ActualYearRate  = (inverstParas.NominalYearRate * (1.0 - (inverstParas.OverheadsRate / 100.0))) + ((inverstParas.RewardRate / circle) * 12.0);
            income.ActualMonthRate = income.ActualYearRate / 12.0;
            income.Interest        = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * inverstParas.Circle) / 365.0));
            income.TotalIncome     = (inverstParas.Amount + income.Interest) + income.Reward;
            income.Overheads       = income.Interest * (((decimal)inverstParas.OverheadsRate) / 100M);
            return(income);
        }
Пример #3
0
        private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithLumpSumPrincipalAndInterest(InvestmentParameters inverstParas)
        {
            int days = 0;

            List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>();
            InvestmentReceiveRecordInfo        item = new InvestmentReceiveRecordInfo();

            if (inverstParas.CircleType == 1)
            {
                if (inverstParas.IsThirtyDayMonth)
                {
                    item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(inverstParas.Circle * 30));
                    inverstParas.Circle    *= 30;
                }
                else
                {
                    //item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(inverstParas.Circle);
                    // TimeSpan span = (TimeSpan)(DateTime.Now.AddMonths(inverstParas.Circle) - DateTime.Now);

                    item.NominalReceiveDate = inverstParas.Investmentenddate;
                    TimeSpan span = (TimeSpan)(inverstParas.Investmentenddate - inverstParas.InvestDate);
                    inverstParas.Circle = (int)Math.Ceiling(span.TotalDays);
                }
            }
            else
            {
                //天标这里需要调整



                // item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)inverstParas.Circle);

                item.NominalReceiveDate = inverstParas.Investmentenddate;
            }


            long diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(item.NominalReceiveDate.ToString("yyyy-MM-dd")));


            days = int.Parse(diffdays.ToString());
            item.interestvalue_date = inverstParas.InvestDate;
            item.AddTime            = DateTime.Now;
            item.UpdateTime         = DateTime.Now;

            if (days == 0)
            {
                days = 1;
            }


            item.TotalInstallments   = days;
            item.TotalDays           = days;
            item.CurrentInstallments = 1;
            //   item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * inverstParas.Circle) / 365.0));

            item.Interest          = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));
            item.Principal         = inverstParas.Amount;
            item.PrincipalStatus   = 0;
            item.InterestStatus    = 0;
            item.Amount            = item.Principal + item.Interest;
            item.Balance           = item.Principal + item.Interest;
            item.TotalInstallments = 1;
            item.Overheads         = item.Interest * ((decimal)inverstParas.OverheadsRate);
            list.Add(item);
            return(list);
        }
Пример #4
0
        /// <summary>
        /// Calculates the total income with equal principal and interest.
        /// </summary>
        /// <param name="inverstParas">The inverst paras.</param>
        /// <returns>InvestmentTotalIncome.</returns>
        ///  <remarks>
        ///  创 建 者:解志辉
        ///  创建日期:2016-05-17 10:43:10
        ///  </remarks>
        private static InvestmentTotalIncome CalculateTotalIncomeWithEqualPrincipalAndInterest(InvestmentParameters inverstParas)
        {
            InvestmentTotalIncome income = new InvestmentTotalIncome();

            if (inverstParas.CircleType == 1)
            {
                income.Reward          = inverstParas.Amount * ((decimal)(inverstParas.RewardRate / 100.0));
                income.ActualYearRate  = (inverstParas.NominalYearRate * (1.0 - (inverstParas.OverheadsRate / 100.0))) + ((inverstParas.RewardRate / ((double)inverstParas.Circle)) * 12.0);
                income.ActualMonthRate = income.ActualYearRate / 12.0;
                double  num  = (inverstParas.NominalYearRate / 12.0) / 100.0;
                double  num2 = Math.Pow(1.0 + num, (double)inverstParas.Circle);
                decimal num3 = 0M;
                if (num > 0.0)
                {
                    num3 = inverstParas.Amount * ((decimal)((num * num2) / (num2 - 1.0)));
                }
                else
                {
                    num3 = inverstParas.Amount / inverstParas.Circle;
                }
                income.TotalIncome = (num3 * inverstParas.Circle) + income.Reward;
                income.Interest    = income.TotalIncome - inverstParas.Amount;
                income.Overheads   = income.Interest * (((decimal)inverstParas.OverheadsRate) / 100M);
                return(income);
            }
            if (inverstParas.CircleType == 3)
            {
                income = CalculateTotalIncomeWithLumpSumPrincipalAndInterest(inverstParas);
            }
            return(income);
        }
Пример #5
0
        /// <summary>
        /// 按日计息,每月还息,到期还本
        /// </summary>
        /// <param name="inverstParas"></param>
        /// <returns></returns>
        private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithInterestByMonth1(InvestmentParameters inverstParas)
        {
            List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>();

            if (inverstParas.CircleType == 1)
            {
                double  num  = (inverstParas.NominalYearRate / 12.0) / 100.0; //月利率
                decimal num2 = inverstParas.Amount * ((decimal)num);

                DateTime CMTH1 = new DateTime();  //每月结息日
                for (int i = 1; i <= inverstParas.Circle; i++)
                {
                    InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo();

                    DateTime CMTH = new DateTime();  //当月计息日



                    int days = 0;//投次天数



                    if (i == 1)
                    {
                        item.Principal = 0M;

                        CMTH = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest);//当月付息日的日期显示
                        //item.interestvalue_date = CMTH;

                        item.interestvalue_date = CMTH1 = inverstParas.InvestDate;
                    }
                    else if (i == inverstParas.Circle)
                    {
                        item.Principal = inverstParas.Amount;

                        CMTH = DateTime.Parse(inverstParas.Investmentenddate.ToString("yyyy-MM-dd"));

                        item.interestvalue_date = CMTH1 = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest);//当月付息日的日期显示
                    }
                    else
                    {
                        item.Principal = 0M;



                        CMTH = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest);//当月付息日的日期显示
                        item.interestvalue_date = CMTH;
                    }

                    //应收利息需要按日来计算 特殊处理


                    long diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(CMTH.ToString("yyyy-MM-dd")));


                    if (diffdays > 0)
                    {
                        days = int.Parse(diffdays.ToString());
                        //item.Interest = num2;
                        ///日利息计算
                        //inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * inverstParas.Circle) / 365.0));
                        item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));
                    }
                    else if (diffdays == 0)
                    {
                        days          = DateTime.DaysInMonth(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month);
                        item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));
                    }
                    else
                    {
                        DateTime dd = DateTime.Parse(CMTH.AddMonths(1).ToString("yyyy-MM-dd"));
                        diffdays      = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), dd);
                        days          = int.Parse(diffdays.ToString());
                        item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));
                        //超过日期后按投资当天计息
                        if (i == 1)
                        {
                            item.interestvalue_date = DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd"));
                        }
                        else
                        {
                            item.interestvalue_date = dd;
                        }
                        // i = i + 1;
                    }

                    if (i == 1)
                    {
                        inverstParas.InvestDate = CMTH;
                    }
                    else if (i == inverstParas.Circle)
                    {
                        inverstParas.InvestDate = CMTH;
                    }

                    else
                    {
                        inverstParas.InvestDate = CMTH.AddMonths(1);
                    }
                    item.Amount    = item.Principal + item.Interest;
                    item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate);
                    if (inverstParas.IsThirtyDayMonth)
                    {
                        item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(i * 30));
                    }
                    else
                    {
                        //item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(i);
                        item.NominalReceiveDate = inverstParas.InvestDate;
                    }
                    // item.TotalInstallments = inverstParas.Circle;

                    item.TotalInstallments   = days;
                    item.CurrentInstallments = i;
                    item.AddTime             = DateTime.Now;
                    item.UpdateTime          = DateTime.Now;
                    item.PrincipalStatus     = 0;
                    item.InterestStatus      = 0;
                    if (i == inverstParas.Circle)
                    {
                        item.Balance = inverstParas.Amount + item.Interest;
                    }
                    else
                    {
                        item.Balance = item.Interest;
                    }
                    list.Add(item);
                }
                return(list);
            }
            if (inverstParas.CircleType == 3)
            {
                list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas);
            }
            return(list);
        }
Пример #6
0
        /// <summary>
        /// 按月等额本息
        /// </summary>
        /// <param name="inverstParas"></param>
        /// <returns></returns>
        private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithEqualPrincipalAndInterest(InvestmentParameters inverstParas)
        {
            List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>();

            if (inverstParas.CircleType == 1)
            {
                double  num  = (inverstParas.NominalYearRate / 12.0) / 100.0;//月利率
                double  num2 = Math.Pow(1.0 + num, (double)inverstParas.Circle);
                decimal d    = 0M;
                if (num > 0.0)
                {
                    d = inverstParas.Amount * ((decimal)((num * num2) / (num2 - 1.0)));
                }
                else
                {
                    d = inverstParas.Amount / inverstParas.Circle;
                }
                d = Math.Round(d, 2);
                for (int i = 1; i <= inverstParas.Circle; i++)
                {
                    InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo();
                    decimal num5 = (decimal)Math.Pow(1.0 + num, (double)((i - 1) - inverstParas.Circle));
                    item.Interest  = Math.Round((decimal)(d * (1M - num5)), 2);
                    item.Principal = d - item.Interest;
                    item.Amount    = item.Principal + item.Interest;
                    item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate);
                    if (inverstParas.IsThirtyDayMonth)
                    {
                        item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(i * 30));
                    }
                    else
                    {
                        item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(i);
                    }
                    item.TotalInstallments   = inverstParas.Circle;
                    item.CurrentInstallments = i;
                    item.AddTime             = DateTime.Now;
                    item.UpdateTime          = DateTime.Now;
                    item.PrincipalStatus     = 0;
                    item.InterestStatus      = 0;
                    item.Balance             = (inverstParas.Circle - i) * d;
                    list.Add(item);
                }
                return(list);
            }
            if (inverstParas.CircleType == 3)
            {
                list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas);
            }
            return(list);
        }
Пример #7
0
        /// <summary>
        /// 按日计息,每月还息,到期还本
        /// </summary>
        /// <param name="inverstParas"></param>
        /// <returns></returns>

        private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithInterestByMonth(InvestmentParameters inverstParas)
        {
            List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>();

            DateTime Startdate_M = new DateTime();  //每月起息日

            if (inverstParas.CircleType == 1)
            {
                double  num  = (inverstParas.NominalYearRate / 12.0) / 100.0;
                decimal num2 = inverstParas.Amount * ((decimal)num);
                for (int i = 1; i <= inverstParas.Circle; i++)
                {
                    InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo();
                    DateTime CMTH     = new DateTime(); //当月付息日
                    int      days     = 0;              //天数
                    long     diffdays = 0;              //计算相差天数

                    DateTime startdate = new DateTime();
                    if (i == 1)  //第一期
                    {
                        item.Principal = 0M;


                        CMTH = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest);    //当月付息日的日期显示


                        //需要处理计算是投资日之前还是之后


                        int dtt = 0;

                        if (inverstParas.ReleaseDate != null)
                        {
                            dtt = DateTime.Compare(CMTH, DateTime.Parse(inverstParas.ReleaseDate));
                        }
                        else
                        {
                            dtt = DateTime.Compare(CMTH, inverstParas.InvestDate);
                        }

                        if (dtt > 0)   //之后 如 投资 14 付息 25
                        {
                            item.interestvalue_date = Startdate_M = startdate = inverstParas.InvestDate;
                            item.Principal          = 0M;
                            diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(CMTH.ToString("yyyy-MM-dd")));
                            days     = Math.Abs(int.Parse(diffdays.ToString()));
                            item.NominalReceiveDate = startdate.AddDays(days);
                            item.TotalDays          = days;
                            item.Interest           = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));
                        }
                        else //之前 如投资 14 付息 1 得计算到下个月的1号
                        {
                            item.interestvalue_date = Startdate_M = startdate = inverstParas.InvestDate;
                            item.Principal          = 0M;
                            DateTime dd = DateTime.Parse(CMTH.AddMonths(1).ToString("yyyy-MM-dd"));
                            diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), dd);
                            days     = Math.Abs(int.Parse(diffdays.ToString()));
                            item.NominalReceiveDate = startdate.AddDays(days);
                            item.TotalDays          = days;
                            item.Interest           = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));
                        }

                        Startdate_M = item.NominalReceiveDate;
                    }
                    else if (i == inverstParas.Circle) //最后一期
                    {
                        //item.interestvalue_date = Startdate_M = startdate = inverstParas.InvestDate.AddMonths(1);

                        item.interestvalue_date = Startdate_M = startdate = Startdate_M;
                        item.Principal          = inverstParas.Amount;
                        CMTH     = DateTime.Parse(inverstParas.Investmentenddate.ToString("yyyy-MM-dd"));
                        diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(item.interestvalue_date.ToString("yyyy-MM-dd")), CMTH);
                        days     = Math.Abs(int.Parse(diffdays.ToString()));
                        item.NominalReceiveDate = CMTH;
                        item.TotalDays          = days;
                        item.Interest           = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));
                        // Startdate_M = CMTH;
                    }
                    else
                    {
                        item.Principal          = 0M;
                        item.interestvalue_date = inverstParas.InvestDate = startdate = Startdate_M;
                        Startdate_M             = Startdate_M.AddMonths(1);
                        diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(Startdate_M.ToString("yyyy-MM-dd")));
                        days     = Math.Abs(int.Parse(diffdays.ToString()));
                        item.NominalReceiveDate = startdate.AddDays(days);
                        item.TotalDays          = days;
                        item.Interest           = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0));

                        Startdate_M = item.NominalReceiveDate;
                    }
                    // item.Interest = num2;
                    item.Amount    = item.Principal + item.Interest;
                    item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate);

                    /* 作废
                     * if (inverstParas.IsThirtyDayMonth)
                     * {
                     *  item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(i * 30));
                     * }
                     * else
                     * {
                     *  item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(i);
                     * }
                     */

                    item.TotalInstallments   = inverstParas.Circle;
                    item.CurrentInstallments = i;
                    item.AddTime             = DateTime.Now;
                    item.UpdateTime          = DateTime.Now;
                    item.PrincipalStatus     = 0;
                    item.InterestStatus      = 0;
                    if (i == inverstParas.Circle)
                    {
                        item.Balance = inverstParas.Amount + item.Interest;
                    }
                    else
                    {
                        item.Balance = item.Interest;
                    }
                    list.Add(item);
                }
                return(list);
            }
            if (inverstParas.CircleType == 3)
            {
                list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas);
            }
            return(list);
        }
Пример #8
0
        private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithEqualPrincipalByQuart(InvestmentParameters inverstParas)
        {
            List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>();

            if (inverstParas.CircleType == 1)
            {
                int     n        = (int)Math.Ceiling((double)(((double)inverstParas.Circle) / 3.0));
                decimal num2     = inverstParas.Amount / n;
                decimal num3     = (((decimal)inverstParas.NominalYearRate) / 4M) / 100M;
                decimal num4     = (inverstParas.Amount * (Sum(n) / n)) * num3;
                decimal decimal1 = inverstParas.Amount + num4;
                int     num5     = 0;
                for (int i = 1; i <= n; i++)
                {
                    decimal num7 = (inverstParas.Amount * (((n - i) + 1) / n)) * num3;
                    decimal num8 = (inverstParas.Amount * (Sum(n - i) / n)) * num3;
                    for (int j = 1; j <= 3; j++)
                    {
                        num5++;
                        InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo();
                        if (j == 3)
                        {
                            item.Principal = num2;
                        }
                        else
                        {
                            item.Principal = 0M;
                        }
                        item.Interest  = num7 / 3M;
                        item.Amount    = item.Principal + item.Interest;
                        item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate);
                        if (inverstParas.IsThirtyDayMonth)
                        {
                            item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)((j * i) * 30));
                        }
                        else
                        {
                            item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(j * i);
                        }
                        item.TotalInstallments   = inverstParas.Circle;
                        item.CurrentInstallments = num5;
                        item.AddTime             = DateTime.Now;
                        item.UpdateTime          = DateTime.Now;
                        item.PrincipalStatus     = 0;
                        item.InterestStatus      = 0;
                        if (j == 3)
                        {
                            item.Balance = (((n - i) * num2) + ((3 - j) * item.Interest)) + num8;
                        }
                        else
                        {
                            item.Balance = ((((n - i) + 1) * num2) + ((3 - j) * item.Interest)) + num8;
                        }
                        list.Add(item);
                    }
                }
                return(list);
            }
            if (inverstParas.CircleType == 3)
            {
                list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas);
            }
            return(list);
        }
Пример #9
0
        /// <summary>
        /// Corrects the total income.
        /// </summary>
        /// <param name="income">The income.</param>
        /// <param name="inverstParas">The inverst paras.</param>
        /// <returns>InvestmentTotalIncome.</returns>
        ///  <remarks>
        ///  创 建 者:解志辉
        ///  创建日期:2016-05-17 10:43:00
        /// </remarks>
        private static InvestmentTotalIncome CorrectTotalIncome(InvestmentTotalIncome income, InvestmentParameters inverstParas)
        {
            List <InvestmentReceiveRecordInfo> list = CalculateReceiveRecord(inverstParas);

            income.ReceiveRecords = list;
            decimal num  = 0M;
            decimal num2 = 0M;

            foreach (InvestmentReceiveRecordInfo info in list)
            {
                num  += info.Interest;
                num2 += info.Principal;
            }
            income.Interest           = num;
            income.TotalIncome        = (num + inverstParas.Amount) + income.Reward;
            income.CleanTotalIncome   = income.TotalIncome - income.Overheads;
            income.TotalEarnings      = income.TotalIncome - inverstParas.Amount;
            income.CleanTotalEarnings = income.TotalEarnings - income.Overheads;
            return(income);
        }
Пример #10
0
        /// <summary>
        /// 确认投资接口--解志辉
        /// </summary>
        /// <param name="reqst">The reqst.</param>
        /// <returns>ResultInfo&lt;System.Int32&gt;.</returns>
        ///  创 建 者:解志辉
        ///  创建日期:2016-05-31 18:01:28
        public ResultInfo<int> SubmitTender(RequestParam<RequestTender> reqst)
        {
            ResultInfo<int> res = new ResultInfo<int>("99999");

            var usrId = ConvertHelper.ParseValue(reqst.body.userId, 0);
            var targetId = ConvertHelper.ParseValue(reqst.body.targetId, 0);
            var bds = reqst.body.bonusIds;
            var investAmount = ConvertHelper.ParseValue(reqst.body.investAmount, 0M);
            //  var code = reqst.body.invitedcode;



            if (usrId <= 0)
            {
                res.code = "1000000015";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return res;
            }
            if (targetId <= 0)
            {
                res.code = "1000000014";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return res;
            }


            try
            {
                var ent = _logic.SelectBorrowDetail(targetId);

                //最低可投金额应该从标的记录获取
                if (investAmount < ent.minimum)
                {
                    res.code = "2000000000";
                    res.message = Settings.Instance.GetErrorMsg(res.code);
                    return res;
                }
                else if (investAmount + ent.fundraising_amount > ent.borrowing_balance)
                {//超过可投金额
                    res.code = "2000000002";
                    res.message = Settings.Instance.GetErrorMsg(res.code);
                    return res;
                }


                InvestmentParameters mp = new InvestmentParameters
                {
                    Amount = investAmount,
                    Circle = ConvertHelper.ParseValue(ent.life_of_loan, 0),
                    CircleType = ConvertHelper.ParseValue(ent.unit_day, 0),
                    NominalYearRate = ConvertHelper.ParseValue(ent.annual_interest_rate, 0D),
                    OverheadsRate = 0f,
                    RepaymentMode = ConvertHelper.ParseValue(ent.payment_options, 0),
                    RewardRate = 0f,
                    IsThirtyDayMonth = false,
                    InvestDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")),

                    ReleaseDate = DateTime.Parse(ent.release_date.ToString()).ToString("yyyy-MM-dd"),
                    Investmentenddate =
                        DateTime.Parse(DateTime.Parse(ent.repayment_date.ToString()).ToString("yyyy-MM-dd")),
                    Payinterest = ConvertHelper.ParseValue(ent.month_payment_date, 0),
                    InvestObject = 1
                };

                List<InvestmentReceiveRecordInfo> records = InvestCalculator.CalculateReceiveRecord(mp);
                StringBuilder sb = new StringBuilder("");
                if (records != null && records.Any())
                {
                    int i = 1;
                    foreach (var item in records)
                    {
                        //current_investment_period,value_date,interest_payment_date,repayment_amount,interestpayment,Principal,TotalInstallments,interestDay
                        sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7}|", i, item.interestvalue_date, item.NominalReceiveDate, item.Balance, item.Interest, item.Principal, item.TotalInstallments, item.TotalDays);

                        i = i + 1;
                    }
                }

                //(int usrId, int targetId, decimal investAmount, List<int> bds, string code, string ordCode, decimal withoutInterest, string frozenidNo, decimal frozenidAmount, int cPeriod) 


                var resVal = _logic.SubmitTender(usrId, targetId, investAmount, bds, "", Settings.Instance.OrderCode
                    , ((records != null && records.Any()) ? records.Sum(t => t.Interest) : 0M), Settings.Instance.OrderCode
                    , 0M
                    , ((records != null && records.Any()) ? records.Count : 0), sb.ToString());

                if (resVal < 200)
                {

                    switch (resVal)
                    {
                        case -100:
                            {
                                res.code = "2000000001";
                            }
                            break;
                        case -200:
                            {
                                res.code = "2000000002";
                            }
                            break;
                        case -300:
                            {
                                res.code = "2000000003";
                            }
                            break;
                        case -400:
                            {
                                res.code = "2000000004";
                            }
                            break;
                        case -500:
                            {
                                res.code = "2000000007";
                            }
                            break;
                        case -600:
                            {
                                res.code = "2000000006";
                            }
                            break;
                    }
                }
                else
                {
                    res.code = "1";
                    res.body = resVal;
                }

                res.message = Settings.Instance.GetErrorMsg(res.code);
                return res;
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString());
                LoggerHelper.Error(JsonHelper.Entity2Json(reqst));
                res.code = "500";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return res;
            }
        }
Пример #11
0
        public ActionResult Index(RequestParam <RequestTender> reqst)
        {
            LoggerHelper.Info(JsonHelper.Entity2Json(reqst));
            ResultInfo <string> res = new ResultInfo <string>("99999");
            var usrId    = ConvertHelper.ParseValue(reqst.body.userId, 0);
            var targetId = ConvertHelper.ParseValue(reqst.body.targetId, 0);
            var bds      = string.Empty;

            B_borrowing_target b_borrowing_target = new B_borrowing_target();
            var            m_borrowing_target     = b_borrowing_target.GetModel(targetId);
            B_member_table b_member_table         = new B_member_table();
            var            m_member_table         = b_member_table.GetModel(usrId);


            if (m_borrowing_target == null || m_member_table == null)
            {
                res.code    = "1000000010";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }
            if (!string.IsNullOrWhiteSpace(reqst.body.bonusIds))
            {
                bds = reqst.body.bonusIds;
            }
            if (!string.IsNullOrWhiteSpace(reqst.body.addRateIds))
            {
                if (!string.IsNullOrWhiteSpace(bds))
                {
                    bds += ",";
                }
                bds = reqst.body.addRateIds;
            }
            var         investAmount = ConvertHelper.ParseValue(reqst.body.investAmount, 0M);
            BorrowLogic _logic       = new BorrowLogic();
            var         ent          = _logic.SelectBorrowDetail(targetId);

            if (usrId <= 0)
            {
                res.code    = "1000000015";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }
            if (targetId <= 0)
            {
                res.code    = "1000000014";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }
            if (investAmount < 100)
            {
                res.code    = "2000000000";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }
            if (m_borrowing_target.minimum > 0 && investAmount < m_borrowing_target.minimum)
            {
                res.code    = "2000000008";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }
            if (m_borrowing_target.maxmum > 0 && investAmount > m_borrowing_target.maxmum)
            {
                res.code    = "2000000009";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }

            if (reqst.body.typeId == 6)//新手标判定
            {
                if (!string.IsNullOrWhiteSpace(bds))
                {
                    res.code    = "2000000010";
                    res.message = Settings.Instance.GetErrorMsg(res.code);
                    return(View(res));
                }
                if (m_member_table.useridentity != 5)
                {
                    if (Convert.ToDateTime(m_member_table.Registration_time.ToString("yyyy-MM-dd")).AddDays(30) < Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")))
                    {
                        res.code    = "2000000011";
                        res.message = Settings.Instance.GetErrorMsg(res.code);
                        return(View(res));
                    }
                    B_Bid_records b_Bid_records = new B_Bid_records();
                    int           investedCount = b_Bid_records.GetInvestCount(reqst.body.userId, reqst.body.targetId);
                    if (investedCount >= 3)
                    {
                        res.code    = "2000000012";
                        res.message = Settings.Instance.GetErrorMsg(res.code);
                        return(View(res));
                    }
                    if (ent.start_time != null && ent.start_time.Value < Convert.ToDateTime("2016-12-01 00:00:00"))
                    {
                        res.code    = "2999999999";
                        res.message = Settings.Instance.GetErrorMsg(res.code);
                        return(View(res));
                    }
                    if (ent.project_type_id != null && ent.project_type_id.Value != 6)
                    {
                        res.code    = "2999999999";
                        res.message = Settings.Instance.GetErrorMsg(res.code);
                        return(View(res));
                    }
                }
            }
            try
            {
                decimal        vocheramttemp = GetUseRewards(bds, usrId);
                B_member_table b             = new B_member_table();
                M_member_table user          = new M_member_table();
                user = b.GetModel(reqst.body.userId);
                InvestmentParameters mp = new InvestmentParameters
                {
                    Amount            = investAmount,
                    Circle            = ConvertHelper.ParseValue(ent.life_of_loan, 0),
                    CircleType        = ConvertHelper.ParseValue(ent.unit_day, 0),
                    NominalYearRate   = ConvertHelper.ParseValue(ent.annual_interest_rate, 0D),
                    OverheadsRate     = 0f,
                    RepaymentMode     = ConvertHelper.ParseValue(ent.payment_options, 0),
                    RewardRate        = 0f,
                    IsThirtyDayMonth  = false,
                    InvestDate        = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")),
                    ReleaseDate       = DateTime.Parse(ent.release_date.ToString()).ToString("yyyy-MM-dd"),
                    Investmentenddate = DateTime.Parse(DateTime.Parse(ent.repayment_date.ToString()).ToString("yyyy-MM-dd")),
                    Payinterest       = ConvertHelper.ParseValue(ent.month_payment_date, 0),
                    InvestObject      = 1
                };
                //追加  加息券
                if (!string.IsNullOrWhiteSpace(bds))
                {
                    B_UserAct bUserAct     = new B_UserAct();
                    var       addRateModel = bUserAct.GetAddRateModel(bds);
                    if (addRateModel != null)// add rate of year
                    {
                        mp.NominalYearRate = mp.NominalYearRate + Convert.ToDouble(addRateModel.Amt.Value);
                    }
                }
                List <InvestmentReceiveRecordInfo> records = InvestCalculator.CalculateReceiveRecord(mp);
                StringBuilder sb = new StringBuilder("");
                if (records != null && records.Any())
                {
                    int i = 1;
                    foreach (var item in records)
                    {
                        sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7}|", i, item.interestvalue_date, item.NominalReceiveDate, item.Balance, item.Interest, item.Principal, item.TotalInstallments, item.TotalDays);
                        i = i + 1;
                    }
                }
                var     orderId      = Settings.Instance.OrderCode;
                var     frozenidNo   = Settings.Instance.OrderCode;
                decimal frozenAmount = 0.00M;

                var xf = ((records != null && records.Any()) ? records.Sum(t => t.Interest) : 0M);
                //LoggerHelper.Error("利息:" + xf + " ------- " + JsonHelper.Entity2Json(records));
                string invitationCode = string.Empty;
                using (InvitationLogic invitationLogic = new InvitationLogic())
                {
                    var invitationModel = invitationLogic.GetUserInvited(usrId);
                    if (invitationModel != null)
                    {
                        invitationCode = invitationModel.invcode;
                    }
                }
                var resVal = _logic.SubmitTender(usrId, targetId, investAmount, bds, invitationCode, orderId
                                                 , xf, frozenidNo
                                                 , investAmount - frozenAmount
                                                 , ((records != null && records.Any()) ? records.Count : 0), sb.ToString());
                if (resVal < 200)
                {
                    switch (resVal)
                    {
                    case -100:
                    {
                        res.code = "2000000001";
                    }
                    break;

                    case -101:
                    {
                        res.code = "2000000008";
                    }
                    break;

                    case -200:
                    {
                        res.code = "2000000002";
                    }
                    break;

                    case -300:
                    {
                        res.code = "2000000003";
                    }
                    break;

                    case -400:
                    {
                        res.code = "2000000004";
                    }
                    break;

                    case -500:
                    {
                        res.code = "2000000007";
                    }
                    break;

                    case -600:
                    {
                        res.code = "2000000006";
                    }
                    break;
                    }
                }
                else
                {
                    LoggerHelper.Error("SubmitTender!!!!!!!!!!!!!!!投资开始");
                    LoggerHelper.Info("投资开始");
                    #region 投资成功
                    M_InitiativeTender Mt = new M_InitiativeTender();
                    Mt.Version       = "20";
                    Mt.CmdId         = "InitiativeTender";
                    Mt.MerCustId     = Settings.Instance.MerCustId;
                    Mt.OrdId         = orderId;
                    Mt.OrdDate       = mp.InvestDate.ToString("yyyyMMdd");
                    Mt.TransAmt      = investAmount.ToString("0.00");
                    Mt.UsrCustId     = user.UsrCustId;
                    Mt.MaxTenderRate = "0.20";

                    TenderJosnPro mtp = new TenderJosnPro();
                    mtp.BorrowerCustId = b.GetModel(ConvertHelper.ParseValue(ent.borrower_registerid, 0)).UsrCustId;
                    mtp.BorrowerAmt    = investAmount.ToString("0.00");

                    // mtp.BorrowerRate = decimal.Parse( dt.Rows[0]["loan_management_fee"].ToString()).ToString("0.00");

                    mtp.BorrowerRate = "1.00"; //风控范围

                    mtp.ProId = targetId.ToString();

                    Mt.BorrowerDetails = "[" + FastJSON.toJOSN(mtp) + "]";

                    #region 此处判断优惠类型

                    #endregion
                    Mt.IsFreeze = "Y";

                    Mt.FreezeOrdId = frozenidNo;

                    Mt.RetUrl = Settings.Instance.GetCallbackUrl("/MemberCenter/InvestSubmit/CallbackRetUrl");

                    Mt.BgRetUrl = Settings.Instance.GetCallbackUrl("/MemberCenter/InvestSubmit/CallbackBgRetUrl");

                    if (!string.IsNullOrWhiteSpace(reqst.body.bonusIds))
                    {
                        Mt.MerPriv = bds;
                        TenderAccPro ret = new TenderAccPro();
                        ret.AcctId    = ChuanglitouP2P.Common.Utils.GetMERDT();
                        ret.VocherAmt = vocheramttemp.ToString("0.00");
                        Mt.ReqExt     = "{" + "\"Vocher\":" + FastJSON.toJOSN(ret) + "}";
                    }
                    else
                    {
                        Mt.MerPriv = reqst.body.addRateIds;
                    }

                    //append device code to comment fields for make sure it be transfered back
                    string temp = Mt.MerPriv;
                    AppendDeviceFlag(reqst.header.appId.ToString(), ref temp);
                    Mt.MerPriv = temp;

                    LoggerHelper.Info("优惠券使用的id:" + bds);
                    StringBuilder chkVal = new StringBuilder();
                    chkVal.Append(Mt.Version);
                    chkVal.Append(Mt.CmdId);
                    chkVal.Append(Mt.MerCustId);
                    chkVal.Append(Mt.OrdId);
                    chkVal.Append(Mt.OrdDate);
                    chkVal.Append(Mt.TransAmt);
                    chkVal.Append(Mt.UsrCustId);
                    chkVal.Append(Mt.MaxTenderRate);
                    chkVal.Append(Mt.BorrowerDetails);
                    chkVal.Append(Mt.IsFreeze);
                    chkVal.Append(Mt.FreezeOrdId);
                    chkVal.Append(Mt.RetUrl);
                    chkVal.Append(Mt.BgRetUrl);
                    chkVal.Append(Mt.MerPriv);
                    chkVal.Append(Mt.ReqExt);

                    string chkv = chkVal.ToString();
                    LoggerHelper.Info("投资:" + chkv);
                    //私钥文件的位置(这里是放在了站点的根目录下)
                    string merKeyFile = AppDomain.CurrentDomain.BaseDirectory + Settings.Instance.MerPr;
                    //需要指定提交字符串的长度
                    int           len        = Encoding.UTF8.GetBytes(chkv).Length;
                    StringBuilder sbChkValue = new StringBuilder(256);
                    //加签
                    int str = DllInterop.SignMsg(Settings.Instance.MerId, merKeyFile, chkv, len, sbChkValue);

                    LoggerHelper.Info(str);

                    Mt.ChkValue = sbChkValue.ToString();
                    if (str == 0)
                    {
                        var strz = new StringBuilder();

                        strz.Append(" <form id=\"formauto\" name=\"formauto\"  action=\"" + Settings.Instance.ChinapnrUrl + "\" method=\"post\">");

                        strz.Append("<input id=\"Version\"  name=\"Version\"  type=\"hidden\"  value=\"" + Mt.Version + "\" />");

                        strz.Append("<input id=\"CmdId\"  name=\"CmdId\"    type=\"hidden\"  value=\"" + Mt.CmdId + "\" />");

                        strz.Append("<input id=\"MerCustId\" name=\"MerCustId\"   type=\"hidden\"  value=\"" + Mt.MerCustId + "\" />");

                        strz.Append("<input id=\"OrdId\" name=\"OrdId\" type=\"hidden\"  value=\"" + Mt.OrdId + "\" />");

                        strz.Append("<input id=\"OrdDate\" name=\"OrdDate\" type=\"hidden\"  value=\"" + Mt.OrdDate + "\" />");

                        strz.Append("<input id=\"TransAmt\" name=\"TransAmt\" type=\"hidden\"  value=\"" + Mt.TransAmt + "\" />");

                        strz.Append("<input id=\"UsrCustId\"  name=\"UsrCustId\" type=\"hidden\"  value=\"" + Mt.UsrCustId + "\" />");

                        strz.Append("<input id=\"MaxTenderRate\"   name=\"MaxTenderRate\" type=\"hidden\"  value=\"" + Mt.MaxTenderRate + "\" />");

                        strz.Append("<input id=\"BorrowerDetails\" name=\"BorrowerDetails\" type=\"hidden\"  value=" + Mt.BorrowerDetails + " />");

                        strz.Append("<input id=\"IsFreeze\" name=\"IsFreeze\" type=\"hidden\"  value=\"" + Mt.IsFreeze + "\" />");
                        strz.Append("<input id=\"FreezeOrdId\" name=\"FreezeOrdId\" type=\"hidden\"  value=\"" + Mt.FreezeOrdId + "\" />");
                        strz.Append("<input id=\"RetUrl\" name=\"RetUrl\" type=\"hidden\"  value=\"" + Mt.RetUrl + "\" />");
                        strz.Append("<input id=\"BgRetUrl\" name=\"BgRetUrl\" type=\"hidden\"  value=\"" + Mt.BgRetUrl + "\" />");
                        strz.Append("<input id=\"MerPriv\" name=\"MerPriv\" type=\"hidden\"  value=\"" + Mt.MerPriv + "\" />");
                        strz.Append("<input id=\"ReqExt\" name=\"ReqExt\" type=\"hidden\"  value=" + Mt.ReqExt + " >");
                        strz.Append("<input id=\"ChkValue\" name=\"ChkValue\" type=\"hidden\"  value=\"" + Mt.ChkValue + "\" />");
                        strz.Append(" </form>");
                        strz.Append("<script type=\"text/javascript\">document.getElementById('formauto').submit();</script>");

                        LoggerHelper.Info("投资表单:" + strz.ToString());
                        res.code = "1";
                        res.body = strz.ToString();
                    }
                    else
                    {
                        res.code = "5000000000";
                    }
                    #endregion
                }
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString());
                LoggerHelper.Error(JsonHelper.Entity2Json(reqst));
                res.code    = "500";
                res.message = Settings.Instance.GetErrorMsg(res.code);
                return(View(res));
            }
        }