初步计算

parent c9cf2065
......@@ -49,7 +49,7 @@ public class PerData : IPerData
/// <summary>
/// 1 汇总 2原始数据
/// </summary>
public Nullable<int> IsSum { get; set; }
public Nullable<int> IsTotal { get; set; }
/// <summary>
/// 行号
/// </summary>
......@@ -62,5 +62,6 @@ public class PerData : IPerData
/// 列坐标
/// </summary>
public int PointCell { get; set; }
public string SignID { get; set; }
}
}
......@@ -17,6 +17,10 @@ public class PerHeader
public int MergeRow { get; set; }
public int MergeCell { get; set; }
public string CellValue { get; set; }
/// <summary>
/// 1 汇总 2原始数据
/// </summary>
public int IsTotal { get; set; }
public int Level { get; set; }
public bool IsHasChildren => Children != null && Children.Any();
......@@ -25,7 +29,7 @@ public class PerHeader
public PerHeader() { }
public PerHeader(int pointRow, int pointCell, string cellName, int level, int mergeRow, int mergeCell, List<PerHeader> children)
public PerHeader(int pointRow, int pointCell, string cellName, int level, int mergeRow, int mergeCell, List<PerHeader> children, int isTotal)
{
PointRow = pointRow;
PointCell = pointCell;
......@@ -34,6 +38,8 @@ public PerHeader(int pointRow, int pointCell, string cellName, int level, int me
MergeRow = mergeRow;
MergeCell = mergeCell;
Children = children;
SignID = Guid.NewGuid().ToString("N");
IsTotal = isTotal;
}
}
}
......@@ -60,14 +60,23 @@ public class Cell
public object CellValue { get; set; }
public int MergeRow { get; set; }
public int MergeCell { get; set; }
public bool IsTotal { get; set; }
public bool IsNumValue { get; set; }
/// <summary>
/// 单元格注释
/// </summary>
public string Annotation { get; set; }
public Cell() { }
public Cell(int pointCell, object cellValue, int mergeRow, int mergeCell)
public Cell(int pointCell, object cellValue, int mergeRow, int mergeCell, bool isTotal, bool isNumValue, string annotation = "")
{
PointCell = pointCell;
CellValue = cellValue;
MergeRow = mergeRow;
MergeCell = mergeCell;
IsTotal = isTotal;
IsNumValue = isNumValue;
Annotation = annotation;
}
}
}
......@@ -63,7 +63,7 @@ public class im_data
/// <summary>
/// 1 汇总 2原始数据
/// </summary>
public Nullable<int> IsSum { get; set; }
public Nullable<int> IsTotal { get; set; }
/// <summary>
/// 是否带入系数计算 1 带入 2 不带入
......@@ -84,5 +84,9 @@ public class im_data
/// 单元格备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// SignID
/// </summary>
public string SignID { get; set; }
}
}
......@@ -56,8 +56,17 @@ public class im_header
public Nullable<int> MergeCell { get; set; }
/// <summary>
/// 1 汇总 2原始数据
/// </summary>
public Nullable<int> IsTotal { get; set; }
/// <summary>
/// 单元格内容
/// </summary>
public string CellValue { get; set; }
/// <summary>
/// SignID
/// </summary>
public string SignID { get; set; }
}
}
......@@ -76,17 +76,29 @@ public List<TEntity> GetEntities()
public List<TEntity> GetEntities(Expression<Func<TEntity, bool>> exp)
{
return context.Set<TEntity>().Where(exp).ToList();
return CompileQuery(exp).ToList();
}
public List<TEntity> GetEntitiesForPaging(int Page, int pageSize, Expression<Func<TEntity, bool>> exp)
{
return context.Set<TEntity>().Where(exp).Skip((Page - 1) * pageSize).Take(pageSize).ToList();
return CompileQuery(exp).Skip((Page - 1) * pageSize).Take(pageSize).ToList();
}
public TEntity GetEntity(Expression<Func<TEntity, bool>> exp)
{
return context.Set<TEntity>().FirstOrDefault(exp);
return CompileQuerySingle(exp);
}
private IEnumerable<TEntity> CompileQuery(Expression<Func<TEntity, bool>> exp)
{
var func = EF.CompileQuery((DbContext context, Expression<Func<TEntity, bool>> exps) => context.Set<TEntity>().Where(exp));
return func(context, exp);
}
private TEntity CompileQuerySingle(Expression<Func<TEntity, bool>> exp)
{
var func = EF.CompileQuery((DbContext context, Expression<Func<TEntity, bool>> exps) => context.Set<TEntity>().FirstOrDefault(exp));
return func(context, exp);
}
}
}
......@@ -32,8 +32,10 @@ public PerSheet Sheet(ISheet sheet)
return null;
var sheetRead = PerSheetDataFactory.GetDataRead(perSheet.SheetType);
perSheet.PerHeader = _perHeader.GetPerHeader(sheet, sheetRead.Point);
var headerReverse = _perHeader.GetPerHeaderReverse(sheet, sheetRead.Point);
var perHeader = _perHeader.GetPerHeader(sheet, sheetRead.Point);
var headerReverse = _perHeader.GetPerHeaderReverse(perHeader);
perSheet.PerHeader = perHeader;
perSheet.PerData = sheetRead.ReadData(sheet, headerReverse);
return perSheet;
}
......
......@@ -41,7 +41,7 @@ public PerSheet ProcessCompute(PerSheet sheet)
if (header.IsHasChildren)
{
var maxcell = header.Children.Max(t => t.PointCell);
var parentHead = new PerHeader(0, maxcell + 1, $" {header.CellValue}合计", 0, 1, 2, new List<PerHeader>());
var parentHead = new PerHeader(0, maxcell + 1, $" {header.CellValue}合计", 0, 1, 2, new List<PerHeader>(), 1);
perHeadList.Add(parentHead);
var typeClass = dataList.Where(t => header.Children.Select(s => s.CellValue).Contains(t.TypeName));
......@@ -49,21 +49,8 @@ public PerSheet ProcessCompute(PerSheet sheet)
foreach (var group in typeClass.GroupBy(t => t.UnitType))
{
pointcell++;
parentHead.Children.Add(new PerHeader(1, maxcell + pointcell, group.Key, 1, 1, 1, null));
foreach (var t in group.Where(t => t.CellValue.HasValue && t.CellValue.Value > 0).GroupBy(t => t.AccountingUnit))
{
var sd = new PerData
{
UnitType = group.Key,
AccountingUnit = t.Key,
CellValue = t.Sum(s => s.CellValue),
TypeName = group.Key,
RowNumber = 0,
IsSum = 1,
PointCell = maxcell + pointcell,
ComputRule = t.Select(s => s.ComputRule).Distinct().First()
};
}
var childHead = new PerHeader(1, maxcell + pointcell, group.Key, 1, 1, 1, null, 1);
parentHead.Children.Add(childHead);
var ds = group.Where(t => t.CellValue.HasValue && t.CellValue.Value > 0)
.GroupBy(t => t.AccountingUnit).Select(t => new PerData
{
......@@ -71,10 +58,11 @@ public PerSheet ProcessCompute(PerSheet sheet)
AccountingUnit = t.Key,
CellValue = t.Sum(s => s.CellValue),
TypeName = group.Key,
RowNumber = 0,
IsSum = 1,
RowNumber = t.FirstOrDefault()?.RowNumber ?? 0,
IsTotal = 1,
PointCell = maxcell + pointcell,
ComputRule = t.Select(s => s.ComputRule).Distinct().First()
ComputRule = t.Select(s => s.ComputRule).Distinct().First(),
SignID = childHead.SignID,
});
perDataList.AddRange(ds);
}
......
......@@ -50,9 +50,14 @@ public PerSheet MergeCompute(PerExcel excel)
foreach (var group in dataList.GroupBy(t => t.UnitType))
{
var typeName = $"{GetCleanSheetName(sheet.SheetName)}({ group.Key})";
//创建子集头部信息
PerHeader childHeader = new PerHeader(1, childPointCell, typeName, 1, 1, 1, null, 2);
headList.Add(childHeader);
var ds = group.Where(t => t.CellValue.HasValue && t.CellValue.Value > 0)
.GroupBy(t => t.AccountingUnit).Select(t => new PerData
{
SignID = childHeader.SignID,
UnitType = group.Key,
AccountingUnit = t.Key,
CellValue = t.Sum(s => s.IsFactor ? (s.CellValue * (s.FactorValue ?? 0)) : s.CellValue),
......@@ -62,13 +67,10 @@ public PerSheet MergeCompute(PerExcel excel)
});
perDataList.AddRange(ds);
//创建子集头部信息
PerHeader childHeader = new PerHeader(1, childPointCell, typeName, 1, 1, 1, null);
headList.Add(childHeader);
childPointCell++;
}
}
PerHeader header = new PerHeader(0, pointCell, EnumHelper.GetDescription(type), 1, 1, headList.Count, headList);
PerHeader header = new PerHeader(0, pointCell, EnumHelper.GetDescription(type), 1, 1, headList.Count, headList, 2);
compSheet.PerHeader.Add(header);
//父级列号为当前列号+子集个数
pointCell = pointCell + headList.Count;
......
......@@ -72,6 +72,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
PerData data = new PerData
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellValue,
......
......@@ -67,6 +67,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
PerData data = new PerData
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellValue,
......
......@@ -55,6 +55,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
PerData data = new PerData
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellValue,
......
......@@ -50,14 +50,18 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
continue;
var athead = vhead.ElementAt(c);
var cellValue = NopiSevice.GetCellValue(row.GetCell(athead.PointCell));
if (!cellValue.HasValue || cellValue.Value == 0)
continue;
PerData data = new PerData
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellValue,
CellValue = ConvertHelper.To<decimal?>(row.GetCell(athead.PointCell)?.ToString()),
CellValue = cellValue,
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
UnitType = unit.UnitType,
FactorValue = ConvertHelper.To<decimal?>(sheet.GetRow(unit.FactorRow.Value).GetCell(athead.PointCell)?.ToString()),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment