¶Ô±ÈÐÂÎļþ |
| | |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.Attributes; |
| | | using WIDESEA_Core.DB; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Seed; |
| | | |
| | | namespace WIDESEA_Core.Helper |
| | | { |
| | | public class CodeAnalysisHelper |
| | | { |
| | | /// <summary> |
| | | /// è§£æç¼ç æå¯¹è±¡é |
| | | /// </summary> |
| | | /// <typeparam name="T">æ³å</typeparam> |
| | | /// <param name="analysisCode">è§åç¼å·</param> |
| | | /// <param name="code">éè§£æçå符串</param> |
| | | /// <returns></returns> |
| | | public static T CodeAnalysis<T>(AnalysisCode analysisCode, string code) |
| | | { |
| | | Type type = typeof(T); |
| | | object? obj = Activator.CreateInstance(type); |
| | | if (obj == null) |
| | | throw new Exception("å®ä¾å对象é误"); |
| | | T result = (T)obj; |
| | | try |
| | | { |
| | | AnalysisRuleAttribute? analysisRule = type.GetCustomAttribute<AnalysisRuleAttribute>(); |
| | | if (analysisRule != null) |
| | | { |
| | | SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig |
| | | { |
| | | ConfigId = MainDb.CurrentDbConnId, |
| | | ConnectionString = DBContext.GetMainConnectionDb().Connection, |
| | | IsAutoCloseConnection = true, |
| | | DbType = MainDb.DbType, |
| | | }); |
| | | |
| | | dynamic ruleConfig = sugarClient.Queryable(MainDb.AnalysisRuleConfig, "x").Where(MainDb.AnalysisCode, "=", analysisCode.ToString()).First(); |
| | | if (ruleConfig != null) |
| | | { |
| | | string format = ruleConfig.Format; |
| | | string splitStr = ruleConfig.SplitStr; |
| | | List<string> items = format.Split(splitStr).ToList(); |
| | | List<string> codes = code.Split(splitStr).ToList(); |
| | | if (items.Count == codes.Count) |
| | | { |
| | | PropertyInfo[] propertyInfos = type.GetProperties(); |
| | | if (AnalysisRule.Split == analysisRule.AnalysisRule) |
| | | { |
| | | for (int i = 0; i < propertyInfos.Length; i++) |
| | | { |
| | | PropertyInfo propertyInfo = propertyInfos[i]; |
| | | AnalysisItemRuleAttribute? analysisItemRule = propertyInfo.GetCustomAttribute<AnalysisItemRuleAttribute>(); |
| | | if (analysisItemRule != null) |
| | | { |
| | | int index = items.IndexOf($"[{analysisItemRule.AnalysisFormaType}]"); |
| | | if (index != -1) |
| | | propertyInfo.SetValue(result, codes[index]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è§£æç¼ç æå¯¹è±¡éå |
| | | /// </summary> |
| | | /// <typeparam name="T">æ³å</typeparam> |
| | | /// <param name="analysisCode">è§åç¼å·</param> |
| | | /// <param name="codeList">éè§£æçå符串éå</param> |
| | | /// <returns></returns> |
| | | public static List<T> CodeAnalysis<T>(AnalysisCode analysisCode, List<string> codeList) |
| | | { |
| | | Type type = typeof(T); |
| | | List<T> list = new List<T>(); |
| | | |
| | | try |
| | | { |
| | | AnalysisRuleAttribute? analysisRule = type.GetCustomAttribute<AnalysisRuleAttribute>(); |
| | | if (analysisRule != null) |
| | | { |
| | | SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig |
| | | { |
| | | ConfigId = MainDb.CurrentDbConnId, |
| | | ConnectionString = DBContext.GetMainConnectionDb().Connection, |
| | | IsAutoCloseConnection = true, |
| | | DbType = MainDb.DbType, |
| | | }); |
| | | |
| | | dynamic ruleConfig = sugarClient.Queryable(MainDb.AnalysisRuleConfig, "x").Where(MainDb.AnalysisCode, "=", analysisCode.ToString()).First(); |
| | | if (ruleConfig != null) |
| | | { |
| | | for (int j = 0; j < codeList.Count; j++) |
| | | { |
| | | T result = (T)Activator.CreateInstance(type); |
| | | string code = codeList[j]; |
| | | string format = ruleConfig.Format; |
| | | string splitStr = ruleConfig.SplitStr; |
| | | List<string> items = format.Split(splitStr).ToList(); |
| | | List<string> codes = code.Split(splitStr).ToList(); |
| | | if (items.Count == codes.Count) |
| | | { |
| | | PropertyInfo[] propertyInfos = type.GetProperties(); |
| | | if (AnalysisRule.Split == analysisRule.AnalysisRule) |
| | | { |
| | | for (int i = 0; i < propertyInfos.Length; i++) |
| | | { |
| | | PropertyInfo propertyInfo = propertyInfos[i]; |
| | | AnalysisItemRuleAttribute? analysisItemRule = propertyInfo.GetCustomAttribute<AnalysisItemRuleAttribute>(); |
| | | if (analysisItemRule != null) |
| | | { |
| | | if(analysisItemRule.AnalysisFormaType == AnalysisFormatType.BD) |
| | | { |
| | | propertyInfo.SetValue(result, code.ChangeType(propertyInfo.PropertyType)); |
| | | } |
| | | else |
| | | { |
| | | int index = items.IndexOf($"[{analysisItemRule.AnalysisFormaType}]"); |
| | | if (index != -1) |
| | | propertyInfo.SetValue(result, codes[index].ChangeType(propertyInfo.PropertyType)); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | list.Add(result); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | return list; |
| | | } |
| | | } |
| | | } |