0
点赞
收藏
分享

微信扫一扫

C#_Dotnet core 计算列数据的总数


利用FastMember 把数据整成DataTable

下面代码有列名转换

设置允许为null

添加自定义属性等方法

最终数据格式,DataTable会自动转成 这种json数组

[
{
"deviceModel": "QTZ63(5610),QTZ40",
"deviceNumber": "1729-001,9999",
"extraReward": 129,
"id": 242,
"projectName": "火星供氧计划",
"rewardAmount": 300,
"settlementWorkerDetail": [
{
"reward": 229,
"worker": {
"userName": "",
"name": "海森堡",
"surname": "海森堡",
"emailAddress": "海森堡@dingding.com",
"isActive": true,
"fullName": "海森堡 海森堡",
"lastLoginTime": null,
"creationTime": "2020-05-26T17:45:26.8492917",
"dingTalkUserId": "",
"roleNames": null,
"organizationUnitIds": null,
"organizationUnits": null,
"phoneNumber": "",
"id": 21
},
"workerId": 21
}
],
"subTotalRewardAmount": 429,
"totalRewardAmount": 429,
"workContent": "工作内容有很多",
"workOrderSettlementId": 0,
"u_21": 229,
"editable": false
}]

public WorkOrderStatement ConvertGenericListToDataTable(List<WorkOrderWorkerSettlementDto> inputList, DateTime startDate, DateTime endDate)
{
WorkOrderStatement workOrderStatement = new WorkOrderStatement();
var userList = _workOrderWorkerManager.GetWorkerDetailList(startDate, endDate);

var dt = new DataTable("DataTable");

var newInputList = ObjectMapper.Map<List<ConvertGenericListToDataTable>>(inputList);


using (var reader = ObjectReader.Create(newInputList))
{
dt.Load(reader);
}
#region 转成中文列名

//foreach (DataColumn dataColumn in dt.Columns)
//{
// switch (dataColumn.ColumnName)
// {
// case "DeviceModel":
// dataColumn.ColumnName = "设备型号";
// break;
// case "ProjectName":
// dataColumn.ColumnName = "工地名称";
// break;
// case "WorkContent":
// dataColumn.ColumnName = "完成工作任务";
// break;
// case "RewardAmount":
// dataColumn.ColumnName = "完成任务产值";
// break;
// case "ExtraReward":
// dataColumn.ColumnName = "提取任务金额";
// break;
// case "DeviceNumber":
// dataColumn.ColumnName = "设备编号";
// break;
// case "TotalRewardAmount":
// dataColumn.ColumnName = "任务提取合计";
// break;
// case "SubTotalRewardAmount":
// dataColumn.ColumnName = "各人小计";
// break;
// default:
// break;
// }
//}
#endregion

#region 设置允许为null
foreach (DataColumn col in dt.Columns) col.AllowDBNull = true;
#endregion

#region 获取表头
List<TableHeader> tableHeaders = new List<TableHeader>();
for (int i = 0; i < dt.Columns.Count; i++)
{
var thead = new TableHeader
{
Index = i,
ColumnName = dt.Columns[i].ColumnName
};
tableHeaders.Add(thead);
}
#endregion
foreach (var user in userList)
{
dt.Columns.Add("u_" + user.Id, typeof(int));
int currentIndex = tableHeaders.Count();
var thead = new TableHeader
{
Index = currentIndex++,
ColumnName = user.Name,
UserId = user.Id
};
tableHeaders.Add(thead);
}
dt.Columns.Add("Editable", typeof(bool));
workOrderStatement.TableHeaders = tableHeaders;
#region 工人
foreach (DataRow rowItem in dt.Rows)
{
var newRows = ObjectMapper.Map<List<SettlementWorkerDetailDto>>(rowItem.ItemArray[6]);
if (newRows.Count > 0)
{
foreach (var newRowItemVal in newRows)
{
rowItem["u_" + newRowItemVal.Worker.Id] = newRowItemVal.Reward;
}
}
rowItem["Editable"] = rowItem["WorkOrderSettlementId"] != null && Convert.ToInt32(rowItem["WorkOrderSettlementId"]) != 0;
}
#endregion
#region 合计
var totalRewardAmount = dt.Compute("sum(TotalRewardAmount)", "True");
var subTotalRewardAmount = dt.Compute("sum(SubTotalRewardAmount)", "True");
DataRow rewardRow = dt.NewRow();
rewardRow["ProjectName"] = "小计";
rewardRow["TotalRewardAmount"] = totalRewardAmount;
rewardRow["SubTotalRewardAmount"] = subTotalRewardAmount;
foreach (var user in userList)
{
rewardRow["u_" + user.Id] = dt.Compute($"sum({"u_" + user.Id})", "True");
}
dt.Rows.Add(rewardRow);
#endregion
workOrderStatement.UserDT = dt;

return workOrderStatement;
}

