|
|
|
|
using KGIS.Framework.DBOperator;
|
|
|
|
|
using KGIS.Framework.Maps;
|
|
|
|
|
using KGIS.Framework.Platform;
|
|
|
|
|
using KGIS.Framework.Platform.Interface;
|
|
|
|
|
using KGIS.Framework.Utils;
|
|
|
|
|
using Kingo.PluginServiceInterface;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Plugin.DataDictionary.Helper
|
|
|
|
|
{
|
|
|
|
|
public class DicAPI : IDicHelper
|
|
|
|
|
{
|
|
|
|
|
public List<DataDicTionary> AllDic { get; set; }
|
|
|
|
|
private Dictionary<string, string> DicTypes = new Dictionary<string, string>();
|
|
|
|
|
//FileSystemWatcher watcher = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取行政区字典数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pLevel">行政级别(1:县、2:镇、3:村)</param>
|
|
|
|
|
//List<TreeNode> selectNode = new List<TreeNode>();
|
|
|
|
|
public BasicDataModel[] GetXZQDic(int pLevel)
|
|
|
|
|
{
|
|
|
|
|
List<BasicDataModel> result = new List<BasicDataModel>();
|
|
|
|
|
if (pLevel == 1)
|
|
|
|
|
{
|
|
|
|
|
IRDBHelper helper = null;
|
|
|
|
|
DataTable dtData = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) == null)
|
|
|
|
|
{
|
|
|
|
|
result = null;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
string strConn = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
strConn = string.Format(strConn, SysAppPath.GetDataBaseRoot() + "System.mdb");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(strConn))
|
|
|
|
|
{
|
|
|
|
|
result = null;
|
|
|
|
|
}
|
|
|
|
|
helper = RDBFactory.CreateDbHelper(strConn, DatabaseType.MSAccess);
|
|
|
|
|
string strSQL = string.Format("SELECT * FROM {0} where XZQ ='{1}'", "XZQ", ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).CODE);
|
|
|
|
|
dtData = helper.ExecuteDatatable("dtData", strSQL, true);
|
|
|
|
|
if (dtData != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataRow row in dtData.Rows)
|
|
|
|
|
{
|
|
|
|
|
BasicDataModel node = new BasicDataModel();
|
|
|
|
|
|
|
|
|
|
node.Name = row["XZQMC"] is DBNull ? "" : row["XZQMC"].ToString();
|
|
|
|
|
node.Code = row["XZQ"].ToString();
|
|
|
|
|
node.DisplayName = string.Format("({0}){1}", node.Code, node.Name);
|
|
|
|
|
node.Attribures = new Dictionary<string, object>();
|
|
|
|
|
foreach (DataColumn col in dtData.Columns)
|
|
|
|
|
{
|
|
|
|
|
node.Attribures.Add(col.ColumnName, row[col]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result.Add(node);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result.ToArray();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (dtData != null)
|
|
|
|
|
{
|
|
|
|
|
dtData.Clear();
|
|
|
|
|
dtData.Dispose();
|
|
|
|
|
}
|
|
|
|
|
if (helper != null)
|
|
|
|
|
{
|
|
|
|
|
helper.DisConnect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (pLevel == 2)
|
|
|
|
|
{
|
|
|
|
|
IRDBHelper helper = null;
|
|
|
|
|
DataTable dtData = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) == null)
|
|
|
|
|
{
|
|
|
|
|
result = null;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
string strConn = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection");
|
|
|
|
|
strConn = string.Format(strConn, ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).ProjDir + "PrjDB.gdb");
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(strConn))
|
|
|
|
|
{
|
|
|
|
|
result = null;
|
|
|
|
|
}
|
|
|
|
|
helper = RDBFactory.CreateDbHelper(strConn, DatabaseType.FileGeodatabase);
|
|
|
|
|
string strSQL = string.Format("SELECT * FROM {0}", "XZQ");
|
|
|
|
|
dtData = helper.ExecuteDatatable("dtData", strSQL, true);
|
|
|
|
|
if (dtData != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataRow row in dtData.Rows)
|
|
|
|
|
{
|
|
|
|
|
BasicDataModel node = new BasicDataModel();
|
|
|
|
|
|
|
|
|
|
node.Name = row["XZQMC"] is DBNull ? "" : row["XZQMC"].ToString();
|
|
|
|
|
node.Code = row["XZQDM"].ToString();
|
|
|
|
|
node.DisplayName = string.Format("({0}){1}", node.Code, node.Name);
|
|
|
|
|
node.Attribures = new Dictionary<string, object>();
|
|
|
|
|
foreach (DataColumn col in dtData.Columns)
|
|
|
|
|
{
|
|
|
|
|
node.Attribures.Add(col.ColumnName, row[col]);
|
|
|
|
|
}
|
|
|
|
|
//GetSubXZQDic();
|
|
|
|
|
result.Add(node);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result.ToArray();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (dtData != null)
|
|
|
|
|
{
|
|
|
|
|
dtData.Clear();
|
|
|
|
|
dtData.Dispose();
|
|
|
|
|
}
|
|
|
|
|
if (helper != null)
|
|
|
|
|
{
|
|
|
|
|
helper.DisConnect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
public string GetDicTypeID(DicTypeEnum pDicType, bool GetNewDic = false)
|
|
|
|
|
{
|
|
|
|
|
string result = string.Empty;
|
|
|
|
|
DataTable dtDicTypeID = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (dtDicTypeID == null || GetNewDic)
|
|
|
|
|
{
|
|
|
|
|
//foreach (var item in DicTypes)
|
|
|
|
|
//{
|
|
|
|
|
// if (item.Value == pDicType.ToString())
|
|
|
|
|
// {
|
|
|
|
|
// return item.Key;
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
//string result = string.Empty;
|
|
|
|
|
IRDBHelper rdbHelper = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath();
|
|
|
|
|
if (string.IsNullOrWhiteSpace(dbPath))
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("GetDicDataPath 获取失败");
|
|
|
|
|
//dbPath = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath() + "\\字典", "dic.mdb");
|
|
|
|
|
//if (!File.Exists(dbPath))
|
|
|
|
|
// return string.Empty;
|
|
|
|
|
}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// #region 监测工作目录下的文件
|
|
|
|
|
// if (watcher == null)
|
|
|
|
|
// {
|
|
|
|
|
// watcher = new FileSystemWatcher();
|
|
|
|
|
// watcher.Path = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).ProjDir;
|
|
|
|
|
// watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
|
|
|
|
|
// watcher.IncludeSubdirectories = true;
|
|
|
|
|
// watcher.Filter = "dic.mdb";
|
|
|
|
|
// watcher.Changed += new FileSystemEventHandler(OnChanged);
|
|
|
|
|
// watcher.EnableRaisingEvents = true;
|
|
|
|
|
// }
|
|
|
|
|
// #endregion
|
|
|
|
|
//}
|
|
|
|
|
//if (DicTypes.Count > 0)
|
|
|
|
|
//{
|
|
|
|
|
// foreach (var item in DicTypes)
|
|
|
|
|
// {
|
|
|
|
|
// if (item.Value == pDicType.ToString())
|
|
|
|
|
// {
|
|
|
|
|
// return item.Key;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
|
|
|
|
|
string strSQL = "select ID,ALIASNAME from Sys_DicManage ";//WHERE ALIASNAME = '" + pDicType + "'";
|
|
|
|
|
dtDicTypeID = rdbHelper.ExecuteDatatable("DicType", strSQL, true);
|
|
|
|
|
//if (dt != null && dt.Rows.Count > 0)
|
|
|
|
|
//{
|
|
|
|
|
// if (dt.Rows[0][0] != null && !(dt.Rows[0][0] is DBNull))
|
|
|
|
|
// result = dt.Rows[0][0].ToString();
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (rdbHelper != null)
|
|
|
|
|
{
|
|
|
|
|
rdbHelper.DisConnect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (dtDicTypeID != null && dtDicTypeID.Rows.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataRow item in dtDicTypeID.Rows)
|
|
|
|
|
{
|
|
|
|
|
if (item[0] != null && !(item[0] is DBNull))
|
|
|
|
|
{
|
|
|
|
|
if (item[1].ToString() == pDicType.ToString())
|
|
|
|
|
result = item[0].ToString();
|
|
|
|
|
if (DicTypes.ContainsKey(item[0].ToString()))
|
|
|
|
|
continue;
|
|
|
|
|
DicTypes.Add(item[0].ToString(), item[1].ToString());
|
|
|
|
|
//return item[0].ToString();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//DataRow[] rows = dtDicTypeID.Select(string.Format("ALIASNAME='{0}'", pDicType));
|
|
|
|
|
//if (rows != null && rows.Length > 0)
|
|
|
|
|
//{
|
|
|
|
|
// if (rows[0][0] != null && !(rows[0][0] is DBNull))
|
|
|
|
|
// {
|
|
|
|
|
// return rows[0][0].ToString();
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (dtDicTypeID != null)
|
|
|
|
|
{
|
|
|
|
|
dtDicTypeID.Clear();
|
|
|
|
|
dtDicTypeID.Dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void OnChanged(object source, FileSystemEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var watcher = source as FileSystemWatcher;
|
|
|
|
|
if (watcher != null)
|
|
|
|
|
{
|
|
|
|
|
if (DicTypes.Count > 0)
|
|
|
|
|
DicTypes.Clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 避免access由于独占情况,造成报错
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pDicType"></param>
|
|
|
|
|
/// <param name="GetNewDic"></param>
|
|
|
|
|
/// <returns>王欢 2018-11-16</returns>
|
|
|
|
|
public DataTable GetDicTypeID(List<DicTypeEnum> pDicType, bool GetNewDic = false)
|
|
|
|
|
{
|
|
|
|
|
DataTable dtDicTypeID = null;
|
|
|
|
|
IRDBHelper rdbHelper = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath();
|
|
|
|
|
if (string.IsNullOrWhiteSpace(dbPath))
|
|
|
|
|
{
|
|
|
|
|
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
|
|
|
|
|
StringBuilder sb = new StringBuilder("select ID,ALIASNAME from Sys_DicManage WHERE ALIASNAME in ( ");
|
|
|
|
|
foreach (DicTypeEnum item in pDicType)
|
|
|
|
|
{
|
|
|
|
|
sb.Append("'" + item + "',");
|
|
|
|
|
}
|
|
|
|
|
sb.Remove(sb.Length - 1, 1);
|
|
|
|
|
sb.Append(")");
|
|
|
|
|
dtDicTypeID = rdbHelper.ExecuteDatatable("DicType", sb.ToString(), true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (rdbHelper != null)
|
|
|
|
|
rdbHelper.DisConnect();
|
|
|
|
|
}
|
|
|
|
|
return dtDicTypeID;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 根据类型获取字典项集合
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pDicType"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public List<DataDicTionary> GetDic(DicTypeEnum pDicType, bool IsReset = false)
|
|
|
|
|
{
|
|
|
|
|
List<DataDicTionary> result = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//if (Env.Instance.DicList == null || Env.Instance.DicList.Count <= 0)
|
|
|
|
|
//{
|
|
|
|
|
// Env.Instance.DicList = CommonAPI.GetAllDic();
|
|
|
|
|
//}
|
|
|
|
|
if (AllDic == null)
|
|
|
|
|
AllDic = new List<DataDicTionary>();
|
|
|
|
|
if (AllDic.Count == 0 || IsReset)
|
|
|
|
|
{
|
|
|
|
|
AllDic = DicHelper.GetAllDic();
|
|
|
|
|
}
|
|
|
|
|
if (AllDic.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
result = new List<DataDicTionary>();
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
string s = GetDicTypeID(pDicType);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(s))
|
|
|
|
|
return result;
|
|
|
|
|
//List<DataDicTionary> tempDic = DicHelper.GetAllDic();
|
|
|
|
|
//if (tempDic == null)
|
|
|
|
|
// return result;
|
|
|
|
|
List<DataDicTionary> dicList = AllDic.FindAll(f => f.OWNERDIC == s && (f.PID == 0 || f.PID == null));
|
|
|
|
|
foreach (DataDicTionary item in dicList)
|
|
|
|
|
{
|
|
|
|
|
if (result == null)
|
|
|
|
|
result = new List<DataDicTionary>();
|
|
|
|
|
item.SubDic = GetSubDic(item.ID, AllDic);
|
|
|
|
|
result.Add(item);
|
|
|
|
|
//List<DATADICTIONARY> list = GetSubDic(item.ID);
|
|
|
|
|
//if (list != null)
|
|
|
|
|
//{
|
|
|
|
|
// result.AddRange(list);
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// (定制化)根据类型获取字典项集合
|
|
|
|
|
/// edit by cmj 2018/5/7
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pDicType"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public List<DataDicTionary> GetDlbmDic(DicTypeEnum pDicType, bool IsReset = false)
|
|
|
|
|
{
|
|
|
|
|
List<DataDicTionary> result = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//if (Env.Instance.DicList == null || Env.Instance.DicList.Count <= 0)
|
|
|
|
|
//{
|
|
|
|
|
// Env.Instance.DicList = CommonAPI.GetAllDic();
|
|
|
|
|
//}
|
|
|
|
|
string s = GetDicTypeID(pDicType);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(s))
|
|
|
|
|
return result;
|
|
|
|
|
List<DataDicTionary> tempDic = DicHelper.GetAllDic();
|
|
|
|
|
if (tempDic == null)
|
|
|
|
|
return result;
|
|
|
|
|
List<DataDicTionary> dicList = tempDic.OrderBy(f => f.CODE).ToList().FindAll(f => f.OWNERDIC == s);
|
|
|
|
|
foreach (DataDicTionary item in dicList)
|
|
|
|
|
{
|
|
|
|
|
if (result == null)
|
|
|
|
|
result = new List<DataDicTionary>();
|
|
|
|
|
//修改人:李忠盼 修改时间:20180917 地类编码增加一级类湿地(00),而以00开头的地类编码只有湿地本身,一级类不应出现在绘制属性继承框内
|
|
|
|
|
//int i = dicList.Where(x => x.CODE.StartsWith(item.CODE)).ToList().Count;
|
|
|
|
|
//if (i > 1 && item.CODE.Length < 3)
|
|
|
|
|
//2019-01-30 白明雅 存在没有子类的特殊情况,这种需要添加
|
|
|
|
|
//查询有几个二级类
|
|
|
|
|
int i = dicList.Where(x => x.PID == item.ID).ToList().Count;
|
|
|
|
|
if (item.CODE.Length < 3 && i > 0)
|
|
|
|
|
continue;
|
|
|
|
|
item.SubDic = GetSubDic(item.ID, tempDic);
|
|
|
|
|
result.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
public DataDicTionary GetSingleDlbmDic(DicTypeEnum pDicType, bool IsReset = false)
|
|
|
|
|
{
|
|
|
|
|
DataDicTionary result = new DataDicTionary();
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string s = GetDicTypeID(pDicType);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(s))
|
|
|
|
|
return result;
|
|
|
|
|
List<DataDicTionary> tempDic = DicHelper.GetAllDic();
|
|
|
|
|
if (tempDic == null)
|
|
|
|
|
return result;
|
|
|
|
|
List<DataDicTionary> dicList = tempDic.OrderBy(f => f.CODE).ToList().FindAll(f => f.OWNERDIC == s && f.CODE.Length == 6);
|
|
|
|
|
foreach (DataDicTionary item in dicList)
|
|
|
|
|
{
|
|
|
|
|
result = item;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
public List<DataDicTionary> GetNoGroupDic(DicTypeEnum pDicType, List<DataDicTionary> dicList = null)
|
|
|
|
|
{
|
|
|
|
|
List<DataDicTionary> result = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//if (IsReset || Env.Instance.DicList == null || Env.Instance.DicList.Count == 0)
|
|
|
|
|
//{
|
|
|
|
|
// Env.Instance.DicList = CommonAPI.GetAllDic();
|
|
|
|
|
//}
|
|
|
|
|
//if (Env.Instance.DicList == null || Env.Instance.DicList.Count == 0)
|
|
|
|
|
//{
|
|
|
|
|
// Env.Instance.DicList = CommonAPI.GetAllDicForSystem();
|
|
|
|
|
//}
|
|
|
|
|
string s = GetDicTypeID(pDicType);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(s))
|
|
|
|
|
return result;
|
|
|
|
|
List<DataDicTionary> tempDic = dicList;
|
|
|
|
|
if (dicList == null || dicList.Count == 0)
|
|
|
|
|
tempDic = DicHelper.GetAllDic();
|
|
|
|
|
if (tempDic == null)
|
|
|
|
|
return result;
|
|
|
|
|
foreach (DataDicTionary item in tempDic)
|
|
|
|
|
{
|
|
|
|
|
if (item.OWNERDIC == s)
|
|
|
|
|
{
|
|
|
|
|
if (result == null)
|
|
|
|
|
{
|
|
|
|
|
result = new List<DataDicTionary>();
|
|
|
|
|
result.Add(new DataDicTionary() { CODE = "", NAME = "", DisplayName = "" });
|
|
|
|
|
}
|
|
|
|
|
//item.SubDic = GetSubDic(item.ID);
|
|
|
|
|
result.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
public List<DataDicTionary> GetAllDic()
|
|
|
|
|
{
|
|
|
|
|
DataTable dt = null;
|
|
|
|
|
List<DataDicTionary> result = new List<DataDicTionary>();
|
|
|
|
|
IRDBHelper rdbHelper = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) != null)
|
|
|
|
|
{
|
|
|
|
|
string dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath();
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(dbPath))
|
|
|
|
|
{
|
|
|
|
|
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
|
|
|
|
|
string strSQL = "select * from Sys_DicDetail";
|
|
|
|
|
dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true);
|
|
|
|
|
if (dt != null)
|
|
|
|
|
{
|
|
|
|
|
//Bug-12137 霍岩 2018-11-14 使用CODE字段按顺序排序
|
|
|
|
|
result = KGIS.Framework.Utils.Utility.TBToList.ToList<DataDicTionary>(dt).OrderBy(x => x.CODE).ToList();
|
|
|
|
|
result.ForEach(x => x.DisplayName = x.CODE + "-" + x.NAME);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (rdbHelper != null)
|
|
|
|
|
{
|
|
|
|
|
rdbHelper.DisConnect();
|
|
|
|
|
}
|
|
|
|
|
if (dt != null)
|
|
|
|
|
{
|
|
|
|
|
dt.Clear();
|
|
|
|
|
dt.Dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 结果去重
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pDicType"></param>
|
|
|
|
|
/// <param name="dicList"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
/// 白明雅 2019-04-13
|
|
|
|
|
public List<DataDicTionary> GetNoGroupDic2(DicTypeEnum pDicType, List<DataDicTionary> dicList = null, bool isRepeat = true, bool IsSupply = false, char SupplyValue = '\u0000')
|
|
|
|
|
{
|
|
|
|
|
List<DataDicTionary> result = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string s = GetDicTypeID(pDicType);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(s))
|
|
|
|
|
return result;
|
|
|
|
|
List<DataDicTionary> tempDic = dicList;
|
|
|
|
|
if (dicList == null || dicList.Count == 0)
|
|
|
|
|
tempDic = DicHelper.GetAllDic();
|
|
|
|
|
if (tempDic == null)
|
|
|
|
|
return result;
|
|
|
|
|
if (IsSupply && SupplyValue != '\u0000')
|
|
|
|
|
{
|
|
|
|
|
foreach (DataDicTionary item in tempDic)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(item.CODE))
|
|
|
|
|
continue;
|
|
|
|
|
item.CODE = item.CODE.PadRight(19, SupplyValue);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach (DataDicTionary item in tempDic)
|
|
|
|
|
{
|
|
|
|
|
if (item.OWNERDIC == s)
|
|
|
|
|
{
|
|
|
|
|
if (result == null)
|
|
|
|
|
{
|
|
|
|
|
result = new List<DataDicTionary>();
|
|
|
|
|
result.Add(new DataDicTionary() { CODE = "", NAME = "", DisplayName = "" });
|
|
|
|
|
}
|
|
|
|
|
if (isRepeat)
|
|
|
|
|
{
|
|
|
|
|
if (result.Where(x => x.NAME == item.NAME && x.CODE == item.CODE).Count() < 1)
|
|
|
|
|
{
|
|
|
|
|
result.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
result.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
public DataTable GetDic(List<DicTypeEnum> lstDicType)
|
|
|
|
|
{
|
|
|
|
|
DataTable dt = new DataTable();
|
|
|
|
|
dt.Columns.Add(new DataColumn("Type"));
|
|
|
|
|
dt.Columns.Add(new DataColumn("Code"));
|
|
|
|
|
dt.Columns.Add(new DataColumn("Name"));
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//if (Env.Instance.DicList == null || Env.Instance.DicList.Count <= 0)
|
|
|
|
|
//{
|
|
|
|
|
// Env.Instance.DicList = CommonAPI.GetAllDic();
|
|
|
|
|
//}
|
|
|
|
|
List<DataDicTionary> tempDic = DicHelper.GetAllDic();
|
|
|
|
|
if (tempDic == null)
|
|
|
|
|
return dt;
|
|
|
|
|
foreach (DicTypeEnum pDicType in lstDicType)
|
|
|
|
|
{
|
|
|
|
|
string s = GetDicTypeID(pDicType);
|
|
|
|
|
List<DataDicTionary> dicList = tempDic.FindAll(f => f.OWNERDIC == s && (f.PID == 0 || f.PID == null));
|
|
|
|
|
foreach (DataDicTionary item in dicList)
|
|
|
|
|
{
|
|
|
|
|
DataRow drAdd = dt.NewRow();
|
|
|
|
|
drAdd["Type"] = pDicType.ToString();
|
|
|
|
|
if (pDicType == DicTypeEnum.CZCJGKYD)
|
|
|
|
|
{
|
|
|
|
|
drAdd["Type"] = DicTypeEnum.DLBM.ToString();
|
|
|
|
|
}
|
|
|
|
|
drAdd["Code"] = item.CODE;
|
|
|
|
|
drAdd["Name"] = item.NAME;
|
|
|
|
|
dt.Rows.Add(drAdd);
|
|
|
|
|
GetSubDic(item.ID, dt, drAdd["Type"].ToString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
return dt;
|
|
|
|
|
}
|
|
|
|
|
#region 王欢 2018-11-16 对getdic重新编写 优化代码避免频繁打开数据库
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 对getdic重新编写 优化代码避免频繁打开数据库
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="lstDicType"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public DataTable resetGetDic(List<DicTypeEnum> lstDicType)
|
|
|
|
|
{
|
|
|
|
|
DataTable dt = new DataTable();
|
|
|
|
|
dt.Columns.Add(new DataColumn("Type"));
|
|
|
|
|
dt.Columns.Add(new DataColumn("Code"));
|
|
|
|
|
dt.Columns.Add(new DataColumn("Name"));
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
List<DataDicTionary> tempDic = DicHelper.GetAllDic();
|
|
|
|
|
if (tempDic == null)
|
|
|
|
|
return dt;
|
|
|
|
|
|
|
|
|
|
DataTable GetDicdt = GetDicTypeID(lstDicType);
|
|
|
|
|
if (GetDicdt == null)
|
|
|
|
|
{
|
|
|
|
|
return dt;
|
|
|
|
|
}
|
|
|
|
|
foreach (DataRow dtrow in GetDicdt.Rows)
|
|
|
|
|
{
|
|
|
|
|
string s = dtrow["ID"].ToString();
|
|
|
|
|
List<DataDicTionary> dicList = tempDic.FindAll(f => f.OWNERDIC == s && (f.PID == 0 || f.PID == null));
|
|
|
|
|
foreach (DataDicTionary item in dicList)
|
|
|
|
|
{
|
|
|
|
|
DataRow drAdd = dt.NewRow();
|
|
|
|
|
drAdd["Type"] = dtrow["ALIASNAME"].ToString();
|
|
|
|
|
if (dtrow["ALIASNAME"].ToString().ToUpper() == "CZCJGKYD")
|
|
|
|
|
{
|
|
|
|
|
drAdd["Type"] = DicTypeEnum.DLBM.ToString();
|
|
|
|
|
}
|
|
|
|
|
drAdd["Code"] = item.CODE;
|
|
|
|
|
drAdd["Name"] = item.NAME;
|
|
|
|
|
dt.Rows.Add(drAdd);
|
|
|
|
|
GetSubDic(tempDic, item.ID, dt, drAdd["Type"].ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
return dt;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
private void GetSubDic(List<DataDicTionary> tempDic, int PID, DataTable dt, string type)
|
|
|
|
|
{
|
|
|
|
|
List<DataDicTionary> list = tempDic.FindAll(e => e.PID == PID);
|
|
|
|
|
if (list != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataDicTionary item in list)
|
|
|
|
|
{
|
|
|
|
|
DataRow drAdd = dt.NewRow();
|
|
|
|
|
drAdd["Type"] = type;
|
|
|
|
|
drAdd["Code"] = item.CODE;
|
|
|
|
|
drAdd["Name"] = item.NAME;
|
|
|
|
|
dt.Rows.Add(drAdd);
|
|
|
|
|
GetSubDic(tempDic, item.ID, dt, type);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void GetSubDic(int PID, DataTable dt, string type)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
List<DataDicTionary> tempDic = DicHelper.GetAllDic();
|
|
|
|
|
if (tempDic == null)
|
|
|
|
|
return;
|
|
|
|
|
List<DataDicTionary> list = tempDic.FindAll(e => e.PID == PID);
|
|
|
|
|
if (list != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataDicTionary item in list)
|
|
|
|
|
{
|
|
|
|
|
DataRow drAdd = dt.NewRow();
|
|
|
|
|
drAdd["Type"] = type;
|
|
|
|
|
drAdd["Code"] = item.CODE;
|
|
|
|
|
drAdd["Name"] = item.NAME;
|
|
|
|
|
dt.Rows.Add(drAdd);
|
|
|
|
|
GetSubDic(item.ID, dt, type);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private List<DataDicTionary> GetSubDic(int PID, List<DataDicTionary> pDicList)
|
|
|
|
|
{
|
|
|
|
|
List<DataDicTionary> result = null;
|
|
|
|
|
//if (Env.Instance.DicList == null || Env.Instance.DicList.Count <= 0)
|
|
|
|
|
//{
|
|
|
|
|
// Env.Instance.DicList = CommonAPI.GetAllDic();
|
|
|
|
|
//}
|
|
|
|
|
//List<DATADICTIONARY> tempDic = CommonAPI.GetAllDic();
|
|
|
|
|
if (pDicList == null)
|
|
|
|
|
return result;
|
|
|
|
|
List<DataDicTionary> list = pDicList.FindAll(e => e.PID == PID);
|
|
|
|
|
if (list != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataDicTionary item in list)
|
|
|
|
|
{
|
|
|
|
|
if (result == null)
|
|
|
|
|
result = new List<DataDicTionary>();
|
|
|
|
|
item.SubDic = GetSubDic(item.ID, pDicList);
|
|
|
|
|
result.Add(item);
|
|
|
|
|
//List<DATADICTIONARY> subList = GetSubDic(item.ID);
|
|
|
|
|
//if (subList != null)
|
|
|
|
|
//{
|
|
|
|
|
// result.AddRange(subList);
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|