利用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 inputList, DateTime startDate, DateTime endDate)
{
WorkOrderStatement workOrderStatement = new WorkOrderStatement();
var userList = _workOrderWorkerManager.GetWorkerDetailList(startDate, endDate);
var dt = new DataTable("DataTable");
var newInputList = ObjectMapper.Map>(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 tableHeaders = new List();
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>(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
{
///
/// 工单
///
public WorkOrderDto WorkOrder { get; set; }
///
/// 工单ID
///
public Guid WorkOrderId { get; set; }
///
/// aa,bb,cc 设备型号
///
public string DeviceModel { get; set; }
///
/// aa,bb,cc 设备编号
///
public string DeviceNumber { get; set; }
///
/// 项目名称
///
public string ProjectName { get; set; }
///
/// 完成工作内容
///
public string WorkContent { get; set; }
///
/// 完成任务产值
///
public decimal RewardAmount { get; set; }
///
/// 提取任务金额
///
public decimal ExtraReward { get; set; }
///
/// 任务提取合计
///
public decimal TotalRewardAmount { get; set; }
///
/// 各人小计
///
public decimal SubTotalRewardAmount { get; set; }
///
/// 工单结算 开始
///
public DateTime StartDate { get; set; }
///
/// 工单结算 结束
///
public DateTime EndDate { get; set; }
///
/// 工单结算项类型ID,对应字典表
///
public int WorkOrderSettlementId { get; set; }
public DataDictionaryItemDto WorkOrderSettlement { get; set; }
///
/// 工单涉及人员
///
// public ICollection WorkOrderWorkers { get; set; }
public ICollection SettlementWorkerDetail { get; set; }
}
[AutoMap(typeof(WorkOrderWorkerSettlementDto))]
public class ConvertGenericListToDataTable
{
public int Id { get; set; }
///
/// 工单结算项类型ID,对应字典表
///
public int WorkOrderSettlementId { get; set; }
///
/// aa,bb,cc 设备型号
///
public string DeviceModel { get; set; }
///
/// 项目名称
///
public string ProjectName { get; set; }
///
/// 完成工作内容
///
public string WorkContent { get; set; }
///
/// 完成任务产值
///
public decimal RewardAmount { get; set; }
///
/// 提取任务金额
///
public decimal ExtraReward { get; set; }
///
/// aa,bb,cc 设备编号
///
public string DeviceNumber { get; set; }
///
/// 任务提取合计
///
public decimal TotalRewardAmount { get; set; }
///
/// 各人小计
///
public decimal SubTotalRewardAmount { get; set; }
public ICollection 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 TableHeaders { get; set; }
public DataTable UserDT { get; set; }
}
}