using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Drawing; using DocumentFormat.OpenXml.Spreadsheet; using Infrastructure; using Infrastructure.Extensions; using Irony; using Microsoft.Extensions.Options; using NetTopologySuite.Geometries; using NetTopologySuite.IO; using Newtonsoft.Json.Linq; using NPOI.OpenXmlFormats.Dml; using OpenAuth.App.BaseApp; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.BaseApp.Shape; using OpenAuth.App.BasicQueryService; using OpenAuth.App.FormScheme.FormHelpers; using OpenAuth.App.Interface; using OpenAuth.App.ServiceApp.DroneCaseInfoTaskManage.Request; using OpenAuth.App.ServiceApp.DroneCaseInfoTaskManage.Response; using OpenAuth.App.ServiceApp.DroneCloudQueryManage.Request; using OpenAuth.App.ServiceApp.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using Org.BouncyCastle.Ocsp; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.IO.Compression; using System.Linq; using System.Text; using System.Threading.Tasks; using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData; namespace OpenAuth.App.ServiceApp.DroneCaseInfoTaskManage { public class DroneCaseInfoTaskApp : SqlSugarBaseApp { ISqlSugarClient client; private ImMsgApp _immsgApp; private ShpLayerSourceApp _shplayerapp; private readonly string _filePath; CommonDataManager _commonDataManager; public DroneCaseInfoTaskApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IOptions setOptions, ISqlSugarClient sqlSugarClient, IAuth auth, ImMsgApp immsgApp, ShpLayerSourceApp shplayersource, CommonDataManager commonDataManager) : base(unitWork, repository, auth) { _filePath = setOptions.Value.UploadPath; if (string.IsNullOrEmpty(_filePath)) { _filePath = AppContext.BaseDirectory; } client = sqlSugarClient; _immsgApp = immsgApp; _shplayerapp = shplayersource; _commonDataManager = commonDataManager; } #region 添加查询任务信息 //添加任务 public Response AddCaseInfoTask(string caseids, string shplayerids, DateTime qianshixiang, DateTime houshixiang, string picihao) { var user = _auth.GetCurrentUser().User; //初始化查询结果 DroneCaseInfoTask caseinfotask = new DroneCaseInfoTask() { Id = Guid.NewGuid().ToString(), CreateTime = DateTime.Now, CreateUser = user?.Id.ToString() ?? "", picihao = picihao, State = 0, qianshixiang = qianshixiang, houshixiang = houshixiang, shplayerids = shplayerids, caseinfoids = caseids, rate=0 }; var data = client.Queryable().Where(r => r.picihao == picihao).ToList(); AddCaseinfoTaskRes rs = new AddCaseinfoTaskRes(); rs.id = caseinfotask.Id; if (data.Count > 0) { throw new Exception("批次号重复,任务已存在"); } else { //添加数据 var flag = client.Ado.UseTran(() => { client.Insertable(caseinfotask).ExecuteCommand(); }); if (flag.IsSuccess) { rs.flag=true; return new Response { Result = true }; } else { rs.flag = false; return new Response { Result = false, Message = "操作失败" }; } } } //查询任务 public async Task>> LoadDroneCaseInfoTask() { //查询任务数据 var data = await client.Queryable().Where(r => r.State != 2) .OrderByDescending(a => a.CreateTime).ToListAsync(); //获取之后,需要把这些任务标记为正在查询 foreach (var item in data) { item.State = 1; } await client.Updateable(data).ExecuteCommandAsync(); return new Response> { Result = data }; } //根据任务id查询任务信息 public async Task> LoadDroneCaseInfobyid(string id) { var data =await client.Queryable().Where(r => r.Id == id).FirstAsync(); Response ts = new Response(); ts.Result=data; return ts; } //更新任务信息 public Response UpdateDroneCaseInfoTask(string id,int rate) { var flag = client.Updateable().SetColumns(r => new DroneCaseInfoTask { rate = rate }).Where(r => r.Id == id).ExecuteCommand(); Response ts = new Response(); if (flag > 0) { ts.Result = true; } else { ts.Result = false; } return ts; } //查询任务 public async Task>> LoadDroneCaseInfoTaskByUser() { var user = _auth.GetCurrentUser().User; //查询任务数据 var data = await client.Queryable().Where(r => r.CreateUser==user.Id.ToString()) .OrderByDescending(a => a.CreateTime).ToListAsync(); return new Response> { Result = data }; } #endregion #region 查询图层信息 //查询任务 public async Task>> LoadLayerInfo() { //查询任务数据 var data = await client.Queryable().ToListAsync(); return new Response> { Result = data }; } #endregion #region 接收查询结果 public async Task> UpdateDroneCaseInfo(DroneCaseInfoTaskRes req) { using (var uow = base.UnitWork.CreateContext()) { //导入案件信息 var data = req.importlist; #region 导入案件信息 int i = 0; List datalist = new List(); List shplist = new List(); StringBuilder geomSql = new StringBuilder(); StringBuilder sql = new StringBuilder(); foreach (var item in data) { DroneCaseInfoSingle cinfo = new DroneCaseInfoSingle(); cinfo.Id = item.Id; cinfo.createtime = DateTime.Now; cinfo.createuser = item.createuser; cinfo.createusername = item.createusername; cinfo.is_illegal = 1; cinfo.is_intact = 1; cinfo.synchronoustime = DateTime.Now; cinfo.handle_status_id = 0; cinfo.handle_status_name = "待接收"; cinfo.is_jieshou = 0; cinfo.is_closed = 0; cinfo.is_delete = 0; cinfo.case_description = item.case_description; cinfo.area = item.area; cinfo.tubanlaiyuan = item.tubanlaiyuan; cinfo.typename = item.typename; //类型id var type = client.Queryable().Where(r => r.ItemName == cinfo.typename && r.ItemCode == "DRONE_CASE_TYPE").First(); if (type != null) { cinfo.typeid = type.ItemDetailId; } cinfo.lng = item.lng; cinfo.lat = item.lat; JObject xzqh = GetOrgAreaByPoint((decimal)cinfo.lng, (decimal)cinfo.lat); cinfo.countyid = xzqh["countyid"].ToString(); cinfo.countyname = xzqh["countyname"].ToString(); cinfo.streetid = xzqh["streetid"].ToString(); cinfo.streetname = xzqh["streetname"].ToString(); cinfo.communityid = xzqh["communityid"].ToString(); cinfo.communityname = xzqh["communityname"].ToString(); cinfo.address = cinfo.countyname + " " + cinfo.streetname + " " + cinfo.communityname; cinfo.case_no = item.case_no; cinfo.casepic = item.casepic; cinfo.nongyongdi_area = item.nongyongdi_area; cinfo.yongjiujibennongtian_area = item.yongjiujibennongtian_area; cinfo.gengdi_area = item.gengdi_area; cinfo.guotukongjianguihua_area = item.guotukongjianguihua_area; cinfo.shengtaibaohuhongxian_area = item.shengtaibaohuhongxian_area; cinfo.zhongdianquyu_area = item.zhongdianquyu_area; //图斑数据drone_shp_data DroneShpData model = new DroneShpData(); model.relid = cinfo.Id; model.createtime = DateTime.Now; model.createuser = item.createusername; model.area = item.shparea; //获取主键 string _gid = _commonDataManager.GetMaxKeyVal("gid", "drone_shp_data", 1); model.gid = int.Parse(_gid) + i;//转为数字类型 i++; cinfo.geomid = model.gid.ToString(); geomSql.AppendFormat($" update drone_shp_data set geom = '{item.geom}' where gid = '{model.gid}';"); sql.AppendFormat($" update drone_shp_data set area = st_area(st_transform(ST_SetSRID(geom,4326), 4527)) where gid = '{model.gid}';"); shplist.Add(model); datalist.Add(cinfo); } string errornums = ""; switch (data[0].subjectname) { case "巡察审计": var dataxunchashenji = datalist.MapTo>(); //判断是否有重复数据 List casenos = dataxunchashenji?.Select(r => r.case_no).ToList(); var caseinfo = client.Queryable().Where(r => casenos.Contains(r.case_no)).ToList(); if (caseinfo.Count>0) { var nums = caseinfo.Select(r => r.case_no).ToList(); var dataxuncha = dataxunchashenji.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums= string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoXcsj.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoXcsj.InsertRangeAsync(dataxunchashenji); } break; case "耕地非粮化": var datafeilianghua = datalist.MapTo>(); List casenof = datafeilianghua?.Select(r => r.case_no).ToList(); var caseinfof = client.Queryable().Where(r => casenof.Contains(r.case_no)).ToList(); if (caseinfof.Count>0) { var nums = caseinfof.Select(r => r.case_no).ToList(); var dataxuncha = datafeilianghua.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoFLH.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoFLH.InsertRangeAsync(datafeilianghua); } break; case "生态保护红线监管": var datastbh = datalist.MapTo>(); List casenox = datastbh?.Select(r => r.case_no).ToList(); var caseinfox = client.Queryable().Where(r => casenox.Contains(r.case_no)).ToList(); if (caseinfox.Count > 0) { var nums = caseinfox.Select(r => r.case_no).ToList(); var dataxuncha = datastbh.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoSTHX.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoSTHX.InsertRangeAsync(datastbh); } break; case "生态修复": var datastxiufu = datalist.MapTo>(); List casenoh = datastxiufu?.Select(r => r.case_no).ToList(); var caseinfot = client.Queryable().Where(r => casenoh.Contains(r.case_no)).ToList(); if (caseinfot.Count > 0) { var nums = caseinfot.Select(r => r.case_no).ToList(); var dataxuncha = datastxiufu.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoSTHX.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoSTHX.InsertRangeAsync(datastxiufu); } break; case "违法用地": List casenog = datalist?.Select(r => r.case_no).ToList(); var caseinfos = client.Queryable().Where(r => casenog.Contains(r.case_no)).ToList(); if (caseinfos.Count>0) { var nums = caseinfos.Select(r => r.case_no).ToList(); var dataxuncha = datalist.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoSingle.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoSingle.InsertRangeAsync(datalist); } break; case "重点问题I类": var zhongdianwenti1 = datalist.MapTo>(); List casenot = zhongdianwenti1?.Select(r => r.case_no).ToList(); var caseinfoz = client.Queryable().Where(r => casenot.Contains(r.case_no)).ToList(); if (caseinfoz.Count>0) { var nums = caseinfoz.Select(r => r.case_no).ToList(); var dataxuncha = zhongdianwenti1.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoZdwt1.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoZdwt1.InsertRangeAsync(zhongdianwenti1); } break; case "重点问题II类": var zhongdianwenti2 = datalist.MapTo>(); List casenow = zhongdianwenti2?.Select(r => r.case_no).ToList(); var caseinfow = client.Queryable().Where(r => casenow.Contains(r.case_no)).ToList(); if (caseinfow.Count>0) { var nums = caseinfow.Select(r => r.case_no).ToList(); var dataxuncha = zhongdianwenti2.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoZdwt2.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoZdwt2.InsertRangeAsync(zhongdianwenti2); } break; case "卫片下发": var weipianxiafa = datalist.MapTo>(); List casenoa = weipianxiafa?.Select(r => r.case_no).ToList(); var caseinfoa = client.Queryable().Where(r => casenoa.Contains(r.case_no)).ToList(); if (caseinfoa.Count>0) { var nums = caseinfoa.Select(r => r.case_no).ToList(); var dataxuncha = weipianxiafa.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoSatellite.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoSatellite.InsertRangeAsync(weipianxiafa); } break; } //更新任务 var task = uow.DroneCaseInfoTask.GetById(req.task.Id); if (task != null) { //更新记录 await uow.DroneCaseInfoTask.UpdateAsync(u => new DroneCaseInfoTask { State = 2 }, u => u.Id == task.Id); } await uow.DroneShpData.InsertRangeAsync(shplist); await uow.Db.Ado.ExecuteCommandAsync(geomSql.ToString()); await uow.Db.Ado.ExecuteCommandAsync(sql.ToString()); #endregion //InsertCaseInfoData(infos,uow); var flag = uow.Commit(); var content = new { casetaskid = task.Id, picihao = task == null ? "" : task.picihao, errmessage="图斑编号重复:"+errornums.ToString(), }; var contents = Json.ToJson(content); //添加推送数据的用户 List users = new List(); if (task != null) { users.Add(task.CreateUser); } //推送数据 if (flag == true) { try { await _immsgApp.SendMsg("CaseInfoTask", users, contents, "4", task.Id); } catch { return new Response { Result = flag, Message = "数据导入成功,推送失败" }; } } //返回值 return new Response { Result = flag, Message = flag == true ? "导入数据成功" : "导入数据失败" }; } } public bool CaseInfoJudge(List caseno,string subjectname) { bool flag = false; switch (subjectname) { case "巡察审计": var caseinfo = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); if (caseinfo.Count > 0) { flag= true; } break; case "耕地非粮化": var caseinfoflh = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); if (caseinfoflh.Count > 0) { flag = true; } break; case "违法用地": var caseinfosig = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); if (caseinfosig.Count > 0) { flag = true; } break; case "重点问题I类": var caseinfozt1 = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); if (caseinfozt1.Count > 0) { flag = true; } break; case "重点问题II类": var caseinfozt2 = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); if (caseinfozt2.Count > 0) { flag = true; } break; case "卫片下发": var caseinfosatellite = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); if (caseinfosatellite.Count > 0) { flag = true; } break; } return flag; } /// /// 矿产接收查询结果 /// /// /// public async Task> UpdateDroneCaseInfoMinerals(DroneCaseInfoTaskRes req) { using (var uow = base.UnitWork.CreateContext()) { #region 案件信息处理 var data = req.importlist; int i = 0; List datalist = new List(); List shplist = new List(); StringBuilder geomSql = new StringBuilder(); StringBuilder sql = new StringBuilder(); foreach (var item in data) { DroneCaseInfoMinerals cinfo = new DroneCaseInfoMinerals(); cinfo.Id = item.Id; cinfo.createtime = DateTime.Now; cinfo.createuser = item.createuser; cinfo.is_illegal = 1; //cinfo.xiafatime_base = DateTime.Now; cinfo.handle_status_id = 0; cinfo.is_closed = 0; cinfo.case_description = item.case_description; cinfo.weifaarea_base = item.area; cinfo.tubanlaiyuan = item.tubanlaiyuan; cinfo.typename = item.typename; cinfo.centerlat_base = item.lng.ToString(); cinfo.centerlng_base = item.lat.ToString(); JObject xzqh = GetOrgAreaByPoint((decimal)item.lng, (decimal)item.lat); cinfo.countyid = xzqh["countyid"].ToString(); cinfo.countyname = xzqh["countyname"].ToString(); cinfo.streetid = xzqh["streetid"].ToString(); cinfo.streetname = xzqh["streetname"].ToString(); cinfo.communityid = xzqh["communityid"].ToString(); cinfo.communityname = xzqh["communityname"].ToString(); //cinfo.address = cinfo.countyname + " " + cinfo.streetname + " " + cinfo.communityname; cinfo.case_no = item.case_no; cinfo.tubanpic_base = item.casepic; cinfo.jbntarea_base = item.yongjiujibennongtian_area; cinfo.gengdi_area = item.gengdi_area; cinfo.stbhhxarea_base = item.shengtaibaohuhongxian_area; cinfo.cskfbjarea_base = item.cskfbjarea_base; cinfo.weifazhandiarea_base = item.weifazhandiarea_base; cinfo.weifakaicaiarea_base = item.weifakaicaiarea_base; //图斑数据drone_shp_data DroneShpData model = new DroneShpData(); model.relid = cinfo.Id; model.createtime = DateTime.Now; model.createuser = item.createusername; model.area = item.shparea; //获取主键 string _gid = _commonDataManager.GetMaxKeyVal("gid", "drone_shp_data", 1); model.gid = int.Parse(_gid) + i;//转为数字类型 i++; cinfo.geomid = model.gid.ToString(); geomSql.AppendFormat($" update drone_shp_data set geom = '{item.geom}' where gid = '{model.gid}';"); sql.AppendFormat($" update drone_shp_data set area = st_area(st_transform(ST_SetSRID(geom,4326), 4527)) where gid = '{model.gid}';"); shplist.Add(model); datalist.Add(cinfo); } var caseno = datalist.Select(r => r.case_no).ToList(); var caseinfo = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); string errornums = ""; if (caseinfo.Count > 0) { var nums = caseinfo.Select(r => r.case_no).ToList(); var dataxuncha = datalist.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoMinerals.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoMinerals.InsertRangeAsync(datalist); } //更新任务 var task = client.Queryable().Where(r => r.Id == req.task.Id).First(); if (task != null) { //更新记录 await uow.DroneCaseInfoTask.UpdateAsync(u => new DroneCaseInfoTask { State = 2 }, u => u.Id == task.Id); } await uow.DroneShpData.InsertRangeAsync(shplist); await uow.Db.Ado.ExecuteCommandAsync(geomSql.ToString()); await uow.Db.Ado.ExecuteCommandAsync(sql.ToString()); var flag = uow.Commit(); #endregion var content = new { casetaskid = task.Id, picihao = task == null ? "" : task.picihao, errmessage = "图斑编号重复:" + errornums.ToString() }; var contents = Json.ToJson(content); //添加推送数据的用户 List users = new List(); if (task != null) { users.Add(task.CreateUser); } //推送数据 if (flag == true) { try { await _immsgApp.SendMsg("CaseInfoTask", users, contents, "4", task.Id); } catch { return new Response { Result = flag, Message = "数据导入成功,推送失败" }; } } //返回值 return new Response { Result = flag, Message = flag == true ? "导入数据成功" : "导入数据失败" }; } } /// /// 根据经纬度获取组织机构 /// /// /// /// public JObject GetOrgAreaByPoint(decimal lng, decimal lat) { //县id string countyid = ""; string countyname = ""; //镇id string streetid = ""; string streetname = ""; //村id string communityid = ""; string communityname = ""; //SqlSugar实例 using (var db = Repository.AsSugarClient()) { //查询坐标属于哪个县 StringBuilder sql = new StringBuilder(); sql.AppendFormat($" SELECT xzqdm,xzqmc FROM \"shp_drone_county\" where ST_Within(st_geomfromtext('POINT({lng} {lat})',4326), ST_SetSRID(geom,4326))"); var countyList = db.SqlQueryable(sql.ToString()).ToList(); if (countyList.Count > 0) { //县名称 countyname = countyList[0].xzqmc; //县id countyid = countyList[0].xzqdm; } //查询坐标属于哪个镇 sql = new StringBuilder(); sql.AppendFormat($" SELECT xzqdm,xzqmc FROM \"shp_drone_town\" where ST_Within(st_geomfromtext('POINT({lng} {lat})',4326), ST_SetSRID(geom,4326))"); var streetList = db.SqlQueryable(sql.ToString()).ToList(); if (streetList.Count > 0) { //镇名称 streetname = streetList[0].xzqmc; //镇id streetid = streetList[0].xzqdm; } if (!string.IsNullOrEmpty(streetid)) { //查询组织机构属于哪个村 sql = new StringBuilder(); sql.AppendFormat($" SELECT zldwdm,zldwmc FROM \"shp_drone_community\" where ST_Within(st_geomfromtext('POINT({lng} {lat})',4326), ST_SetSRID(geom,4326))"); var communityidList = db.SqlQueryable(sql.ToString()).ToList(); if (communityidList.Count > 0) { //村名称 communityname = communityidList[0].zldwmc; //村id communityid = communityidList[0].zldwdm; } } //拼接json数据,返回到前台 JObject obj = new JObject(); obj.Add("countyid", countyid); obj.Add("countyname", countyname); obj.Add("streetid", streetid); obj.Add("streetname", streetname); obj.Add("communityid", communityid); obj.Add("communityname", communityname); return obj; } } #endregion #region 根据批次号查询案件信息 public async Task>>> LoadCaseImportInfoBypicihao(string picihao, string laiyuan, DateTime? begintime,DateTime? endtime, int pageindex, int pagesize) { var user = _auth.GetCurrentUser(); //定义且实例化分页数据 RefAsync totalCount = 0; var caseinfolist = await client.SqlQueryable("SELECT \"Id\",case_no,case_description,lng,lat,typename,area,tubanlaiyuan,ST_AsText(geom) AS geom,picihao,createtime,createuser,createusername,subjectname,shparea,casepic,nongyongdi_area, gengdi_area,yongjiujibennongtian_area,zhongdianquyu_area,shengtaibaohuhongxian_area,guotukongjianguihua_area FROM drone_caseinfo_import") .WhereIF(!string.IsNullOrEmpty(picihao), r => picihao == r.picihao) .WhereIF(!string.IsNullOrEmpty(laiyuan), r => r.tubanlaiyuan.Contains(laiyuan)) .WhereIF(begintime!=null&&endtime!=null,r=>r.createtime>=begintime&&r.createtime< endtime) .WhereIF(user!=null,r=>r.createuser==user.User.Id.ToString()) .ToPageListAsync(pageindex, pagesize, totalCount); return new Response>> { Result = new PageInfo> { Items = caseinfolist, Total = totalCount } }; } /// /// 查询最后一次导入数据 /// /// /// /// public async Task> LoadCaseImportInfoLast(string subjectname,int pageindex, int pagesize) { var user = _auth.GetCurrentUser().User; string picihao = ""; //定义且实例化分页数据 RefAsync totalCount = 0; var data = await client.Queryable() .WhereIF(!string.IsNullOrEmpty(subjectname), r => r.subjectname == subjectname) .Where(r => r.createuser == user.Id.ToString()) .OrderByDescending(r => r.createtime).FirstAsync(); if (data != null) { picihao = data.picihao; } return new Response { Result = picihao }; } #endregion #region 导入shp数据新版 /// /// shp导入 /// /// /// /// /// /// public async Task> ImportCaseInfoShpData(string zipFilePath, string srid, string subjectname) { var _user = _auth.GetCurrentUser().User; using var db = Repository.AsSugarClient(); // 开启事务 await db.Ado.BeginTranAsync(IsolationLevel.ReadCommitted); // 取得文件完全路径 zipFilePath = System.IO.Path.Combine(_filePath, zipFilePath); // 确保ZIP文件存在 if (!File.Exists(zipFilePath)) { throw new FileNotFoundException("ZIP文件未找到。"); } // 打开ZIP存档 取除后缀之前的字符串 var extractPath = zipFilePath.Substring(0, zipFilePath.LastIndexOf(".", StringComparison.Ordinal)) + "extract"; // 解压文件 await UnZip(zipFilePath, extractPath); var searchPattern = "*.shp"; // 设置你想要遍历的文件后缀名 var fileName = Directory.GetFiles(extractPath, searchPattern, SearchOption.AllDirectories); if (fileName.IsEmpty()) { throw new Exception("压缩文件中无shp文件"); } var shpFileName = fileName[0]; var shpFile = System.IO.Path.Combine(extractPath, shpFileName); List datalist = new List(); List shplist = new List(); StringBuilder geomSql = new StringBuilder(); //批量更新面积 StringBuilder sql = new StringBuilder(); Random random = new Random(); //批次号 var pici = DateTime.Now.ToString("yyyyMMssHHmmss") + random.Next(1000, 9999).ToString(); using (var dataReader = new ShapefileDataReader(shpFile, GeometryFactory.Default)) { while (dataReader.Read()) { string countyid = ""; DroneCaseInfoImport cinfo = new DroneCaseInfoImport(); cinfo.Id = Guid.NewGuid().ToString(); cinfo.createtime = DateTime.Now; cinfo.createuser = _user.Id.ToString(); cinfo.createusername = _user.Name.ToString(); cinfo.case_description = dataReader.GetValue(2).ToString(); cinfo.subjectname = subjectname; cinfo.picihao = pici; if (dataReader.IsDBNull(6)) { throw new Exception("图斑面积不能为空"); } else { cinfo.area = dataReader.GetValue(6).ToString(); } if (dataReader.IsDBNull(7)) { throw new Exception("图斑来源不能为空"); } else { cinfo.tubanlaiyuan = dataReader.GetValue(7).ToString(); } if (dataReader.IsDBNull(8)) { cinfo.nongyongdi_area = "0.00"; } else { cinfo.nongyongdi_area = dataReader.GetValue(8).ToString(); } if (dataReader.IsDBNull(9)) { cinfo.gengdi_area = "0.00"; } else { cinfo.gengdi_area = dataReader.GetValue(9).ToString(); } if (dataReader.IsDBNull(10)) { cinfo.yongjiujibennongtian_area = "0.00"; } else { cinfo.yongjiujibennongtian_area = dataReader.GetValue(10).ToString(); } if (dataReader.IsDBNull(11)) { cinfo.zhongdianquyu_area = "0.00"; } else { cinfo.zhongdianquyu_area = dataReader.GetValue(11).ToString(); } if (dataReader.IsDBNull(12)) { cinfo.shengtaibaohuhongxian_area = "0.00"; } else { cinfo.shengtaibaohuhongxian_area = dataReader.GetValue(12).ToString(); } if (dataReader.IsDBNull(13)) { cinfo.guotukongjianguihua_area = "0.00"; } else { cinfo.guotukongjianguihua_area = dataReader.GetValue(13).ToString(); } cinfo.typename = dataReader.GetValue(5).ToString(); //类型id var type = db.Queryable().Where(r => r.ItemName == cinfo.typename && r.ItemCode == "DRONE_CASE_TYPE").First(); //坐标及行政区划 if (dataReader.IsDBNull(3) || dataReader.IsDBNull(4)) { throw new Exception("坐标不能为空"); } else { decimal lng = Convert.ToDecimal(dataReader.GetValue(3).ToString()); decimal lat = Convert.ToDecimal(dataReader.GetValue(4).ToString()); cinfo.lng = lng; cinfo.lat = lat; JObject xzqh = GetOrgAreaByPoint(lng, lat); countyid = xzqh["countyid"].ToString(); } //案件编号 if (!dataReader.IsDBNull(1)) { var caseinfo = client.Queryable().Where(r => r.case_no == dataReader.GetValue(1).ToString()).ToList(); var caseoinfo=client.Queryable().Where(r => r.case_no == dataReader.GetValue(1).ToString()).ToList(); if (caseinfo.Count > 0|| caseoinfo.Count>0) { throw new Exception("图斑编号" + dataReader.GetValue(1).ToString() + "已存在,请重新整理数据"); } else { cinfo.case_no = dataReader.GetValue(1).ToString(); } } else { bool isUnique; var prefix = type?.Prefix; do { var caseno = prefix + countyid + DateTime.Now.ToString("yyyyMMdd") + random.Next(1000, 9999).ToString(); var count = db.Queryable().Where(c => c.case_no == caseno).Count(); isUnique = count == 0; } while (!isUnique); } //geom if (!dataReader.IsDBNull(0)) { var geometry = (Geometry)dataReader.GetValue(0); if (!geometry.IsValid) { throw new Exception("图斑" + cinfo.case_no + "未闭合,请重新整理数据"); } var geometryForWgs84 = GeometryFactory.Default.WithSRID(int.Parse(srid)) .CreateGeometry(geometry); geomSql.AppendFormat($" update drone_caseinfo_import set geom = '{geometryForWgs84.AsText()}' where \"Id\" = '{cinfo.Id}';"); } datalist.Add(cinfo); } } using (var uow = base.UnitWork.CreateContext()) { await uow.DroneCaseInfoImport.InsertRangeAsync(datalist); await uow.Db.Ado.ExecuteCommandAsync(geomSql.ToString()); var flag = uow.Commit(); if (flag == true) { return new Response() { Result = pici, Message = "导入成功" }; } else { return new Response() { Result = "false", Message = "导入失败" }; } } } /// /// 矿产shp导入 /// /// /// /// /// /// public async Task> ImportMineralShpData(string zipFilePath, string srid, string subjectname) { var _user = _auth.GetCurrentUser().User; using var db = Repository.AsSugarClient(); // 开启事务 await db.Ado.BeginTranAsync(IsolationLevel.ReadCommitted); // 取得文件完全路径 zipFilePath = System.IO.Path.Combine(_filePath, zipFilePath); // 确保ZIP文件存在 if (!File.Exists(zipFilePath)) { throw new FileNotFoundException("ZIP文件未找到。"); } // 打开ZIP存档 取除后缀之前的字符串 var extractPath = zipFilePath.Substring(0, zipFilePath.LastIndexOf(".", StringComparison.Ordinal)) + "extract"; // 解压文件 await UnZip(zipFilePath, extractPath); var searchPattern = "*.shp"; // 设置你想要遍历的文件后缀名 var fileName = Directory.GetFiles(extractPath, searchPattern, SearchOption.AllDirectories); if (fileName.IsEmpty()) { throw new Exception("压缩文件中无shp文件"); } var shpFileName = fileName[0]; var shpFile = System.IO.Path.Combine(extractPath, shpFileName); List datalist = new List(); List shplist = new List(); StringBuilder geomSql = new StringBuilder(); //批量更新面积 StringBuilder sql = new StringBuilder(); Random random = new Random(); //批次号 var pici = DateTime.Now.ToString("yyyyMMssHHmmss") + random.Next(1000, 9999).ToString(); using (var dataReader = new ShapefileDataReader(shpFile, GeometryFactory.Default)) { while (dataReader.Read()) { string countyid = ""; DroneCaseInfoImport cinfo = new DroneCaseInfoImport(); cinfo.Id = Guid.NewGuid().ToString(); cinfo.createtime = DateTime.Now; cinfo.createuser = _user.Id.ToString(); cinfo.createusername = _user.Name.ToString(); cinfo.case_description = dataReader.GetValue(2).ToString(); cinfo.subjectname = subjectname; cinfo.picihao = pici; if (dataReader.IsDBNull(6)) { throw new Exception("违法面积不能为空"); } else { cinfo.area = dataReader.GetValue(6).ToString(); } if (dataReader.IsDBNull(7)) { throw new Exception("图斑来源不能为空"); } else { cinfo.tubanlaiyuan = dataReader.GetValue(7).ToString(); } if (dataReader.IsDBNull(8)) { cinfo.weifakaicaiarea_base = "0.00"; } else { cinfo.weifakaicaiarea_base = dataReader.GetValue(8).ToString(); } if (dataReader.IsDBNull(9)) { cinfo.weifazhandiarea_base = "0.00"; } else { cinfo.weifazhandiarea_base = dataReader.GetValue(9).ToString(); } if (dataReader.IsDBNull(10)) { cinfo.gengdi_area = "0.00"; } else { cinfo.gengdi_area = dataReader.GetValue(10).ToString(); } if (dataReader.IsDBNull(11)) { cinfo.yongjiujibennongtian_area = "0.00"; } else { cinfo.yongjiujibennongtian_area = dataReader.GetValue(11).ToString(); } if (dataReader.IsDBNull(12)) { cinfo.shengtaibaohuhongxian_area = "0.00"; } else { cinfo.shengtaibaohuhongxian_area = dataReader.GetValue(12).ToString(); } if (dataReader.IsDBNull(13)) { cinfo.cskfbjarea_base = "0.00"; } else { cinfo.guotukongjianguihua_area = dataReader.GetValue(13).ToString(); } cinfo.typename = dataReader.GetValue(5).ToString(); //坐标及行政区划 if (dataReader.IsDBNull(3) || dataReader.IsDBNull(4)) { throw new Exception("坐标不能为空"); } else { decimal lng = Convert.ToDecimal(dataReader.GetValue(3).ToString()); decimal lat = Convert.ToDecimal(dataReader.GetValue(4).ToString()); cinfo.lng = lng; cinfo.lat = lat; JObject xzqh = GetOrgAreaByPoint(lng, lat); countyid = xzqh["countyid"].ToString(); } //案件编号 if (!dataReader.IsDBNull(1)) { var caseinfo = client.Queryable().Where(r => r.case_no == dataReader.GetValue(1).ToString()).ToList(); var caseoinfo = client.Queryable().Where(r => r.case_no == dataReader.GetValue(1).ToString()).ToList(); if (caseinfo.Count > 0|| caseoinfo.Count>0) { throw new Exception("图斑编号" + dataReader.GetValue(1).ToString() + "已存在,请重新整理数据"); } else { cinfo.case_no = dataReader.GetValue(1).ToString(); } } else { bool isUnique; var prefix = "KC"; do { var caseno = prefix + countyid + DateTime.Now.ToString("yyyyMMdd") + random.Next(1000, 9999).ToString(); var count = db.Queryable().Where(c => c.case_no == caseno).Count(); isUnique = count == 0; } while (!isUnique); } //geom if (!dataReader.IsDBNull(0)) { var geometry = (Geometry)dataReader.GetValue(0); if (!geometry.IsValid) { throw new Exception("图斑" + cinfo.case_no + "未闭合,请重新整理数据"); } var geometryForWgs84 = GeometryFactory.Default.WithSRID(int.Parse(srid)) .CreateGeometry(geometry); geomSql.AppendFormat($" update drone_caseinfo_import set geom = '{geometryForWgs84.AsText()}' where \"Id\" = '{cinfo.Id}';"); } datalist.Add(cinfo); } } using (var uow = base.UnitWork.CreateContext()) { await uow.DroneCaseInfoImport.InsertRangeAsync(datalist); await uow.Db.Ado.ExecuteCommandAsync(geomSql.ToString()); var flag = uow.Commit(); if (flag == true) { return new Response() { Result = pici, Message = "导入成功" }; } else { return new Response() { Result = "false", Message = "导入失败" }; } } } private static async Task UnZip(string zipFilePath, string extractPath) { await Task.Run(() => { Directory.CreateDirectory(extractPath); // 设置字符编码 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var gbk = Encoding.GetEncoding("utf-8"); using (var archive = ZipFile.OpenRead(zipFilePath)) { // 列举ZIP文件中的条目 foreach (var entry in archive.Entries) { var xxx = gbk.GetString(Encoding.Default.GetBytes(entry.FullName)); Console.WriteLine(xxx); } // 提取ZIP文件中的所有文件到指定目录 foreach (var entry in archive.Entries) { if (entry.Name != string.Empty) { // 确保完整路径存在 entry.FullName 是否可以编码 var fixedEntryName = entry.FullName.Replace("/", ""); var destinationPath = System.IO.Path.GetFullPath(System.IO.Path.Combine(extractPath, fixedEntryName)); Console.WriteLine("解压文件路径:" + destinationPath); if (!destinationPath.StartsWith(System.IO.Path.GetFullPath(extractPath) + System.IO.Path.DirectorySeparatorChar)) { throw new UnauthorizedAccessException("试图提取的文件超出了目标文件夹的路径边界。"); } // 提取条目到目标路径 entry.ExtractToFile(destinationPath, overwrite: true); } } } // 遍历解压目录,是否有shp后缀的文件 if (!Directory.Exists(extractPath)) { throw new Exception("文件解压失败"); } }); } /// /// 河东设施农业监管shp导入 /// /// /// /// /// /// public async Task> ImportCaseInfoShpDataSsny(string zipFilePath, string srid) { var _user = _auth.GetCurrentUser().User; using var db = Repository.AsSugarClient(); // 开启事务 await db.Ado.BeginTranAsync(IsolationLevel.ReadCommitted); // 取得文件完全路径 zipFilePath = System.IO.Path.Combine(_filePath, zipFilePath); // 确保ZIP文件存在 if (!File.Exists(zipFilePath)) { throw new FileNotFoundException("ZIP文件未找到。"); } // 打开ZIP存档 取除后缀之前的字符串 var extractPath = zipFilePath.Substring(0, zipFilePath.LastIndexOf(".", StringComparison.Ordinal)) + "extract"; // 解压文件 await UnZip(zipFilePath, extractPath); var searchPattern = "*.shp"; // 设置你想要遍历的文件后缀名 var fileName = Directory.GetFiles(extractPath, searchPattern, SearchOption.AllDirectories); if (fileName.IsEmpty()) { throw new Exception("压缩文件中无shp文件"); } var shpFileName = fileName[0]; var shpFile = System.IO.Path.Combine(extractPath, shpFileName); List datalist = new List(); List shplist = new List(); StringBuilder geomSql = new StringBuilder(); //批量更新面积 StringBuilder sql = new StringBuilder(); Random random = new Random(); //批次号 //var pici = DateTime.Now.ToString("yyyyMMssHHmmss") + random.Next(1000, 9999).ToString(); int i = 0; using (var dataReader = new ShapefileDataReader(shpFile, GeometryFactory.Default)) { while (dataReader.Read()) { DroneSsnyd cinfo = new DroneSsnyd(); cinfo.Id = Guid.NewGuid().ToString(); cinfo.createuser = _user.Id.ToString(); //案件编号 if (!dataReader.IsDBNull(1)) { var caseinfo = client.Queryable().Where(r => r.xiangmu_no == dataReader.GetValue(1).ToString()).ToList(); if (caseinfo.Count > 0) { throw new Exception("图斑编号" + dataReader.GetValue(1).ToString() + "已存在,请重新整理数据"); } else { cinfo.xiangmu_no = dataReader.GetValue(1).ToString(); } } else { throw new Exception("图斑编号不能为空,请重新整理数据"); } if (dataReader.IsDBNull(2)) { cinfo.xiangmu_name = ""; } else { cinfo.xiangmu_name = dataReader.GetValue(2).ToString(); } if (dataReader.IsDBNull(3)) { cinfo.xiangmu_yt = ""; } else { cinfo.xiangmu_yt = dataReader.GetValue(3).ToString(); } if (dataReader.IsDBNull(4)) { cinfo.xingzhengquhua = ""; } else { cinfo.xingzhengquhua = dataReader.GetValue(4).ToString(); } if (dataReader.IsDBNull(5)) { cinfo.shenqing_area = 0; } else { var aa = dataReader.GetValue(5); cinfo.shenqing_area = Convert.ToDecimal(dataReader.GetValue(5).ToString()); } if (dataReader.IsDBNull(6)) { cinfo.beian_no = ""; } else { cinfo.beian_no = dataReader.GetValue(6).ToString(); } if (dataReader.IsDBNull(7)) { cinfo.beianriqi = null; } else { var value = dataReader.GetValue(7); cinfo.beianriqi = value as DateTime? ?? Convert.ToDateTime(value); } if (dataReader.IsDBNull(8)) { cinfo.quanliren = ""; } else { cinfo.quanliren = dataReader.GetValue(8).ToString(); } if (dataReader.IsDBNull(9)) { cinfo.start_time = null; } else { var value = dataReader.GetValue(9); cinfo.start_time = value as DateTime? ?? Convert.ToDateTime(value); } if (dataReader.IsDBNull(10)) { cinfo.end_time = null; } else { var value = dataReader.GetValue(10); cinfo.end_time = value as DateTime? ?? Convert.ToDateTime(value); } if (dataReader.IsDBNull(11)) { cinfo.jianzhujiegou = ""; } else { cinfo.jianzhujiegou = dataReader.GetValue(11).ToString(); } if (dataReader.IsDBNull(12)) { cinfo.shengchan_area = 0; } else { cinfo.shengchan_area = Convert.ToDecimal(dataReader.GetValue(12).ToString()); } if (dataReader.IsDBNull(13)) { cinfo.fuzhu_area = 0; } else { cinfo.fuzhu_area = Convert.ToDecimal(dataReader.GetValue(13).ToString()); } string countyid = ""; string streetid = ""; if (dataReader.IsDBNull(14)) { cinfo.countyname = ""; } else { cinfo.countyname =dataReader.GetValue(14).ToString(); var org = client.Queryable().Where(r => r.Name == cinfo.countyname).First(); if (org != null) { countyid = org.Id.ToString(); cinfo.countyid = org.Id.ToString(); } } if (dataReader.IsDBNull(15)) { cinfo.streetname = ""; } else { cinfo.streetname = dataReader.GetValue(15).ToString(); var org = client.Queryable() .Where(r => r.Name == cinfo.streetname) .WhereIF(!string.IsNullOrEmpty(countyid),r=>r.ParentId.ToString() == countyid) .First(); if (org != null) { streetid = org.Id.ToString(); cinfo.streetid = org.Id.ToString(); } } if (dataReader.IsDBNull(16)) { cinfo.communityname = ""; } else { cinfo.communityname = dataReader.GetValue(16).ToString(); var org = client.Queryable() .Where(r => r.Name == cinfo.communityname) .WhereIF(!string.IsNullOrEmpty(streetid), r => r.ParentId.ToString() == streetid) .First(); if (org != null) { cinfo.communityid = org.Id.ToString(); } } //图斑数据drone_shp_data DroneShpData model = new DroneShpData(); model.relid = cinfo.Id; model.createtime = DateTime.Now; model.createuser = _user.Name; //获取主键 string _gid = _commonDataManager.GetMaxKeyVal("gid", "drone_shp_data", 1); model.gid = int.Parse(_gid) + i;//转为数字类型 i++; cinfo.geomid = model.gid.ToString(); cinfo.handle_status_id = 0; //geom if (!dataReader.IsDBNull(0)) { var geometry = (Geometry)dataReader.GetValue(0); if (!geometry.IsValid) { throw new Exception("图斑" + cinfo.xiangmu_no + "未闭合,请重新整理数据"); } var geometryForWgs84 = GeometryFactory.Default.WithSRID(int.Parse(srid)) .CreateGeometry(geometry); geomSql.AppendFormat($" update drone_shp_data set geom = '{geometryForWgs84.AsText()}' where gid = '{model.gid}';"); sql.AppendFormat($" update drone_shp_data set area = st_area(st_transform(ST_SetSRID(geom,4326), 4527)) where gid = '{model.gid}';"); } datalist.Add(cinfo); shplist.Add(model); } } using (var uow = base.UnitWork.CreateContext()) { await uow.DroneSsnyd.InsertRangeAsync(datalist); await uow.DroneShpData.InsertRangeAsync(shplist); await uow.Db.Ado.ExecuteCommandAsync(geomSql.ToString()); await uow.Db.Ado.ExecuteCommandAsync(sql.ToString()); var flag = uow.Commit(); if (flag == true) { return new Response() { Result = flag, Message = "导入成功" }; } else { return new Response() { Result = false, Message = "导入失败" }; } } } #endregion #region 添加查询前时像后时像 //添加时像后时像 public Response AddTubanshixiang(List req) { //var user = _auth.GetCurrentUser().User; //添加数据 var flag = client.Ado.UseTran(() => { var data = client.Queryable().ToList(); client.Deleteable(data).ExecuteCommand(); client.Insertable(req).ExecuteCommand(); }); if (flag.IsSuccess) { return new Response { Result = true }; } else { return new Response { Result = false, Message = "操作失败" }; } } //查询图斑前时像后时像 public async Task>> LoadTuBanshixiang() { //查询任务数据 var data = await client.Queryable().ToListAsync(); return new Response> { Result = data }; } #endregion #region 不查询截图 直接导入 public async Task> UpdateDroneCaseInfoT(string picihao) { var data = client.Queryable().Where(r => r.picihao==picihao).ToList(); if (data.Count > 0) { using (var uow = base.UnitWork.CreateContext()) { #region 导入案件信息 int i = 0; List datalist = new List(); List shplist = new List(); StringBuilder geomSql = new StringBuilder(); StringBuilder sql = new StringBuilder(); foreach (var item in data) { DroneCaseInfoSingle cinfo = new DroneCaseInfoSingle(); cinfo.Id = item.Id; cinfo.createtime = DateTime.Now; cinfo.createuser = item.createuser; cinfo.createusername = item.createusername; cinfo.is_illegal = 1; cinfo.is_intact = 1; cinfo.synchronoustime = DateTime.Now; cinfo.handle_status_id = 0; cinfo.handle_status_name = "待接收"; cinfo.is_jieshou = 0; cinfo.is_closed = 0; cinfo.is_delete = 0; cinfo.case_description = item.case_description; cinfo.area = item.area; cinfo.tubanlaiyuan = item.tubanlaiyuan; cinfo.typename = item.typename; //类型id var type = client.Queryable().Where(r => r.ItemName == cinfo.typename && r.ItemCode == "DRONE_CASE_TYPE").First(); if (type != null) { cinfo.typeid = type.ItemDetailId; } cinfo.lng = item.lng; cinfo.lat = item.lat; JObject xzqh = GetOrgAreaByPoint((decimal)cinfo.lng, (decimal)cinfo.lat); cinfo.countyid = xzqh["countyid"].ToString(); cinfo.countyname = xzqh["countyname"].ToString(); cinfo.streetid = xzqh["streetid"].ToString(); cinfo.streetname = xzqh["streetname"].ToString(); cinfo.communityid = xzqh["communityid"].ToString(); cinfo.communityname = xzqh["communityname"].ToString(); cinfo.address = cinfo.countyname + " " + cinfo.streetname + " " + cinfo.communityname; cinfo.case_no = item.case_no; cinfo.casepic = item.casepic; cinfo.nongyongdi_area = item.nongyongdi_area; cinfo.yongjiujibennongtian_area = item.yongjiujibennongtian_area; cinfo.gengdi_area = item.gengdi_area; cinfo.guotukongjianguihua_area = item.guotukongjianguihua_area; cinfo.shengtaibaohuhongxian_area = item.shengtaibaohuhongxian_area; cinfo.zhongdianquyu_area = item.zhongdianquyu_area; //图斑数据drone_shp_data DroneShpData model = new DroneShpData(); model.relid = cinfo.Id; model.createtime = DateTime.Now; model.createuser = item.createusername; model.area = item.shparea; //获取主键 string _gid = _commonDataManager.GetMaxKeyVal("gid", "drone_shp_data", 1); model.gid = int.Parse(_gid) + i;//转为数字类型 i++; cinfo.geomid = model.gid.ToString(); geomSql.AppendFormat($" update drone_shp_data set geom = '{item.geom}' where gid = '{model.gid}';"); sql.AppendFormat($" update drone_shp_data set area = st_area(st_transform(ST_SetSRID(geom,4326), 4527)) where gid = '{model.gid}';"); shplist.Add(model); datalist.Add(cinfo); } string errornums = ""; switch (data[0].subjectname) { case "巡察审计": var dataxunchashenji = datalist.MapTo>(); //判断是否有重复数据 List casenos = dataxunchashenji?.Select(r => r.case_no).ToList(); var caseinfo = client.Queryable().Where(r => casenos.Contains(r.case_no)).ToList(); if (caseinfo.Count > 0) { var nums = caseinfo.Select(r => r.case_no).ToList(); var dataxuncha = dataxunchashenji.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoXcsj.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoXcsj.InsertRangeAsync(dataxunchashenji); } break; case "耕地非粮化": var datafeilianghua = datalist.MapTo>(); List casenof = datafeilianghua?.Select(r => r.case_no).ToList(); var caseinfof = client.Queryable().Where(r => casenof.Contains(r.case_no)).ToList(); if (caseinfof.Count > 0) { var nums = caseinfof.Select(r => r.case_no).ToList(); var dataxuncha = datafeilianghua.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoFLH.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoFLH.InsertRangeAsync(datafeilianghua); } break; case "违法用地": List casenog = datalist?.Select(r => r.case_no).ToList(); var caseinfos = client.Queryable().Where(r => casenog.Contains(r.case_no)).ToList(); if (caseinfos.Count > 0) { var nums = caseinfos.Select(r => r.case_no).ToList(); var dataxuncha = datalist.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoSingle.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoSingle.InsertRangeAsync(datalist); } break; case "重点问题I类": var zhongdianwenti1 = datalist.MapTo>(); List casenot = zhongdianwenti1?.Select(r => r.case_no).ToList(); var caseinfoz = client.Queryable().Where(r => casenot.Contains(r.case_no)).ToList(); if (caseinfoz.Count > 0) { var nums = caseinfoz.Select(r => r.case_no).ToList(); var dataxuncha = zhongdianwenti1.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoZdwt1.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoZdwt1.InsertRangeAsync(zhongdianwenti1); } break; case "重点问题II类": var zhongdianwenti2 = datalist.MapTo>(); List casenow = zhongdianwenti2?.Select(r => r.case_no).ToList(); var caseinfow = client.Queryable().Where(r => casenow.Contains(r.case_no)).ToList(); if (caseinfow.Count > 0) { var nums = caseinfow.Select(r => r.case_no).ToList(); var dataxuncha = zhongdianwenti2.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoZdwt2.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoZdwt2.InsertRangeAsync(zhongdianwenti2); } break; case "卫片下发": var weipianxiafa = datalist.MapTo>(); List casenoa = weipianxiafa?.Select(r => r.case_no).ToList(); var caseinfoa = client.Queryable().Where(r => casenoa.Contains(r.case_no)).ToList(); if (caseinfoa.Count > 0) { var nums = caseinfoa.Select(r => r.case_no).ToList(); var dataxuncha = weipianxiafa.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoSatellite.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoSatellite.InsertRangeAsync(weipianxiafa); } break; } await uow.DroneShpData.InsertRangeAsync(shplist); await uow.Db.Ado.ExecuteCommandAsync(geomSql.ToString()); await uow.Db.Ado.ExecuteCommandAsync(sql.ToString()); var flag = uow.Commit(); //返回值 var res = new Response { Result = flag, Message = flag == true ? "导入数据成功" : "导入数据失败" }; if (flag == true) { if (!string.IsNullOrEmpty(errornums)) { res.Message = "重复编号:" + errornums + "未导入"; } } //返回值 return res; #endregion } } else { throw new Exception("未找到该批次数据"); } } /// /// 导入矿产信息--不截图 /// /// /// public async Task> UpdateDroneCaseInfoMineralsT(string picihao) { var data = client.Queryable().Where(r => r.picihao == picihao).ToList(); if(data.Count > 0) { using (var uow = base.UnitWork.CreateContext()) { #region 案件信息处理 int i = 0; List datalist = new List(); List shplist = new List(); StringBuilder geomSql = new StringBuilder(); StringBuilder sql = new StringBuilder(); foreach (var item in data) { DroneCaseInfoMinerals cinfo = new DroneCaseInfoMinerals(); cinfo.Id = item.Id; cinfo.createtime = DateTime.Now; cinfo.createuser = item.createuser; cinfo.is_illegal = 1; //cinfo.xiafatime_base = DateTime.Now; cinfo.handle_status_id = 0; cinfo.is_closed = 0; cinfo.case_description = item.case_description; cinfo.weifaarea_base = item.area; cinfo.tubanlaiyuan = item.tubanlaiyuan; cinfo.typename = item.typename; cinfo.centerlat_base = item.lng.ToString(); cinfo.centerlng_base = item.lat.ToString(); JObject xzqh = GetOrgAreaByPoint((decimal)item.lng, (decimal)item.lat); cinfo.countyid = xzqh["countyid"].ToString(); cinfo.countyname = xzqh["countyname"].ToString(); cinfo.streetid = xzqh["streetid"].ToString(); cinfo.streetname = xzqh["streetname"].ToString(); cinfo.communityid = xzqh["communityid"].ToString(); cinfo.communityname = xzqh["communityname"].ToString(); //cinfo.address = cinfo.countyname + " " + cinfo.streetname + " " + cinfo.communityname; cinfo.case_no = item.case_no; cinfo.tubanpic_base = item.casepic; cinfo.jbntarea_base = item.yongjiujibennongtian_area; cinfo.gengdi_area = item.gengdi_area; cinfo.stbhhxarea_base = item.shengtaibaohuhongxian_area; cinfo.cskfbjarea_base = item.cskfbjarea_base; cinfo.weifazhandiarea_base = item.weifazhandiarea_base; cinfo.weifakaicaiarea_base = item.weifakaicaiarea_base; //图斑数据drone_shp_data DroneShpData model = new DroneShpData(); model.relid = cinfo.Id; model.createtime = DateTime.Now; model.createuser = item.createusername; model.area = item.shparea; //获取主键 string _gid = _commonDataManager.GetMaxKeyVal("gid", "drone_shp_data", 1); model.gid = int.Parse(_gid) + i;//转为数字类型 i++; cinfo.geomid = model.gid.ToString(); geomSql.AppendFormat($" update drone_shp_data set geom = '{item.geom}' where gid = '{model.gid}';"); sql.AppendFormat($" update drone_shp_data set area = st_area(st_transform(ST_SetSRID(geom,4326), 4527)) where gid = '{model.gid}';"); shplist.Add(model); datalist.Add(cinfo); } var caseno = datalist.Select(r => r.case_no).ToList(); var caseinfo = client.Queryable().Where(r => caseno.Contains(r.case_no)).ToList(); string errornums = ""; if (caseinfo.Count > 0) { var nums = caseinfo.Select(r => r.case_no).ToList(); var dataxuncha = datalist.Where(r => !nums.Contains(r.case_no)).ToList(); //保存重复数据案件编号 errornums = string.Join(",", nums); //添加未重复数据 await uow.DroneCaseInfoMinerals.InsertRangeAsync(dataxuncha); } else { await uow.DroneCaseInfoMinerals.InsertRangeAsync(datalist); } await uow.DroneShpData.InsertRangeAsync(shplist); await uow.Db.Ado.ExecuteCommandAsync(geomSql.ToString()); await uow.Db.Ado.ExecuteCommandAsync(sql.ToString()); var flag = uow.Commit(); #endregion var res=new Response { Result = flag, Message = flag == true ? "导入数据成功" : "导入数据失败" }; if(flag == true) { if (!string.IsNullOrEmpty(errornums)) { res.Message = "重复编号:" + errornums + "未导入"; } } //返回值 return res; } } else { throw new Exception("未找到该批次数据"); } } #endregion } }