1413 lines
		
	
	
		
			68 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1413 lines
		
	
	
		
			68 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using APT.BaseData.Domain.ApiModel;
 | 
						||
using APT.BaseData.Domain.Entities;
 | 
						||
using APT.BaseData.Domain.Entities.FM;
 | 
						||
using APT.BaseData.Domain.Enums;
 | 
						||
using APT.BaseData.Domain.IServices;
 | 
						||
using APT.BaseData.Domain.IServices.FM;
 | 
						||
using APT.Infrastructure.Api;
 | 
						||
using APT.Infrastructure.Core;
 | 
						||
using APT.Utility;
 | 
						||
using System;
 | 
						||
using System.Collections.Generic;
 | 
						||
using System.Data;
 | 
						||
using System.Linq;
 | 
						||
using System.Reflection;
 | 
						||
namespace APT.BaseData.Services.Services.FM
 | 
						||
{
 | 
						||
    public class FMImportService : CommonService, IFMImportService
 | 
						||
    {
 | 
						||
        public FMImportService(IRepository repository)
 | 
						||
            : base(repository)
 | 
						||
        {
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
        private Dictionary<string, object> NavcationList = new Dictionary<string, object>();
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取导入数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="orgId"></param>
 | 
						||
        /// <param name="configCode"></param>
 | 
						||
        /// <param name="filePath"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public ImportDataModel GetImortData(Guid orgId, string configCode, string filePath, bool IsUpdate, bool delFlag)
 | 
						||
        {
 | 
						||
            var importConfig = this.GetEntity<T_FM_IMPORT_CONFIG>(t => t.CODE == configCode, new BaseFilter(orgId));
 | 
						||
            if (importConfig == null)
 | 
						||
                throw new Exception("无效导入配置");
 | 
						||
            if (string.IsNullOrEmpty(importConfig.TABLE_NAME))
 | 
						||
                throw new Exception("未配置表名");
 | 
						||
            Dictionary<string, Type> existTypes = new Dictionary<string, Type>();
 | 
						||
            var type = this.GetTypeByEntityName(importConfig.TABLE_NAME, existTypes);
 | 
						||
            if (type == null)
 | 
						||
                throw new Exception("无效表名");
 | 
						||
 | 
						||
            var configDetails = this.GetEntities<T_FM_IMPORT_CONFIG_DETAIL>(t => t.IMPORT_CONFIG_ID == importConfig.ID, new BaseFilter(orgId), new string[] { "Nav_Fields" }).ToList();
 | 
						||
            if (configDetails == null || !configDetails.Any())
 | 
						||
                throw new Exception("未配置明细信息");
 | 
						||
            ImportDataModel importData = new ImportDataModel();
 | 
						||
 | 
						||
            Dictionary<int, int> startRowIndexs = new Dictionary<int, int>();
 | 
						||
            configDetails.ForEach(t =>
 | 
						||
            {
 | 
						||
                startRowIndexs[t.SHEET_INDEX] = t.START_ROW_INDEX;
 | 
						||
            });
 | 
						||
            //获取数据
 | 
						||
            var dataTables = FileUtils.ReadExcelByOledb(filePath, startRowIndexs);
 | 
						||
 | 
						||
            List<T_PF_PAGE_EDIT> pageEdits = null;
 | 
						||
            if (!string.IsNullOrEmpty(importConfig.EDIT_FORM_CODE))
 | 
						||
                pageEdits = this.GetEntities<T_PF_PAGE_EDIT>(t => t.Nav_PageForm.CODE == importConfig.EDIT_FORM_CODE, new BaseFilter(importConfig.ORG_ID), new string[] { "Nav_Columns" }).ToList();
 | 
						||
 | 
						||
            //获取主表配置信息
 | 
						||
            var firstConfigDetail = configDetails.FirstOrDefault(t => t.PARENT_ID == null);
 | 
						||
            var param = DoGetImportInvokeParam(firstConfigDetail, null, dataTables, pageEdits, existTypes, importData);
 | 
						||
            if (param != null)
 | 
						||
            {
 | 
						||
                param.IsUpdate = IsUpdate;
 | 
						||
                param.DelFlag = delFlag;
 | 
						||
                //获取从表配置信息
 | 
						||
                GetImportInvokeParam(firstConfigDetail.ID, param, configDetails, dataTables, pageEdits, existTypes, importData);
 | 
						||
 | 
						||
                //从数据获取对象
 | 
						||
                try
 | 
						||
                {
 | 
						||
 | 
						||
                    MethodInfo methodInfo = this.GetType().GetMethod("DoGetEntityByTable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
 | 
						||
                    importData.Data = methodInfo.MakeGenericMethod(new Type[] { type }).Invoke(this, new object[] { param });
 | 
						||
                }
 | 
						||
                catch (TargetInvocationException ex)
 | 
						||
                {
 | 
						||
                    this.ThrowError("010001", ex.InnerException.Message);
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return importData;
 | 
						||
        }
 | 
						||
        public dynamic DownLoadFile(dynamic config)
 | 
						||
        {
 | 
						||
            string editConfig = config.CODE;
 | 
						||
            Guid orgid = config.ORG_ID;
 | 
						||
            bool isData = config.IsData;
 | 
						||
            var importConfig = this.GetEntity<T_FM_IMPORT_CONFIG>(t => t.CODE == editConfig, new BaseFilter(orgid));
 | 
						||
            if (importConfig == null)
 | 
						||
                throw new Exception("无效导入配置");
 | 
						||
            if (string.IsNullOrEmpty(importConfig.TABLE_NAME))
 | 
						||
                throw new Exception("未配置表名");
 | 
						||
            //Dictionary<string, Type> existTypes = new Dictionary<string, Type>();
 | 
						||
            //var type = this.GetTypeByEntityName(importConfig.TABLE_NAME, existTypes);
 | 
						||
            var filter = new BaseFilter(orgid);
 | 
						||
            filter.Sort = "SHEET_INDEX";
 | 
						||
 | 
						||
            var configDetails = this.GetEntities<T_FM_IMPORT_CONFIG_DETAIL>(t => t.IMPORT_CONFIG_ID == importConfig.ID,
 | 
						||
                filter, new string[] { "Nav_Fields" }).OrderBy(t => t.SHEET_INDEX).ToList();
 | 
						||
            if (configDetails == null || !configDetails.Any())
 | 
						||
                throw new Exception("未配置明细信息");
 | 
						||
            //configDetails = configDetails.OrderBy(t => t.SHEET_INDEX);
 | 
						||
            List<T_PF_PAGE_EDIT> pageEdits = null;
 | 
						||
            if (!string.IsNullOrEmpty(importConfig.EDIT_FORM_CODE))
 | 
						||
                pageEdits = this.GetEntities<T_PF_PAGE_EDIT>(t => t.Nav_PageForm.CODE == importConfig.EDIT_FORM_CODE,
 | 
						||
                        new BaseFilter(importConfig.ORG_ID), new string[] { "Nav_Columns" }).ToList();
 | 
						||
            var editConfigs = GetImportColumns(importConfig);
 | 
						||
            foreach (var c in configDetails)
 | 
						||
            {
 | 
						||
                T_PF_PAGE_EDIT table = null;
 | 
						||
                if (c.PARENT_ID == null)
 | 
						||
                {
 | 
						||
                    table = pageEdits.FirstOrDefault(i => i.PARENT_ID == null);
 | 
						||
 | 
						||
                }
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    if (!string.IsNullOrEmpty(c.PAGE_EDIT_CODE))
 | 
						||
                    {
 | 
						||
                        table = pageEdits.FirstOrDefault(i => i.CODE == c.PAGE_EDIT_CODE);
 | 
						||
                    }
 | 
						||
                    else
 | 
						||
                    {
 | 
						||
                        table = pageEdits.FirstOrDefault();
 | 
						||
                    }
 | 
						||
                }
 | 
						||
                ImportData(orgid, c, table, configDetails, editConfigs, isData);
 | 
						||
            }
 | 
						||
            if (configDetails.Any())
 | 
						||
            {
 | 
						||
                var index = configDetails.LastOrDefault().SHEET_INDEX + 1;
 | 
						||
                T_FM_IMPORT_CONFIG_DETAIL infoDetail = new T_FM_IMPORT_CONFIG_DETAIL();
 | 
						||
                infoDetail.SHEET_INDEX = index;
 | 
						||
                infoDetail.DESCRIPTION = "导入枚举字段说明";
 | 
						||
 | 
						||
                List<ImportTableColumnModel> enumsCols = new List<ImportTableColumnModel>();
 | 
						||
                GetEnumColums(editConfigs, enumsCols);
 | 
						||
                //Dictionary<string, string> enumDesc = new Dictionary<string, string>();
 | 
						||
                infoDetail.Nav_Fields = new List<T_FM_IMPORT_CONFIG_FIELD>();
 | 
						||
                infoDetail.Nav_Fields.Add(new T_FM_IMPORT_CONFIG_FIELD() { DEST_FIELD_NAME = "enumname", SRC_FIELD_NAME = "字段" });
 | 
						||
                infoDetail.Nav_Fields.Add(new T_FM_IMPORT_CONFIG_FIELD() { DEST_FIELD_NAME = "enumdesc", SRC_FIELD_NAME = "对应关系" });
 | 
						||
                if (enumsCols.Any())
 | 
						||
                {
 | 
						||
                    var data = new List<dynamic>();
 | 
						||
                    List<string> hasEnums = new List<string>();
 | 
						||
                    foreach (var e in enumsCols)
 | 
						||
                    {
 | 
						||
 | 
						||
 | 
						||
                        var enumType = DataHelper.EnumToType(e.Nav_EditColumn.ENUM);
 | 
						||
                        if (enumType != null && enumType.IsEnum && !hasEnums.Contains(e.Nav_EditColumn.ENUM))
 | 
						||
                        {
 | 
						||
                            dynamic enumObj = new System.Dynamic.ExpandoObject();
 | 
						||
                            enumObj.enumname = e.Nav_EditColumn.LABEL;
 | 
						||
                            var desc = "";
 | 
						||
                            hasEnums.Add(e.Nav_EditColumn.ENUM);
 | 
						||
                            foreach (var x in Enum.GetNames(enumType))
 | 
						||
                            {
 | 
						||
                                var value = (int)Enum.Parse(enumType, x.ToString());
 | 
						||
 | 
						||
                                desc += $"{x}:{value},";
 | 
						||
                            }
 | 
						||
                            desc = desc.TrimEnd(',');
 | 
						||
                            enumObj.enumdesc = desc;
 | 
						||
                            data.Add(enumObj);
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    //
 | 
						||
                    infoDetail.Data = data;
 | 
						||
                }
 | 
						||
                configDetails.Add(infoDetail);
 | 
						||
            }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
            dynamic retObj = new System.Dynamic.ExpandoObject();
 | 
						||
            retObj.Name = importConfig.NAME;
 | 
						||
            retObj.ImportTable = configDetails;
 | 
						||
            return retObj;
 | 
						||
        }
 | 
						||
 | 
						||
        private void ImportData(Guid orgid, T_FM_IMPORT_CONFIG_DETAIL c,
 | 
						||
            T_PF_PAGE_EDIT table, List<T_FM_IMPORT_CONFIG_DETAIL> Details, ImportTableModel tableModel, bool isData)
 | 
						||
        {
 | 
						||
            if (table != null)
 | 
						||
            {
 | 
						||
                var tableName = table.EDIT_NAME;
 | 
						||
                var fileds = c.Nav_Fields.Select(i => i.DEST_FIELD_NAME).ToArray();
 | 
						||
                BasePageFilter filter = new BasePageFilter();
 | 
						||
                filter.OrgId = orgid;
 | 
						||
                filter.Limit = 10;
 | 
						||
                filter.PageIndex = 1;
 | 
						||
                filter.Sort = "ID";
 | 
						||
                filter.Order = DbOrder.ASC;
 | 
						||
                //filter.SelectField = fileds;
 | 
						||
                T_FM_IMPORT_CONFIG_FIELD addKeyField = null;
 | 
						||
                T_FM_IMPORT_CONFIG_DETAIL parent = null;
 | 
						||
                string relationField = "";
 | 
						||
                Dictionary<Guid, object> parentPairs = new Dictionary<Guid, object>();
 | 
						||
                var filterRuleList = new List<FilterRule>();
 | 
						||
                var filterGroup = new FilterGroup();
 | 
						||
                filterGroup.IsAnd = false;
 | 
						||
                filter.FilterGroup.Groups.Add(filterGroup);
 | 
						||
                foreach (var filed in fileds)
 | 
						||
                {
 | 
						||
                    if (filed.IndexOf(".") > 0)
 | 
						||
                    {
 | 
						||
                        var indexPos = filed.LastIndexOf(".");
 | 
						||
                        var navfield = filed.Substring(0, indexPos);
 | 
						||
                        if (!filter.Include.Contains(navfield))
 | 
						||
                            filter.Include.Add(navfield);
 | 
						||
                    }
 | 
						||
                }
 | 
						||
                Type typeName = DataHelper.GetTypeByEntityName(tableName);
 | 
						||
                //filter.Include.Clear();
 | 
						||
                if (typeName == null)
 | 
						||
                    this.ThrowError("020011");
 | 
						||
                if (c.PARENT_ID != null)
 | 
						||
                {
 | 
						||
 | 
						||
                    parent = Details.FirstOrDefault(x => x.ID == c.PARENT_ID);
 | 
						||
 | 
						||
                    var parentDataId = new List<Guid>();
 | 
						||
                    if (parent != null)
 | 
						||
                    {
 | 
						||
                        var parentModel = GetTableMode(tableModel, parent.ID);
 | 
						||
                        Type parentType = DataHelper.GetTypeByEntityName(parentModel.Nav_PageEdit.EDIT_NAME);
 | 
						||
                        if (parentType == null)
 | 
						||
                            this.ThrowError("020011");
 | 
						||
                        var parentKey = parent.Nav_Fields.FirstOrDefault(i => i.SRC_FIELD_NAME ==
 | 
						||
                    parent.SHEET_KEY_FIELD_NAME);
 | 
						||
                        if (parentKey == null)
 | 
						||
                        {
 | 
						||
                            this.ThrowError("020011");
 | 
						||
                        }
 | 
						||
                        addKeyField = new T_FM_IMPORT_CONFIG_FIELD();
 | 
						||
                        addKeyField.DEST_FIELD_NAME = parentKey.DEST_FIELD_NAME;
 | 
						||
                        addKeyField.SRC_FIELD_NAME = parentKey.SRC_FIELD_NAME;
 | 
						||
                        foreach (var d in parent.Data)
 | 
						||
                        {
 | 
						||
                            if (!parentDataId.Contains(d.ID))
 | 
						||
                                parentDataId.Add(d.ID);
 | 
						||
                            if (!parentPairs.ContainsKey(d.ID))
 | 
						||
                                parentPairs.Add(d.ID, this.GetFieldValue(addKeyField.DEST_FIELD_NAME, d));
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    var model = GetTableMode(tableModel, c.ID);
 | 
						||
 | 
						||
                    if (model != null)
 | 
						||
                    {
 | 
						||
                        relationField = model.Nav_PageEdit.RELATION_FIELD;
 | 
						||
                        if (parentDataId.Any())
 | 
						||
                        {
 | 
						||
 | 
						||
                            foreach (var i in parentDataId)
 | 
						||
                            {
 | 
						||
                                var fiterRule = new FilterRule();
 | 
						||
                                fiterRule.Field = relationField;
 | 
						||
                                fiterRule.Operate = FilterOperate.Equal;
 | 
						||
                                fiterRule.Value = i;
 | 
						||
                                filterRuleList.Add(fiterRule);
 | 
						||
                            }
 | 
						||
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                }
 | 
						||
                dynamic tmpResult = new System.Dynamic.ExpandoObject();
 | 
						||
                MethodInfo methodInfo = null;
 | 
						||
                if (!isData)
 | 
						||
                {
 | 
						||
                    methodInfo = this.GetType().GetMethod("GetEntityByInvoke", new Type[] { typeof(BasePageFilter) });
 | 
						||
                }
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    methodInfo = this.GetType().GetMethod("GetEntitiesByInvoke", new Type[] { typeof(BasePageFilter) });
 | 
						||
                }
 | 
						||
 | 
						||
 | 
						||
                if (filterRuleList.Any())
 | 
						||
                {
 | 
						||
                    var limit = 1000;
 | 
						||
                    List<dynamic> tmpTotal = new List<dynamic>();
 | 
						||
                    for (var x = 0; x < filterRuleList.Count; x = x + limit)
 | 
						||
                    {
 | 
						||
                        filterGroup.Rules.Clear();
 | 
						||
                        var pageRules = filterRuleList.Skip(x).Take(limit).ToArray();
 | 
						||
                        for (var j = 0; j < pageRules.Count(); j++)
 | 
						||
                        {
 | 
						||
                            filterGroup.Rules.Add(pageRules[j]);
 | 
						||
                        }
 | 
						||
                        dynamic tmp = methodInfo.MakeGenericMethod(new Type[] { typeName }).Invoke(this, new object[] { filter });
 | 
						||
                        foreach (var row in tmp)
 | 
						||
                            tmpTotal.Add(row);
 | 
						||
                    }
 | 
						||
                    tmpResult = tmpTotal;
 | 
						||
                }
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    tmpResult = methodInfo.MakeGenericMethod(new Type[] { typeName }).Invoke(this, new object[] { filter });
 | 
						||
                }
 | 
						||
 | 
						||
                if (c.PARENT_ID != null && addKeyField != null)
 | 
						||
                {
 | 
						||
                    addKeyField.DEST_FIELD_NAME = c.PARENT_ID + "_" + addKeyField.DEST_FIELD_NAME;
 | 
						||
                    c.Nav_Fields.Add(addKeyField);
 | 
						||
                    List<dynamic> tmp = new List<dynamic>();
 | 
						||
                    foreach (var row in tmpResult)
 | 
						||
                    {
 | 
						||
                        dynamic info = new System.Dynamic.ExpandoObject();
 | 
						||
                        var dic = (IDictionary<string, object>)info;
 | 
						||
 | 
						||
                        var props = typeName.GetProperties();
 | 
						||
                        foreach (var p in props)
 | 
						||
                        {
 | 
						||
                            var pValue = typeName.GetProperty(p.Name).GetValue(row);
 | 
						||
                            if (!dic.ContainsKey(p.Name))
 | 
						||
                                dic.Add(p.Name, pValue);
 | 
						||
                            if (p.Name == relationField)
 | 
						||
                            {
 | 
						||
                                if (!dic.ContainsKey(addKeyField.DEST_FIELD_NAME))
 | 
						||
                                {
 | 
						||
                                    dic.Add(addKeyField.DEST_FIELD_NAME, parentPairs[pValue]);
 | 
						||
                                }
 | 
						||
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        tmp.Add(info);
 | 
						||
                    }
 | 
						||
                    tmpResult = tmp;
 | 
						||
 | 
						||
                }
 | 
						||
 | 
						||
                c.Data = tmpResult;
 | 
						||
            }
 | 
						||
        }
 | 
						||
 | 
						||
        private ImportTableModel GetTableMode(ImportTableModel model, Guid configDetailId)
 | 
						||
        {
 | 
						||
            if (model != null)
 | 
						||
            {
 | 
						||
                if (model.Nav_ConfigDetail.ID == configDetailId)
 | 
						||
                {
 | 
						||
                    return model;
 | 
						||
                }
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    var childModels = model.Nav_SubTables;
 | 
						||
                    if (childModels != null && childModels.Any())
 | 
						||
                    {
 | 
						||
                        foreach (var c in childModels)
 | 
						||
                        {
 | 
						||
                            var subModel = GetTableMode(c, configDetailId);
 | 
						||
                            if (subModel != null)
 | 
						||
                                return subModel;
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return null;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取导入配置信息
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="orgId"></param>
 | 
						||
        /// <param name="configCode"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public ImportConfigModel GetImportConfig(Guid orgId, string configCode)
 | 
						||
        {
 | 
						||
            ImportConfigModel config = new ImportConfigModel();
 | 
						||
            var importConfig = this.GetEntity<T_FM_IMPORT_CONFIG>(t => t.CODE == configCode, new BaseFilter(orgId));
 | 
						||
            if (importConfig == null)
 | 
						||
                throw new Exception("无效导入配置");
 | 
						||
            if (!string.IsNullOrEmpty(importConfig.EDIT_FORM_CODE))
 | 
						||
                config.Nav_EditForm = this.GetEntity<T_PF_FORM>(t => t.CODE == importConfig.EDIT_FORM_CODE, new BaseFilter(importConfig.ORG_ID));
 | 
						||
            config.Nav_ImportConfig = importConfig;
 | 
						||
            config.Nav_ImportTable = this.GetImportColumns(importConfig);
 | 
						||
            return config;
 | 
						||
        }
 | 
						||
 | 
						||
        #region  私有函数
 | 
						||
        /// <summary>
 | 
						||
        /// 获取导入列信息
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="orgId"></param>
 | 
						||
        /// <param name="configCode"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        private ImportTableModel GetImportColumns(T_FM_IMPORT_CONFIG importConfig)
 | 
						||
        {
 | 
						||
 | 
						||
            if (string.IsNullOrEmpty(importConfig.TABLE_NAME))
 | 
						||
                throw new Exception("未配置表名");
 | 
						||
 | 
						||
 | 
						||
            var configDetails = this.GetEntities<T_FM_IMPORT_CONFIG_DETAIL>(t => t.IMPORT_CONFIG_ID == importConfig.ID, new BaseFilter(importConfig.ORG_ID), new string[] { "Nav_Fields" }).ToList();
 | 
						||
            if (configDetails == null || !configDetails.Any())
 | 
						||
                throw new Exception("未配置明细信息");
 | 
						||
 | 
						||
            List<T_PF_PAGE_EDIT> pageEdits = null;
 | 
						||
            if (!string.IsNullOrEmpty(importConfig.EDIT_FORM_CODE))
 | 
						||
                pageEdits = this.GetEntities<T_PF_PAGE_EDIT>(t => t.Nav_PageForm.CODE == importConfig.EDIT_FORM_CODE,
 | 
						||
                        new BaseFilter(importConfig.ORG_ID), new string[] { "Nav_Columns" }).ToList();
 | 
						||
 | 
						||
            //获取主表配置信息
 | 
						||
            var firstConfigDetail = configDetails.FirstOrDefault(t => t.PARENT_ID == null);
 | 
						||
            if (firstConfigDetail == null)
 | 
						||
                throw new Exception("未配置主表信息");
 | 
						||
 | 
						||
            var table = DoGetImportTable(firstConfigDetail, null, pageEdits);
 | 
						||
            if (table != null)
 | 
						||
            {
 | 
						||
                //获取从表配置信息
 | 
						||
                GetImportTable(firstConfigDetail.ID, table, configDetails, pageEdits);
 | 
						||
            }
 | 
						||
            return table;
 | 
						||
        }
 | 
						||
 | 
						||
        private void GetEnumColums(ImportTableModel editConfigs, List<ImportTableColumnModel> enums)
 | 
						||
        {
 | 
						||
            if (editConfigs != null)
 | 
						||
            {
 | 
						||
                var cols = editConfigs.Nav_Columns.Where(i => !string.IsNullOrEmpty(i.Nav_EditColumn.ENUM)).ToList();
 | 
						||
                if (cols.Any())
 | 
						||
                {
 | 
						||
                    enums.AddRange(cols);
 | 
						||
                }
 | 
						||
                if (editConfigs.Nav_SubTables != null && editConfigs.Nav_SubTables.Any())
 | 
						||
                {
 | 
						||
                    foreach (var table in editConfigs.Nav_SubTables)
 | 
						||
                    {
 | 
						||
                        GetEnumColums(table, enums);
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取反射调用参数
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="parentId"></param>
 | 
						||
        /// <param name="parentParam"></param>
 | 
						||
        /// <param name="configDetails"></param>
 | 
						||
        /// <param name="dataTables"></param>
 | 
						||
        /// <param name="pageEdits"></param>
 | 
						||
        private void GetImportInvokeParam(Guid? parentId, ImportInvokeParamModel parentParam,
 | 
						||
                List<T_FM_IMPORT_CONFIG_DETAIL> configDetails, DataSet dataTables, List<T_PF_PAGE_EDIT> pageEdits,
 | 
						||
                Dictionary<string, Type> existTypes, ImportDataModel importDataModel)
 | 
						||
        {
 | 
						||
            if (configDetails == null) return;
 | 
						||
            var list = configDetails.Where(t => t.PARENT_ID == parentId).ToList();
 | 
						||
            if (list == null || !list.Any()) return;
 | 
						||
            list.ForEach(t =>
 | 
						||
            {
 | 
						||
                var param = DoGetImportInvokeParam(t, parentParam, dataTables, pageEdits, existTypes, importDataModel);
 | 
						||
                if (param != null)
 | 
						||
                {
 | 
						||
                    if (parentParam != null)
 | 
						||
                        parentParam.Nav_ChildConfigDetails.Add(param);
 | 
						||
                    GetImportInvokeParam(t.ID, param, configDetails, dataTables, pageEdits, existTypes, importDataModel);
 | 
						||
                }
 | 
						||
            });
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 实际获取反射调用参数
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="configDetail"></param>
 | 
						||
        /// <param name="parentParam"></param>
 | 
						||
        /// <param name="dataTables"></param>
 | 
						||
        /// <param name="pageEdits"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        private ImportInvokeParamModel DoGetImportInvokeParam(T_FM_IMPORT_CONFIG_DETAIL configDetail, ImportInvokeParamModel parentParam, DataSet dataTables,
 | 
						||
            List<T_PF_PAGE_EDIT> pageEdits, Dictionary<string, Type> existTypes, ImportDataModel importDataModel)
 | 
						||
        {
 | 
						||
            ImportInvokeParamModel param = new ImportInvokeParamModel();
 | 
						||
            param.Nav_ConfigDetail = configDetail;
 | 
						||
            param.ExistTypes = existTypes;
 | 
						||
            param.ImportDataModel = importDataModel;
 | 
						||
            if (dataTables.Tables.Count > configDetail.SHEET_INDEX)
 | 
						||
                param.Nav_DataTable = dataTables.Tables[configDetail.SHEET_INDEX];
 | 
						||
 | 
						||
            if (configDetail != null && configDetail.Nav_Fields != null && configDetail.Nav_Fields.Any())
 | 
						||
            {
 | 
						||
                foreach (var f in configDetail.Nav_Fields)
 | 
						||
                {
 | 
						||
                    ImportInvokeFieldModel field = new ImportInvokeFieldModel();
 | 
						||
                    field.Nav_ConfigField = f;
 | 
						||
                    param.Fields.Add(field);
 | 
						||
                }
 | 
						||
            }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
            if (pageEdits != null && pageEdits.Any())
 | 
						||
            {
 | 
						||
                if (configDetail.PARENT_ID == null)
 | 
						||
                    param.Nav_PageEdit = pageEdits.FirstOrDefault(t => t.PARENT_ID == null);
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    if (!string.IsNullOrEmpty(configDetail.PAGE_EDIT_CODE))
 | 
						||
                    {
 | 
						||
                        param.Nav_PageEdit = pageEdits.FirstOrDefault(t => t.CODE == configDetail.PAGE_EDIT_CODE);
 | 
						||
                    }
 | 
						||
                    else
 | 
						||
                    {
 | 
						||
                        param.Nav_PageEdit = pageEdits.FirstOrDefault(t => parentParam != null && parentParam.Nav_PageEdit != null && t.PARENT_ID == parentParam.Nav_PageEdit.ID);
 | 
						||
                    }
 | 
						||
                }
 | 
						||
 | 
						||
 | 
						||
                //获取编辑表列中的导航字段的Include字段
 | 
						||
                if (param.Nav_PageEdit != null && param.Nav_PageEdit.Nav_Columns != null && param.Nav_PageEdit.Nav_Columns.Any())
 | 
						||
                {
 | 
						||
                    foreach (var col in param.Nav_PageEdit.Nav_Columns)
 | 
						||
                    {
 | 
						||
                        if (string.IsNullOrEmpty(col.FIELD_NAME)) continue;
 | 
						||
 | 
						||
                        var invokeField = param.Fields.FirstOrDefault(t => t.Nav_ConfigField != null && t.Nav_ConfigField.DEST_FIELD_NAME == col.FIELD_NAME);
 | 
						||
                        if (invokeField != null)
 | 
						||
                            invokeField.Nav_EditColumn = col;
 | 
						||
 | 
						||
                        var fields = col.FIELD_NAME.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).ToList();
 | 
						||
 | 
						||
                        if (fields.Count > 1)
 | 
						||
                        {
 | 
						||
                            fields.RemoveAt(fields.Count - 1);
 | 
						||
                            string tmp = string.Join(".", fields);
 | 
						||
                            if (!param.PageEditTableIncludes.ContainsKey(tmp))
 | 
						||
                                param.PageEditTableIncludes.Add(tmp, 0);
 | 
						||
                            if (fields.Count > 1)
 | 
						||
                            {
 | 
						||
                                string first = fields[0];
 | 
						||
                                fields.RemoveAt(0);
 | 
						||
                                string includeField = string.Join(".", fields);
 | 
						||
                                Dictionary<string, byte> includes = null;
 | 
						||
                                if (!param.PageEditColumnNavIncludes.TryGetValue(first, out includes))
 | 
						||
                                {
 | 
						||
                                    includes = new Dictionary<string, byte>();
 | 
						||
                                    param.PageEditColumnNavIncludes.Add(first, includes);
 | 
						||
                                }
 | 
						||
                                if (!includes.ContainsKey(includeField))
 | 
						||
                                    includes.Add(includeField, 0);
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return param;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取导入显示表信息
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="parentId"></param>
 | 
						||
        /// <param name="parentTable"></param>
 | 
						||
        /// <param name="configDetails"></param>
 | 
						||
        /// <param name="pageEdits"></param>
 | 
						||
        private void GetImportTable(Guid? parentId, ImportTableModel parentTable,
 | 
						||
                List<T_FM_IMPORT_CONFIG_DETAIL> configDetails, List<T_PF_PAGE_EDIT> pageEdits)
 | 
						||
        {
 | 
						||
            if (configDetails == null) return;
 | 
						||
            var list = configDetails.Where(t => t.PARENT_ID == parentId).ToList();
 | 
						||
            if (list == null || !list.Any()) return;
 | 
						||
            list.ForEach(t =>
 | 
						||
            {
 | 
						||
                var table = DoGetImportTable(t, parentTable, pageEdits);
 | 
						||
                if (table != null)
 | 
						||
                {
 | 
						||
                    if (parentTable != null)
 | 
						||
                        parentTable.Nav_SubTables.Add(table);
 | 
						||
                    GetImportTable(t.ID, table, configDetails, pageEdits);
 | 
						||
                }
 | 
						||
            });
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 实际获取导入显示表信息
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="configDetail"></param>
 | 
						||
        /// <param name="parentTable"></param>
 | 
						||
        /// <param name="pageEdits"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
 | 
						||
        private ImportTableModel DoGetImportTable(T_FM_IMPORT_CONFIG_DETAIL configDetail, ImportTableModel parentTable, List<T_PF_PAGE_EDIT> pageEdits)
 | 
						||
        {
 | 
						||
            ImportTableModel table = new ImportTableModel();
 | 
						||
            table.Nav_ConfigDetail = configDetail;
 | 
						||
            if (pageEdits != null && pageEdits.Any())
 | 
						||
            {
 | 
						||
                if (configDetail.PARENT_ID == null)
 | 
						||
                    table.Nav_PageEdit = pageEdits.FirstOrDefault(t => t.PARENT_ID == null);
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    if (!string.IsNullOrEmpty(configDetail.PAGE_EDIT_CODE))
 | 
						||
                    {
 | 
						||
                        table.Nav_PageEdit = pageEdits.FirstOrDefault(t => !string.IsNullOrEmpty(configDetail.PAGE_EDIT_CODE) && t.CODE == configDetail.PAGE_EDIT_CODE);
 | 
						||
                    }
 | 
						||
                    else
 | 
						||
                    {
 | 
						||
                        table.Nav_PageEdit = pageEdits.FirstOrDefault(t => parentTable != null && parentTable.Nav_PageEdit != null && t.PARENT_ID == parentTable.Nav_PageEdit.ID);
 | 
						||
                    }
 | 
						||
 | 
						||
                }
 | 
						||
                if (table.Nav_PageEdit != null)
 | 
						||
                {
 | 
						||
                    table.NavProperty = table.Nav_PageEdit.NAV_PROPERTY;
 | 
						||
                    if (table.Nav_PageEdit.Nav_Columns != null && table.Nav_PageEdit.Nav_Columns.Any())
 | 
						||
                    {
 | 
						||
                        var list = table.Nav_PageEdit.Nav_Columns.OrderBy(t => t.NUM).ToList();
 | 
						||
                        list.ForEach(t1 =>
 | 
						||
                        {
 | 
						||
                            ImportTableColumnModel col = new ImportTableColumnModel();
 | 
						||
                            col.Nav_EditColumn = t1;
 | 
						||
                            col.Label = t1.LABEL;
 | 
						||
                            col.FieldName = t1.FIELD_NAME;
 | 
						||
                            table.Nav_Columns.Add(col);
 | 
						||
                        });
 | 
						||
                    }
 | 
						||
                }
 | 
						||
 | 
						||
            }
 | 
						||
            return table;
 | 
						||
        }
 | 
						||
 | 
						||
        private Type GetTypeByEntityName(string entityName, Dictionary<string, Type> existTypes)
 | 
						||
        {
 | 
						||
            Type type = null;
 | 
						||
            if (existTypes == null || !existTypes.TryGetValue(entityName, out type))
 | 
						||
            {
 | 
						||
                type = DataHelper.GetTypeByEntityName(entityName);
 | 
						||
                if (existTypes != null)
 | 
						||
                    existTypes.Add(entityName, type);
 | 
						||
            }
 | 
						||
            return type;
 | 
						||
        }
 | 
						||
 | 
						||
        enum ImportMessageTypeEnum
 | 
						||
        {
 | 
						||
            /// <summary>信息</summary>
 | 
						||
            Info = 0,
 | 
						||
            /// <summary>警告</summary>
 | 
						||
            Warning = 1,
 | 
						||
            /// <summary>错误</summary>
 | 
						||
            Error = 2,
 | 
						||
        }
 | 
						||
 | 
						||
        private void AddMessage(ImportInvokeParamModel param, ImportMessageTypeEnum messageType, string message)
 | 
						||
        {
 | 
						||
            if (param.ImportDataModel != null && param.ImportDataModel.MessageList != null)
 | 
						||
            {
 | 
						||
                string messageTypeStr = string.Empty;
 | 
						||
                switch (messageType)
 | 
						||
                {
 | 
						||
                    case ImportMessageTypeEnum.Error:
 | 
						||
                        messageTypeStr = "【错误】:";
 | 
						||
                        break;
 | 
						||
                    case ImportMessageTypeEnum.Info:
 | 
						||
                        messageTypeStr = "【信息】:";
 | 
						||
                        break;
 | 
						||
                    case ImportMessageTypeEnum.Warning:
 | 
						||
                        messageTypeStr = "【警告】:";
 | 
						||
                        break;
 | 
						||
                }
 | 
						||
                param.ImportDataModel.MessageList.Add(messageTypeStr + message);
 | 
						||
            }
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 根据行项获取字段值
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="param"></param>
 | 
						||
        /// <param name="row"></param>
 | 
						||
        /// <param name="invokeField"></param>
 | 
						||
        /// <param name="table"></param>
 | 
						||
        /// <param name="entityType"></param>
 | 
						||
        /// <param name="srcValue"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        private object GetFieldValueByRow(ImportInvokeParamModel param, DataRow row, ImportInvokeFieldModel invokeField,
 | 
						||
                DataTable table, Type entityType, out string srcValue)
 | 
						||
        {
 | 
						||
            srcValue = string.Empty;
 | 
						||
            var field = invokeField.Nav_ConfigField;
 | 
						||
            if (field == null) return null;
 | 
						||
 | 
						||
            T_FM_IMPORT_CONFIG_DETAIL configDetail = param.Nav_ConfigDetail;
 | 
						||
            if (field.SRC_FEILD_TYPE == (int)FMImportConfigSrcFieldTypeEnum.字段 || field.SRC_FEILD_TYPE == (int)FMImportConfigSrcFieldTypeEnum.ID字段)
 | 
						||
            {
 | 
						||
                if (string.IsNullOrEmpty(field.SRC_FIELD_NAME)) return null;
 | 
						||
                DataColumn col = table.Columns[field.SRC_FIELD_NAME];
 | 
						||
                if (col == null)
 | 
						||
                    return null;
 | 
						||
                srcValue = LibUtils.ToString(row[col]);
 | 
						||
            }
 | 
						||
            else if (field.SRC_FEILD_TYPE == (int)FMImportConfigSrcFieldTypeEnum.固定值)
 | 
						||
            {
 | 
						||
                srcValue = field.SRC_FIELD_NAME;
 | 
						||
            }
 | 
						||
            if (!string.IsNullOrEmpty(srcValue))
 | 
						||
                srcValue = srcValue.Trim();
 | 
						||
            if (string.IsNullOrEmpty(srcValue)) return null;
 | 
						||
 | 
						||
            string destFieldName = field.DEST_FIELD_NAME;//目的字段
 | 
						||
 | 
						||
            if (field.SRC_FEILD_TYPE == (int)FMImportConfigSrcFieldTypeEnum.ID字段)
 | 
						||
            {
 | 
						||
                if (string.IsNullOrEmpty(field.ID_TABLE_NAME) || string.IsNullOrEmpty(field.ID_TABLE_FIELD_NAME)) return null;
 | 
						||
                if (destFieldName.IndexOf(".", StringComparison.OrdinalIgnoreCase) == -1)//字段中不存在.
 | 
						||
                {
 | 
						||
                    BaseFilter filter = new BaseFilter(configDetail.ORG_ID);
 | 
						||
                    filter.FilterGroup.Rules.Add(new FilterRule(field.ID_TABLE_FIELD_NAME, srcValue, FilterOperate.Equal));
 | 
						||
                    var type = this.GetTypeByEntityName(field.ID_TABLE_NAME, param.ExistTypes);
 | 
						||
                    if (type != null)
 | 
						||
                    {
 | 
						||
                        MethodInfo methodInfo = this.GetType().GetMethod("GetEntityByInvoke", BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
 | 
						||
                        var tmpEntity = methodInfo.MakeGenericMethod(new Type[] { type }).
 | 
						||
                                    Invoke(this, new object[] { filter });
 | 
						||
                        if (tmpEntity != null)
 | 
						||
                        {
 | 
						||
                            var entityBase = tmpEntity as EntityBase<Guid>;
 | 
						||
                            if (entityBase != null) return entityBase.ID;
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
            else
 | 
						||
            {
 | 
						||
                var splitDestFieldName = destFieldName.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).ToList();
 | 
						||
                if (splitDestFieldName != null && splitDestFieldName.Any())
 | 
						||
                {
 | 
						||
                    string firstField = splitDestFieldName[0];
 | 
						||
                    var des = entityType.GetProperty(firstField);
 | 
						||
                    if (des == null) return null;
 | 
						||
                    if (splitDestFieldName.Count == 1)
 | 
						||
                    {
 | 
						||
                        #region 属性
 | 
						||
                        string propertyTypeName = des.PropertyType.Name;
 | 
						||
                        string fullTypeName = des.PropertyType.FullName;
 | 
						||
                        if (string.Compare(propertyTypeName, "GUID", true) == 0 || fullTypeName.IndexOf("Guid", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                            return LibUtils.ToGuid(srcValue);
 | 
						||
                        else if (string.Compare(propertyTypeName, "DateTime", true) == 0 || fullTypeName.IndexOf("DateTime", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                            return LibUtils.ToDateTime(srcValue);
 | 
						||
                        else if (string.Compare(propertyTypeName, "bool", true) == 0 || string.Compare(propertyTypeName, "boolean", true) == 0 || fullTypeName.IndexOf("bool", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                            return LibUtils.ToBoolean(srcValue);
 | 
						||
                        else if (string.Compare(propertyTypeName, "int", true) == 0 || fullTypeName.IndexOf("int", StringComparison.OrdinalIgnoreCase) > -1 || des.PropertyType.IsEnum)
 | 
						||
                        {
 | 
						||
                            int r = LibUtils.ToInt(srcValue);
 | 
						||
 | 
						||
                            EnumNameAttribute enumNameAttr = null;
 | 
						||
                            object[] attrs = des.GetCustomAttributes(typeof(EnumNameAttribute), true);
 | 
						||
                            if (attrs.Length == 1)
 | 
						||
                                enumNameAttr = (EnumNameAttribute)attrs[0];
 | 
						||
 | 
						||
                            string enumName = string.Empty;
 | 
						||
 | 
						||
                            //下拉选择
 | 
						||
                            //if (invokeField.Nav_EditColumn != null
 | 
						||
                            //        && !string.IsNullOrEmpty(invokeField.Nav_EditColumn.ENUM))
 | 
						||
                            //    enumName = invokeField.Nav_EditColumn.ENUM;
 | 
						||
                            //else if (r == 0 && enumNameAttr != null
 | 
						||
                            //        && !string.IsNullOrEmpty(enumNameAttr.EnumName))
 | 
						||
                            //    enumName = enumNameAttr.EnumName;
 | 
						||
 | 
						||
                            //if (!string.IsNullOrEmpty(enumName))
 | 
						||
                            //{
 | 
						||
                            //    var enumType = DataHelper.EnumToType(enumName);
 | 
						||
                            //    if (enumType != null && enumType.IsEnum)
 | 
						||
                            //    {
 | 
						||
                            //        foreach (var x in Enum.GetValues(enumType))
 | 
						||
                            //        {
 | 
						||
                            //            if (string.Compare(x.ToString(), srcValue, true) == 0)
 | 
						||
                            //            {
 | 
						||
                            //                r = (int)x;
 | 
						||
                            //                break;
 | 
						||
                            //            }
 | 
						||
                            //        }
 | 
						||
                            //    }
 | 
						||
                            //}
 | 
						||
 | 
						||
                            return r;
 | 
						||
                        }
 | 
						||
                        else if (string.Compare(propertyTypeName, "decimal", true) == 0 || fullTypeName.IndexOf("decimal", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                            return LibUtils.ToDecimal(srcValue);
 | 
						||
                        else
 | 
						||
                            return srcValue;
 | 
						||
                        #endregion
 | 
						||
                    }
 | 
						||
                    else
 | 
						||
                    {
 | 
						||
 | 
						||
 | 
						||
                        #region 导航属性
 | 
						||
                        if (string.IsNullOrEmpty(srcValue))
 | 
						||
                            return null;
 | 
						||
                        splitDestFieldName.RemoveAt(0);
 | 
						||
                        BaseFilter filter = new BaseFilter(configDetail.ORG_ID);
 | 
						||
                        string ruleField = string.Join(".", splitDestFieldName);
 | 
						||
                        var typeKey = des.PropertyType?.Name + "&&" + ruleField + "==" + srcValue;
 | 
						||
                        if (NavcationList.ContainsKey(typeKey))
 | 
						||
                        {
 | 
						||
                            return NavcationList[typeKey];
 | 
						||
                        }
 | 
						||
                        filter.FilterGroup.Rules.Add(new FilterRule(ruleField, srcValue, FilterOperate.Equal));
 | 
						||
                        Dictionary<string, byte> includes = null;
 | 
						||
                        if (param.PageEditColumnNavIncludes != null && param.PageEditColumnNavIncludes.TryGetValue(firstField, out includes))
 | 
						||
                        {
 | 
						||
                            foreach (var item in includes)
 | 
						||
                                filter.Include.Add(item.Key);
 | 
						||
                        }
 | 
						||
                        try
 | 
						||
                        {
 | 
						||
                            MethodInfo methodInfo = this.GetType().GetMethod("GetEntityByInvoke", new Type[] { typeof(BaseFilter) });
 | 
						||
                            var tmpEntity = methodInfo.MakeGenericMethod(new Type[] { des.PropertyType }).Invoke(this, new object[] { filter });
 | 
						||
                            if (tmpEntity != null)
 | 
						||
                            {
 | 
						||
                                if (!NavcationList.ContainsKey(typeKey))
 | 
						||
                                    NavcationList.Add(typeKey, tmpEntity);
 | 
						||
                                return tmpEntity;
 | 
						||
 | 
						||
                            }
 | 
						||
 | 
						||
                            else
 | 
						||
                            {
 | 
						||
                                string errorLine = des.PropertyType.Name;
 | 
						||
                                this.ThrowError("010001", errorLine + " 列 "+ srcValue + " 不存在");
 | 
						||
                            }
 | 
						||
                               
 | 
						||
                        }
 | 
						||
                        catch (TargetInvocationException ex)
 | 
						||
                        {
 | 
						||
                            this.ThrowError("010001", ex.Message);
 | 
						||
                        }
 | 
						||
 | 
						||
                        #endregion
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return null;
 | 
						||
        }
 | 
						||
 | 
						||
        private string GetFieldValue(string fieldName, object o)
 | 
						||
        {
 | 
						||
            //var tmpType = d;
 | 
						||
            var tmpO = o;
 | 
						||
            var tmpFieldName = fieldName;
 | 
						||
            if (fieldName.IndexOf(".") < 0)
 | 
						||
            {
 | 
						||
                var obj = o.GetType().GetProperty(fieldName).GetValue(tmpO);
 | 
						||
                if (obj == null)
 | 
						||
                {
 | 
						||
                    return "";
 | 
						||
                }
 | 
						||
                return obj.ToString();
 | 
						||
            }
 | 
						||
            else
 | 
						||
            {
 | 
						||
                var indexPos = fieldName.IndexOf(".");
 | 
						||
                tmpFieldName = tmpFieldName.Substring(0, indexPos);
 | 
						||
                var subName = fieldName.Substring(indexPos + 1);
 | 
						||
                var prop = o.GetType().GetProperty(tmpFieldName);
 | 
						||
                if (prop != null)
 | 
						||
                {
 | 
						||
                    var objVal = prop.GetValue(o);
 | 
						||
                    if (objVal == null)
 | 
						||
                    {
 | 
						||
                        return "";
 | 
						||
                        //this.ThrowError("010001", "字段:" + prop.Name + "对应数据不存在," + Newtonsoft.Json.JsonConvert.SerializeObject(o));
 | 
						||
                    }
 | 
						||
                    return GetFieldValue(subName, objVal);
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return "";
 | 
						||
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
        #endregion
 | 
						||
 | 
						||
        #region 用于反射
 | 
						||
        public T GetEntityByInvoke<T>(BaseFilter filter) where T : MesEntityBase, new()
 | 
						||
        {
 | 
						||
            return this.GetEntity<T>(null, filter);
 | 
						||
        }
 | 
						||
 | 
						||
        public List<T> GetEntityByInvoke<T>(BasePageFilter filter) where T : MesEntityBase, new()
 | 
						||
        {
 | 
						||
 | 
						||
            return this.GetOrderPageEntities<T>(null, filter).Items.ToList();
 | 
						||
        }
 | 
						||
 | 
						||
        public List<T> GetEntitiesByInvoke<T>(BasePageFilter filter) where T : MesEntityBase, new()
 | 
						||
        {
 | 
						||
            return this.GetEntities<T>(null, filter).ToList();
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 根据数据表获取实体
 | 
						||
        /// </summary>
 | 
						||
        /// <typeparam name="T"></typeparam>
 | 
						||
        /// <param name="param"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public List<T> DoGetEntityByTable<T>(ImportInvokeParamModel param) where T : MesEntityBase, new()
 | 
						||
        {
 | 
						||
            NavcationList.Clear();
 | 
						||
            if (param == null) return null;
 | 
						||
            T_FM_IMPORT_CONFIG_DETAIL configDetail = param.Nav_ConfigDetail;
 | 
						||
            var codeRuleService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<IPFCodeRuleService>();
 | 
						||
            if (configDetail == null) return null;
 | 
						||
 | 
						||
            DataTable table = param.Nav_DataTable;
 | 
						||
            if (table == null)
 | 
						||
            {
 | 
						||
                //this.AddMessage(param, ImportMessageTypeEnum.Warning, string.Format("未获取到表{0}对应数据", configDetail.DESCRIPTION));
 | 
						||
                this.ThrowError("020022", configDetail.DESCRIPTION);
 | 
						||
                return null;
 | 
						||
            }
 | 
						||
 | 
						||
 | 
						||
            try
 | 
						||
            {
 | 
						||
                List<T> result = new List<T>();
 | 
						||
                List<T> addResult = new List<T>();
 | 
						||
                List<T> updateResult = new List<T>();
 | 
						||
                Type entityType = typeof(T);
 | 
						||
 | 
						||
                BaseFilter filter = new BaseFilter(param.Nav_PageEdit.ORG_ID);
 | 
						||
                var group = new FilterGroup();
 | 
						||
                group.IsAnd = false;
 | 
						||
                filter.FilterGroup.Groups.Add(group);
 | 
						||
                filter.IgnoreDataRule = true;
 | 
						||
                List<T> dbData = new List<T>();
 | 
						||
                Dictionary<string, Guid> keyValuePairs = new Dictionary<string, Guid>();
 | 
						||
                ImportInvokeFieldModel keyFieldModel = null;
 | 
						||
                //ImportInvokeFieldModel parentKeyModel = null;
 | 
						||
                var keyFieldSrcVal = "";
 | 
						||
                //构造查询条件
 | 
						||
                var ruleList = new List<FilterRule>();
 | 
						||
                foreach (DataRow row in table.Rows)
 | 
						||
                {
 | 
						||
                    var list = !param.IsParentAdd && param.Fields != null && param.Fields.Any() ?
 | 
						||
                            param.Fields.Where(t1 => t1.Nav_ConfigField != null).ToList() : null;
 | 
						||
                    if (list != null && list.Any())
 | 
						||
                    {
 | 
						||
 | 
						||
                        //BaseFilter filter = new BaseFilter(configDetail.ORG_ID);
 | 
						||
                        if (!string.IsNullOrEmpty(configDetail.SHEET_KEY_FIELD_NAME))
 | 
						||
                        {
 | 
						||
                            keyFieldModel = list.FirstOrDefault(i => i.Nav_ConfigField.SRC_FIELD_NAME == configDetail.SHEET_KEY_FIELD_NAME);
 | 
						||
                            if (keyFieldModel == null)
 | 
						||
                                this.ThrowError("020012", configDetail.SHEET_KEY_FIELD_NAME);
 | 
						||
 | 
						||
                            var fieldValue = this.GetFieldValueByRow(param, row, keyFieldModel, table, entityType, out keyFieldSrcVal);
 | 
						||
                            if (fieldValue != null)
 | 
						||
                            {
 | 
						||
                                ruleList.Add(new FilterRule(keyFieldModel.Nav_ConfigField.DEST_FIELD_NAME, keyFieldSrcVal.Trim(), FilterOperate.Equal));
 | 
						||
                            }
 | 
						||
 | 
						||
                        }
 | 
						||
                        //foreach (var invokeField in list)
 | 
						||
                        //{
 | 
						||
                        //    var field = invokeField.Nav_ConfigField;
 | 
						||
                        //    if (field == null) continue;
 | 
						||
                        //    string destFieldName = field.DEST_FIELD_NAME;//目的字段
 | 
						||
                        //    if (string.IsNullOrEmpty(destFieldName)) continue;
 | 
						||
                        //    if (invokeField.Nav_ConfigField.SRC_FIELD_NAME == configDetail.SHEET_KEY_FIELD_NAME)
 | 
						||
                        //    {
 | 
						||
                        //        string srcValue = string.Empty;
 | 
						||
                        //        var fieldValue = this.GetFieldValueByRow(param, row, invokeField, table, entityType, out srcValue);
 | 
						||
                        //        if (fieldValue != null)
 | 
						||
                        //            group.Rules.Add(new FilterRule(destFieldName, srcValue.Trim(), FilterOperate.Equal));
 | 
						||
                        //        break;
 | 
						||
                        //    }
 | 
						||
                        //    //}
 | 
						||
                        //    //else if (!string.IsNullOrEmpty(srcValue))
 | 
						||
                        //    //    filter.FilterGroup.Rules.Add(new FilterRule(destFieldName, srcValue, FilterOperate.Equal));
 | 
						||
                        //}
 | 
						||
 | 
						||
                        //从表关联主表字段
 | 
						||
                        if (param.Nav_PageEdit != null && !string.IsNullOrEmpty(param.Nav_PageEdit.RELATION_FIELD))
 | 
						||
                        {
 | 
						||
                            //parentKeyModel=  list.FirstOrDefault(i => i.Nav_ConfigField.SRC_FIELD_NAME == param.KeyField);
 | 
						||
                            var col = row[param.KeyField];
 | 
						||
                            if (col == null)
 | 
						||
                            {
 | 
						||
                                this.ThrowError("020013", param.Nav_ConfigDetail.DESCRIPTION, param.KeyField);
 | 
						||
                            }
 | 
						||
                            //var fieldSrc = "";
 | 
						||
                            //var fieldValue = this.GetFieldValueByRow(param, row, parentKeyModel, table, entityType, out fieldSrc);
 | 
						||
                            var fieldValue = LibUtils.ToString(row[param.KeyField]);
 | 
						||
                            if (param.KeyPairDic.Any() && param.KeyPairDic.ContainsKey(fieldValue))
 | 
						||
                            {
 | 
						||
                                filter.FilterGroup.Rules.Add(new FilterRule(param.Nav_PageEdit.RELATION_FIELD, param.KeyPairDic[fieldValue], FilterOperate.Equal));
 | 
						||
                            }
 | 
						||
                            else
 | 
						||
                            {
 | 
						||
                                this.ThrowError("020014", param.Nav_ConfigDetail.DESCRIPTION, param.KeyField, fieldValue);
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        //添加导航
 | 
						||
                        if (param.PageEditTableIncludes != null && param.PageEditTableIncludes.Any())
 | 
						||
                        {
 | 
						||
                            foreach (var k in param.PageEditTableIncludes)
 | 
						||
                                if (!filter.Include.Contains(k.Key))
 | 
						||
                                    filter.Include.Add(k.Key);
 | 
						||
                        }
 | 
						||
 | 
						||
                    }
 | 
						||
 | 
						||
                }
 | 
						||
                var limit = 1000;
 | 
						||
                for (var x = 0; x < ruleList.Count; x = x + limit)
 | 
						||
                {
 | 
						||
                    var pageRule = ruleList.Skip(x).Take(limit).ToArray();
 | 
						||
                    group.Rules.Clear();
 | 
						||
                    for (var j = 0; j < pageRule.Count(); j++)
 | 
						||
                    {
 | 
						||
                        group.Rules.Add(pageRule[j]);
 | 
						||
                    }
 | 
						||
                    var pageData = this.GetEntities<T>(null, filter).ToList();
 | 
						||
                    dbData.AddRange(pageData);
 | 
						||
                }
 | 
						||
                //dbData = this.GetEntities<T>(null, filter).ToList();
 | 
						||
                //字段赋值 
 | 
						||
                bool isParentSet = false;
 | 
						||
                foreach (DataRow row in table.Rows)
 | 
						||
                {
 | 
						||
                    var keyFieldValue = "";
 | 
						||
                    //主从表关系判断
 | 
						||
                    //if (!string.IsNullOrEmpty(configDetail.SHEET_KEY_FIELD_NAME) && !string.IsNullOrEmpty(param.KeyValue))
 | 
						||
                    //{
 | 
						||
                    //    DataColumn col = table.Columns[configDetail.SHEET_KEY_FIELD_NAME];
 | 
						||
                    //    string curKeyValue = col == null ? string.Empty : LibUtils.ToString(row[col]);
 | 
						||
                    //    if (string.IsNullOrEmpty(curKeyValue) || string.Compare(curKeyValue, param.KeyValue, true) != 0) continue;
 | 
						||
                    //}
 | 
						||
 | 
						||
                    bool isEntityAdd = false;
 | 
						||
 | 
						||
                    //获取已有数据
 | 
						||
                    T t = null;
 | 
						||
 | 
						||
                    if (dbData.Any())
 | 
						||
                    {
 | 
						||
                        if (keyFieldModel != null)
 | 
						||
                        {
 | 
						||
                            string curKeyValue = LibUtils.ToString(row[configDetail.SHEET_KEY_FIELD_NAME]);
 | 
						||
                            foreach (var d in dbData)
 | 
						||
                            {
 | 
						||
                                var dataFieldValue = this.GetFieldValue(keyFieldModel.Nav_ConfigField.DEST_FIELD_NAME, d);
 | 
						||
                                if (dataFieldValue.Trim() == curKeyValue.Trim())
 | 
						||
                                {
 | 
						||
                                    t = d;
 | 
						||
                                    break;
 | 
						||
                                }
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    //不存在已有记录
 | 
						||
                    if (t == null)
 | 
						||
                    {
 | 
						||
                        isEntityAdd = true;
 | 
						||
                        t = new T();
 | 
						||
                        addResult.Add(t);
 | 
						||
                        Type type2 = t.GetType();
 | 
						||
                        var orgPropoerty = type2.GetProperty("ORG_ID");
 | 
						||
                        if (orgPropoerty != null)
 | 
						||
                            orgPropoerty.SetValue(t, configDetail.ORG_ID, null);
 | 
						||
                        if (param.Nav_PageEdit != null && !string.IsNullOrEmpty(param.Nav_PageEdit.RELATION_FIELD))
 | 
						||
                        {
 | 
						||
                            var des = type2.GetProperty(param.Nav_PageEdit.RELATION_FIELD);
 | 
						||
                            if (des != null)
 | 
						||
                            {
 | 
						||
                                var col = row[param.KeyField];
 | 
						||
                                if (col == null)
 | 
						||
                                {
 | 
						||
                                    this.ThrowError("020013", param.Nav_ConfigDetail.DESCRIPTION, param.KeyField);
 | 
						||
                                }
 | 
						||
                                var fieldValue = LibUtils.ToString(row[param.KeyField]);
 | 
						||
                                if (param.KeyPairDic.Any() && param.KeyPairDic.ContainsKey(fieldValue))
 | 
						||
                                {
 | 
						||
                                    des.SetValue(t, param.KeyPairDic[fieldValue], null);
 | 
						||
                                }
 | 
						||
                                else
 | 
						||
                                {
 | 
						||
                                    this.ThrowError("020014", param.Nav_ConfigDetail.DESCRIPTION, param.KeyField, fieldValue);
 | 
						||
                                }
 | 
						||
                            }
 | 
						||
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (param.Nav_PageEdit != null && !string.IsNullOrEmpty(param.Nav_PageEdit.CODE_FIELD_NAME) &&
 | 
						||
                            param.Nav_PageEdit.CODE_RULE_TYPE.HasValue && param.Nav_PageEdit.CODE_RULE_TYPE != 0)
 | 
						||
                        {
 | 
						||
                            var des = entityType.GetProperty(param.Nav_PageEdit.CODE_FIELD_NAME);
 | 
						||
                            if (des != null)
 | 
						||
                            {
 | 
						||
                                SystemCodeFilter codeFilter = new SystemCodeFilter();
 | 
						||
                                codeFilter.CodeType = param.Nav_PageEdit.CODE_RULE_TYPE.Value;
 | 
						||
                                codeFilter.Count = 1;
 | 
						||
                                codeFilter.OrgId = configDetail.ORG_ID;
 | 
						||
                                var c = codeRuleService.NewGenSerial(codeFilter);
 | 
						||
                                des.SetValue(t, c, null);
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (param.Nav_PageEdit != null && param.Nav_PageEdit.Nav_Columns != null && param.Nav_PageEdit.Nav_Columns.Any())
 | 
						||
                        {
 | 
						||
                            foreach (var editCol in param.Nav_PageEdit.Nav_Columns)
 | 
						||
                            {
 | 
						||
                                if (editCol.CONTROL_TYPE == (int)PFControlTypeEnum.系统序列号控件 &&
 | 
						||
                                    editCol.CODE_RULE_TYPE.HasValue && editCol.CODE_RULE_TYPE != 0)
 | 
						||
                                {
 | 
						||
                                    var des1 = entityType.GetProperty(editCol.FIELD_NAME);
 | 
						||
                                    if (des1 != null)
 | 
						||
                                    {
 | 
						||
                                        SystemCodeFilter codeFilter = new SystemCodeFilter();
 | 
						||
                                        codeFilter.CodeType = editCol.CODE_RULE_TYPE.Value;
 | 
						||
                                        codeFilter.Count = 1;
 | 
						||
                                        codeFilter.OrgId = configDetail.ORG_ID;
 | 
						||
                                        var c = codeRuleService.NewGenSerial(codeFilter);
 | 
						||
                                        des1.SetValue(t, c, null);
 | 
						||
                                    }
 | 
						||
                                }
 | 
						||
                                if (string.IsNullOrEmpty(editCol.FIELD_NAME) ||
 | 
						||
                                    editCol.FIELD_NAME.IndexOf(".", StringComparison.OrdinalIgnoreCase) > -1 ||
 | 
						||
                                    string.IsNullOrEmpty(editCol.DEFAULT_VALUE)) continue;
 | 
						||
                                var des = entityType.GetProperty(editCol.FIELD_NAME);
 | 
						||
                                if (des == null) return null;
 | 
						||
                                string propertyTypeName = des.PropertyType.Name;
 | 
						||
                                string fullTypeName = des.PropertyType.FullName;
 | 
						||
                                object obj = null;
 | 
						||
                                if (string.Compare(propertyTypeName, "GUID", true) == 0 || fullTypeName.IndexOf("Guid", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                                    obj = LibUtils.ToGuid(editCol.DEFAULT_VALUE);
 | 
						||
                                else if (string.Compare(propertyTypeName, "DateTime", true) == 0 || fullTypeName.IndexOf("DateTime", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                                {
 | 
						||
                                    if (editCol.DEFAULT_VALUE.StartsWith("@nowDate"))
 | 
						||
                                        obj = DateTime.Now.Date;
 | 
						||
                                    else if (editCol.DEFAULT_VALUE.StartsWith("@now"))
 | 
						||
                                        obj = DateTime.Now;
 | 
						||
                                    else
 | 
						||
                                        obj = LibUtils.ToDateTime(editCol.DEFAULT_VALUE);
 | 
						||
                                }
 | 
						||
                                else if (string.Compare(propertyTypeName, "bool", true) == 0 || string.Compare(propertyTypeName, "boolean", true) == 0 || fullTypeName.IndexOf("bool", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                                    obj = LibUtils.ToBoolean(editCol.DEFAULT_VALUE);
 | 
						||
                                else if (string.Compare(propertyTypeName, "int", true) == 0 || fullTypeName.IndexOf("int", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                                {
 | 
						||
                                    int r = LibUtils.ToInt(editCol.DEFAULT_VALUE);
 | 
						||
                                    //下拉选择
 | 
						||
                                    //if (!string.IsNullOrEmpty(editCol.ENUM))
 | 
						||
                                    //{
 | 
						||
                                    //    var enumType = DataHelper.EnumToType(editCol.ENUM);
 | 
						||
                                    //    if (enumType != null && enumType.IsEnum)
 | 
						||
                                    //    {
 | 
						||
                                    //        foreach (var x in Enum.GetValues(enumType))
 | 
						||
                                    //        {
 | 
						||
                                    //            if (string.Compare(x.ToString(), editCol.DEFAULT_VALUE, true) == 0)
 | 
						||
                                    //                r = (int)x;
 | 
						||
                                    //        }
 | 
						||
                                    //    }
 | 
						||
                                    //}
 | 
						||
                                    obj = r;
 | 
						||
                                }
 | 
						||
                                else if (string.Compare(propertyTypeName, "decimal", true) == 0 || fullTypeName.IndexOf("decimal", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                                    obj = LibUtils.ToDecimal(editCol.DEFAULT_VALUE);
 | 
						||
                                else if (!editCol.DEFAULT_VALUE.StartsWith("@"))
 | 
						||
                                    obj = editCol.DEFAULT_VALUE;
 | 
						||
                                if (obj != null)
 | 
						||
                                    des.SetValue(t, obj, null);
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    else
 | 
						||
                    {
 | 
						||
                        updateResult.Add(t);
 | 
						||
                    }
 | 
						||
                    if (param.Fields != null && param.Fields.Any())
 | 
						||
                    {
 | 
						||
                        foreach (var invokeField in param.Fields)
 | 
						||
                        {
 | 
						||
                            var field = invokeField.Nav_ConfigField;
 | 
						||
                            if (field == null) continue;
 | 
						||
                            //父节点字段先不赋值
 | 
						||
                            if (field.DEST_FIELD_NAME.StartsWith("Nav_Parent") && !param.IsParentUpdate)
 | 
						||
                            {
 | 
						||
                                isParentSet = true;
 | 
						||
                                continue;
 | 
						||
                            }
 | 
						||
 | 
						||
                            string destFieldName = field.DEST_FIELD_NAME;//目的字段
 | 
						||
                            if (string.IsNullOrEmpty(destFieldName)) continue;
 | 
						||
                            string srcValue = string.Empty;
 | 
						||
 | 
						||
                            //获取字段值
 | 
						||
                            var fieldValue = this.GetFieldValueByRow(param, row, invokeField, table, entityType, out srcValue);
 | 
						||
                            if (field.SRC_FEILD_TYPE == (int)FMImportConfigSrcFieldTypeEnum.ID字段)
 | 
						||
                            {
 | 
						||
                                if (destFieldName.IndexOf(".", StringComparison.OrdinalIgnoreCase) > -1)
 | 
						||
                                {
 | 
						||
                                    this.AddMessage(param, ImportMessageTypeEnum.Warning,
 | 
						||
                                            string.Format("获取表{0}时,字段{1}不允许配置导航字段{2}", configDetail.DESCRIPTION, field.LABEL, field.DEST_FIELD_NAME));
 | 
						||
                                    continue;
 | 
						||
                                }
 | 
						||
                                if (fieldValue == null)
 | 
						||
                                {
 | 
						||
                                    this.AddMessage(param, ImportMessageTypeEnum.Warning,
 | 
						||
                                        string.Format("获取表{0}时,字段{1}未获取到有效记录", configDetail.DESCRIPTION, field.LABEL, field.ID_TABLE_NAME));
 | 
						||
                                    continue;
 | 
						||
                                }
 | 
						||
                                var des = entityType.GetProperty(destFieldName);
 | 
						||
                                if (des == null) continue;
 | 
						||
                                des.SetValue(t, fieldValue, null);
 | 
						||
                            }
 | 
						||
                            else
 | 
						||
                            {
 | 
						||
                                var splitDestFieldName = destFieldName.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).ToList();
 | 
						||
                                if (splitDestFieldName != null && splitDestFieldName.Any())
 | 
						||
                                {
 | 
						||
                                    string firstField = splitDestFieldName[0];
 | 
						||
                                    var des = entityType.GetProperty(firstField);
 | 
						||
                                    if (des == null) continue;
 | 
						||
                                    if (splitDestFieldName.Count == 1)
 | 
						||
                                    {
 | 
						||
                                        if (fieldValue == null) continue;
 | 
						||
                                        des.SetValue(t, fieldValue, null);
 | 
						||
                                    }
 | 
						||
                                    else
 | 
						||
                                    {
 | 
						||
                                        if (string.IsNullOrEmpty(field.ID_FIELD_NAME))
 | 
						||
                                        {
 | 
						||
                                            this.AddMessage(param, ImportMessageTypeEnum.Warning,
 | 
						||
                                                string.Format("获取表{0}时,字段{1}未配置ID字段名称", configDetail.DESCRIPTION, field.LABEL));
 | 
						||
                                            continue;
 | 
						||
                                        }
 | 
						||
                                        var idFieldNameProperty = entityType.GetProperty(field.ID_FIELD_NAME);
 | 
						||
                                        if (idFieldNameProperty == null)
 | 
						||
                                        {
 | 
						||
                                            this.AddMessage(param, ImportMessageTypeEnum.Warning,
 | 
						||
                                                string.Format("获取表{0}时,字段{1}无效ID字段名称{2}", configDetail.DESCRIPTION, field.LABEL, field.ID_FIELD_NAME));
 | 
						||
                                            continue;
 | 
						||
                                        }
 | 
						||
                                        if (fieldValue == null)
 | 
						||
                                        {
 | 
						||
                                            if (!string.IsNullOrEmpty(srcValue))
 | 
						||
                                            {
 | 
						||
                                                splitDestFieldName.RemoveAt(0);
 | 
						||
                                                string ruleField = string.Join(".", splitDestFieldName);
 | 
						||
                                                this.AddMessage(param, ImportMessageTypeEnum.Warning,
 | 
						||
                                                    string.Format("获取表{0}时,导航字段{1}为匹配到实体(字段{2},值{3})", configDetail.DESCRIPTION, field.LABEL, ruleField, srcValue));
 | 
						||
                                            }
 | 
						||
                                            continue;
 | 
						||
                                        }
 | 
						||
                                        des.SetValue(t, fieldValue, null);
 | 
						||
                                        var entityBase = fieldValue as EntityBase<Guid>;
 | 
						||
                                        if (entityBase != null)
 | 
						||
                                            idFieldNameProperty.SetValue(t, entityBase.ID, null);
 | 
						||
 | 
						||
                                    }
 | 
						||
                                }
 | 
						||
                            }
 | 
						||
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    if (keyFieldModel != null)
 | 
						||
                    {
 | 
						||
                        keyFieldValue = GetFieldValue(keyFieldModel.Nav_ConfigField.DEST_FIELD_NAME, t);
 | 
						||
                        if (!string.IsNullOrEmpty(keyFieldValue) && !keyValuePairs.ContainsKey(keyFieldValue))
 | 
						||
                            keyValuePairs.Add(keyFieldValue, t.ID);
 | 
						||
                    }
 | 
						||
                    result.Add(t);
 | 
						||
                }
 | 
						||
                if (updateResult.Any())
 | 
						||
                {
 | 
						||
                    var type = updateResult.FirstOrDefault().GetType();
 | 
						||
                    var pros = type.GetProperties().Where(i => i.Name.StartsWith("Nav"));
 | 
						||
                    foreach (var s in updateResult)
 | 
						||
                    {
 | 
						||
                        foreach (var pro in pros)
 | 
						||
                        {
 | 
						||
                            type.GetProperty(pro.Name).SetValue(s, null);
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                }
 | 
						||
                if (addResult.Any())
 | 
						||
                {
 | 
						||
                    var type = addResult.FirstOrDefault().GetType();
 | 
						||
                    var pros = type.GetProperties().Where(i => i.Name.StartsWith("Nav"));
 | 
						||
                    foreach (var s in addResult)
 | 
						||
                    {
 | 
						||
                        foreach (var pro in pros)
 | 
						||
                        {
 | 
						||
                            type.GetProperty(pro.Name).SetValue(s, null);
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                }
 | 
						||
                if (configDetail.PARENT_ID == null)//主表
 | 
						||
                    this.AddMessage(param, ImportMessageTypeEnum.Info, string.Format("获取到数据{0}笔", result.Count));
 | 
						||
                ///更新
 | 
						||
                if (param.IsUpdate)
 | 
						||
                {
 | 
						||
                    this.UnifiedCommit(() =>
 | 
						||
                    {
 | 
						||
                        if (addResult.Any())
 | 
						||
                            this.BantchAddEntityNoCommit(addResult);
 | 
						||
                        if (updateResult.Any())
 | 
						||
                            if (!param.IsParentUpdate)
 | 
						||
                                this.BantchUpdateEntityNoCommit(updateResult);
 | 
						||
                            else
 | 
						||
                                this.BantchSaveEntityNoCommit(updateResult);
 | 
						||
                    });
 | 
						||
                }
 | 
						||
                //父节点字段处理
 | 
						||
                if (isParentSet)
 | 
						||
                {
 | 
						||
                    param.IsParentUpdate = true;
 | 
						||
                    DoGetEntityByTable<T>(param);
 | 
						||
                }
 | 
						||
 | 
						||
                //子表处理
 | 
						||
 | 
						||
 | 
						||
                //foreach (DataRow row in table.Rows)
 | 
						||
                //{
 | 
						||
                //子表赋值
 | 
						||
                if (!string.IsNullOrEmpty(configDetail.SHEET_KEY_FIELD_NAME) && param.Nav_ChildConfigDetails != null && param.Nav_ChildConfigDetails.Any())
 | 
						||
                {
 | 
						||
                    DataColumn col = table.Columns[configDetail.SHEET_KEY_FIELD_NAME];
 | 
						||
                    //string keyValue = col == null ? string.Empty : LibUtils.ToString(row[col]);
 | 
						||
                    //if (!string.IsNullOrEmpty(keyValue))
 | 
						||
                    //{
 | 
						||
                    foreach (var child in param.Nav_ChildConfigDetails)
 | 
						||
                    {
 | 
						||
                        child.IsUpdate = param.IsUpdate;
 | 
						||
                        if (child.Nav_PageEdit == null || string.IsNullOrEmpty(child.Nav_PageEdit.NAV_PROPERTY))
 | 
						||
                        {
 | 
						||
                            this.AddMessage(param, ImportMessageTypeEnum.Warning, string.Format("获取表{0}时,子表{1}未配置导航",
 | 
						||
                                configDetail.DESCRIPTION, child.Nav_ConfigDetail == null ? "" : child.Nav_ConfigDetail.DESCRIPTION));
 | 
						||
                            continue;
 | 
						||
                        }
 | 
						||
 | 
						||
                        var navProperty = entityType.GetProperty(child.Nav_PageEdit.NAV_PROPERTY);
 | 
						||
                        if (navProperty == null)
 | 
						||
                        {
 | 
						||
                            this.AddMessage(param, ImportMessageTypeEnum.Warning, string.Format("获取表{0}时,子表{1}无效导航{2}", configDetail.DESCRIPTION,
 | 
						||
                                    child.Nav_ConfigDetail == null ? "" : child.Nav_ConfigDetail.DESCRIPTION, child.Nav_PageEdit.NAV_PROPERTY));
 | 
						||
                            continue;
 | 
						||
                        }
 | 
						||
                        child.IsParentAdd = false;
 | 
						||
                        child.KeyPairDic = keyValuePairs;
 | 
						||
                        child.KeyField = configDetail.SHEET_KEY_FIELD_NAME;
 | 
						||
                        //child.KeyValue = keyValue;
 | 
						||
                        //child.ParentId = keyValuePairs[keyValue];
 | 
						||
                        int i1 = navProperty.PropertyType.FullName.IndexOf("T_");
 | 
						||
                        if (i1 >= 0)
 | 
						||
                        {
 | 
						||
                            int i2 = navProperty.PropertyType.FullName.IndexOf(",", i1 + 2);
 | 
						||
                            if (i2 >= 0)
 | 
						||
                            {
 | 
						||
                                var childTable = navProperty.PropertyType.FullName.Substring(i1, i2 - i1);
 | 
						||
                                var type = this.GetTypeByEntityName(childTable, param.ExistTypes);
 | 
						||
                                if (type != null)
 | 
						||
                                {
 | 
						||
                                    try
 | 
						||
                                    {
 | 
						||
 | 
						||
 | 
						||
                                        MethodInfo methodInfo = this.GetType().GetMethod("DoGetEntityByTable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
 | 
						||
                                        var tmpResult = methodInfo.MakeGenericMethod(new Type[] { type }).Invoke(this, new object[] { child });
 | 
						||
                                        //if (tmpResult != null)
 | 
						||
                                        //    navProperty.SetValue(t, tmpResult, null);
 | 
						||
                                    }
 | 
						||
                                    catch (TargetInvocationException ex)
 | 
						||
                                    {
 | 
						||
                                        this.ThrowError("010001", ex.InnerException.Message);
 | 
						||
                                    }
 | 
						||
                                }
 | 
						||
                            }
 | 
						||
                            //}
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    //}
 | 
						||
                }
 | 
						||
                //刪除
 | 
						||
                if (param.DelFlag)
 | 
						||
                {
 | 
						||
                    var ids = addResult.Select(i => i.ID).ToList();
 | 
						||
                    var updateIds = updateResult.Select(i => i.ID).ToList();
 | 
						||
                    ids.AddRange(updateIds);
 | 
						||
                    this.DeleteEntity<T>(i => !ids.Contains(i.ID));
 | 
						||
                }
 | 
						||
 | 
						||
                return result;
 | 
						||
            }
 | 
						||
            catch (Exception ex)
 | 
						||
            {
 | 
						||
                this.AddMessage(param, ImportMessageTypeEnum.Error,
 | 
						||
                    string.Format("获取表数据{0}发生错误,详情:{1}", configDetail.DESCRIPTION,
 | 
						||
                    ex.InnerException != null ? ex.InnerException.Message : ex.Message));
 | 
						||
                this.ThrowError("010001", ex.Message);
 | 
						||
            }
 | 
						||
            return null;
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        #endregion
 | 
						||
 | 
						||
    }
 | 
						||
}
 |