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 { IConfiguration _configuration; private ILogger _logger; private ISqlSugarClient db; private CommonData commonData; public DroneCaseinfoApp( ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, ILogger logger, CommonData commonData) : base(unitWork, repository, auth) { _logger = logger; db = unitWork.Db; this.commonData = commonData; } //#region 案件 /// /// 无人机添加案件 /// /// /// public string AddDroneCaseByDrone(AddDroneCaseByDroneReq req) { var user = _auth.GetCurrentUser().User; DroneCaseinfo model = req.MapTo(); var picList = req.pic_list; //model.Init(user, db); List filesList = new List(); //图片 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().Where(c => c.Id.ToString() == model.countyid).First(); if (countyname != null) { model.countyname = countyname.Name; } //镇 model.streetid = lngLat["streetid"].ToString(); var streetname = db.Queryable().Where(c => c.Id.ToString() == model.streetid).First(); if (streetname != null) { model.streetname = streetname.Name; } //乡社区 model.communityid = lngLat["communityid"].ToString(); var communityname = db.Queryable().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("上报失败"); } /// /// 上报案件 /// /// /// 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().Where(c => c.Id.ToString() == model.countyid).First(); if (countyname != null) { model.countyname = countyname.Name; } //镇 model.streetid = lngLat["streetid"].ToString(); var streetname = db.Queryable().Where(c => c.Id.ToString() == model.streetid).First(); if (streetname != null) { model.streetname = streetname.Name; } //乡社区 model.communityid = lngLat["communityid"].ToString(); var communityname = db.Queryable().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 filesList = new List(); //图片 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 relationList = new List(); foreach (var item in caserelationList) { relationList.Add(new DroneCaseinfoRelation { caseid = model.Id, relation_case_no = item }); } //案件标签 var tags = req.tags; List tagList = new List(); 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("上报失败"); } /// /// 修改完善案件 /// /// /// 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().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().Where(c => c.relid == req.info.Id).ToList(); List filesList = new List(); //图片 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 relationList = new List(); foreach (var item in caserelationList) { relationList.Add(new DroneCaseinfoRelation { caseid = model.Id, relation_case_no = item }); } //案件标签 var tags = req.tags; List tagList = new List(); foreach (var item in tags) { tagList.Add(new DroneCaseinfoTag { caseid = model.Id, tagid = item }); } //专题及平台数据处理 var dataBaseList = db.Queryable().Where(c => req.databaseid.Contains(c.Id)).IgnoreColumns(c => new { c.org_id }).ToList(); List subjectList = new List(); //遍历库 for (int i = 0; i < dataBaseList.Count; i++) { //当前库 var _item = dataBaseList[i]; //专题信息 var subjectlist = db.Queryable().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().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().Where(a => a.caseid == model.Id).ExecuteCommand(); db.Insertable(relationList).ExecuteCommand(); //案件标签 db.Deleteable().Where(a => a.caseid == model.Id).ExecuteCommand(); db.Insertable(tagList).ExecuteCommand(); //案件平台专题 db.Deleteable().Where(a => a.CaseId == model.Id).ExecuteCommand(); db.Insertable(subjectList).ExecuteCommand(); }); if (transFlag.IsSuccess) return model.Id; else throw new Exception("上报失败"); } /// /// 事件判读 /// /// /// 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().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().Where(c => c.relid == req.info.Id).ToList(); List filesList = new List(); //图片 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 relevanceList = new List(); //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 relationList = new List(); foreach (var item in caserelationList) { relationList.Add(new DroneCaseinfoRelation { caseid = model.Id, relation_case_no = item }); } //案件标签 var tags = req.tags; List tagList = new List(); foreach (var item in tags) { tagList.Add(new DroneCaseinfoTag { caseid = model.Id, tagid = item }); } #region 专题及平台数据处理 //专题及平台数据处理 var dataBaseList = db.Queryable().Where(c => req.databaseid.Contains(c.Id)).IgnoreColumns(c => new { c.org_id }).ToList(); List subjectList = new List(); //遍历库 for (int i = 0; i < dataBaseList.Count; i++) { //当前库 var _item = dataBaseList[i]; //专题信息 var subjectlist = db.Queryable().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().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().Where(c => c.SecondId == model.Id && c.Key == Define.DATABASE_CASE).ExecuteCommand(); //后续写 //关联表 //db.Insertable(relevanceList).ExecuteCommand(); //案件关联 db.Deleteable().Where(a => a.caseid == model.Id).ExecuteCommand(); db.Insertable(relationList).ExecuteCommand(); //案件标签 db.Deleteable().Where(a => a.caseid == model.Id).ExecuteCommand(); db.Insertable(tagList).ExecuteCommand(); //案件平台专题 db.Deleteable().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); } } } /// /// 同步数据公共方法 /// /// /// /// /// private string AsynchDroneCaseData(string[] dataBaseIds, string caseId, List subjects) { //查询同步数据 var dataBaseList = db.Queryable().Where(c => dataBaseIds.Contains(c.Id)).IgnoreColumns(c => new { c.org_id }).ToList(); //查询案件详情 var model = db.Queryable().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(sql.ToString()).ToList(); //图片文件数据 var files = db.Queryable().Where(c => c.relid == caseId).ToList(); var fileList = files.Select(c => c.path).ToList(); //本地图片服务器的地址 string pictureFilesApi = _configuration.GetSection("PictureFilesApi").Value; //关联案件 var relationList = db.Queryable().Where(a => a.caseid == caseId).ToList(); //案件标签 var tagList = db.Queryable().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().Where(r => subjects.Contains(r.Key) && r.PId == _item.Id).ToList(); var subjectnames = ""; if (subjects.Count > 0 && subjectlist.Count > 0) { subjectnames = db.Queryable().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>(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>(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 GetSubjectInfos() //{ // using (var db = SqlSugarOper.GetInstance(_configuration)) // { // var list = db.Queryable().Select(r => new SubjectRes // { // Id = r.Id, // Name = r.database_name, // Children = SqlFunc.Subqueryable().Where(a => a.PId == r.Id).ToList(a => new ChildSubject // { // Key = a.Key, // Name = a.Name // }) // }).ToList(); // return list; // } //} /// /// 同步航飞库数据 /// /// /// /// 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().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().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().Where(c => c.relid == model.Id).ExecuteCommand(); db.Insertable(files).ExecuteCommand(); //关联案件 //先删除后新增 db.Deleteable().Where(c => c.caseid == model.Id).ExecuteCommand(); db.Insertable(relations).ExecuteCommand(); //案件标签 //先删除后新增 db.Deleteable().Where(a => a.caseid == model.Id).ExecuteCommand(); db.Insertable(tags).ExecuteCommand(); } }); if (transFlag.IsSuccess) return "同步成功"; else throw new Exception("同步失败"); } /// /// 关闭案件(判读用) /// /// /// public string CloseDroneCaseInfo(string id) { var user = _auth.GetCurrentUser().User; var flag = db.Updateable() .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("关闭失败"); } /// /// 查询案件列表 /// /// /// 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 { 1, 99, 6 }; var list = db.Queryable().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().Where(it => it.SecondId == c.communityid && it.FirstId == user.Id && it.Key == Define.USERORG).Any() // || SqlFunc.Subqueryable().Where(it => it.SecondId == c.streetid && it.FirstId == user.Id && it.Key == Define.USERORG).Any() // || SqlFunc.Subqueryable().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().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().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; } /// /// 加载处理数据列表 /// /// /// public TableData LoadDealCaseInfoList(QueryDealCaseInfoListReq obj) { obj.Init(); var req = obj.MapTo(); req.is_intact = 1; req.is_dealer = 1; //查询列表数据 var tbData = LoadCaseInfoList(req); var list = (List)tbData.data; var caseIdList = list.Select(c => c.Id).ToList(); var picList = db.Queryable().Where(c => caseIdList.Contains(c.relid) && c.type == 0 && c.tablename == "drone_caseinfo").Select(c => new { caseid = c.relid, c.path }).ToList(); List result = new List(); for (int i = 0; i < list.Count; i++) { var item = list[i]; var caseModel = item.MapTo(); 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; } /// /// 案件详情 /// /// /// public AddOrUpdateDroneCaseInfoDataBaseReqExt GetCaseInfo(string id) { AddOrUpdateDroneCaseInfoDataBaseReqExt res = new AddOrUpdateDroneCaseInfoDataBaseReqExt(); res.Init(); //详情 var info = db.Queryable().Where(c => c.Id == id).First(); //文件 var fileList = db.Queryable().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().Where(a => a.caseid == id).Select(a => a.relation_case_no).ToList(); //案件标签 //var tags = db.Queryable() // .LeftJoin((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() .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((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().Where(r => r.CaseId == id)?.Select(r => r.DataBaseId).Distinct().ToList(); var subjectkeys = db.Queryable().Where(r => r.CaseId == id)?.Select(r => r.SubjectKeys).ToList(); List keys = new List(); 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; } /// /// 删除文件 - 通过路径删除 /// /// /// public string DeleteDroneFilesByPath(string[] paths) { if (paths == null) throw new Exception("paths is null"); int flag = -1; flag = db.Updateable() .SetColumns(c => new DroneFiles { is_delete = 1 }) .Where(c => paths.Contains(c.path)) .ExecuteCommand(); if (flag >= 0) return "删除成功"; else throw new Exception("删除失败"); } #region 图层 /// /// 添加违建图层 /// /// /// 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("新增失败"); } } /// /// 删除图斑 /// /// /// public string DeleteDroneLayers(int gid) { var flag = db.Deleteable().Where(c => c.gid == gid).ExecuteCommand(); if (flag > 0) return "删除成功"; else throw new Exception("删除失败"); } /// /// 获取GeoJson /// PC获取图层的GeoJson(判读页面用) /// /// /// 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; } /// /// 根据经纬度获取组织机构 /// /// /// /// 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(sql.ToString()).ToList(); if (countyList.Count > 0) { //县名称 string countyName = countyList[0].xzqmc; //根据名称查询组织机构 var countyModel = db.Queryable().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(sql.ToString()).ToList(); if (streetList.Count > 0) { //镇名称 string streetName = streetList[0].xzqmc; //根据名称查询组织机构 var streetModel = db.Queryable().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(sql.ToString()).ToList(); if (communityidList.Count > 0) { //村名称 string communityName = communityidList[0].zldwmc; //根据村名称和镇id查询组织机构 var communityModel = db.Queryable().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 复提更新 /// /// 复提案件 /// /// /// public bool ReSubmitCaseInfo(ReSubmitInfo submitInfo) { var flag = db.Updateable() .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 案件关闭 /// /// 案件关闭 /// /// /// public bool CloseCaseInfo(CloseCaseInfo submitInfo) { var flag = db.Updateable() .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 } }