123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- using QM.KJGH.CGGL.IRepository;
- using QM.KJGH.CGGL.Model.Cggl;
- using QM.KJGH.Model;
- using QM.KJGH.Model.KJGH;
- using QM.OrmSqlSugar;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using WS;
- namespace QM.KJGH.CGGL.Repository
- {
-
-
-
- public class CgzjSjbzRepository : SqlSugarRepository<CgglSjbz>, ICgzjSjbzRepository
- {
-
-
-
-
- public async Task<List<Tree>> GetMlTree(string sjbz_bsm)
- {
- List<Tree> tree = new List<Tree>();
- var list = await Db.Queryable<CgglSjbzmlwj>().Where(t => t.SJBZ_BSM == sjbz_bsm).OrderBy(t => t.PX).ToListAsync();
-
- var roots = list.Where(t => string.IsNullOrWhiteSpace(t.SJML)).ToList();
- if (roots == null || roots.Count < 1)
- return tree;
- tree = ParseTree(list, null);
- return tree;
- }
-
-
-
-
-
- private List<Tree> ParseTree(List<CgglSjbzmlwj> list, string sjml)
- {
- List<Tree> tree = new List<Tree>();
- List<CgglSjbzmlwj> result = new List<CgglSjbzmlwj>();
- if (string.IsNullOrWhiteSpace(sjml))
- {
- result = list.Where(t => string.IsNullOrWhiteSpace(t.SJML)).OrderBy(t => t.PX).ToList();
- }
- else {
- result = list.Where(t => t.SJML == sjml).OrderBy(t => t.PX).ToList();
- }
- foreach (var item in result)
- {
- var treeModel = new Tree() {
- value = item.BSM,
- label = item.MLMC,
- parent = item.SJML,
- IsParent = item.LX == 1,
- Add = item
- };
- if (treeModel.IsParent)
- {
- treeModel.children = ParseTree(list, treeModel.value);
- }
- tree.Add(treeModel);
- }
- return tree;
- }
-
-
-
-
-
-
-
- public async Task<CgglSjbzCheck> FileCheck(string sjbz_bsm, string xzqdm, string xzqmc, string root)
- {
-
- CgglSjbzCheck errors = new CgglSjbzCheck();
- var sjbz = await Db.Queryable<CgglSjbz>().FirstAsync(t => t.BSM == sjbz_bsm);
- var list = await Db.Queryable<CgglSjbzmlwj>().Where(t => t.SJBZ_BSM == sjbz_bsm).OrderBy(t => t.PX).ToListAsync();
-
- var roots = list.Where(t => string.IsNullOrWhiteSpace(t.SJML)).ToList();
- if (sjbz == null || roots == null || roots.Count < 1)
- throw new UseArgumentException($"未授权的数据,请联系管理人员,{sjbz_bsm},{sjbz == null },{ roots == null},{ roots.Count < 1}");
- FileCheckSub(null, root, root, xzqdm, xzqmc, list, errors);
- return errors;
- }
-
-
-
-
-
-
- private void FileCheckSub(string pid, string path, string root, string xzqdm, string xzqmc, List<CgglSjbzmlwj> list, CgglSjbzCheck errors) {
- List<CgglSjbzmlwj> subList = new List<CgglSjbzmlwj>();
- if(string.IsNullOrWhiteSpace(pid))
- subList = list.Where(t => string.IsNullOrWhiteSpace(t.SJML)).ToList();
- else
- subList = list.Where(t => t.SJML == pid).OrderBy(t => t.PX).ToList();
-
- var bzfiles = new List<string>();
- foreach (var item in subList)
- {
- string pathFull = string.Empty;
- if (string.IsNullOrWhiteSpace(item.GZMC))
- pathFull = Path.Combine(path, item.MLMC);
- else
- {
- pathFull = FormatPath(path, xzqdm, xzqmc, item.GZMC);
- bzfiles.Add(Path.GetFileName(pathFull));
- }
- if (item.YSTJ == "M")
- {
- if (pathFull.Contains("|"))
- {
- var keylist = GetTokens(pathFull).Where(t=>t.Contains("|")).ToList();
-
- var fullOk = true;
- foreach (var keys in keylist)
- {
- var values = keys.Split("|");
-
- var isOk = false;
- foreach (var value in values)
- {
- var value2 = value.Replace("{", "").Replace("}", "");
- var temp = pathFull.Replace(keys, value2);
-
- if (item.LX == 0 && Directory.Exists(temp))
- {
- isOk = true;
- if (temp.EndsWith(".gdb"))
- {
- break;
- }
- FileCheckSub(item.BSM, temp, root, xzqdm, xzqmc, list, errors);
- break;
- }
-
- if (item.LX == 1 && File.Exists(temp))
- {
- isOk = true;
- break;
- }
- }
-
- if(!isOk)
- {
- fullOk = false;
- break;
- }
- }
-
- if (!fullOk)
- {
- errors.lack.Add(pathFull.Replace(root, ""));
- }
- else
- {
- continue;
- }
- }
- else
- {
-
- if (item.LX == 0 && Directory.Exists(pathFull))
- {
- if (pathFull.EndsWith(".gdb"))
- continue;
- FileCheckSub(item.BSM, pathFull, root, xzqdm, xzqmc, list, errors);
- continue;
- }
-
- if (item.LX == 1 && File.Exists(pathFull))
- {
- continue;
- }
- errors.lack.Add(pathFull.Replace(root, ""));
- }
- }
- }
-
- var files = Directory.GetFiles(path);
- foreach (var item in files)
- {
- if (!bzfiles.Contains(Path.GetFileName(item)))
- {
- errors.many.Add(item.Replace(root, ""));
- }
- }
- }
-
-
-
-
-
-
-
-
- private string FormatPath(string root, string xzqdm, string xzqmc, string path)
- {
- var keys = GetTokens(path);
- foreach (var item in keys)
- {
- if (item.Contains("行政区代码"))
- {
- var index = item.IndexOf(":");
- var len = xzqdm.Length;
- if(index >= 0)
- {
- len = (item.Split(':')[1].Replace("}", "").ToInt());
- }
- if(xzqdm.Length < len)
- {
- throw new UseArgumentException($"基本信息文件中的行政区代码长度与数据标准不符");
- }
- xzqdm = xzqdm.Substring(0, len);
- path = path.Replace(item, xzqdm);
- continue;
- }
- if (item.Contains("行政区名称"))
- {
- path = path.Replace(item, xzqmc);
- continue;
- }
- }
- var fullPath = Path.Combine(root, path);
- return fullPath;
- }
-
-
-
-
-
- private List<string> GetTokens(string str)
- {
- Regex regex = new Regex(@"\{.*?\}", RegexOptions.IgnoreCase);
- MatchCollection matches = regex.Matches(str);
- var list = matches.Cast<Match>().Select(m => m.Value).Distinct().ToList();
- return list;
- }
- }
- }
|