初步计算

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