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

 

 

你可能感兴趣的:(.Net,C#)