SnDataProcessor.cs 4.94 KB
using System.Collections.Generic;
using System.Data;

namespace Hh.Mes.Common
{
    public class SnDataProcessor
    {
        // 定义产品类别映射规则
        private static readonly Dictionary<char, string> CategoryMap = new Dictionary<char, string>
        {
            ['1'] = "管焊",
            ['2'] = "专机",
            ['3'] = "管道",
            ['4'] = "物流",
            ['5'] = "激光",
            ['6'] = "减速机",
            ['7'] = "切割机",
            ['8'] = "机器人",
            ['9'] = "软件",
            ['A'] = "贸易",
            ['B'] = "其他",
            ['C'] = "C",
            ['D'] = "D",
            ['E'] = "E"
        };

        public List<Dictionary<string, object>> ProcessAndMergeData(
            DataTable dt1, DataTable dt2, DataTable dt3, DataTable dt4)
        {
            // 初始化合并字典(按产品类别)
            var mergedData = InitializeCategoryDictionary();

            // 处理每个数据源
            ProcessTable(dt1, "SN注册申请数量", mergedData);
            ProcessTable(dt2, "SN授权申请数量", mergedData);
            ProcessTable(dt3, "接入", mergedData);
            ProcessTable(dt4, "上报报警", mergedData);

            // 转换为最终格式
            return ConvertToResultFormat(mergedData);
        }

        // 初始化包含所有类别的字典
        private Dictionary<string, Dictionary<string, int>> InitializeCategoryDictionary()
        {
            var dict = new Dictionary<string, Dictionary<string, int>>();
            foreach (var category in CategoryMap.Values)
            {
                dict[category] = new Dictionary<string, int>
                {
                    ["SN注册申请数量"] = 0,
                    ["SN授权申请数量"] = 0,
                    ["接入"] = 0,
                    ["上报报警"] = 0
                };
            }
            return dict;
        }

        private void ProcessTable(DataTable dataTable, string statType, Dictionary<string, Dictionary<string, int>> mergedData)
        {
            foreach (DataRow row in dataTable.Rows)
            {
                string sn = row["sn"].ToString().Trim();
                //取第一个字符串
                char key = sn[0];
                if (!CategoryMap.ContainsKey(key)) {
                    continue;
                }

                string category = CategoryMap[key];
                // 动态累加当前统计类型的数量(每行计数+1)
                mergedData[category][statType] += 1;
            }
        }

        // 转换为最终结果格式
        private List<Dictionary<string, object>> ConvertToResultFormat( Dictionary<string, Dictionary<string, int>> mergedData)
        {
            var result = new List<Dictionary<string, object>>();
            foreach (var kvp in mergedData)
            {
                result.Add(new Dictionary<string, object>
                {
                    ["sn"] = kvp.Key,
                    ["SN注册申请数量"] = kvp.Value["SN注册申请数量"],
                    ["SN授权申请数量"] = kvp.Value["SN授权申请数量"],
                    ["接入"] = kvp.Value["接入"],
                    ["上报报警"] = kvp.Value["上报报警"]
                });
            }
            return result;
        }

        public static string GetSNModel(string snCode)
        {
            if (string.IsNullOrWhiteSpace(snCode))
            {
                return string.Empty;
            }
            if (snCode.Length < 2)
            {
                return string.Empty;
            }
            var v1 = snCode[..1];
            var v2 = snCode.Substring(1, 1);

            return v1 switch
            {
                "1" => "管焊",
                "2" => "专机",
                "3" => "管道",
                "4" => "物流",
                "5" => "激光",
                "6" => "减速机",
                "7" => "切割机",
                "8" => "机器人",
                //软件部分
                "9" => v2 switch
                {
                    "1" => "WMS",
                    "2" => "WCS",
                    "3" => "MES",
                    "4" => "RCS",
                    "5" => "MTS",
                    "6" => "ECS",
                    "7" => "EMS",
                    "8" => "IOT",
                    "9" => "DT",
                    "A" => "参数化编程",
                    "B" => "离线软件",
                    //"C" => string.Empty,
                    //"D" => string.Empty,
                    //"E" => string.Empty,
                    //"F" => string.Empty,
                    _ => "软件",
                },
                "A" => string.Empty,
                "B" => string.Empty,
                "C" => string.Empty,
                "D" => string.Empty,
                "E" => string.Empty,
                "F" => string.Empty,
                _ => string.Empty,
            };
        }
    }
}