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