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;
}
}
}