1920 lines
86 KiB
C#
1920 lines
86 KiB
C#
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
|
||
}
|
||
}
|