using MathNet.Numerics.LinearAlgebra.Double; using System; using System.Collections.Generic; using System.Text; namespace TEAMModelOS.SDK.Models.Service.BI { public static class BICommonWay { /// /// 字串类型分割成double类型数组,在指定位置赋值 /// /// 需要分割的字符 /// 分割字符 /// 索引 /// 需要加减数量 /// public static string SplitStr(string source, char splitChar, int indexes, int num) { string str = null; if (source != null) { double[] temps = Array.ConvertAll(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; } /// /// 多个拼接in条件 /// /// /// /// public static string ManyScSql(string condName, List 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(); } /// /// 每列合并 多个数组合并成一个数组 列合并 /// /// /// public static List ManyDoubleMerge(List> doubles) { List 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; } /// /// 计算一年中每周的数据 /// /// /// /// public static List weekDoubleMerge(List> doubles, DateTimeOffset dateTime) { List 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; } } }