123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- using MathNet.Numerics.LinearAlgebra.Double;
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace TEAMModelOS.SDK.Models.Service.BI
- {
- public static class BICommonWay
- {
- /// <summary>
- /// 字串类型分割成double类型数组,在指定位置赋值
- /// </summary>
- /// <param name="source">需要分割的字符</param>
- /// <param name="splitChar">分割字符</param>
- /// <param name="indexes">索引</param>
- /// <param name="num">需要加减数量</param>
- /// <returns></returns>
- public static string SplitStr(string source, char splitChar, int indexes, int num)
- {
- string str = null;
- if (source != null)
- {
- double[] temps = Array.ConvertAll<string, double>(source.Split(splitChar), s => double.Parse(s));
- temps[indexes] = temps[indexes] + num;
- str = string.Join(splitChar, temps);
- }
- if (str != null)
- return str;
- else
- return source;
- }
- /// <summary>
- /// 多个拼接in条件
- /// </summary>
- /// <param name="condName"></param>
- /// <param name="scIds"></param>
- /// <returns></returns>
- public static string ManyScSql(string condName, List<string> scIds, string addStr = null)
- {
- StringBuilder scSql = new();
- if (scIds.Count > 0)
- {
- scSql.Append($" {condName} in (");
- for (int i = 0; i < scIds.Count; i++)
- {
- if (i == scIds.Count - 1)
- {
- if (string.IsNullOrEmpty(addStr))
- scSql.Append($"'{scIds[i]}'");
- else
- scSql.Append($"'{addStr}{scIds[i]}'");
- }
- else
- {
- if (string.IsNullOrEmpty(addStr))
- scSql.Append($"'{scIds[i]}',");
- else
- scSql.Append($"'{addStr}{scIds[i]}',");
- }
- }
- scSql.Append($" )");
- }
- return scSql.ToString();
- }
- /// <summary>
- /// 每列合并 多个数组合并成一个数组 列合并
- /// </summary>
- /// <param name="doubles"></param>
- /// <returns></returns>
- public static List<double> ManyDoubleMerge(List<List<double>> doubles)
- {
- List<double> retDou = new();
- if (doubles.Count > 0)
- {
- var artYear = DenseMatrix.OfColumns(doubles);
- //var rc = artYear.RowCount;
- var cc = artYear.ColumnCount;
- for (int i = 0; i < artYear.RowCount; i++)
- {
- retDou.Add(artYear.SubMatrix(i, 1, 0, cc).ColumnSums().Sum());
- }
- }
- return retDou;
- }
- /// <summary>
- /// 计算一年中每周的数据
- /// </summary>
- /// <param name="doubles"></param>
- /// <param name="dateTime"></param>
- /// <returns></returns>
- public static List<double> weekDoubleMerge(List<List<double>> doubles, DateTimeOffset dateTime)
- {
- List<double> weekTrend = new();
- if (doubles.Count > 0)
- {
- int year = dateTime.Year;
- int dayOfweek = (int)DateTimeOffset.Parse($"{year}-1-1").DayOfWeek;
- int currentTime = dateTime.DayOfYear / 7 + 1;
- int currentTime1 = dateTime.DayOfYear / 7;
- int days = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 366 : days = 365;
- var bmatrix = DenseMatrix.OfColumns(doubles);
- //开学第一周周内开课
- if (dayOfweek == 0)
- {
- dayOfweek = 7;
- }
- //第一周多少天
- var dd = 7 - dayOfweek + 1;
- //一年有几周
- int sweeks = days / 7;
- //查询天数
- int dayYear = 0;
- if (currentTime > 0)
- {
- for (int i = 0; i < currentTime; i++)
- {
- if (i == 0)
- {
- var bsum = bmatrix.SubMatrix(dayYear, dd, 0, bmatrix.ColumnCount).ColumnSums().Sum();
- dayYear += dd;
- //weeks.Add(i, bsum);
- weekTrend.Add(bsum);
- }
- else
- {
- var bsum = bmatrix.SubMatrix(dayYear, 7, 0, bmatrix.ColumnCount).ColumnSums().Sum();
- dayYear += 7;
- //weeks.Add(i, bsum);
- weekTrend.Add(bsum);
- }
- }
- }
- //最后一周是否有余
- int stary = days - dayYear;
- if (stary > 0 && stary < 7)
- {
- var bsum = bmatrix.SubMatrix(dayYear, stary - 1, 0, bmatrix.ColumnCount).ColumnSums().Sum();
- //weeks.Add((sweeks + 1), bsum);
- weekTrend.Add(bsum);
- }
- }
- return weekTrend;
- }
- }
- }
|