Infrastructure/OpenAuth.App/ServiceApp/DroneCaseInfo/DroneCaseInfoApp.cs

1417 lines
53 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Infrastructure;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using OpenAuth.App.BaseApp.Base;
using OpenAuth.App.Common;
using OpenAuth.App.Interface;
using OpenAuth.App.Request;
using OpenAuth.App.Response;
using OpenAuth.App.ServiceApp.Request;
using OpenAuth.App.ServiceApp.Response;
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OpenAuth.App.ServiceApp.DroneCaseInfo
{
public class DroneCaseinfoApp : SqlSugarBaseApp<DroneCaseinfo, SugarDbContext>
{
IConfiguration _configuration;
private ILogger<DroneCaseinfoApp> _logger;
private ISqlSugarClient db;
private CommonData commonData;
public DroneCaseinfoApp(
ISugarUnitOfWork<SugarDbContext> unitWork,
ISimpleClient<DroneCaseinfo> repository,
IAuth auth,
ILogger<DroneCaseinfoApp> logger,
CommonData commonData) : base(unitWork, repository, auth)
{
_logger = logger;
db = unitWork.Db;
this.commonData = commonData;
}
//#region 案件
/// <summary>
/// 无人机添加案件
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public string AddDroneCaseByDrone(AddDroneCaseByDroneReq req)
{
var user = _auth.GetCurrentUser().User;
DroneCaseinfo model = req.MapTo<DroneCaseinfo>();
var picList = req.pic_list;
//model.Init(user, db);
List<DroneFiles> filesList = new List<DroneFiles>();
//图片
for (int i = 0; i < picList.Count; i++)
{
DroneFiles fileModel = new DroneFiles();
fileModel.Id = Guid.NewGuid().ToString();
fileModel.path = picList[i];
fileModel.type = 0;
fileModel.tablename = "drone_caseinfo";
fileModel.createtime = DateTime.Now;
fileModel.createuser = user.Id.ToString();
fileModel.createusername = user.Name;
fileModel.is_delete = 0;
fileModel.relid = model.Id;
filesList.Add(fileModel);
}
if (model.lng != 0 && model.lat != 0)
{
//根据经纬度查询地区
var lngLat = GetOrgAreaByPoint(Convert.ToDecimal(model.lng), Convert.ToDecimal(model.lat));
//县
model.countyid = lngLat["countyid"].ToString();
var countyname = db.Queryable<SysOrg>().Where(c => c.Id.ToString() == model.countyid).First();
if (countyname != null)
{
model.countyname = countyname.Name;
}
//镇
model.streetid = lngLat["streetid"].ToString();
var streetname = db.Queryable<SysOrg>().Where(c => c.Id.ToString() == model.streetid).First();
if (streetname != null)
{
model.streetname = streetname.Name;
}
//乡社区
model.communityid = lngLat["communityid"].ToString();
var communityname = db.Queryable<SysOrg>().Where(c => c.Id.ToString() == model.communityid).First();
if (communityname != null)
{
model.communityname = communityname.Name;
}
}
//使用事务提交数据
var transFlag = db.AsTenant().UseTran(() =>
{
//新增案件数据
db.Insertable(model).ExecuteCommand();
//新增文件数据
db.Insertable(filesList).ExecuteCommand();
});
if (transFlag.IsSuccess)
return model.Id;
else
throw new Exception("上报失败");
}
/// <summary>
/// 上报案件
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public string AddDroneCaseInfo(AddOrUpdateDroneCaseInfoReq req)
{
var user = _auth.GetCurrentUser().User;
//案件实体
var model = req.info;
//model.Init(user, db);
//区分权限,创建人就是判读人
model.identification_userid = model.createuser;
model.identification_user = model.identification_user;
if (model.lng != 0 && model.lat != 0)
{
//根据经纬度查询地区
var lngLat = GetOrgAreaByPoint(Convert.ToDecimal(model.lng), Convert.ToDecimal(model.lat));
//县
model.countyid = lngLat["countyid"].ToString();
var countyname = db.Queryable<SysOrg>().Where(c => c.Id.ToString() == model.countyid).First();
if (countyname != null)
{
model.countyname = countyname.Name;
}
//镇
model.streetid = lngLat["streetid"].ToString();
var streetname = db.Queryable<SysOrg>().Where(c => c.Id.ToString() == model.streetid).First();
if (streetname != null)
{
model.streetname = streetname.Name;
}
//乡社区
model.communityid = lngLat["communityid"].ToString();
var communityname = db.Queryable<SysOrg>().Where(c => c.Id.ToString() == model.communityid).First();
if (communityname != null)
{
model.communityname = communityname.Name;
}
}
var picList = req.pic_list;
var videoList = req.video_list;
List<DroneFiles> filesList = new List<DroneFiles>();
//图片
for (int i = 0; i < picList.Count; i++)
{
DroneFiles fileModel = new DroneFiles();
fileModel.Id = Guid.NewGuid().ToString();
fileModel.path = picList[i];
fileModel.type = 0;
fileModel.tablename = "drone_caseinfo";
fileModel.createtime = DateTime.Now;
fileModel.createuser = user.Id.ToString();
fileModel.createusername = user.Name;
fileModel.is_delete = 0;
fileModel.relid = model.Id;
filesList.Add(fileModel);
}
//视频
for (int i = 0; i < videoList.Count; i++)
{
DroneFiles fileModel = new DroneFiles();
fileModel.Id = Guid.NewGuid().ToString();
fileModel.path = videoList[i];
fileModel.type = 1;
fileModel.tablename = "drone_caseinfo";
fileModel.createtime = DateTime.Now;
fileModel.createuser = user.Id.ToString();
fileModel.createusername = user.Name;
fileModel.is_delete = 0;
fileModel.relid = model.Id;
filesList.Add(fileModel);
}
//关联案件
var caserelationList = req.relationCaseNo;
List<DroneCaseinfoRelation> relationList = new List<DroneCaseinfoRelation>();
foreach (var item in caserelationList)
{
relationList.Add(new DroneCaseinfoRelation
{
caseid = model.Id,
relation_case_no = item
});
}
//案件标签
var tags = req.tags;
List<DroneCaseinfoTag> tagList = new List<DroneCaseinfoTag>();
foreach (var item in tags)
{
tagList.Add(new DroneCaseinfoTag
{
caseid = model.Id,
tagid = item
});
}
//使用事务提交数据
var transFlag = db.AsTenant().UseTran(() =>
{
//新增案件数据
db.Insertable(model).ExecuteCommand();
//新增文件数据
db.Insertable(filesList).ExecuteCommand();
//新增关联案件
db.Insertable(relationList).ExecuteCommand();
//新增案件标签
db.Insertable(tagList).ExecuteCommand();
});
if (transFlag.IsSuccess)
return model.Id;
else
throw new Exception("上报失败");
}
/// <summary>
/// 修改完善案件
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public string UpdateDroneCaseInfo(AddOrUpdateDroneCaseInfoReq req)
{
var user = _auth.GetCurrentUser().User;
//案件实体
var model = req.info;
//model.Update(user, db);
//处理事否审核
if (model.is_review == null)
{
model.is_review = 0;
}
//查询面积
var areaDecimal = db.Queryable<DroneShpData>().Where(c => c.relid == model.Id).Sum(c => c.area);
if (areaDecimal != null)
{
model.area = Decimal.Round((Decimal)areaDecimal, 2).ToString();
}
var picList = req.pic_list;
var videoList = req.video_list;
var existFiles = db.Queryable<DroneFiles>().Where(c => c.relid == req.info.Id).ToList();
List<DroneFiles> filesList = new List<DroneFiles>();
//图片
for (int i = 0; i < picList.Count; i++)
{
var item = picList[i];
var count = existFiles.Where(c => c.path == item).Count();
if (count > 0)
continue;
DroneFiles fileModel = new DroneFiles();
fileModel.Id = Guid.NewGuid().ToString();
fileModel.path = picList[i];
fileModel.type = 0;
fileModel.tablename = "drone_caseinfo";
fileModel.createtime = DateTime.Now;
fileModel.createuser = user.Id.ToString();
fileModel.createusername = user.Name;
fileModel.is_delete = 0;
fileModel.relid = model.Id;
filesList.Add(fileModel);
}
//视频
for (int i = 0; i < videoList.Count; i++)
{
var item = videoList[i];
var count = existFiles.Where(c => c.path == item).Count();
if (count > 0)
continue;
DroneFiles fileModel = new DroneFiles();
fileModel.Id = Guid.NewGuid().ToString();
fileModel.path = videoList[i];
fileModel.type = 1;
fileModel.tablename = "drone_caseinfo";
fileModel.createtime = DateTime.Now;
fileModel.createuser = user.Id.ToString();
fileModel.createusername = user.Name;
fileModel.is_delete = 0;
fileModel.relid = model.Id;
filesList.Add(fileModel);
}
//关联案件
var caserelationList = req.relationCaseNo;
List<DroneCaseinfoRelation> relationList = new List<DroneCaseinfoRelation>();
foreach (var item in caserelationList)
{
relationList.Add(new DroneCaseinfoRelation
{
caseid = model.Id,
relation_case_no = item
});
}
//案件标签
var tags = req.tags;
List<DroneCaseinfoTag> tagList = new List<DroneCaseinfoTag>();
foreach (var item in tags)
{
tagList.Add(new DroneCaseinfoTag
{
caseid = model.Id,
tagid = item
});
}
//专题及平台数据处理
var dataBaseList = db.Queryable<DatabasePicture>().Where(c => req.databaseid.Contains(c.Id)).IgnoreColumns(c => new { c.org_id }).ToList();
List<DroneCaseSubject> subjectList = new List<DroneCaseSubject>();
//遍历库
for (int i = 0; i < dataBaseList.Count; i++)
{
//当前库
var _item = dataBaseList[i];
//专题信息
var subjectlist = db.Queryable<Subject>().Where(r => req.subjectkeys.Contains(r.Key) && r.PId == _item.Id).ToList();
var subjectkeys = "";
if (req.subjectkeys != null && req.subjectkeys.Count > 0 && subjectlist.Count > 0)
{
subjectkeys = db.Queryable<Subject>().Where(r => req.subjectkeys.Contains(r.Key) && r.PId == _item.Id).Select(r => r.Key).ToList().Aggregate((current, next) => current + "," + next);
}
DroneCaseSubject cject = new DroneCaseSubject();
cject.Id = Guid.NewGuid().ToString();
cject.CaseId = model.Id;
cject.DataBaseId = _item.Id;
cject.SubjectKeys = subjectkeys;
cject.CreateTime = DateTime.Now;
cject.CreateUser = user.Id.ToString();
cject.CreateUserName = user.Name;
subjectList.Add(cject);
}
//使用事务提交数据
var transFlag = db.AsTenant().UseTran(() =>
{
//新增案件数据
db.Updateable(model).ExecuteCommand();
//新增文件数据
db.Insertable(filesList).ExecuteCommand();
//关联案件
db.Deleteable<DroneCaseinfoRelation>().Where(a => a.caseid == model.Id).ExecuteCommand();
db.Insertable(relationList).ExecuteCommand();
//案件标签
db.Deleteable<DroneCaseinfoTag>().Where(a => a.caseid == model.Id).ExecuteCommand();
db.Insertable(tagList).ExecuteCommand();
//案件平台专题
db.Deleteable<DroneCaseSubject>().Where(a => a.CaseId == model.Id).ExecuteCommand();
db.Insertable(subjectList).ExecuteCommand();
});
if (transFlag.IsSuccess)
return model.Id;
else
throw new Exception("上报失败");
}
/// <summary>
/// 事件判读
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public string UpdateDroneCaseInfoIntact(AddOrUpdateDroneCaseInfoDataBaseReq req)
{
var user = _auth.GetCurrentUser().User;
//案件实体
var model = req.info;
//model.Update(user, db);
//是否判读、判读人和判读时间
model.is_intact = 1;
model.identification_user = user.Name;
model.identification_userid = user.Id.ToString();
model.identification_time = DateTime.Now;
if (model.is_review == null)
{
model.is_review = 0;
}
//查询面积
var areaDecimal = db.Queryable<DroneShpData>().Where(c => c.relid == model.Id).Sum(c => c.area);
if (areaDecimal != null)
{
model.area = Decimal.Round((Decimal)areaDecimal, 2).ToString();
}
var picList = req.pic_list;
var videoList = req.video_list;
var existFiles = db.Queryable<DroneFiles>().Where(c => c.relid == req.info.Id).ToList();
List<DroneFiles> filesList = new List<DroneFiles>();
//图片
for (int i = 0; i < picList.Count; i++)
{
var item = picList[i];
var count = existFiles.Where(c => c.path == item).Count();
if (count > 0)
continue;
DroneFiles fileModel = new DroneFiles();
fileModel.Id = Guid.NewGuid().ToString();
fileModel.path = picList[i];
fileModel.type = 0;
fileModel.tablename = "drone_caseinfo";
fileModel.createtime = DateTime.Now;
fileModel.createuser = user.Id.ToString();
fileModel.createusername = user.Name;
fileModel.is_delete = 0;
fileModel.relid = model.Id;
filesList.Add(fileModel);
}
//视频
for (int i = 0; i < videoList.Count; i++)
{
var item = videoList[i];
var count = existFiles.Where(c => c.path == item).Count();
if (count > 0)
continue;
DroneFiles fileModel = new DroneFiles();
fileModel.Id = Guid.NewGuid().ToString();
fileModel.path = videoList[i];
fileModel.type = 1;
fileModel.tablename = "drone_caseinfo";
fileModel.createtime = DateTime.Now;
fileModel.createuser = user.Id.ToString();
fileModel.createusername = user.Name;
fileModel.is_delete = 0;
fileModel.relid = model.Id;
filesList.Add(fileModel);
}
//后续写
//List<Sugar_Relevance> relevanceList = new List<Sugar_Relevance>();
//for (int i = 0; i < req.databaseid.Count(); i++)
//{
// //不用进行判断是由于判读只能判读一次
// Sugar_Relevance rel = new Sugar_Relevance();
// rel.Id = Guid.NewGuid().ToString();
// rel.Key = Define.DATABASE_CASE;
// rel.Description = "";
// rel.Status = 0;
// rel.FirstId = req.databaseid[i];
// rel.SecondId = model.Id;
// rel.OperateTime = DateTime.Now;
// relevanceList.Add(rel);
//}
//关联案件
var caserelationList = req.relationCaseNo;
List<DroneCaseinfoRelation> relationList = new List<DroneCaseinfoRelation>();
foreach (var item in caserelationList)
{
relationList.Add(new DroneCaseinfoRelation
{
caseid = model.Id,
relation_case_no = item
});
}
//案件标签
var tags = req.tags;
List<DroneCaseinfoTag> tagList = new List<DroneCaseinfoTag>();
foreach (var item in tags)
{
tagList.Add(new DroneCaseinfoTag
{
caseid = model.Id,
tagid = item
});
}
#region 专题及平台数据处理
//专题及平台数据处理
var dataBaseList = db.Queryable<DatabasePicture>().Where(c => req.databaseid.Contains(c.Id)).IgnoreColumns(c => new { c.org_id }).ToList();
List<DroneCaseSubject> subjectList = new List<DroneCaseSubject>();
//遍历库
for (int i = 0; i < dataBaseList.Count; i++)
{
//当前库
var _item = dataBaseList[i];
//专题信息
var subjectlist = db.Queryable<Subject>().Where(r => req.subjectkeys.Contains(r.Key) && r.PId == _item.Id).ToList();
var subjectkeys = "";
if (req.subjectkeys.Count > 0 && subjectlist.Count > 0)
{
subjectkeys = db.Queryable<Subject>().Where(r => req.subjectkeys.Contains(r.Key) && r.PId == _item.Id).Select(r => r.Key).ToList().Aggregate((current, next) => current + "," + next);
}
DroneCaseSubject cject = new DroneCaseSubject();
cject.Id = Guid.NewGuid().ToString();
cject.CaseId = model.Id;
cject.DataBaseId = _item.Id;
cject.SubjectKeys = subjectkeys;
cject.CreateTime = DateTime.Now;
cject.CreateUser = user.Id.ToString();
cject.CreateUserName = user.Name;
subjectList.Add(cject);
}
#endregion
//使用事务提交数据
var transFlag = db.AsTenant().UseTran(() =>
{
//新增案件数据
db.Updateable(model).ExecuteCommand();
//新增文件数据
db.Insertable(filesList).ExecuteCommand();
////删除关联关系再新增
//db.Deleteable<Relevance>().Where(c => c.SecondId == model.Id && c.Key == Define.DATABASE_CASE).ExecuteCommand();
//后续写
//关联表
//db.Insertable(relevanceList).ExecuteCommand();
//案件关联
db.Deleteable<DroneCaseinfoRelation>().Where(a => a.caseid == model.Id).ExecuteCommand();
db.Insertable(relationList).ExecuteCommand();
//案件标签
db.Deleteable<DroneCaseinfoTag>().Where(a => a.caseid == model.Id).ExecuteCommand();
db.Insertable(tagList).ExecuteCommand();
//案件平台专题
db.Deleteable<DroneCaseSubject>().Where(a => a.CaseId == model.Id).ExecuteCommand();
db.Insertable(subjectList).ExecuteCommand();
});
//同步到对应的库
var flag = AsynchDroneCaseData(req.databaseid, req.info.Id, req.subjectkeys);
if (transFlag.IsSuccess && flag == "成功")
{
return model.Id;
}
else
{
_logger.LogError(transFlag.ErrorMessage);
if (flag == "成功")
{
throw new Exception("上报失败");
}
else
{
throw new Exception(flag);
}
}
}
/// <summary>
/// 同步数据公共方法
/// </summary>
/// <param name="db"></param>
/// <param name="dataBaseIds"></param>
/// <param name="caseId"></param>
/// <returns></returns>
private string AsynchDroneCaseData(string[] dataBaseIds, string caseId, List<string> subjects)
{
//查询同步数据
var dataBaseList = db.Queryable<DatabasePicture>().Where(c => dataBaseIds.Contains(c.Id)).IgnoreColumns(c => new { c.org_id }).ToList();
//查询案件详情
var model = db.Queryable<DroneCaseinfo>().Where(c => c.Id == caseId).First();
//图斑数据
StringBuilder sql = new StringBuilder();
sql.AppendFormat($" SELECT gid,relid,createuser,createtime,cast(geom as text) geom,area FROM \"drone_shp_data\" where relid = '{caseId}'");
var shps = db.SqlQueryable<DroneShpData>(sql.ToString()).ToList();
//图片文件数据
var files = db.Queryable<DroneFiles>().Where(c => c.relid == caseId).ToList();
var fileList = files.Select(c => c.path).ToList();
//本地图片服务器的地址
string pictureFilesApi = _configuration.GetSection("PictureFilesApi").Value;
//关联案件
var relationList = db.Queryable<DroneCaseinfoRelation>().Where(a => a.caseid == caseId).ToList();
//案件标签
var tagList = db.Queryable<DroneCaseinfoTag>().Where(a => a.caseid == caseId).ToList();
var dataflag = false;
var fileflag = false;
string infos = "";
//遍历库
for (int i = 0; i < dataBaseList.Count; i++)
{
//当前库
var _item = dataBaseList[i];
//专题信息
var subjectlist = db.Queryable<Subject>().Where(r => subjects.Contains(r.Key) && r.PId == _item.Id).ToList();
var subjectnames = "";
if (subjects.Count > 0 && subjectlist.Count > 0)
{
subjectnames = db.Queryable<Subject>().Where(r => subjects.Contains(r.Key) && r.PId == _item.Id).Select(r => r.Name).ToList().Aggregate((current, next) => current + "," + next);
}
//同步数据参数
AddOrUpdateAsyncDroneCaseDataReq postData = new AddOrUpdateAsyncDroneCaseDataReq();
postData.model = model;
postData.files = files;
postData.shps = shps;
postData.relations = relationList;
postData.tags = tagList;
postData.subjects = subjectlist;
//状态,数据,发送请求
string statusCode = string.Empty;
string postDataStr = postData.ToJson();
if (_item.database_url.IndexOf("http") >= 0)
{
//使用接口同步
var postDataResult = Infrastructure.Helpers.HttpClientHelper.PostResponse(_item.database_url + "api/DroneCaseinfo/AsynchDroneCaseDataLast", postDataStr, out statusCode);
//判断是否推送成功
var res = JsonConvert.DeserializeObject<Response<string>>(postDataResult);
if (res.Code == 200)
{
dataflag = true;
//添加日志
AddPushLogs(postDataStr, dataflag, 1, _item.database_name, _item.Id, subjectnames);
}
else
{
dataflag = false;
infos += res.Message;
//添加日志
AddPushLogs(postDataStr, dataflag, 1, _item.database_name, _item.Id, subjectnames);
break;
}
}
else
{
//使用数据库同步数据
string res = AsynchDroneCaseData(postData, _item.database_url);
if (res == "同步成功")
{
dataflag = true;
}
else
{
dataflag = false;
break;
}
}
//同步图片参数
AddOrUpdateDownLoadInternetToLocalReq postFiles = new AddOrUpdateDownLoadInternetToLocalReq();
postFiles.uri = pictureFilesApi;
postFiles.files = fileList;
//状态,数据,发送请求
string statusCodePic = string.Empty;
string postFilesStr = postFiles.ToJson();
var postFilesResult = Infrastructure.Helpers.HttpClientHelper.PostResponse(_item.picture_url + "api/Platform/DownLoadInternetToLocal", postFilesStr, out statusCodePic);
//判断是否推送成功
var fileres = JsonConvert.DeserializeObject<Response<string>>(postFilesResult);
if (fileres.Code == 200)
{
fileflag = true;
//添加日志
AddPushLogs(postFilesStr, fileflag, 2, _item.database_name, _item.Id, subjectnames);
}
else
{
fileflag = false;
infos += fileres.Message;
//添加日志
AddPushLogs(postFilesStr, fileflag, 2, _item.database_name, _item.Id, subjectnames);
break;
}
}
//返回最终结果
if (dataflag && fileflag)
{
return "成功";
}
else
{
return infos;
}
}
//添加推送日志
public bool AddPushLogs(string data, bool issuccess, int type, string databasename, string databaseid, string subjectname)
{
var pl = new DroneCaseinfoPushLog();
pl.Id = Guid.NewGuid().ToString();
pl.PushTime = DateTime.Now;
pl.DatabaseName = databasename;
pl.Data = data;
pl.IsSuccess = issuccess;
pl.Type = type;
pl.DataBaseId = databaseid;
pl.SubjectName = subjectname;
var transFlag = db.AsTenant().UseTran(() =>
{
//新增推送日志
db.Insertable(pl).ExecuteCommand();
});
return transFlag.IsSuccess;
}
////查询专题数据
//public List<SubjectRes> GetSubjectInfos()
//{
// using (var db = SqlSugarOper.GetInstance(_configuration))
// {
// var list = db.Queryable<Sugar_Database_picture>().Select(r => new SubjectRes
// {
// Id = r.Id,
// Name = r.database_name,
// Children = SqlFunc.Subqueryable<Sugar_Subject>().Where(a => a.PId == r.Id).ToList(a => new ChildSubject
// {
// Key = a.Key,
// Name = a.Name
// })
// }).ToList();
// return list;
// }
//}
/// <summary>
/// 同步航飞库数据
/// </summary>
/// <param name="req"></param>
/// <param name="database"></param>
/// <returns></returns>
private string AsynchDroneCaseData(AddOrUpdateAsyncDroneCaseDataReq req, string database)
{
//案件
var model = req.model;
//文件
var files = req.files;
//shp
var shps = req.shps;
//关联案件
var relations = req.relations;
//案件标签
var tags = req.tags;
//查询是否存在此数据
var _count = db.Queryable<DroneCaseinfo>().Where(c => c.Id == model.Id).Count();
//使用事务提交数据
var transFlag = db.AsTenant().UseTran(() =>
{
if (_count > 0)
{
//已存在此数据,修改数据
db.Updateable(model).ExecuteCommand();
}
else
{
//新增数据
db.Insertable(model).ExecuteCommand();
}
if (!string.IsNullOrEmpty(model.Id))
{
//新增修改图斑
//先删除,后新增
db.Deleteable<DroneShpData>().Where(c => c.relid == model.Id).ExecuteCommand();
var _gidStr = commonData.GetMaxKeyVal("gid", "drone_shp_data", 1);
int _gid = int.Parse(_gidStr);
for (int i = 0; i < shps.Count; i++)
{
var _item = shps[i];
_item.gid = _gid + i;
}
db.Insertable(shps).ExecuteCommand();
//新增修改图片
//先删除,后新增
db.Deleteable<DroneFiles>().Where(c => c.relid == model.Id).ExecuteCommand();
db.Insertable(files).ExecuteCommand();
//关联案件
//先删除后新增
db.Deleteable<DroneCaseinfoRelation>().Where(c => c.caseid == model.Id).ExecuteCommand();
db.Insertable(relations).ExecuteCommand();
//案件标签
//先删除后新增
db.Deleteable<DroneCaseinfoTag>().Where(a => a.caseid == model.Id).ExecuteCommand();
db.Insertable(tags).ExecuteCommand();
}
});
if (transFlag.IsSuccess)
return "同步成功";
else
throw new Exception("同步失败");
}
/// <summary>
/// 关闭案件(判读用)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public string CloseDroneCaseInfo(string id)
{
var user = _auth.GetCurrentUser().User;
var flag = db.Updateable<DroneCaseinfo>()
.SetColumns(c => new DroneCaseinfo
{
is_intact = 99,
close_time = DateTime.Now,
close_user = user.Name,
close_userid = user.Id.ToString()
})
.Where(c => c.Id == id)
.ExecuteCommand();
if (flag > 0)
return "关闭成功";
else
throw new Exception("关闭失败");
}
/// <summary>
/// 查询案件列表
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public TableData LoadCaseInfoList(QueryCaseInfoListReq req)
{
TableData tableData = new TableData();
req.Init();
DateTime curDatetime = DateTime.Now;
var user = _auth.GetCurrentUser().User;
//总条数
int totalNumber = 0;
var oldIntacts = new List<int?> { 1, 99, 6 };
var list = db.Queryable<DroneCaseinfo>().Where("(is_delete = 0 or is_delete is null)")
//关键字过滤数据
.WhereIF(!string.IsNullOrEmpty(req.key), c => c.case_no.Contains(req.key) || c.case_name.Contains(req.key) || c.case_description.Contains(req.key))
//是否完整
//.WhereIF(req.is_intact != null && req.is_intact != 0, c => c.is_intact == req.is_intact)
//已判读、已关闭
.WhereIF(req.is_intact != null && oldIntacts.Contains(req.is_intact), c => c.is_intact == req.is_intact)
//未判读
.WhereIF(req.is_intact == 0, c => c.is_intact == null || c.is_intact == 0)
//已审核
.WhereIF(req.is_intact == 2, c => c.is_review == 1)
//已通过
.WhereIF(req.is_intact == 3, c => c.is_review == 1 && c.is_agree == true && c.is_intact == 1)
//未通过
.WhereIF(req.is_intact == 4, c => c.is_review == 1 && c.is_agree == false && c.is_intact == 1)
//上报人
.WhereIF(req.is_reporter == 1 && user.Account != Define.SYSTEM_USERNAME, c => c.createuser == user.Id.ToString())
//执行人
//.WhereIF(req.is_dealer == 1 && user.Account != Define.SYSTEM_USERNAME, c => SqlFunc.Subqueryable<Sugar_Relevance>().Where(it => it.SecondId == c.communityid && it.FirstId == user.Id && it.Key == Define.USERORG).Any()
// || SqlFunc.Subqueryable<Sugar_Relevance>().Where(it => it.SecondId == c.streetid && it.FirstId == user.Id && it.Key == Define.USERORG).Any()
// || SqlFunc.Subqueryable<Sugar_Relevance>().Where(it => it.SecondId == c.countyid && it.FirstId == user.Id && it.Key == Define.USERORG).Any()
// || c.createuser == user.Id)
//处理状态
.WhereIF(req.handle_status_id != null, c => c.handle_status_id == req.handle_status_id)
//案件状态
.WhereIF(!string.IsNullOrEmpty(req.case_status_id), c => c.case_status_id == req.case_status_id)
//开始时间
.WhereIF(req.report_start_time != null, c => c.createtime >= req.report_start_time)
//结束时间
.WhereIF(req.report_end_time != null, c => c.createtime <= req.report_end_time)
//上报人
.WhereIF(!string.IsNullOrEmpty(req.report_name), c => c.createusername.Contains(req.report_name))
//执行人
.WhereIF(!string.IsNullOrEmpty(req.deal_username), c => c.deal_username.Contains(req.deal_username))
//判读开始时间
.WhereIF(req.identification_start_time != null, c => c.identification_time >= req.identification_start_time)
//判读结束时间
.WhereIF(req.identification_end_time != null, c => c.identification_time <= req.identification_end_time)
//县id
.WhereIF(!string.IsNullOrEmpty(req.countyid), c => c.countyid == req.countyid)
//镇id
.WhereIF(!string.IsNullOrEmpty(req.streetid), c => c.streetid == req.streetid)
//村id
.WhereIF(!string.IsNullOrEmpty(req.communityid), c => c.communityid == req.communityid)
//判读人id
//.WhereIF(!string.IsNullOrEmpty(req.identification_userid), c => c.identification_userid == req.identification_userid)
//判读人查看创建人或者判读人是自己的,或者判读人是空的
.WhereIF(!string.IsNullOrEmpty(req.identification_userid) && user.Account != Define.SYSTEM_USERNAME,
c => c.identification_userid == req.identification_userid || c.createuser == req.identification_userid || SqlFunc.IsNullOrEmpty(req.identification_userid))
//判读人
.WhereIF(!string.IsNullOrEmpty(req.identification_user), c => c.identification_user == req.identification_user)
//判读人账号
.WhereIF(!string.IsNullOrEmpty(req.identification_account), c => SqlFunc.Subqueryable<SysUser>().Where(it => c.identification_userid == it.Id.ToString() && it.Account == req.identification_account).Any())
//是否违法
.WhereIF(req.is_illegal != null, c => c.is_illegal == req.is_illegal)
//是否判读审核
.WhereIF(req.is_review != null, c => c.is_review == req.is_review)
//审核判读数据权限过滤
//.WhereIF(req.is_Reviewer == 1 && user.Account != Define.SYSTEM_USERNAME, c => SqlFunc.Subqueryable<Sugar_Relevance>().Where(it => it.SecondId == user.Id && it.FirstId == c.identification_userid && it.Key == Define.UserAndUser).Any())
//村名称
.WhereIF(!string.IsNullOrEmpty(req.communityname), c => c.communityname.Contains(req.communityname))
//案件编号
.WhereIF(!string.IsNullOrEmpty(req.case_no), c => c.case_no.Contains(req.case_no))
//案件类型
.WhereIF(!string.IsNullOrEmpty(req.typeid), c => c.typeid == req.typeid || c.sec_typeid == req.typeid || c.thr_typeid == req.typeid)
//地址
.WhereIF(!string.IsNullOrEmpty(req.address), c => c.address.Contains(req.address))
//案件描述
.WhereIF(!string.IsNullOrEmpty(req.case_description), c => c.case_description.Contains(req.case_description))
//排序
.OrderBy(c => c.createtime, OrderByType.Desc)
//分页查询数据
.ToPageList(req.page, req.limit, ref totalNumber);
tableData.data = list;
tableData.count = totalNumber;
return tableData;
}
/// <summary>
/// 加载处理数据列表
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public TableData LoadDealCaseInfoList(QueryDealCaseInfoListReq obj)
{
obj.Init();
var req = obj.MapTo<QueryCaseInfoListReq>();
req.is_intact = 1;
req.is_dealer = 1;
//查询列表数据
var tbData = LoadCaseInfoList(req);
var list = (List<DroneCaseinfo>)tbData.data;
var caseIdList = list.Select(c => c.Id).ToList();
var picList = db.Queryable<DroneFiles>().Where(c => caseIdList.Contains(c.relid) && c.type == 0 && c.tablename == "drone_caseinfo").Select(c => new { caseid = c.relid, c.path }).ToList();
List<DroneCaseInfoExt> result = new List<DroneCaseInfoExt>();
for (int i = 0; i < list.Count; i++)
{
var item = list[i];
var caseModel = item.MapTo<DroneCaseInfoExt>();
caseModel.case_pic_list = picList.Where(c => c.caseid == caseModel.Id).Select(c => c.path).ToList();
result.Add(caseModel);
}
TableData tableData = new TableData();
tableData.count = tbData.count;
tableData.data = result;
return tableData;
}
/// <summary>
/// 案件详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public AddOrUpdateDroneCaseInfoDataBaseReqExt GetCaseInfo(string id)
{
AddOrUpdateDroneCaseInfoDataBaseReqExt res = new AddOrUpdateDroneCaseInfoDataBaseReqExt();
res.Init();
//详情
var info = db.Queryable<DroneCaseinfo>().Where(c => c.Id == id).First();
//文件
var fileList = db.Queryable<DroneFiles>().Where(c => c.relid == id && (c.is_delete == null || c.is_delete == 0) && c.tablename == "drone_caseinfo").ToList();
//图片
var pic_list = fileList.Where(c => c.type == 0).GroupBy(c => c.path).Select(c => c.Key).ToList();
var pics = fileList.Where(c => c.type == 0).ToList();
//视频
var video_list = fileList.Where(c => c.type == 1).GroupBy(c => c.path).Select(c => c.Key).ToList();
var videos = fileList.Where(c => c.type == 1).ToList();
//历史案件
var relationCaseNoList = db.Queryable<DroneCaseinfoRelation>().Where(a => a.caseid == id).Select(a => a.relation_case_no).ToList();
//案件标签
//var tags = db.Queryable<Sugar_Drone_caseinfo_tag>()
// .LeftJoin<Sugar_Category>((t, c) => t.tagid == c.Id)
// .Where((t, c) => t.caseid == id && c.TypeId == "DRONE_CASE_TAG")
// .Select((t, c) => c.Name).ToList();
var tags = db.Queryable<DroneCaseinfoTag>()
.Where(t => t.caseid == id)
.Select(t => t.tagid).ToList();
//图斑的中心点
StringBuilder sql = new StringBuilder();
sql.AppendFormat($"SELECT st_astext(ST_Centroid(geom)) lnglat FROM \"drone_shp_data\" where relid = '{id}' and geom is not null");
var dt = db.Ado.GetDataTable(sql.ToString());
if (dt.Rows.Count > 0)
{
string lngLat = dt.Rows[0]["lnglat"].ToString();
lngLat = lngLat.Replace("POINT(", "").Replace(")", "");
var lngLats = lngLat.Split(" ");
res.lng = Decimal.Round(Decimal.Parse(lngLats[0]), 6);
res.lat = Decimal.Round(Decimal.Parse(lngLats[1]), 6);
}
//通过关联表过滤
//var database = db.Queryable<Sugar_Database_picture, Sugar_Relevance, Sugar_Drone_caseinfo>((p, r, c) => new JoinQueryInfos(
// JoinType.Left, p.Id == r.FirstId,
// JoinType.Left, r.SecondId == c.Id
// )).
// Where((p, r, c) => p.org_id.Contains(info.communityid) && (info.communityid != null || info.communityid != "") && r.SecondId == id && r.Key == Define.DATABASE_CASE)
// .Select((p, r, c) => p.Id).ToArray();
//案件平台及专题
var databaselist = db.Queryable<DroneCaseSubject>().Where(r => r.CaseId == id)?.Select(r => r.DataBaseId).Distinct().ToList();
var subjectkeys = db.Queryable<DroneCaseSubject>().Where(r => r.CaseId == id)?.Select(r => r.SubjectKeys).ToList();
List<string> keys = new List<string>();
foreach (var item in subjectkeys)
{
keys = keys.Concat(item.Split(',').ToList()).ToList();
}
res.info = info;
res.pic_list = pic_list;
res.video_list = video_list;
res.pics = pics;
res.videos = videos;
res.relationCaseNo = relationCaseNoList;
res.tags = tags;
res.databaseid = databaselist.ToArray();
res.subjectkeys = keys.Distinct().ToList();
return res;
}
/// <summary>
/// 删除文件 - 通过路径删除
/// </summary>
/// <param name="paths"></param>
/// <returns></returns>
public string DeleteDroneFilesByPath(string[] paths)
{
if (paths == null)
throw new Exception("paths is null");
int flag = -1;
flag = db.Updateable<DroneFiles>()
.SetColumns(c => new DroneFiles { is_delete = 1 })
.Where(c => paths.Contains(c.path))
.ExecuteCommand();
if (flag >= 0)
return "删除成功";
else
throw new Exception("删除失败");
}
#region 图层
/// <summary>
/// 添加违建图层
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public string AddIllegalBuildeLayer(DroneShpData model)
{
var _user = _auth.GetCurrentUser().User;
model.createtime = DateTime.Now;
model.createuser = _user.Name;
//获取主键
string _gid = commonData.GetMaxKeyVal("gid", "drone_shp_data", 1);
model.gid = int.Parse(_gid);//转为数字类型
//string _gid = model.gid.ToString();
//格式化数据
string _wktModel = commonData.WktDataConvert(model.geom, "MULTIPOLYGON ZM", 4);
model.geom = null;
StringBuilder geomSql = new StringBuilder();
geomSql.AppendFormat($" update drone_shp_data set geom = st_geomfromtext('{_wktModel}',4326) where gid = '{_gid}'");
//批量更新面积
StringBuilder sql = new StringBuilder();
sql.AppendFormat($" update drone_shp_data set area = st_area(st_transform(geom,4527)) where geom is not null and (area is null)");
//使用事务提交数据
var transFlag = db.AsTenant().UseTran(() =>
{
//插入图斑数据
var flag = db.Insertable(model).ExecuteCommand();
//修改图斑数据
var flagGeom = db.Ado.ExecuteCommand(geomSql.ToString());
//修改图斑面积
var flagUpdate = db.Ado.ExecuteCommand(sql.ToString());
});
if (transFlag.IsSuccess)
{
return _gid;
}
else
{
throw new Exception("新增失败");
}
}
/// <summary>
/// 删除图斑
/// </summary>
/// <param name="gid"></param>
/// <returns></returns>
public string DeleteDroneLayers(int gid)
{
var flag = db.Deleteable<DroneShpData>().Where(c => c.gid == gid).ExecuteCommand();
if (flag > 0)
return "删除成功";
else
throw new Exception("删除失败");
}
/// <summary>
/// 获取GeoJson
/// PC获取图层的GeoJson判读页面用
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public JToken GetDroneGeoJson(string id)
{
QueryGeoJsonCommonReq req = new QueryGeoJsonCommonReq();
req.tablename = "drone_shp_data";
req.where = "where relid = '" + id + "'";
req.pageIndex = 1;
req.limit = 2000;
var res = commonData.PgsqlGeoJsonCommon(req);
return res;
}
/// <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 = "";
//查询坐标属于哪个县
StringBuilder sql = new StringBuilder();
sql.AppendFormat($" SELECT xzqmc FROM \"shp_drone_county\" where ST_Within(st_geomfromtext('POINT({lng} {lat})',4326), geom) = 't'");
var countyList = db.SqlQueryable<dynamic>(sql.ToString()).ToList();
if (countyList.Count > 0)
{
//县名称
string countyName = countyList[0].xzqmc;
//根据名称查询组织机构
var countyModel = db.Queryable<SysOrg>().Where(c => c.Name == countyName).First();
//组织机构不为空给县id赋值
if (countyModel != null)
{
countyid = countyModel.Id.ToString();
countyname = countyModel.Name;
}
}
//查询坐标属于哪个镇
sql = new StringBuilder();
sql.AppendFormat($" SELECT xzqmc FROM \"shp_drone_town\" where ST_Within(st_geomfromtext('POINT({lng} {lat})',4326), geom) = 't'");
var streetList = db.SqlQueryable<dynamic>(sql.ToString()).ToList();
if (streetList.Count > 0)
{
//镇名称
string streetName = streetList[0].xzqmc;
//根据名称查询组织机构
var streetModel = db.Queryable<SysOrg>().Where(c => c.Name == streetName).First();
//组织机构不为空给镇id赋值
if (streetModel != null)
{
streetid = streetModel.Id.ToString();
streetname = streetModel.Name;
}
}
if (!string.IsNullOrEmpty(streetid))
{
//查询组织机构属于哪个村
sql = new StringBuilder();
sql.AppendFormat($" SELECT zldwmc FROM \"shp_drone_community\" where ST_Within(st_geomfromtext('POINT({lng} {lat})',4326), geom) = 't'");
var communityidList = db.SqlQueryable<dynamic>(sql.ToString()).ToList();
if (communityidList.Count > 0)
{
//村名称
string communityName = communityidList[0].zldwmc;
//根据村名称和镇id查询组织机构
var communityModel = db.Queryable<SysOrg>().Where(c => SqlFunc.StartsWith(c.Name, communityName) && c.ParentId.ToString() == streetid).First();
//组织机构不为空给村id赋值
if (communityModel != null)
{
communityid = communityModel.Id.ToString();
communityname = communityModel.Name;
}
}
}
//拼接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 复提更新
/// <summary>
/// 复提案件
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public bool ReSubmitCaseInfo(ReSubmitInfo submitInfo)
{
var flag = db.Updateable<DroneCaseinfo>()
.SetColumns(c => new DroneCaseinfo
{
is_intact = 6,
examinecomments = submitInfo.Remark
})
.Where(c => c.case_no == submitInfo.CaseNo)
.ExecuteCommand();
if (flag > 0)
{
return true;
}
else
{
return false;
}
}
#endregion
#region 案件关闭
/// <summary>
/// 案件关闭
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public bool CloseCaseInfo(CloseCaseInfo submitInfo)
{
var flag = db.Updateable<DroneCaseinfo>()
.SetColumns(c => new DroneCaseinfo
{
is_intact = 99,
close_comments = submitInfo.Reason,
close_time = DateTime.Now,
is_closed = 1
})
.Where(c => c.case_no == submitInfo.CaseNo)
.ExecuteCommand();
if (flag > 0)
{
return true;
}
else
{
return false;
}
}
#endregion
}
}