using Abp.Application.Services.Dto;
using Abp.AutoMapper;
using DRMS.Dictionaries.Dtos;
using DRMS.WorkOrders;
using DRMS.WorkOrders.Dtos;
using System;
using System.Collections.Generic;
using System.Data;

namespace DRMS.WorkOrder.Dtos
{
[AutoMap(typeof(WorkOrderWorkerSettlement))]
public class WorkOrderWorkerSettlementDto : EntityDto<int>
{
/// <summary>
/// 工单
/// </summary>
public WorkOrderDto WorkOrder { get; set; }

/// <summary>
/// 工单ID
/// </summary>
public Guid WorkOrderId { get; set; }

/// <summary>
/// aa,bb,cc 设备型号
/// </summary>
public string DeviceModel { get; set; }

/// <summary>
/// aa,bb,cc 设备编号
/// </summary>
public string DeviceNumber { get; set; }

/// <summary>
/// 项目名称
/// </summary>
public string ProjectName { get; set; }

/// <summary>
/// 完成工作内容
/// </summary>
public string WorkContent { get; set; }

/// <summary>
/// 完成任务产值
/// </summary>
public decimal RewardAmount { get; set; }

/// <summary>
/// 提取任务金额
/// </summary>
public decimal ExtraReward { get; set; }

/// <summary>
/// 任务提取合计
/// </summary>
public decimal TotalRewardAmount { get; set; }

/// <summary>
/// 各人小计
/// </summary>
public decimal SubTotalRewardAmount { get; set; }

/// <summary>
/// 工单结算 开始
/// </summary>
public DateTime StartDate { get; set; }

/// <summary>
/// 工单结算 结束
/// </summary>
public DateTime EndDate { get; set; }

/// <summary>
/// 工单结算项类型ID,对应字典表
/// </summary>
public int WorkOrderSettlementId { get; set; }

public DataDictionaryItemDto WorkOrderSettlement { get; set; }

/// <summary>
/// 工单涉及人员
/// </summary>
// public ICollection<WorkOrderWorkerDto> WorkOrderWorkers { get; set; }
public ICollection<SettlementWorkerDetailDto> SettlementWorkerDetail { get; set; }
}
[AutoMap(typeof(WorkOrderWorkerSettlementDto))]
public class ConvertGenericListToDataTable
{
public int Id { get; set; }

/// <summary>
/// 工单结算项类型ID,对应字典表
/// </summary>
public int WorkOrderSettlementId { get; set; }

/// <summary>
/// aa,bb,cc 设备型号
/// </summary>
public string DeviceModel { get; set; }

/// <summary>
/// 项目名称
/// </summary>
public string ProjectName { get; set; }

/// <summary>
/// 完成工作内容
/// </summary>
public string WorkContent { get; set; }

/// <summary>
/// 完成任务产值
/// </summary>
public decimal RewardAmount { get; set; }

/// <summary>
/// 提取任务金额
/// </summary>
public decimal ExtraReward { get; set; }

/// <summary>
/// aa,bb,cc 设备编号
/// </summary>
public string DeviceNumber { get; set; }

/// <summary>
/// 任务提取合计
/// </summary>
public decimal TotalRewardAmount { get; set; }

/// <summary>
/// 各人小计
/// </summary>
public decimal SubTotalRewardAmount { get; set; }
public ICollection<SettlementWorkerDetailDto> SettlementWorkerDetail { get; set; }
}
public class TableHeader
{
public string ColumnName { get; set; }
public int Index { get; set; }
public long UserId { get; set; }
}
public class WorkOrderStatement
{
public List<TableHeader> TableHeaders { get; set; }

public DataTable UserDT { get; set; }
}
}

 

 

举报

相关推荐

0 条评论