feixian_weifajianguan/OpenAuth.App/ServiceApp/DroneCaseInfoTaskManage/DroneCaseInfoTaskApp.cs

1920 lines
86 KiB
C#
Raw Normal View History

2026-02-03 16:00:02 +08:00
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<DroneCaseInfoTask, SugarDbContext>
{
ISqlSugarClient client;
private ImMsgApp _immsgApp;
private ShpLayerSourceApp _shplayerapp;
private readonly string _filePath;
CommonDataManager _commonDataManager;
public DroneCaseInfoTaskApp(ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<DroneCaseInfoTask> repository, IOptions<AppSetting> 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<bool> 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<DroneCaseInfoTask>().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<bool> { Result = true };
}
else
{
rs.flag = false;
return new Response<bool> { Result = false, Message = "操作失败" };
}
}
}
//查询任务
public async Task<Response<List<DroneCaseInfoTask>>> LoadDroneCaseInfoTask()
{
//查询任务数据
var data = await client.Queryable<DroneCaseInfoTask>().Where(r => r.State != 2)
.OrderByDescending(a => a.CreateTime).ToListAsync();
//获取之后,需要把这些任务标记为正在查询
foreach (var item in data)
{
item.State = 1;
}
await client.Updateable<DroneCaseInfoTask>(data).ExecuteCommandAsync();
return new Response<List<DroneCaseInfoTask>>
{
Result = data
};
}
//根据任务id查询任务信息
public async Task<Response<DroneCaseInfoTask>> LoadDroneCaseInfobyid(string id)
{
var data =await client.Queryable<DroneCaseInfoTask>().Where(r => r.Id == id).FirstAsync();
Response<DroneCaseInfoTask> ts = new Response<DroneCaseInfoTask>();
ts.Result=data;
return ts;
}
//更新任务信息
public Response<bool> UpdateDroneCaseInfoTask(string id,int rate)
{
var flag = client.Updateable<DroneCaseInfoTask>().SetColumns(r => new DroneCaseInfoTask
{
rate = rate
}).Where(r => r.Id == id).ExecuteCommand();
Response<bool> ts = new Response<bool>();
if (flag > 0)
{
ts.Result = true;
}
else
{
ts.Result = false;
}
return ts;
}
//查询任务
public async Task<Response<List<DroneCaseInfoTask>>> LoadDroneCaseInfoTaskByUser()
{
var user = _auth.GetCurrentUser().User;
//查询任务数据
var data = await client.Queryable<DroneCaseInfoTask>().Where(r => r.CreateUser==user.Id.ToString())
.OrderByDescending(a => a.CreateTime).ToListAsync();
return new Response<List<DroneCaseInfoTask>>
{
Result = data
};
}
#endregion
#region 查询图层信息
//查询任务
public async Task<Response<List<DroneLayerInfo>>> LoadLayerInfo()
{
//查询任务数据
var data = await client.Queryable<DroneLayerInfo>().ToListAsync();
return new Response<List<DroneLayerInfo>>
{
Result = data
};
}
#endregion
#region 接收查询结果
public async Task<Response<bool>> UpdateDroneCaseInfo(DroneCaseInfoTaskRes req)
{
using (var uow = base.UnitWork.CreateContext())
{
//导入案件信息
var data = req.importlist;
#region 导入案件信息
int i = 0;
List<DroneCaseInfoSingle> datalist = new List<DroneCaseInfoSingle>();
List<DroneShpData> shplist = new List<DroneShpData>();
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<SysDataItemDetail>().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<DroneCaseInfoXcsj>>();
//判断是否有重复数据
List<string> casenos = dataxunchashenji?.Select(r => r.case_no).ToList();
var caseinfo = client.Queryable<DroneCaseInfoXcsj>().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<DroneCaseInfoFLH>>();
List<string> casenof = datafeilianghua?.Select(r => r.case_no).ToList();
var caseinfof = client.Queryable<DroneCaseInfoFLH>().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<DroneCaseInfoSTHX>>();
List<string> casenox = datastbh?.Select(r => r.case_no).ToList();
var caseinfox = client.Queryable<DroneCaseInfoSTHX>().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<DroneCaseInfoSTHX>>();
List<string> casenoh = datastxiufu?.Select(r => r.case_no).ToList();
var caseinfot = client.Queryable<DroneCaseInfoSTHX>().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<string> casenog = datalist?.Select(r => r.case_no).ToList();
var caseinfos = client.Queryable<DroneCaseInfoSingle>().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<DroneCaseInfoZdwt1>>();
List<string> casenot = zhongdianwenti1?.Select(r => r.case_no).ToList();
var caseinfoz = client.Queryable<DroneCaseInfoZdwt1>().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<DroneCaseInfoZdwt2>>();
List<string> casenow = zhongdianwenti2?.Select(r => r.case_no).ToList();
var caseinfow = client.Queryable<DroneCaseInfoZdwt2>().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<DroneCaseInfoSatellite>>();
List<string> casenoa = weipianxiafa?.Select(r => r.case_no).ToList();
var caseinfoa = client.Queryable<DroneCaseInfoSatellite>().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<string> users = new List<string>();
if (task != null)
{
users.Add(task.CreateUser);
}
//推送数据
if (flag == true)
{
try
{
await _immsgApp.SendMsg("CaseInfoTask", users, contents, "4", task.Id);
}
catch
{
return new Response<bool>
{
Result = flag,
Message = "数据导入成功,推送失败"
};
}
}
//返回值
return new Response<bool>
{
Result = flag,
Message = flag == true ? "导入数据成功" : "导入数据失败"
};
}
}
public bool CaseInfoJudge(List<string> caseno,string subjectname)
{
bool flag = false;
switch (subjectname)
{
case "巡察审计":
var caseinfo = client.Queryable<DroneCaseInfoXcsj>().Where(r => caseno.Contains(r.case_no)).ToList();
if (caseinfo.Count > 0)
{
flag= true;
}
break;
case "耕地非粮化":
var caseinfoflh = client.Queryable<DroneCaseInfoFLH>().Where(r => caseno.Contains(r.case_no)).ToList();
if (caseinfoflh.Count > 0)
{
flag = true;
}
break;
case "违法用地":
var caseinfosig = client.Queryable<DroneCaseInfoSingle>().Where(r => caseno.Contains(r.case_no)).ToList();
if (caseinfosig.Count > 0)
{
flag = true;
}
break;
case "重点问题I类":
var caseinfozt1 = client.Queryable<DroneCaseInfoZdwt1>().Where(r => caseno.Contains(r.case_no)).ToList();
if (caseinfozt1.Count > 0)
{
flag = true;
}
break;
case "重点问题II类":
var caseinfozt2 = client.Queryable<DroneCaseInfoZdwt2>().Where(r => caseno.Contains(r.case_no)).ToList();
if (caseinfozt2.Count > 0)
{
flag = true;
}
break;
case "卫片下发":
var caseinfosatellite = client.Queryable<DroneCaseInfoSatellite>().Where(r => caseno.Contains(r.case_no)).ToList();
if (caseinfosatellite.Count > 0)
{
flag = true;
}
break;
}
return flag;
}
/// <summary>
/// 矿产接收查询结果
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<Response<bool>> UpdateDroneCaseInfoMinerals(DroneCaseInfoTaskRes req)
{
using (var uow = base.UnitWork.CreateContext())
{
#region 案件信息处理
var data = req.importlist;
int i = 0;
List<DroneCaseInfoMinerals> datalist = new List<DroneCaseInfoMinerals>();
List<DroneShpData> shplist = new List<DroneShpData>();
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<DroneCaseInfoMinerals>().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<DroneCaseInfoTask>().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<string> users = new List<string>();
if (task != null)
{
users.Add(task.CreateUser);
}
//推送数据
if (flag == true)
{
try
{
await _immsgApp.SendMsg("CaseInfoTask", users, contents, "4", task.Id);
}
catch
{
return new Response<bool>
{
Result = flag,
Message = "数据导入成功,推送失败"
};
}
}
//返回值
return new Response<bool>
{
Result = flag,
Message = flag == true ? "导入数据成功" : "导入数据失败"
};
}
}
/// <summary>
/// 根据经纬度获取组织机构
/// </summary>
/// <param name="lng"></param>
/// <param name="lat"></param>
/// <returns></returns>
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<dynamic>(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<dynamic>(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<dynamic>(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<Response<PageInfo<List<DroneCaseInfoImport>>>> LoadCaseImportInfoBypicihao(string picihao, string laiyuan, DateTime? begintime,DateTime? endtime, int pageindex, int pagesize)
{
var user = _auth.GetCurrentUser();
//定义且实例化分页数据
RefAsync<int> totalCount = 0;
var caseinfolist = await client.SqlQueryable<DroneCaseInfoImport>("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<PageInfo<List<DroneCaseInfoImport>>>
{
Result = new PageInfo<List<DroneCaseInfoImport>>
{
Items = caseinfolist,
Total = totalCount
}
};
}
/// <summary>
/// 查询最后一次导入数据
/// </summary>
/// <param name="pageindex"></param>
/// <param name="pagesize"></param>
/// <returns></returns>
public async Task<Response<string>> LoadCaseImportInfoLast(string subjectname,int pageindex, int pagesize)
{
var user = _auth.GetCurrentUser().User;
string picihao = "";
//定义且实例化分页数据
RefAsync<int> totalCount = 0;
var data = await client.Queryable<DroneCaseInfoImport>()
.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<string>
{
Result = picihao
};
}
#endregion
#region 导入shp数据新版
/// <summary>
/// shp导入
/// </summary>
/// <param name="zipFilePath"></param>
/// <param name="srid"></param>
/// <returns></returns>
/// <exception cref="FileNotFoundException"></exception>
/// <exception cref="Exception"></exception>
public async Task<Response<string>> 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<DroneCaseInfoImport> datalist = new List<DroneCaseInfoImport>();
List<DroneShpData> shplist = new List<DroneShpData>();
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<SysDataItemDetail>().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<DroneCaseInfoImport>().Where(r => r.case_no == dataReader.GetValue(1).ToString()).ToList();
var caseoinfo=client.Queryable<ViewDroneCaseinfoTotal>().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<DroneCaseInfoImport>().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<string>()
{
Result = pici,
Message = "导入成功"
};
}
else
{
return new Response<string>()
{
Result = "false",
Message = "导入失败"
};
}
}
}
/// <summary>
/// 矿产shp导入
/// </summary>
/// <param name="zipFilePath"></param>
/// <param name="srid"></param>
/// <returns></returns>
/// <exception cref="FileNotFoundException"></exception>
/// <exception cref="Exception"></exception>
public async Task<Response<string>> 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<DroneCaseInfoImport> datalist = new List<DroneCaseInfoImport>();
List<DroneShpData> shplist = new List<DroneShpData>();
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<DroneCaseInfoImport>().Where(r => r.case_no == dataReader.GetValue(1).ToString()).ToList();
var caseoinfo = client.Queryable<DroneCaseInfoMinerals>().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<DroneCaseInfoImport>().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<string>()
{
Result = pici,
Message = "导入成功"
};
}
else
{
return new Response<string>()
{
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("文件解压失败");
}
});
}
/// <summary>
/// 河东设施农业监管shp导入
/// </summary>
/// <param name="zipFilePath"></param>
/// <param name="srid"></param>
/// <returns></returns>
/// <exception cref="FileNotFoundException"></exception>
/// <exception cref="Exception"></exception>
public async Task<Response<bool>> 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<DroneSsnyd> datalist = new List<DroneSsnyd>();
List<DroneShpData> shplist = new List<DroneShpData>();
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<DroneSsnyd>().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<SysOrg>().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<SysOrg>()
.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<SysOrg>()
.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<bool>()
{
Result = flag,
Message = "导入成功"
};
}
else
{
return new Response<bool>()
{
Result = false,
Message = "导入失败"
};
}
}
}
#endregion
#region 添加查询前时像后时像
//添加时像后时像
public Response<bool> AddTubanshixiang(List<DroneTuBanshixiang> req)
{
//var user = _auth.GetCurrentUser().User;
//添加数据
var flag = client.Ado.UseTran(() =>
{
var data = client.Queryable<DroneTuBanshixiang>().ToList();
client.Deleteable(data).ExecuteCommand();
client.Insertable(req).ExecuteCommand();
});
if (flag.IsSuccess)
{
return new Response<bool> { Result = true };
}
else
{
return new Response<bool> { Result = false, Message = "操作失败" };
}
}
//查询图斑前时像后时像
public async Task<Response<List<DroneTuBanshixiang>>> LoadTuBanshixiang()
{
//查询任务数据
var data = await client.Queryable<DroneTuBanshixiang>().ToListAsync();
return new Response<List<DroneTuBanshixiang>>
{
Result = data
};
}
#endregion
#region 不查询截图 直接导入
public async Task<Response<bool>> UpdateDroneCaseInfoT(string picihao)
{
var data = client.Queryable<DroneCaseInfoImport>().Where(r => r.picihao==picihao).ToList();
if (data.Count > 0)
{
using (var uow = base.UnitWork.CreateContext())
{
#region 导入案件信息
int i = 0;
List<DroneCaseInfoSingle> datalist = new List<DroneCaseInfoSingle>();
List<DroneShpData> shplist = new List<DroneShpData>();
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<SysDataItemDetail>().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<DroneCaseInfoXcsj>>();
//判断是否有重复数据
List<string> casenos = dataxunchashenji?.Select(r => r.case_no).ToList();
var caseinfo = client.Queryable<DroneCaseInfoXcsj>().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<DroneCaseInfoFLH>>();
List<string> casenof = datafeilianghua?.Select(r => r.case_no).ToList();
var caseinfof = client.Queryable<DroneCaseInfoFLH>().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<string> casenog = datalist?.Select(r => r.case_no).ToList();
var caseinfos = client.Queryable<DroneCaseInfoSingle>().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<DroneCaseInfoZdwt1>>();
List<string> casenot = zhongdianwenti1?.Select(r => r.case_no).ToList();
var caseinfoz = client.Queryable<DroneCaseInfoZdwt1>().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<DroneCaseInfoZdwt2>>();
List<string> casenow = zhongdianwenti2?.Select(r => r.case_no).ToList();
var caseinfow = client.Queryable<DroneCaseInfoZdwt2>().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<DroneCaseInfoSatellite>>();
List<string> casenoa = weipianxiafa?.Select(r => r.case_no).ToList();
var caseinfoa = client.Queryable<DroneCaseInfoSatellite>().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<bool>
{
Result = flag,
Message = flag == true ? "导入数据成功" : "导入数据失败"
};
if (flag == true)
{
if (!string.IsNullOrEmpty(errornums))
{
res.Message = "重复编号:" + errornums + "未导入";
}
}
//返回值
return res;
#endregion
}
}
else
{
throw new Exception("未找到该批次数据");
}
}
/// <summary>
/// 导入矿产信息--不截图
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<Response<bool>> UpdateDroneCaseInfoMineralsT(string picihao)
{
var data = client.Queryable<DroneCaseInfoImport>().Where(r => r.picihao == picihao).ToList();
if(data.Count > 0)
{
using (var uow = base.UnitWork.CreateContext())
{
#region 案件信息处理
int i = 0;
List<DroneCaseInfoMinerals> datalist = new List<DroneCaseInfoMinerals>();
List<DroneShpData> shplist = new List<DroneShpData>();
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<DroneCaseInfoMinerals>().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<bool>
{
Result = flag,
Message = flag == true ? "导入数据成功" : "导入数据失败"
};
if(flag == true)
{
if (!string.IsNullOrEmpty(errornums))
{
res.Message = "重复编号:" + errornums + "未导入";
}
}
//返回值
return res;
}
}
else
{
throw new Exception("未找到该批次数据");
}
}
#endregion
}
}