예제 #1
0
        public static DataTable CreateCostQueryDataTable(ResultCostQuery result)
        {
            Dictionary<string, ColType> Dir = new Dictionary<string, ColType>();
            Dir.Add("时间", ColType.NTSString);
            Dir.Add(string.Format("{0}量总值({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
            Dir.Add(string.Format("{0}费总值(元)", result.FeeTbl.EneType), ColType.NTSString);
            switch ((FeeType)Enum.Parse(typeof(FeeType), result.FeeType))
            {
                case FeeType.分时计费:
                    Dir.Add(string.Format("尖时{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                    Dir.Add(string.Format("尖时{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    Dir.Add(string.Format("峰时{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                    Dir.Add(string.Format("峰时{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    Dir.Add(string.Format("平时{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                    Dir.Add(string.Format("平时{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    Dir.Add(string.Format("谷时{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                    Dir.Add(string.Format("谷时{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    break;
                case FeeType.阶梯计费:
                    if (result.StepSettingID.Contains(4))
                    {
                        Dir.Add(string.Format("第四档{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                        Dir.Add(string.Format("第四档{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    }
                    if (result.StepSettingID.Contains(1))
                    {
                        Dir.Add(string.Format("第一档{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                        Dir.Add(string.Format("第一档{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    }
                    if (result.StepSettingID.Contains(2))
                    {
                        Dir.Add(string.Format("第二档{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                        Dir.Add(string.Format("第二档{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    }
                    if (result.StepSettingID.Contains(3))
                    {
                        Dir.Add(string.Format("第三档{0}量({1})", result.FeeTbl.EneType, result.Unit), ColType.NTSString);
                        Dir.Add(string.Format("第三档{0}费(元)", result.FeeTbl.EneType), ColType.NTSString);
                    }

                    break;
            }

            return TableTool.CreateTable(Dir);
        }
예제 #2
0
        public ResultCostQuery GetCostQuery(QueryCost query)
        {
            ResultCostQuery result = new ResultCostQuery()
            {
                FeePie = new PieHighChart() { series = new List<Series>() },
                FeeQueryCharts = new QuotaHighChart() { series = new List<EneryAnalyseSeries>() },
                FeeAnalyses = new FeeAnalyses(),
                FeeTbl = new FeeTbl() { FeeList = new List<List<string>>() }
            };

            result.FeePie.series.Add(new Series() { data = new List<EneryHighChart>() });

            #region itemCodeList
            List<Model.Itemcode> itemCodeList = new List<Model.Itemcode>();

            if (query.ItemCode == "00000")
            {//总能耗
                itemCodeList = new BLL.Itemcode().GetItemcodeList(" and ParentID=0 ", " order by ItemcodeID");
                result.Unit = "T";//标准煤单位
            }
            else
            {
                itemCodeList = new BLL.Itemcode().GetItemcodeList(" and ItemCodeNumber='" + query.ItemCode + "'", " order by ItemcodeID");
                if (itemCodeList.Count > 0)
                {
                    result.Unit = itemCodeList[0].Unit;//单个分类分项单位
                    result.FeeTbl.Unit = itemCodeList[0].Unit;
                    result.FeeTbl.EneType = itemCodeList[0].ItemCodeName;
                    result.FeeAnalyses.EnergyUnit = result.Unit;
                }
            }
            #endregion

            #region 生成EndTime

            switch (query.Particle)
            {
                case Particle.Month://月 query.StartTime格式为yyyy-MM-01
                    query.EndTime = query.StartTime.AddMonths(1).AddDays(-1);

                    int day = DateTime.Now.Day;
                    if (query.StartTime.Year == DateTime.Now.Year && query.StartTime.Month == DateTime.Now.Month)//月、年第一天不算进去
                    {//当月
                        query.EndTime = DateTime.Now.AddDays(-1);//精确到前一天的能耗值
                    }
                    break;
                case Particle.Year://年  query.StartTime格式为yyyy-01-01
                    query.EndTime = query.StartTime.AddYears(1).AddMonths(-1).AddDays(-1);
                    if (query.StartTime.Year == DateTime.Now.Year)//月、年第一天不算进去
                    {
                        query.EndTime = DateTime.Now.AddDays(-1);
                    }
                    break;
                default:
                    query.EndTime = query.StartTime.AddMonths(1).AddDays(-1);
                    if (query.StartTime.Year == DateTime.Now.Year && query.StartTime.Month == DateTime.Now.Month)
                    {
                        query.EndTime = DateTime.Now.AddDays(-1);
                    }
                    break;
            }
            #endregion
            Dictionary<string, EnergyValueCost> tempConvert = new Dictionary<string, EnergyValueCost>();
            tempConvert = GetSingleItemCodeValue(query, itemCodeList);

            if (tempConvert.Count > 0)
            {
                result.FeeType = FeeType.平时计费.ToString();

                #region 绑定Highchart

                #region 绑定Highchart
                result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                {
                    name = "平时费用",
                    data = (from item in tempConvert select decimal.Round(item.Value.EnergyCost, 2)).ToList()
                });
                #endregion

                #region 绑定饼图
                result.FeePie.series[0].data.Add(new EneryHighChart()
                {
                    name = "平时费用",
                    y = decimal.Round(decimal.Parse(tempConvert.Select(t => t.Value.EnergyCost).Sum().ToString()), 2)
                });

                #endregion

                #endregion

                #region 绑定表格

                foreach (var item in tempConvert)
                {
                    string time = "";
                    switch (query.Particle)
                    {
                        case Particle.Month:
                            time = item.Key;
                            break;
                        case Particle.Year:
                            time = item.Key.Substring(0, item.Key.LastIndexOf('-'));
                            break;
                    }
                    List<string> fl = new List<string>();

                    fl.Add(time);

                    fl.Add(item.Value.EnergyValue.ToString("0.00"));
                    fl.Add((item.Value.EnergyCost).ToString("0.00"));

                    result.FeeTbl.FeeList.Add(fl);
                }
                #endregion

                #region 绑定分析

                result.FeeAnalyses.TotalEnergy = decimal.Round(
                  decimal.Parse(tempConvert.Select(t => t.Value.EnergyValue).Sum().ToString()), 2);
                result.FeeAnalyses.TotalVal = decimal.Round(
                   decimal.Parse(tempConvert.Select(t => t.Value.EnergyCost).Sum().ToString()), 2);
                result.FeeAnalyses.MaxVal = decimal.Round(
                  decimal.Parse(tempConvert.Select(t => t.Value.EnergyCost).Max().ToString()), 2);
                result.FeeAnalyses.MinVal = decimal.Round(
                   decimal.Parse(tempConvert.Select(t => t.Value.EnergyCost).Min().ToString()), 2);
                result.FeeAnalyses.AvgVal = decimal.Round(
                    decimal.Parse(tempConvert.Select(t => t.Value.EnergyCost).Average().ToString()), 2);
                #endregion

                if (query.Particle==Particle.Month)
                {
                    query.StartTime = query.StartTime.AddMonths(-1);
                    query.EndTime = query.EndTime.AddMonths(-1);
                }
                else
                {
                    query.StartTime = query.StartTime.AddYears(-1);
                    query.EndTime = query.EndTime.AddYears(-1);
                }

                tempConvert = GetSingleItemCodeValue(query, itemCodeList);
                result.FeeAnalyses.EnergyLastMonth = decimal.Round(
                      decimal.Parse(tempConvert.Select(t => t.Value.EnergyCost).Sum().ToString()), 2);
                if (result.FeeAnalyses.EnergyLastMonth > 0)
                {
                    result.FeeAnalyses.CompareLastMonth = decimal.Round(100 * (result.FeeAnalyses.TotalVal - result.FeeAnalyses.EnergyLastMonth) / result.FeeAnalyses.EnergyLastMonth, 2)
                                 .ToString(CultureInfo.InvariantCulture) + "%";
                }
            }
            else
            {
                return null;
            }

            return result;
        }
예제 #3
0
        public ResultCostQuery GetCostQuery4Demo(QueryCost query)
        {
            ResultCostQuery result = new ResultCostQuery()
            {
                FeePie = new PieHighChart() { series = new List<Series>() },
                FeeQueryCharts = new QuotaHighChart() { series = new List<EneryAnalyseSeries>() },
                FeeAnalyses = new FeeAnalyses(),
                FeeTbl = new FeeTbl() { FeeList = new List<List<string>>() }
            };

            result.FeePie.series.Add(new Series() { data = new List<EneryHighChart>() });

            #region itemCodeList
            List<Model.Itemcode> itemCodeList = new List<Model.Itemcode>();

            if (query.ItemCode == "00000")
            {//总能耗
                itemCodeList = new BLL.Itemcode().GetItemcodeList(" and ParentID=0 ", " order by ItemcodeID");
                result.Unit = "T";//标准煤单位
            }
            else
            {
                itemCodeList = new BLL.Itemcode().GetItemcodeList(" and ItemCodeNumber='" + query.ItemCode + "'", " order by ItemcodeID");
                if (itemCodeList.Count > 0)
                {
                    result.Unit = itemCodeList[0].Unit;//单个分类分项单位
                    result.FeeTbl.Unit = itemCodeList[0].Unit;
                    result.FeeTbl.EneType = itemCodeList[0].ItemCodeName;
                    result.FeeAnalyses.EnergyUnit = result.Unit;
                }
            }
            #endregion

            #region 生成EndTime

            switch (query.Particle)
            {
                case Particle.Month://月 query.StartTime格式为yyyy-MM-01
                    query.EndTime = query.StartTime.AddMonths(1).AddDays(-1);
                    int day = DateTime.Now.Day;
                    if (query.StartTime.Year == DateTime.Now.Year && query.StartTime.Month == DateTime.Now.Month)//月、年第一天不算进去
                    {//当月
                        query.EndTime = DateTime.Now.AddDays(-1);//精确到前一天的能耗值
                    }
                    break;
                case Particle.Year://年  query.StartTime格式为yyyy-01-01
                    query.EndTime = query.StartTime.AddYears(1).AddMonths(-1);
                    if (query.StartTime.Year == DateTime.Now.Year)//月、年第一天不算进去
                    {
                        query.EndTime = DateTime.Now.AddDays(-1);
                    }
                    break;
                default:
                    query.EndTime = query.StartTime.AddMonths(1).AddDays(-1);
                    if (query.StartTime.Year == DateTime.Now.Year && query.StartTime.Month == DateTime.Now.Month)
                    {
                        query.EndTime = DateTime.Now.AddDays(-1);
                    }
                    break;
            }
            #endregion

            var cost = GenerateCost(query);

            if (cost.Count > 0)
            {
                result.FeeType = ((FeeType)cost[0].PAYMENT_TYPE).ToString();

                #region 绑定Highchart
                switch (((FeeType)cost[0].PAYMENT_TYPE))
                {
                    case FeeType.分时计费:
                        #region 绑定Highchart
                        result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                        {
                            name = "尖时费用",
                            data = (from item in cost select decimal.Round(decimal.Parse(item.SHARP_COST.ToString()), 2)).ToList()
                        });
                        result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                        {
                            name = "峰时费用",
                            data = (from item in cost select decimal.Round(decimal.Parse(item.HIGH_COST.ToString()), 2)).ToList()
                        });
                        result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                        {
                            name = "平时费用",
                            data = (from item in cost select decimal.Round(decimal.Parse(item.MID_COST.ToString()), 2)).ToList()
                        });
                        result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                        {
                            name = "谷时费用",
                            data = (from item in cost select decimal.Round(decimal.Parse(item.LOW_COST.ToString()), 2)).ToList()
                        });
                        #endregion

                        #region 绑定饼图

                        result.FeePie.series[0].data.Add(new EneryHighChart()
                        {
                            name = "尖时费用",
                            y = decimal.Round(decimal.Parse(cost.Select(t => t.SHARP_COST).Sum().ToString()), 2)
                        });
                        result.FeePie.series[0].data.Add(new EneryHighChart()
                        {
                            name = "峰时费用",
                            y = decimal.Round(decimal.Parse(cost.Select(t => t.HIGH_COST).Sum().ToString()), 2)
                        });
                        result.FeePie.series[0].data.Add(new EneryHighChart()
                        {
                            name = "平时费用",
                            y = decimal.Round(decimal.Parse(cost.Select(t => t.MID_COST).Sum().ToString()), 2)
                        });
                        result.FeePie.series[0].data.Add(new EneryHighChart()
                        {
                            name = "谷时费用",
                            y = decimal.Round(decimal.Parse(cost.Select(t => t.LOW_COST).Sum().ToString()), 2)
                        });

                        #endregion
                        break;
                    case FeeType.平时计费:

                        #region 绑定Highchart
                        result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                        {
                            name = "平时费用",
                            data = (from item in cost select decimal.Round(decimal.Parse(item.TOTAL_COST.ToString()), 2)).ToList()
                        });
                        #endregion

                        #region 绑定饼图
                        result.FeePie.series[0].data.Add(new EneryHighChart()
                        {
                            name = "平时费用",
                            y = decimal.Round(decimal.Parse(cost.Select(t => t.MID_COST).Sum().ToString()), 2)
                        });

                        #endregion

                        break;
                    case FeeType.阶梯计费:

                        //1 峰 2 平 3 谷 4 尖
                        var stepsetting = _idal.GetStepSetting(query.ItemCode);

                        result.StepSettingID = (from i in stepsetting select i.GEARSID).ToList<int>();
                        if (result.StepSettingID.Contains(1))
                        {
                            result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                            {
                                name = "第一档费用",
                                data = (from item in cost select decimal.Round(decimal.Parse(item.HIGH_COST.ToString()), 2)).ToList()
                            });
                            result.FeePie.series[0].data.Add(new EneryHighChart()
                            {
                                name = "第一档费用",
                                y = decimal.Round(decimal.Parse(cost.Select(t => t.HIGH_COST).Sum().ToString()), 2)
                            });
                        }
                        if (result.StepSettingID.Contains(2))
                        {
                            result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                            {
                                name = "第二档费用",
                                data = (from item in cost select decimal.Round(decimal.Parse(item.MID_COST.ToString()), 2)).ToList()
                            });
                            result.FeePie.series[0].data.Add(new EneryHighChart()
                            {
                                name = "第二档费用",
                                y = decimal.Round(decimal.Parse(cost.Select(t => t.MID_COST).Sum().ToString()), 2)
                            });
                        }
                        if (result.StepSettingID.Contains(3))
                        {
                            result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                            {
                                name = "第三档费用",
                                data = (from item in cost select decimal.Round(decimal.Parse(item.LOW_COST.ToString()), 2)).ToList()
                            });
                            result.FeePie.series[0].data.Add(new EneryHighChart()
                            {
                                name = "第三档费用",
                                y = decimal.Round(decimal.Parse(cost.Select(t => t.LOW_COST).Sum().ToString()), 2)
                            });
                        }
                        if (result.StepSettingID.Contains(4))
                        {
                            result.FeeQueryCharts.series.Add(new EneryAnalyseSeries()
                            {
                                name = "第四档费用",
                                data = (from item in cost select decimal.Round(decimal.Parse(item.SHARP_COST.ToString()), 2)).ToList()
                            });
                            result.FeePie.series[0].data.Add(new EneryHighChart()
                            {
                                name = "第四档费用",
                                y = decimal.Round(decimal.Parse(cost.Select(t => t.SHARP_COST).Sum().ToString()), 2)
                            });
                        }

                        break;
                }

                #endregion

                #region 绑定表格

                foreach (var item in cost)
                {
                    string time = "";
                    switch (query.Particle)
                    {
                        case Particle.Month:
                            time = item.TIMEID.ToString("yyyy-MM-dd");
                            break;
                        case Particle.Year:
                            time = item.TIMEID.Year + "-" + item.TIMEID.Month;
                            break;
                    }
                    List<string> fl = new List<string>();

                    fl.Add(time);
                    switch (((FeeType)cost[0].PAYMENT_TYPE))
                    {
                        case FeeType.分时计费:
                            fl.Add(item.TOTAL.ToString("0.00"));
                            fl.Add(item.TOTAL_COST.ToString("0.00"));
                            fl.Add(item.SHARP.ToString("0.00"));
                            fl.Add(item.SHARP_COST.ToString("0.00"));
                            fl.Add(item.HIGH.ToString("0.00"));
                            fl.Add(item.HIGH_COST.ToString("0.00"));
                            fl.Add(item.MID.ToString("0.00"));
                            fl.Add(item.MID_COST.ToString("0.00"));
                            fl.Add(item.LOW.ToString("0.00"));
                            fl.Add(item.LOW_COST.ToString("0.00"));
                            break;
                        case FeeType.平时计费:
                            fl.Add(item.TOTAL.ToString("0.00"));
                            fl.Add(item.TOTAL_COST.ToString("0.00"));

                            break;
                        case FeeType.阶梯计费:
                            fl.Add(item.TOTAL.ToString("0.00"));
                            fl.Add(item.TOTAL_COST.ToString("0.00"));

                            if (result.StepSettingID.Contains(1))
                            {
                                fl.Add(item.HIGH.ToString("0.00"));
                                fl.Add(item.HIGH_COST.ToString("0.00"));
                            }
                            if (result.StepSettingID.Contains(2))
                            {
                                fl.Add(item.MID.ToString("0.00"));
                                fl.Add(item.MID_COST.ToString("0.00"));
                            }
                            if (result.StepSettingID.Contains(3))
                            {
                                fl.Add(item.LOW.ToString("0.00"));
                                fl.Add(item.LOW_COST.ToString("0.00"));
                            }
                            if (result.StepSettingID.Contains(4))
                            {
                                fl.Add(item.SHARP.ToString("0.00"));
                                fl.Add(item.SHARP_COST.ToString("0.00"));
                            }

                            break;
                    }

                    result.FeeTbl.FeeList.Add(fl);
                }
                #endregion

                #region 绑定分析

                result.FeeAnalyses.TotalEnergy = decimal.Round(
                  decimal.Parse(cost.Select(t => t.TOTAL).Sum().ToString()), 2);
                result.FeeAnalyses.TotalVal = decimal.Round(
                   decimal.Parse(cost.Select(t => t.TOTAL_COST).Sum().ToString()), 2);
                result.FeeAnalyses.MaxVal = decimal.Round(
                  decimal.Parse(cost.Select(t => t.TOTAL_COST).Max().ToString()), 2);
                result.FeeAnalyses.MinVal = decimal.Round(
                   decimal.Parse(cost.Select(t => t.TOTAL_COST).Min().ToString()), 2);
                result.FeeAnalyses.AvgVal = decimal.Round(
                    decimal.Parse(cost.Select(t => t.TOTAL_COST).Average().ToString()), 2);
                #endregion

                query.StartTime = query.StartTime.AddMonths(-1);
                query.EndTime = query.EndTime.AddMonths(-1);
                cost = GenerateCost(query);
                result.FeeAnalyses.EnergyLastMonth = decimal.Round(
                      decimal.Parse(cost.Select(t => t.TOTAL_COST).Sum().ToString()), 2);
                if (result.FeeAnalyses.EnergyLastMonth > 0)
                {
                    result.FeeAnalyses.CompareLastMonth = decimal.Round(100 * (result.FeeAnalyses.TotalVal - result.FeeAnalyses.EnergyLastMonth) / result.FeeAnalyses.EnergyLastMonth, 2)
                                 .ToString(CultureInfo.InvariantCulture) + "%";
                }
            }
            else
            {
                return null;
            }

            return result;
        }