public static void ChangeINCalculatePointModel(CalculatePointModel thisCalResult)
 {
     thisCalResult.OldPoints      = thisCalResult.NewPoints;
     thisCalResult.NewAmounts     = 0;
     thisCalResult.NewPoints      = 0;
     thisCalResult.ProducePoints  = 0;
     thisCalResult.ProduceAmounts = 0;
 }
 public static CalculatePointModel INEqMD(PointRuler ruler, CalculatePointModel calData)
 {
     if (ruler.Point == 0)
     {
         INPoint0(ruler.Amount, ruler.Multiple, calData);
     }
     else
     {
         INPointNo0(ruler.PlusOrMinus, ruler.Point, ruler.Amount, ruler.Multiple, calData);
     }
     return(calData);
 }
 public static CalculatePointModel OUTEqYear(PointRuler ruler, CalculatePointModel calData)
 {
     if (ruler.Point == 0)
     {
         OUTAmount0(ruler.PlusOrMinus, ruler.Amount, ruler.Multiple, calData);
     }
     else
     {
         OUTAmountNo0(ruler.Deduction, ruler.PlusOrMinus, ruler.Point, ruler.Amount, ruler.Multiple, calData);
     }
     return(calData);
 }
 private static CalculatePointModel INPoint0(Int64 amount, Int64 multiple, CalculatePointModel calData)
 {
     if (amount == 0 && multiple != 0)
     {
         //翻倍沿用之前运算符号
         calData.NewAmounts     = calData.OldAmounts;
         calData.NewPoints      = calData.OldPoints * multiple;
         calData.ProducePoints  = calData.NewPoints - calData.OldPoints;
         calData.ProduceAmounts = 0;
         return(calData);
     }
     calData.NewAmounts     = calData.OldAmounts;
     calData.NewPoints      = calData.OldPoints;
     calData.ProducePoints  = 0;
     calData.ProduceAmounts = 0;
     return(calData);
 }
 private static void BaseExtend(string firstName, PointRulerProductModel pointRulerProduct, KeyValuePair <string, PointRuler> item, ref CalculatePointModel thisCalResult)
 {
     thisCalResult = CalculatePoint.INEqBase(item.Value, thisCalResult);
     pointRulerProduct.CalMethods.Add(new CalMethodModel {
         CalMethod = firstName + item.Key, PointChangeLog = thisCalResult.ProducePoints, CalAmount = thisCalResult.ProduceAmounts
     });
     pointRulerProduct.TotalProducePoints += thisCalResult.ProducePoints;
     CalculatePoint.ChangeINCalculatePointModel(thisCalResult);
 }
        private static void INCheckMultipleRules(ForecastPointModel model, List <KeyValuePair <string, PointRuler> > ListMultiRules, PointRulerProductModel pointRulerProduct)
        {
            string firstName     = "IN_MultipleRules:";
            var    thisCalResult = new CalculatePointModel {
                OldAmounts = model.Amount
            };

            foreach (var item in ListMultiRules)
            {
                var Methods = item.Key.Split('_');
                if (Methods[0].Equals("BASE"))
                {
                    BaseExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("YEAE") && model.ForecastTime.Year == Convert.ToInt32(Methods[1]))
                {
                    YEAEExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("MONTH") && model.ForecastTime.Month == Convert.ToInt32(Methods[1]))
                {
                    MONTHExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("DAY") && model.ForecastTime.Day == Convert.ToInt32(Methods[1]))
                {
                    DAYExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("WEEK") && (int)model.ForecastTime.DayOfWeek == Convert.ToInt32(Methods[1]))
                {
                    WEEKExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("HOUR") && model.ForecastTime.Hour == Convert.ToInt32(Methods[1]))
                {
                    HOURExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("MINUTE") && model.ForecastTime.Minute == Convert.ToInt32(Methods[1]))
                {
                    MINUTEExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("SECOND") && model.ForecastTime.Minute == Convert.ToInt32(Methods[1]))
                {
                    SECONDExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("YMD") && model.ForecastTime.ToString("yyyyMMdd").Equals(Methods[1]))
                {
                    YMDExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("MD") && model.ForecastTime.ToString("MMdd").Equals(Methods[1]))
                {
                    MDExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("CHINESEMD") && (new ChineseDate(model.ForecastTime).LunarMonth + new ChineseDate(model.ForecastTime).LunarDay).Trim().Equals(Methods[1]))
                {
                    //九月廿三日
                    CHINESEMDExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("MIWEEKS") && (
                        model.ForecastTime.Month.ToString().PadLeft(2, '0') +
                        CalculatePoint.GetWeekNumInMonth(model.ForecastTime).ToString().PadLeft(2, '0') +
                        ((int)model.ForecastTime.DayOfWeek).ToString().PadLeft(2, '0')
                        ).Equals(Methods[1]))
                {
                    MIWEEKSExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
                if (Methods[0].Equals("EVENT"))
                {
                    EVENTExtend(firstName, pointRulerProduct, item, ref thisCalResult);
                    continue;
                }
            }
        }
示例#7
0
 private static void CHINESEMDExtend(string firstName, PointRulerProductModel pointRulerProduct, KeyValuePair <string, PointRuler> item, CalculatePointModel thisCalResult)
 {
     thisCalResult = CalculatePoint.OUTEqChineseMD(item.Value, thisCalResult);
     pointRulerProduct.CalMethods.Add(new CalMethodModel {
         CalMethod = firstName + item.Key, PointChangeLog = thisCalResult.ProducePoints, CalAmount = thisCalResult.ProduceAmounts
     });
     pointRulerProduct.TotalProducePoints  += thisCalResult.ProducePoints;
     pointRulerProduct.TotalProduceAmounts += thisCalResult.ProduceAmounts;
     CalculatePoint.ChangeOUTCalculatePointModel(thisCalResult);
 }
示例#8
0
        private static void OUTCheckOnlyRule(ForecastPointModel model, List <KeyValuePair <string, PointRuler> > ListOnlyRules, PointRulerProductModel pointRulerProduct, ref bool hasOnlyRules)
        {
            const string firstName = "OUT_OnlyRule:"; var thisCalResult = new CalculatePointModel {
                OldAmounts = model.Amount, OldPoints = model.Points
            };

            foreach (var item in ListOnlyRules)
            {
                var Methods = item.Key.Split('_');
                if (Methods[0].Equals("BASE"))
                {
                    hasOnlyRules = true;
                    BaseExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("YEAE") && model.ForecastTime.Year == Convert.ToInt32(Methods[1]))
                {
                    hasOnlyRules = true;
                    YEAEExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("MONTH") && model.ForecastTime.Month == Convert.ToInt32(Methods[1]))
                {
                    hasOnlyRules = true;
                    MONTHExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("DAY") && model.ForecastTime.Day == Convert.ToInt32(Methods[1]))
                {
                    hasOnlyRules = true;
                    DAYExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("WEEK") && (int)model.ForecastTime.DayOfWeek == Convert.ToInt32(Methods[1]))
                {
                    hasOnlyRules = true;
                    WEEKExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("HOUR") && model.ForecastTime.Hour == Convert.ToInt32(Methods[1]))
                {
                    hasOnlyRules = true;
                    HOURExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("MINUTE") && model.ForecastTime.Minute == Convert.ToInt32(Methods[1]))
                {
                    hasOnlyRules = true;
                    MINUTEExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("SECOND") && model.ForecastTime.Minute == Convert.ToInt32(Methods[1]))
                {
                    hasOnlyRules = true;
                    SECONDExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("YMD") && model.ForecastTime.ToString("yyyyMMdd").Equals(Methods[1]))
                {
                    hasOnlyRules = true;
                    YMDExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("MD") && model.ForecastTime.ToString("MMdd").Equals(Methods[1]))
                {
                    hasOnlyRules = true;
                    MDExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("CHINESEMD") && (new ChineseDate(model.ForecastTime).LunarMonth + new ChineseDate(model.ForecastTime).LunarDay).Trim().Equals(Methods[1]))
                {
                    //九月廿三日
                    hasOnlyRules = true;
                    CHINESEMDExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("MIWEEKS") && (
                        model.ForecastTime.Month.ToString().PadLeft(2, '0') +
                        CalculatePoint.GetWeekNumInMonth(model.ForecastTime).ToString().PadLeft(2, '0') +
                        ((int)model.ForecastTime.DayOfWeek).ToString().PadLeft(2, '0')
                        ).Equals(Methods[1]))
                {
                    hasOnlyRules = true;
                    MIWEEKSExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
                if (Methods[0].Equals("EVENT"))
                {
                    hasOnlyRules = true;
                    EVENTExtend(firstName, pointRulerProduct, item, thisCalResult);
                    return;
                }
            }
        }
        private static CalculatePointModel OUTAmountNo0(bool deduction, bool plusOrMinus, Int64 point, Int64 amount, int multiple, CalculatePointModel calData)
        {
            if (point == 0 && multiple != 0)
            {
                calData.NewPoints      = calData.OldPoints;
                calData.ProducePoints  = 0;
                calData.ProduceAmounts = amount * multiple;
                calData.NewAmounts     = calData.OldAmounts - calData.ProduceAmounts;
                if (!deduction && calData.NewAmounts <= 0)
                {
                    calData.ProduceAmounts = 0;
                    calData.NewAmounts     = calData.OldAmounts;
                }
                return(calData);
            }
            if (point == 0 && multiple == 0)
            {
                calData.NewPoints      = calData.OldPoints;
                calData.ProducePoints  = 0;
                calData.ProduceAmounts = amount;
                calData.NewAmounts     = calData.OldAmounts - calData.ProduceAmounts;
                if (!deduction && calData.NewAmounts <= 0)
                {
                    calData.ProduceAmounts = 0;
                    calData.NewAmounts     = calData.OldAmounts;
                }
                return(calData);
            }
            if (point != 0 && multiple == 0)
            {
                if (calData.OldPoints == 0)
                {
                    return(calData);
                }
                var count = calData.OldPoints / point;
                if (calData.OldAmounts > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        if (!deduction && calData.OldAmounts - calData.ProduceAmounts - amount <= 0)
                        {
                            break;
                        }
                        calData.ProduceAmounts += amount;
                        calData.ProducePoints  += point;
                        if (!plusOrMinus)
                        {
                            calData.ProducePoints -= point;
                        }
                        if (calData.OldAmounts - calData.ProduceAmounts <= 0)
                        {
                            break;
                        }
                    }
                }

                if (!plusOrMinus)
                {
                    calData.ProducePoints = -calData.ProducePoints;
                }
                calData.NewPoints  = calData.OldPoints + calData.ProducePoints;
                calData.NewAmounts = calData.OldAmounts - calData.ProduceAmounts;
                return(calData);
            }

            if (point != 0 && multiple != 0)
            {
                if (calData.OldPoints == 0)
                {
                    return(calData);
                }
                var count = calData.OldPoints / point;
                if (calData.OldAmounts > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        calData.ProduceAmounts += amount * multiple;
                        calData.ProducePoints  += point;
                        if (!plusOrMinus)
                        {
                            calData.ProducePoints -= point;
                        }
                        if (calData.OldAmounts - calData.ProduceAmounts <= 0)
                        {
                            break;
                        }
                    }
                }
                if (!plusOrMinus)
                {
                    calData.ProducePoints = -calData.ProducePoints;
                }
                calData.NewPoints  = calData.OldPoints + calData.ProducePoints;
                calData.NewAmounts = calData.OldAmounts - calData.ProduceAmounts;
                return(calData);
            }
            return(calData);
        }
        private static CalculatePointModel OUTAmount0(bool plusOrMinus, Int64 point, Int64 multiple, CalculatePointModel calData)
        {
            if (point != 0 && multiple != 0)
            {
                calData.NewAmounts    = calData.OldAmounts;
                calData.ProducePoints = point * multiple;
                if (!plusOrMinus)
                {
                    calData.ProducePoints = -calData.ProducePoints;
                }
                calData.NewPoints      = calData.OldPoints + calData.ProducePoints;
                calData.ProduceAmounts = 0;
                return(calData);
            }
            if (point != 0 && multiple == 0)
            {
                calData.NewAmounts    = calData.OldAmounts;
                calData.ProducePoints = point;
                if (!plusOrMinus)
                {
                    calData.ProducePoints = -calData.ProducePoints;
                }
                calData.NewPoints      = calData.OldPoints + calData.ProducePoints;
                calData.ProduceAmounts = 0;
                return(calData);
            }

            calData.NewPoints      = calData.OldPoints;
            calData.NewAmounts     = calData.OldAmounts;
            calData.ProducePoints  = 0;
            calData.ProduceAmounts = 0;
            return(calData);
        }
        private static CalculatePointModel INPointNo0(bool plusOrMinus, Int64 point, Int64 amount, int multiple, CalculatePointModel calData)
        {
            if (amount == 0 && multiple != 0)
            {
                calData.NewAmounts     = calData.OldAmounts;
                calData.ProduceAmounts = 0;
                calData.ProducePoints  = point * multiple;
                if (!plusOrMinus)
                {
                    calData.ProducePoints = -calData.ProducePoints;
                }
                calData.NewPoints = calData.OldPoints + calData.ProducePoints;

                return(calData);
            }
            if (amount == 0 && multiple == 0)
            {
                calData.NewAmounts     = calData.OldAmounts;
                calData.ProduceAmounts = 0;
                calData.ProducePoints  = point;
                if (plusOrMinus)
                {
                    calData.NewPoints = calData.OldPoints + calData.ProducePoints;
                }
                else
                {
                    calData.ProducePoints = -point;
                    calData.NewPoints     = calData.OldPoints + calData.ProducePoints;
                }
                return(calData);
            }
            if (amount != 0 && multiple == 0)
            {
                var count = calData.OldAmounts / amount;
                calData.ProduceAmounts = amount * count;
                calData.NewAmounts     = calData.OldAmounts - (calData.ProduceAmounts);
                calData.ProducePoints  = point * count;
                if (plusOrMinus)
                {
                    calData.NewPoints = calData.OldPoints + calData.ProducePoints;
                }
                else
                {
                    calData.ProducePoints = -calData.ProducePoints;
                    calData.NewPoints     = calData.OldPoints + calData.ProducePoints;
                }
                return(calData);
            }
            if (amount != 0 && multiple != 0)
            {
                var count = calData.OldAmounts / amount;
                calData.ProduceAmounts = amount * count;
                calData.NewAmounts     = calData.OldAmounts - (calData.ProduceAmounts);
                calData.ProducePoints  = point * count * multiple;
                if (plusOrMinus)
                {
                    calData.NewPoints = calData.OldPoints + calData.ProducePoints;
                }
                else
                {
                    calData.ProducePoints = -calData.ProducePoints;
                    calData.NewPoints     = calData.OldPoints + calData.ProducePoints;
                }
                return(calData);
            }
            return(calData);
        }