using Dm.Config; using Flurl.Http; using Infrastructure; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Npgsql.Replication.PgOutput.Messages; using NUnit.Framework; using OpenAuth.App.Base; using OpenAuth.App.BasicQueryService; using OpenAuth.App.Request; using OpenAuth.App.Response; using OpenAuth.App.Interface; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SixLabors.ImageSharp; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using OpenAuth.App.FormScheme.FormHelpers; using Infrastructure.Helpers; using NetTaste; using NUnit.Framework.Interfaces; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.FormModule; using Org.BouncyCastle.Ocsp; namespace OpenAuth.App { public partial class DroneCaseinfoApp : SqlSugarBaseApp { private IConfiguration _configuration; private DroneCaseInfoManager droneCaseInfoManager; private WFProcessApp _wfProcessApp; ISqlSugarClient client; CommonDataManager _commonDataManager; //处理状态 List handleStatusList = new List() { new QueryHandleStatusListReq(){ id = 0,is_examine = 0,name="待核查"}, new QueryHandleStatusListReq(){ id = 0,is_examine = 1,name="待办理"}, new QueryHandleStatusListReq(){ id = 1,name="待审核"}, new QueryHandleStatusListReq(){ id = 2,name="已归档"}, }; /* * 根据不同的标签来区分文件的不同分类 * drone_files表中tag字段区分 */ //整改后照片标签 private const string afterPicTag = "AfterPicTag"; //合法文件标签 private const string EvidenceFileTag = "EvidenceFileTag"; //处罚通知书 private const string punishPicTag = "punishPicTag"; //交款通知书 private const string paymentPicTag = "paymentPicTag"; //政府同意完善手续证明 private const string agreeCheckoutPicTag = "agreeCheckoutPicTag"; //办理手续 private const string checkoutPicTag = "checkoutPicTag"; //勘测定界图 private const string boundaryPicTag = "boundaryPicTag"; public DroneCaseinfoApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, IConfiguration configuration, DroneCaseInfoManager droneCaseInfoManager, ISqlSugarClient client, WFProcessApp wFProcessApp, CommonDataManager commonDataManager) : base(unitWork, repository, auth) { _configuration = configuration; this.droneCaseInfoManager = droneCaseInfoManager; this.client = client; _wfProcessApp = wFProcessApp; _commonDataManager = commonDataManager; } #region 案件 /// /// 收藏案件 /// /// /// public async Task> AddCaseFavorite(DroneCaseFavorite model) { var _count = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.CaseNo == model.CaseNo && c.FavoriteUserId == model.FavoriteUserId).CountAsync(); if (_count > 0) return new Response { Code = 500, Result = false, Message = "图斑已收藏" }; var flag = await base.Repository.ChangeRepository>().InsertAsync(model); if (flag) return new Response { Result = true, Message = "收藏成功" }; else return new Response { Code = 500, Result = false, Message = "收藏失败" }; } /// /// 获取收藏的案件信息 /// /// /// public async Task>>> LoadFavoriteCases(PageReq req) { RefAsync totalCount = 0; var user = _auth.GetCurrentUser().User; var listFavorites = await base.Repository.ChangeRepository>().AsQueryable().Where(p => p.FavoriteUserId.Equals(user.Id.ToString())).ToListAsync(); List caseNoList = new List(); foreach (var item in listFavorites) { caseNoList.Add(item.CaseNo); } var caseList = await base.Repository.AsQueryable().Where(p => caseNoList.Contains(p.case_no)) .ToPageListAsync(req.page, req.limit, totalCount); return new Response>>() { Result = new PageInfo> { Items = caseList, Total = totalCount }, Message = "获取数据成功" }; } /// /// 获取收藏列表 /// /// public async Task> FavoriteCaseList(string uid) { var favoriteList = await base.Repository.ChangeRepository>().AsQueryable().Where(p => p.FavoriteUserId == uid).Select(c => new { id = c.Id, c.CaseNo }).ToListAsync(); return new Response() { Result = favoriteList, Message = "获取数据成功" }; } /// /// 批量删除收藏的案件 /// /// /// public async Task> DeleteFavoriteCases(string[] ids) { var flag = await base.Repository.ChangeRepository>().DeleteByIdsAsync(ids); if (flag) return new Response { Result = true, Message = "删除成功" }; else return new Response { Result = false, Code = 500, Message = "删除失败" }; } /// /// 删除收藏的案件 /// /// /// public async Task> DeleteFavoriteCase(string id) { var flag = await base.Repository.ChangeRepository>().DeleteByIdAsync(id); if (flag) return new Response { Result = true, Message = "删除成功" }; else return new Response { Code = 500, Result = false, Message = "删除失败" }; } /// /// 添加操作案件日志 /// /// /// public void AddDroneCaseLog(DroneCaseOperationLog model) { model.Id = SqlSugar.SnowFlakeSingle.instance.getID().ToString(); model.createtime = DateTime.Now; client.Insertable(model).ExecuteCommand(); } /// /// 获取案件记录 /// /// /// public async Task>> LoadDroneCaseLog(string caseid) { List logTypeList = new List { "VerifyCaseInfoSuccess", // 案件审核 "DrawbackCase", // 案件退回 "RecallCase", // 案件撤回 "AddDroneCaseDeal", // 案件处理 "UpdateDroneCaseDeal", // 案件处理 "VerificatCase", // 案件核销 }; var list = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.caseid == caseid && logTypeList.Contains(c.description)).OrderBy(c => c.createtime, OrderByType.Asc).IgnoreColumns(c => new { c.request_data }).ToListAsync(); return new Response> { Result = list, Message = "获取数据成功" }; } /// /// 无人机添加案件 /// /// /// public async Task> BackhaulDroneCaseByDrone(AddDroneCaseByDroneReq req) { var url = _configuration.GetSection("PictureFilesApi").Value; var libUrl = _configuration.GetSection("DroneEnforcementLibApi").Value; var user = await base.Repository.ChangeRepository>().GetFirstAsync(r => r.Account == req.account); Sugar_Drone_caseinfo model = req.MapTo(); var picList = req.pic_list == null ? new List() : req.pic_list.Select(a => url.Replace("\\", "/") + a).ToList(); var result = await (libUrl + "api/DroneCaseinfo/BackhaulDroneCaseByDrone") .PostJsonAsync(new { remark = req.remark, lng = req.lng, lat = req.lat, pic_list = picList, userid = user.Id, username = user.Name }) .ReceiveString(); return new Response { Result = result, Message = result, }; } /// /// 上报案件 /// /// /// public async Task> AddDroneCaseInfo(AddOrUpdateDroneCaseInfoReq req) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //案件实体 var model = req.info; model.Init(user, db); 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 transFlag = await db.UseTranAsync(async () => { //新增案件数据 await db.Insertable(model).ExecuteCommandAsync(); //新增文件数据 await db.Insertable(filesList).ExecuteCommandAsync(); }); AddDroneCaseLog(new DroneCaseOperationLog { request_data = req.ToJson(), description = "AddDroneCaseInfo", caseid = model.Id, createuserid = user.Id.ToString(), createusername = user.Name }); //发送websocket消息 //SendWebSocketMessage(); if (transFlag.IsSuccess) return new Response { Result = model.Id, Message = "上报成功" }; else return new Response { Code = 500, Message = "上报失败" }; } } /// /// 修改完善案件 /// /// /// public async Task> UpdateDroneCaseInfo(AddOrUpdateDroneCaseInfoReq req) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //案件实体 var model = req.info; model.Update(user, db); //查询面积 var areaDecimal = await db.Queryable().Where(c => c.relid == model.Id).SumAsync(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 = await db.Queryable().Where(c => c.relid == req.info.Id).ToListAsync(); 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 transFlag = await db.UseTranAsync(async () => { //新增案件数据 await db.Updateable(model).IgnoreColumns(c => new { c.deal_time }).ExecuteCommandAsync(); //新增文件数据 await db.Insertable(filesList).ExecuteCommandAsync(); }); AddDroneCaseLog(new DroneCaseOperationLog { request_data = req.ToJson(), description = "UpdateDroneCaseInfo", caseid = model.Id, createuserid = user.Id.ToString(), createusername = user.Name }); if (transFlag.IsSuccess) return new Response { Result = model.Id, Message = "上报成功" }; else return new Response { Code = 500, Message = "上报失败" }; } } /// /// 事件判读 /// /// /// public async Task> UpdateDroneCaseInfoIntact(AddOrUpdateDroneCaseInfoReq req) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //案件实体 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; //查询面积 var areaDecimal = await db.Queryable().Where(c => c.relid == model.Id).SumAsync(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 = await db.Queryable().Where(c => c.relid == req.info.Id).ToListAsync(); 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 transFlag = await db.UseTranAsync(async () => { //新增案件数据 await db.Updateable(model).IgnoreColumns(c => new { c.deal_time }).ExecuteCommandAsync(); //新增文件数据 await db.Insertable(filesList).ExecuteCommandAsync(); }); AddDroneCaseLog(new DroneCaseOperationLog { request_data = req.ToJson(), description = "UpdateDroneCaseInfoIntact", caseid = model.Id, createuserid = user.Id.ToString(), createusername = user.Name }); if (transFlag.IsSuccess) return new Response { Result = model.Id, Message = "上报成功" }; else return new Response { Code = 500, Message = "上报失败" }; } } /// /// 分配案件 /// /// /// public async Task> DispenseDroneCaseData(AddOrUpdateDispenseDroneCaseDataReq req) { //当前用户 var user = _auth.GetCurrentUser().User; // 用户和案件进行绑定 // 用于执法人员 查询分配给自己的案件 using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var key = Define.USERDRONECASE; List list = new List(); foreach (var item in req.userid) { DroneRelevance model = new DroneRelevance(); model.Id = Guid.NewGuid().ToString(); model.Description = ""; model.Key = key; model.Status = 0; model.OperateTime = DateTime.Now; model.OperatorId = ""; model.FirstId = item; model.SecondId = req.caseid; model.ThirdId = ""; model.ExtendInfo = ""; list.Add(model); } //使用事务提交数据 var transFlag = await db.UseTranAsync(async () => { //先删除当前案件已分配的数据 await db.Deleteable().Where(c => c.Key == key && c.SecondId == req.caseid).ExecuteCommandAsync(); //添加新的分配的数据 await db.Insertable(list).ExecuteCommandAsync(); //记录案件的分配人 await db.Updateable().SetColumns(c => new Sugar_Drone_caseinfo() { dispense_time = DateTime.Now, dispense_userid = user.Id.ToString(), dispense_username = user.Name, is_dispense = 1 }).Where(c => c.Id == req.caseid).ExecuteCommandAsync(); }); if (transFlag.IsSuccess) return new Response { Result = true, Message = "分配成功" }; else return new Response { Code = 500, Result = false, Message = "分配失败" }; } } /// /// 获取案件绑定关联关系 /// /// /// public async Task> GetDispenseDroneCaseData(string id) { var result = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.SecondId == id && c.Key == Define.USERDRONECASE).Select(c => c.FirstId).ToListAsync(); return new Response { Result = result.ToArray(), Message = "分配成功" }; } /// /// 关闭案件 /// /// /// public async Task> CloseDroneCaseInfo(string id) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var flag = await db.Updateable() .SetColumns(c => new Sugar_Drone_caseinfo { is_intact = 99, close_time = DateTime.Now, close_user = user.Name, close_userid = user.Id.ToString() }) .Where(c => c.Id == id) .ExecuteCommandAsync(); if (flag > 0) return new Response { Result = true, Message = "关闭成功" }; else return new Response { Code = 500, Result = false, Message = "关闭失败" }; } } /// /// 审核通过 /// /// /// public async Task> VerifyCaseInfoSuccess(string id) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var flag = await db.Updateable() .SetColumns(c => new Sugar_Drone_caseinfo() { handle_status_id = 2, handle_status_name = "已办结", verifyuserid = user.Id.ToString(), verifyuser = user.Name, verifytime = DateTime.Now }) .Where(c => c.Id == id) .ExecuteCommandAsync(); AddDroneCaseLog(new DroneCaseOperationLog { request_data = id, description = "VerifyCaseInfoSuccess", caseid = id, createuserid = user.Id.ToString(), createusername = user.Name }); if (flag > 0) return new Response { Result = true, Message = "审核成功" }; else return new Response { Code = 500, Result = false, Message = "审核失败" }; } } /// /// 审核改进 /// /// /// public async Task> VerifyCaseInfoFailed(AddOrUpdateVerifyCaseSuccessReq req) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var caseInfo = await db.Queryable().Where(c => c.Id == req.id).FirstAsync(); //处理状态名称 string handle_status_name = handleStatusList.Where(c => c.id == 0 && c.is_examine == 1).FirstOrDefault().name; Sugar_Drone_message message = new Sugar_Drone_message(); message.Init(user); //消息通知 message.msg_type = 1; message.msg_title = $"图斑编号:{caseInfo.case_no} 需要改进处理"; message.msg_content = $"图斑编号:{caseInfo.case_no} 需要改进处理。备注:{req.remark}"; message.case_no = caseInfo.case_no; //案件编号 message.caseid = caseInfo.Id; //案件id Sugar_Drone_message_relevance relevance = new Sugar_Drone_message_relevance(); relevance.Init(user); relevance.userid = caseInfo.deal_userid; relevance.username = caseInfo.deal_username; relevance.messageid = message.Id; DroneImproveRecord record = new DroneImproveRecord(); record.Id = Guid.NewGuid().ToString(); record.reason = req.remark; record.caseid = caseInfo.Id; record.deal_userid = caseInfo.deal_userid; record.receiver = caseInfo.deal_username; record.createtime = DateTime.Now; record.createuser = user.Id.ToString(); //使用事务提交数据 var transFlag = await db.UseTranAsync(async () => { //更改案件处理状态 var flag = await db.Updateable().SetColumns(c => new Sugar_Drone_caseinfo() { handle_status_id = 0, //改成未办理0 handle_status_name = "退回未办理",//未办理 is_improve = 1, //是否改进 improve_reason = req.remark //改进原因 }).Where(c => c.Id == req.id).ExecuteCommandAsync(); //插入改进记录 var recordFlag = await db.Insertable(record).ExecuteCommandAsync(); //插入通知和关联 var flag1 = await db.Insertable(message).ExecuteCommandAsync(); var flag2 = await db.Insertable(relevance).ExecuteCommandAsync(); }); AddDroneCaseLog(new DroneCaseOperationLog { request_data = req.ToJson(), description = "VerifyCaseInfoFailed", caseid = req.id, createuserid = user.Id.ToString(), createusername = user.Name }); if (transFlag.IsSuccess) return new Response { Result = true, Message = "成功" }; else return new Response { Code = 500, Result = false, Message = "失败" }; } } /// /// 上报事件 /// /// /// public async Task> AddCaseEvent(AddOrUpdateDroneCaseEventReq req) { var _user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { Sugar_Drone_caseinfo model = new Sugar_Drone_caseinfo(); model.Id = Guid.NewGuid().ToString(); model.lat = req.lat; model.lng = req.lng; model.remark = req.remark; var picList = req.pic_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); } //使用事务提交数据 var transFlag = await db.UseTranAsync(async () => { //新增案件数据 await db.Insertable(model).InsertColumns(c => new { c.Id, c.lat, c.lng, c.remark }).ExecuteCommandAsync(); //新增文件数据 await db.Insertable(filesList).ExecuteCommandAsync(); }); AddDroneCaseLog(new DroneCaseOperationLog { request_data = req.ToJson(), description = "AddCaseEvent", caseid = model.Id, createuserid = _user.Id.ToString(), createusername = _user.Name }); if (transFlag.IsSuccess) return new Response { Result = model.Id, Message = "上报成功" }; else return new Response { Code = 500, Message = "上报失败" }; } } /// /// 上报案件-分配给自己临时接口 /// /// /// public async Task> AddTemporaryDroneCaseInfo(AddOrUpdateDroneCaseInfoReq req) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //案件实体 var model = req.info; model.Init(user, db); 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 transFlag = await db.UseTranAsync(async () => { //新增案件数据 await db.Insertable(model).ExecuteCommandAsync(); //新增文件数据 await db.Insertable(filesList).ExecuteCommandAsync(); }); if (transFlag.IsSuccess) return new Response { Result = req.info.Id, Message = "上报成功" }; else return new Response { Code = 500, Message = "上报失败" }; } } #endregion #region 案件列表 /// /// 查询条件组装 /// /// /// /// /// /// private ISugarQueryable QueryCaseInfoList(SqlSugarClient db, QueryCaseInfoListReq req, SysUser user, int? is_order = 1, List roles = null) { DateTime? threeTime = DateTime.Now.AddDays(-3); DateTime? sevenTime = DateTime.Now.AddDays(-7); //查询用户角色绑定的流程有哪些 var flowList = new List(); var flowSorts = new List(); var roleNameList = new List(); //查询部门及下级部门 var orgid = db.Queryable().ToChildList(a => a.ParentId, req.countyid).Select(a => a.Id.ToString()).ToList(); if (roles != null && req.is_verify_filter != null) { flowList = db.Queryable().Where(c => roles.Contains(c.SecondId) && c.Key == Define.FLOW_ROLE).Select(c => c.FirstId).ToList(); //查询用户绑定的流程Sort flowSorts = db.Queryable().Where(c => flowList.Contains(c.Id) && c.status == 0 && c.instance_name == "CaseVerify").Select(c => c.sort).ToList(); roleNameList = db.Queryable().Where(c => roles.Contains(c.Id.ToString())).Select(c => c.Name).ToList(); } //待优化 var casetype = db.Queryable() .LeftJoin((a, b) => a.FirstId == b.FirstId) .LeftJoin((a, b, c) => b.SecondId == c.RoleId.ToString()) .Where((a, b, c) => c.UserId == user.Id && a.Key == Define.TOPIC_CASETYPE && b.Key == Define.TOPIC_ROLE) .Select(a => a.SecondId).Distinct().ToList(); var query = db.Queryable().Where(c => c.is_delete == 0 || c.is_delete == 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 == 0, c => c.is_intact == null || c.is_intact == 0) //上报人 .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.OrgId.ToString() == c.communityid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == c.streetid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == c.countyid && it.UserId == user.Id).Any() || c.createuser == user.Id.ToString()) //执行人过滤:相当于 执法人员用 .WhereIF(req.dispense_dealer == 1 && user.Account != Define.SYSTEM_USERNAME, c => SqlFunc.Subqueryable().Where(it => it.SecondId == c.Id && it.Key == Define.USERDRONECASE && it.FirstId == user.Id.ToString()).Any()) ////专题权限过滤 //.WhereIF(req.is_dealer == 1 && user.Account != Define.SYSTEM_USERNAME, c => (SqlFunc.Subqueryable() // .Where(dr2 => SqlFunc.Subqueryable() // .Where(dr1 => SqlFunc.Subqueryable() // .Where(sur => sur.UserId == user.Id) // .Select(sur => sur.RoleId.ToString()) // .Contains(dr1.SecondId) && dr1.Key == Define.TOPIC_ROLE).Select(dr1 => dr1.FirstId) // .Contains(dr2.FirstId) && dr2.Key == Define.TOPIC_CASETYPE).Select(dr2 => dr2.SecondId)).Contains(c.typeid)) //专题权限过滤 .WhereIF(req.is_dealer == 1 && user.Account != Define.SYSTEM_USERNAME, c => casetype.Contains(c.typeid)) //分发状态:乡镇管理员用来查是否分发的 .WhereIF(req.is_dispense == 0, c => c.is_dispense == null || c.is_dispense == 0) .WhereIF(req.is_dispense == 1, c => c.is_dispense == 1) //处理状态:未办理、办理中、已办结 .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 => orgid.Contains(c.countyid) || orgid.Contains(c.streetid) || orgid.Contains(c.communityid)) ////镇id //.WhereIF(!string.IsNullOrEmpty(req.countyid), c => orgid.Contains(c.streetid)) ////村id //.WhereIF(!string.IsNullOrEmpty(req.countyid), c => orgid.Contains(c.communityid)) //判读人id .WhereIF(!string.IsNullOrEmpty(req.identification_userid), c => c.identification_userid == req.identification_userid) //判读人 .WhereIF(!string.IsNullOrEmpty(req.identification_user), c => c.identification_user.Contains(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(!string.IsNullOrEmpty(req.verify_user), c => c.verifyuser.Contains(req.verify_user)) //是否违法 .WhereIF(req.is_illegal != null, c => c.is_illegal == req.is_illegal) //是否核销 .WhereIF(req.is_verification == 1, c => c.is_verification == req.is_verification) .WhereIF(req.is_verification == 0, c => c.is_verification == null || c.is_verification == 0) //是否退回 .WhereIF(req.is_drawback == 0, c => c.is_drawback == null || c.is_drawback == 0) .WhereIF(req.is_drawback == 1, c => c.is_drawback == 1) //是否根据退回给谁过滤 .WhereIF(req.is_back_to_userid == 1, c => c.back_to_userid == user.Id.ToString()) //是否核查过滤 .WhereIF(req.is_examine == 0, c => c.is_examine == null || c.is_examine == 0) .WhereIF(req.is_examine == 1, c => c.is_examine == 1) //处理措施 .WhereIF(!string.IsNullOrEmpty(req.measure_name), c => c.measure_name == req.measure_name) //处理措施 .WhereIF(req.measure_name_type == 0, c => c.measure_name == "拟拆除") .WhereIF(req.measure_name_type == 1, c => c.measure_name == "查处") .WhereIF(req.measure_name_type == 2, c => c.measure_name == "拟完善手续") //工作区过滤 .WhereIF(!string.IsNullOrEmpty(req.work_area_name), c => SqlFunc.Subqueryable().Where(it => it.Id.ToString() == c.communityid && it.CustomCode == req.work_area_name).Any()) //审核权限过滤 .WhereIF(req.is_verify_filter == 1, c => flowSorts.Contains(c.verifystatus) && roleNameList.Contains("案件审核")) .WhereIF(req.is_verify_filter == 0, c => !flowSorts.Contains(c.verifystatus)) /* * 统计相关用到的过滤条件 */ //超期时间标识 .WhereIF(req.out_time_flag == 1, c => c.identification_time >= threeTime) //1-3天 .WhereIF(req.out_time_flag == 2, c => c.identification_time < threeTime && c.identification_time > sevenTime) //3-7天 .WhereIF(req.out_time_flag == 3, c => c.identification_time < sevenTime) //7天以上 .WhereIF(req.out_time_flag == 4, c => c.identification_time > DateTime.Now.AddDays(-30) && c.identification_time < DateTime.Now.AddDays(-7)) //30天内 .WhereIF(req.out_time_flag == 5, c => c.identification_time < DateTime.Now.AddDays(-30)) //30天以上 //是否处理 .WhereIF(req.is_deal == 1, c => c.handle_status_id != 0 || (c.handle_status_id == 0 && c.is_examine == 1)) //是否整改完成 .WhereIF(req.is_complete == 0, c => c.handle_status_id != 2) //24小时未核查 .WhereIF(req.is_not_deal_hour24 == 1, c => c.handle_status_id == 0 && (c.is_examine == null || c.is_examine == 0) && c.identification_time < DateTime.Now.AddDays(-1)) //村名称 .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) //地址 .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)); if (!string.IsNullOrEmpty(req.work_area_name)) { var orgList = db.Queryable().Where(c => c.CustomCode == req.work_area_name).Select(c => c.Id).ToList(); } //标签检索 if (!string.IsNullOrEmpty(req.tagids)) { var tags = req.tagids.Trim().Split(",").ToList(); var ids = db.Queryable().Where(a => req.tagids.Contains(a.tagid)).Select(a => a.caseid).ToList(); query = query.Where(c => ids.Contains(c.Id)); } //排序 if (is_order == 1) { if (req.is_intact == 1 && req.handle_status_id == 0) query = query.OrderBy(c => c.identification_time, OrderByType.Desc); else if (req.is_intact == 1 && req.handle_status_id == 1) query = query.OrderBy(c => c.deal_time, OrderByType.Desc); else if (req.is_intact == 1 && req.handle_status_id == 2) query = query.OrderBy(c => c.verifytime, OrderByType.Desc); else query = query.OrderBy(c => c.createtime, OrderByType.Desc); } return query; } private ISugarQueryable QueryCaseInfoSingleList(SqlSugarClient db, QueryCaseInfoListReq req, SysUser user, int? is_order = 1, List roles = null) { DateTime? threeTime = DateTime.Now.AddDays(-3); DateTime? sevenTime = DateTime.Now.AddDays(-7); //查询用户角色绑定的流程有哪些 var flowList = new List(); var flowSorts = new List(); var roleNameList = new List(); //查询部门及下级部门 var orgid = db.Queryable().ToChildList(a => a.ParentId, req.countyid).Select(a => a.Id.ToString()).ToList(); if (roles != null && req.is_verify_filter != null) { flowList = db.Queryable().Where(c => roles.Contains(c.SecondId) && c.Key == Define.FLOW_ROLE).Select(c => c.FirstId).ToList(); //查询用户绑定的流程Sort flowSorts = db.Queryable().Where(c => flowList.Contains(c.Id) && c.status == 0 && c.instance_name == "CaseVerify").Select(c => c.sort).ToList(); roleNameList = db.Queryable().Where(c => roles.Contains(c.Id.ToString())).Select(c => c.Name).ToList(); } //待优化 var casetype = db.Queryable() .LeftJoin((a, b) => a.FirstId == b.FirstId) .LeftJoin((a, b, c) => b.SecondId == c.RoleId.ToString()) .Where((a, b, c) => c.UserId == user.Id && a.Key == Define.TOPIC_CASETYPE && b.Key == Define.TOPIC_ROLE) .Select(a => a.SecondId).Distinct().ToList(); var query = db.Queryable().Where(c => c.is_delete == 0 || c.is_delete == 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 == 0, c => c.is_intact == null || c.is_intact == 0) //上报人 .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.OrgId.ToString() == c.communityid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == c.streetid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == c.countyid && it.UserId == user.Id).Any() || c.createuser == user.Id.ToString()) //执行人过滤:相当于 执法人员用 .WhereIF(req.dispense_dealer == 1 && user.Account != Define.SYSTEM_USERNAME, c => SqlFunc.Subqueryable().Where(it => it.SecondId == c.Id && it.Key == Define.USERDRONECASE && it.FirstId == user.Id.ToString()).Any()) ////专题权限过滤 //.WhereIF(req.is_dealer == 1 && user.Account != Define.SYSTEM_USERNAME, c => (SqlFunc.Subqueryable() // .Where(dr2 => SqlFunc.Subqueryable() // .Where(dr1 => SqlFunc.Subqueryable() // .Where(sur => sur.UserId == user.Id) // .Select(sur => sur.RoleId.ToString()) // .Contains(dr1.SecondId) && dr1.Key == Define.TOPIC_ROLE).Select(dr1 => dr1.FirstId) // .Contains(dr2.FirstId) && dr2.Key == Define.TOPIC_CASETYPE).Select(dr2 => dr2.SecondId)).Contains(c.typeid)) //专题权限过滤 .WhereIF(req.is_dealer == 1 && user.Account != Define.SYSTEM_USERNAME, c => casetype.Contains(c.typeid)) //分发状态:乡镇管理员用来查是否分发的 .WhereIF(req.is_dispense == 0, c => c.is_dispense == null || c.is_dispense == 0) .WhereIF(req.is_dispense == 1, c => c.is_dispense == 1) //处理状态:未办理、办理中、已办结 .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 => orgid.Contains(c.countyid) || orgid.Contains(c.streetid) || orgid.Contains(c.communityid)) ////镇id //.WhereIF(!string.IsNullOrEmpty(req.countyid), c => orgid.Contains(c.streetid)) ////村id //.WhereIF(!string.IsNullOrEmpty(req.countyid), c => orgid.Contains(c.communityid)) //判读人id .WhereIF(!string.IsNullOrEmpty(req.identification_userid), c => c.identification_userid == req.identification_userid) //判读人 .WhereIF(!string.IsNullOrEmpty(req.identification_user), c => c.identification_user.Contains(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(!string.IsNullOrEmpty(req.verify_user), c => c.verifyuser.Contains(req.verify_user)) //是否违法 .WhereIF(req.is_illegal != null, c => c.is_illegal == req.is_illegal) //是否核销 //.WhereIF(req.is_verification == 1, c => c.is_verification == req.is_verification) //.WhereIF(req.is_verification == 0, c => c.is_verification == null || c.is_verification == 0) //是否退回 .WhereIF(req.is_drawback == 0, c => c.is_drawback == null || c.is_drawback == 0) .WhereIF(req.is_drawback == 1, c => c.is_drawback == 1) //是否根据退回给谁过滤 //.WhereIF(req.is_back_to_userid == 1, c => c.back_to_userid == user.Id.ToString()) //是否核查过滤 //.WhereIF(req.is_examine == 0, c => c.is_examine == null || c.is_examine == 0) //.WhereIF(req.is_examine == 1, c => c.is_examine == 1) //处理措施 .WhereIF(!string.IsNullOrEmpty(req.measure_name), c => c.measure_name == req.measure_name) //处理措施 .WhereIF(req.measure_name_type == 0, c => c.measure_name == "拟拆除") .WhereIF(req.measure_name_type == 1, c => c.measure_name == "查处") .WhereIF(req.measure_name_type == 2, c => c.measure_name == "拟完善手续") //工作区过滤 .WhereIF(!string.IsNullOrEmpty(req.work_area_name), c => SqlFunc.Subqueryable().Where(it => it.Id.ToString() == c.communityid && it.CustomCode == req.work_area_name).Any()) //审核权限过滤 .WhereIF(req.is_verify_filter == 1, c => flowSorts.Contains(c.verifystatus) && roleNameList.Contains("案件审核")) .WhereIF(req.is_verify_filter == 0, c => !flowSorts.Contains(c.verifystatus)) /* * 统计相关用到的过滤条件 */ //超期时间标识 .WhereIF(req.out_time_flag == 1, c => c.identification_time >= threeTime) //1-3天 .WhereIF(req.out_time_flag == 2, c => c.identification_time < threeTime && c.identification_time > sevenTime) //3-7天 .WhereIF(req.out_time_flag == 3, c => c.identification_time < sevenTime) //7天以上 .WhereIF(req.out_time_flag == 4, c => c.identification_time > DateTime.Now.AddDays(-30) && c.identification_time < DateTime.Now.AddDays(-7)) //30天内 .WhereIF(req.out_time_flag == 5, c => c.identification_time < DateTime.Now.AddDays(-30)) //30天以上 //是否处理 //.WhereIF(req.is_deal == 1, c => c.handle_status_id != 0 || (c.handle_status_id == 0 && c.is_examine == 1)) //是否整改完成 .WhereIF(req.is_complete == 0, c => c.handle_status_id != 2) //24小时未核查 // .WhereIF(req.is_not_deal_hour24 == 1, c => c.handle_status_id == 0 && (c.is_examine == null || c.is_examine == 0) && c.identification_time < DateTime.Now.AddDays(-1)) //村名称 .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) //地址 .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)); if (!string.IsNullOrEmpty(req.work_area_name)) { var orgList = db.Queryable().Where(c => c.CustomCode == req.work_area_name).Select(c => c.Id).ToList(); } //标签检索 if (!string.IsNullOrEmpty(req.tagids)) { var tags = req.tagids.Trim().Split(",").ToList(); var ids = db.Queryable().Where(a => req.tagids.Contains(a.tagid)).Select(a => a.caseid).ToList(); query = query.Where(c => ids.Contains(c.Id)); } //排序 if (is_order == 1) { if (req.is_intact == 1 && req.handle_status_id == 0) query = query.OrderBy(c => c.identification_time, OrderByType.Desc); else if (req.is_intact == 1 && req.handle_status_id == 1) query = query.OrderBy(c => c.deal_time, OrderByType.Desc); else if (req.is_intact == 1 && req.handle_status_id == 2) query = query.OrderBy(c => c.verifytime, OrderByType.Desc); else query = query.OrderBy(c => c.createtime, OrderByType.Desc); } return query; } /// /// 查询案件和处理信息列表 /// /// public async Task>>> LoadCaseInfoAndDealInfoList(QueryCaseInfoListReq req) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //查询条件组装 var query = QueryCaseInfoList(db, req, user); //总数 RefAsync total = 0; //拉取数据 var caseList = await query.ToPageListAsync(req.page, req.limit, total); //查询所有的案件id var caseIds = caseList.Select(c => c.Id).ToList(); List list = new List(); //查询对应的案件处理信息 var dealList = db.Queryable().Where(c => caseIds.Contains(c.caseid) && (c.is_delete == 0 || c.is_delete == null)).ToList(); for (int i = 0; i < caseList.Count; i++) { var caseItem = caseList[i]; CaseInfoAndDealInfoResponse model = new CaseInfoAndDealInfoResponse(); model.caseinfo = caseItem; var dealItem = dealList.Where(c => c.caseid == caseItem.Id).OrderByDescending(c => c.createtime).FirstOrDefault(); if (dealItem == null) dealItem = new DroneCaseDeal(); model.dealinfo = dealItem; list.Add(model); } return new Response>> { Result = new PageInfo> { Items = list, Total = total }, Message = "获取数据成功" }; } } /// /// 查询案件列表 /// /// /// public async Task>>> LoadCaseInfoListInterface(QueryCaseInfoListReq req) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { int total = 0; //查询条件 var query = QueryCaseInfoList(db, req, user); //查询拉取数据 var caseList = query.Select(c => new DroneCaseInfoExt { Id = c.Id, case_no = c.case_no, case_name = c.case_name, case_description = c.case_description, start_time = c.start_time, end_time = c.end_time, address = c.address, lng = c.lng, lat = c.lat, typeid = c.typeid, typename = c.typename, handle_status_id = c.handle_status_id, handle_status_name = c.handle_status_name, case_status_id = c.case_status_id, case_status_name = c.case_status_name, createtime = c.createtime, createuser = c.createuser, drone_no = c.drone_no, deal_userid = c.deal_userid, deal_username = c.deal_username, createusername = c.createusername, is_delete = c.is_delete, countyid = c.countyid, countyname = c.countyname, streetid = c.streetid, streetname = c.streetname, communityid = c.communityid, communityname = c.communityname, remark = c.remark, is_closed = c.is_closed, area = c.area, is_illegal = c.is_illegal, close_user = c.close_user, close_time = c.close_time, identification_user = c.identification_user, identification_time = c.identification_time, is_intact = c.is_intact, close_userid = c.close_userid, identification_userid = c.identification_userid, verifyuserid = c.verifyuserid, verifyuser = c.verifyuser, verifytime = c.verifytime, is_improve = c.is_improve, improve_reason = c.improve_reason, is_dispense = c.is_dispense, dispense_userid = c.dispense_userid, dispense_time = c.dispense_time, dispense_username = c.dispense_username, verifystatus = c.verifystatus, verifystatusname = c.verifystatusname, is_checked = c.is_checked, deal_time = c.deal_time, pre_phase_time = c.pre_phase_time, later_phase_time = c.later_phase_time, pre_phase_img = c.pre_phase_img, later_phase_img = c.later_phase_img, is_verification = c.is_verification, is_drawback = c.is_drawback, back_to_userid = c.back_to_userid, back_to_username = c.back_to_username, }).ToPageList(req.page, req.limit, ref total); //查询的id var caseIdList = caseList.Select(c => c.Id).ToList(); //查询的图片 var picList = await db.Queryable().Where(c => caseIdList.Contains(c.relid) && c.type == 0 && c.tablename == "drone_caseinfo").Select(c => new { caseid = c.relid, c.path }).ToListAsync(); //遍历案件 for (int i = 0; i < caseList.Count; i++) { //给图片赋值 var caseModel = caseList[i]; caseModel.case_pic_list = picList.Where(c => c.caseid == caseModel.Id).Select(c => c.path).ToList(); } return new Response>> { Result = new PageInfo> { Items = caseList, Total = total }, Message = "获取数据成功" }; } } /// /// 查询案件列表 /// /// /// public async Task>>> LoadCaseInfoList(QueryCaseInfoListReq req) { req.Init(); DateTime curDatetime = DateTime.Now; var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //总条数 RefAsync totalNumber = 0; //组装查询条件 var query = QueryCaseInfoList(db, req, user); //分页查询数据,拉取数据 var list = await query.ToPageListAsync(req.page, req.limit, totalNumber); return new Response>> { Result = new PageInfo> { Items = list, Total = totalNumber }, Message = "获取数据成功" }; } } /// /// 加载处理数据列表 /// /// /// public async Task>>> LoadDealCaseInfoList(QueryCaseInfoListReq obj) { obj.Init(); var req = obj.MapTo(); req.is_intact = 1; req.is_dealer = 1; var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { RefAsync total = 0; //查询条件 var query = QueryCaseInfoList(db, req, user); //查询拉取数据 var _caseList = await query.ToPageListAsync(req.page, req.limit, total); string _caseListStr = JsonConvert.SerializeObject(_caseList); var caseList = JsonConvert.DeserializeObject>(_caseListStr); //查询的id var caseIdList = caseList.Select(c => c.Id).ToList(); //查询的图片 var picList = await db.Queryable().Where(c => caseIdList.Contains(c.relid) && c.type == 0 && c.tablename == "drone_caseinfo").Select(c => new { caseid = c.relid, c.path }).ToListAsync(); //案件标签 var tags = await db.Queryable() .LeftJoin((t, c) => t.tagid == c.ItemDetailId) .Where((t, c) => caseIdList.Contains(t.caseid) && c.ItemCode == "DRONE_CASE_TAG") .Select((t, c) => new { t.caseid, c.ItemDetailId, c.ItemName }).ToListAsync(); //遍历案件 for (int i = 0; i < caseList.Count; i++) { //给图片赋值 var caseModel = caseList[i]; caseModel.case_pic_list = picList.Where(c => c.caseid == caseModel.Id).Select(c => c.path).ToList(); caseModel.tags = tags.Where(c => c.caseid == caseModel.Id).Select(c => c.ItemName).ToList(); } return new Response>> { Result = new PageInfo> { Items = caseList, Total = total }, Message = "获取数据成功" }; } } /// /// 根据案件分配查询案件 /// /// /// public async Task>>> LoadDealCaseInfoListByLaw(QueryCaseInfoListReq obj) { //判断是否是乡镇管理员和审核管理员 var currentUser = _auth.GetCurrentUser(); //当前用户 var user = currentUser.User; var roles = currentUser.Roles.Select(c => c.Id.ToString()).ToList(); //查询是否为案件处理角色 var _count = currentUser.Roles.Where(c => c.Name.Contains("案件处理")).Count(); obj.Init(); using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { List caseList = new List(); RefAsync total = 0; ISugarQueryable query = null; var req = obj.MapTo(); if (_count == 0) { //已判读 req.is_intact = 1; //根据组织机构过滤 req.is_dealer = 1; //查询条件 query = QueryCaseInfoList(db, req, user, roles: roles); } else { //已判读 req.is_intact = 1; //根据接收人处理人权限过滤 req.dispense_dealer = 1; //查询条件 query = QueryCaseInfoList(db, req, user); } //拉取数据 var _caseList = await query.ToPageListAsync(req.page, req.limit, total); string _caseListStr = JsonConvert.SerializeObject(_caseList); caseList = JsonConvert.DeserializeObject>(_caseListStr); //查询的id var caseIdList = caseList.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(); //案件标签 var tags = await db.Queryable() .LeftJoin((t, c) => t.tagid == c.ItemDetailId) .Where((t, c) => caseIdList.Contains(t.caseid) && c.ItemCode == "DRONE_CASE_TAG") .Select((t, c) => new { t.caseid, c.ItemDetailId, c.ItemName }).ToListAsync(); //遍历案件 for (int i = 0; i < caseList.Count; i++) { //给图片赋值 var caseModel = caseList[i]; caseModel.case_pic_list = picList.Where(c => c.caseid == caseModel.Id).Select(c => c.path).ToList(); caseModel.tags = tags.Where(c => c.caseid == caseModel.Id).Select(c => c.ItemName).ToList(); } return new Response>> { Result = new PageInfo> { Items = caseList, Total = total }, Message = "获取数据成功" }; } } #endregion #region 案件数量统计App查询案件 全部 未办理 办理中 已办结数量 /// /// 查询案件公共过滤方法 /// /// /// private ISugarQueryable GetCaseQueryable(SqlSugarClient db, GetQueryCaseReq req = null, int? order = null) { if (req == null) req = new GetQueryCaseReq(); req.Init(); var query = db.Queryable() //未删除 .Where(c => c.is_delete == null || c.is_delete == 0) //已判读 .Where(c => c.is_intact == 1) //处理状态 .WhereIF(req.handle_status_id != null, c => c.handle_status_id == req.handle_status_id) //是否核查 .WhereIF(req.is_examine == 0, c => c.is_examine == 0 || c.is_examine == null) .WhereIF(req.is_examine == 1, c => c.is_examine == 1) //处理状态 .WhereIF(req.handle_status_list.Count != 0, c => req.handle_status_list.Contains(c.handle_status_id)) //是否合法 .WhereIF(req.is_illegal != null, c => c.is_illegal == req.is_illegal) //处理措施 .WhereIF(req.measure_name_type == 0, c => c.measure_name == "拟拆除") .WhereIF(req.measure_name_type == 1, c => c.measure_name == "查处") .WhereIF(req.measure_name_type == 2, c => c.measure_name == "拟完善手续") //街道过滤 .WhereIF(!string.IsNullOrEmpty(req.streetid), c => c.streetid == req.streetid) ; return query; } /// /// 案件数量统计 /// /// public async Task> CaseCountCensus(QueryCaseInfoListReq req) { //统计相关接口 //尽量减少查询数据库数据 //查询数据返回值尽量少 //数据类型统计使用GroupBy统计count,再进行类型过滤 //当前用户 var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var list = await QueryCaseInfoList(db, new QueryCaseInfoListReq { //以判读 is_intact = 1, //上报人过滤 is_reporter = req.is_reporter, //处理人过滤 is_dealer = req.is_dealer, //执行人过滤:相当于 执法人员用 dispense_dealer = req.dispense_dealer, }, user, 0) .GroupBy(c => new { c.handle_status_id, c.is_examine }) .Select(c => new { c.handle_status_id, c.is_examine, count = SqlFunc.AggregateCount(c.Id) }) .ToListAsync(); //统计数量 JObject obj = new JObject(); obj.Add("total", list.Sum(c => c.count)); obj.Add("status0_0", list.Where(c => c.handle_status_id == 0 && (c.is_examine == null || c.is_examine == 0)).Sum(c => c.count)); obj.Add("status0_1", list.Where(c => c.handle_status_id == 0 && c.is_examine == 1).Sum(c => c.count)); obj.Add("status0", list.Where(c => c.handle_status_id == 0).Sum(c => c.count)); obj.Add("status1", list.Where(c => c.handle_status_id == 1).Sum(c => c.count)); obj.Add("status2", list.Where(c => c.handle_status_id == 2).Sum(c => c.count)); return new Response { Result = obj, Message = "获取数据成功" }; } } /// /// 待审核案件及未读消息数量 /// /// public Response UnreadMsgAndCaseCount() { JObject obj = new JObject { { "unreadMsgCount", LoadMessageList(new QueryDroneCaseinfoReq { is_receiver = 1,msg_type = 1, is_read = 0, page = 1, limit = 1 }).Result.Result.Total }, //{ "unreadMsgCount",0 }, { "wait2VerifyCaseCount", LoadWaitToVerifyCaseList(new QueryCaseInfoListReq { page = 1,limit = 1 }).Total }, { "completeCaseCount", LoadDealCaseInfoListByLaw(new QueryCaseInfoListReq { handle_status_id = 2, page = 1,limit = 1 }).Result.Result.Total } }; return new Response { Result = obj, Message = "获取数据成功" }; } /// /// 首页通知统计数量 /// /// public Response GetIndexCensusDataApp() { var current = _auth.GetCurrentUser(); var user = current.User; string countyName = _configuration.GetSection("CountyName").Value; if (string.IsNullOrEmpty(countyName)) countyName = "费县"; //过滤到县级和镇级的组织机构,为了获取当前用户管理的组织机构 var orgs = current.Orgs.Where(c => c.Name == countyName || c.ParentName == countyName).OrderBy(c => c.CascadeId).ToList(); using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //组织机构 string orgName = string.Empty; string orgid = string.Empty; if (orgs.Count != 0) { orgName = orgs[0].Name; orgid = orgs[0].Id.ToString(); } //七天前,为了算超期的案件数量 var sevenDaysAgo = DateTime.Now.AddDays(-7); var totalCount = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1 }, user).Count(); //已整改的数量 var handleCount = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 1 }, user).Count() + QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 2 }, user).Count(); //未整改的数量 var notHandleCount = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0 }, user).Count(); //超期未整改的数量 var outTimeNotHandleCount = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0 }, user).Where(c => c.identification_time < sevenDaysAgo).Count(); JObject result = new JObject(); result.Add("orgname", orgName); result.Add("total", totalCount); result.Add("handleCount", handleCount); result.Add("notHandleCount", notHandleCount); result.Add("outTimeNotHandleCount", outTimeNotHandleCount); return new Response { Result = result, Message = "获取数据成功" }; } } /// /// 违建分类统计 /// /// public async Task> GetDroneTypeCount(string streetId, int? is_dealer = null) { using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var list = await GetCaseQueryable(db) .GroupBy(c => new { c.typename }) .Select(c => new { c.typename, count = SqlFunc.AggregateCount(c.Id) }).ToListAsync(); var user = _auth.GetCurrentUser().User; //待核查 var status0 = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, handle_status_id = 0, is_examine = 0, streetid = streetId }, user).Count(); //合法 var status1 = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 0, streetid = streetId }, user).Count(); //拆除 var status2 = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 1, measure_name_type = 0, streetid = streetId }, user).Count(); //查处 var status3 = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 1, measure_name_type = 1, streetid = streetId }, user).Count(); //完善手续 var status4 = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 1, measure_name_type = 2, streetid = streetId }, user).Count(); //伪变化 var status5 = QueryCaseInfoList(db, new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 2, streetid = streetId }, user).Count(); JArray array = new JArray(); JObject obj0 = new JObject(); obj0.Add("typename", "待核查"); obj0.Add("count", status0); JObject obj1 = new JObject(); obj1.Add("typename", "合法"); obj1.Add("count", status1); JObject obj2 = new JObject(); obj2.Add("typename", "拆除"); obj2.Add("count", status2); JObject obj3 = new JObject(); obj3.Add("typename", "查处"); obj3.Add("count", status3); JObject obj4 = new JObject(); obj4.Add("typename", "完善手续"); obj4.Add("count", status4); JObject obj5 = new JObject(); obj5.Add("typename", "伪变化"); obj5.Add("count", status5); array.Add(obj0); array.Add(obj1); array.Add(obj2); array.Add(obj3); array.Add(obj4); array.Add(obj5); return new Response { Result = array, Message = "获取数据成功" }; } } /// /// 案件详情 /// /// /// public async Task> GetCaseInfo(string id) { AddOrUpdateDroneCaseInfoReqExt res = new AddOrUpdateDroneCaseInfoReqExt(); res.Init(); //详情 Sugar_Drone_caseinfo info = null; var flag = Infrastructure.Extensions.StringExtension.IsGuid(id); if (flag) { info = await this.Repository.AsSugarClient().Queryable().Where(c => c.Id == id).FirstAsync(); } else { info = await this.Repository.AsSugarClient().Queryable().Where(c => c.case_no == id).FirstAsync(); } //工作区 var work_area = string.Empty; if (info.streetname.Contains("费城街道") && !string.IsNullOrEmpty(info.communityid)) work_area = await this.Repository.AsSugarClient().Queryable().Where(c => c.Id.ToString() == info.communityid).Select(c => c.CustomCode).FirstAsync(); //文件 var fileList = await this.Repository.AsSugarClient().Queryable().Where(c => c.relid == info.Id && (c.is_delete == null || c.is_delete == 0) && c.tablename == "drone_caseinfo").ToListAsync(); //图片 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 = await this.Repository.AsSugarClient().Queryable().Where(a => a.caseid == info.Id).Select(a => a.relation_case_no).ToListAsync(); //案件标签 var tags = await this.Repository.AsSugarClient().Queryable() .LeftJoin((t, c) => t.tagid == c.Id.ToString()) .Where((t, c) => t.caseid == info.Id && c.TypeId == "DRONE_CASE_TAG") .Select((t, c) => c.Name).ToListAsync(); //图斑的中心点 StringBuilder sql = new StringBuilder(); sql.AppendFormat($"SELECT st_astext(ST_Centroid(geom)) lnglat FROM \"drone_shp_data\" where relid = '{info.Id}' and geom is not null"); var dt = await this.Repository.AsSugarClient().Ado.GetDataTableAsync(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); } else { res.lng = info.lng; res.lat = info.lat; } res.work_area = work_area; 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; return new Response { Result = res, Message = "获取数据成功" }; } /// /// 查询案件和处理信息的详情内容 /// /// /// public async Task> GetCaseInfoAndDealInfo(string id) { CaseInfoAndDealInfoByIdResponse result = new CaseInfoAndDealInfoByIdResponse(); result.caseinfo = (await GetCaseInfo(id)).Result; //result.dealinfo = GetDroneCaseDeal("", id); return new Response { Result = result, Message = "获取数据成功" }; } /// /// 获取案件处理流程 /// /// /// public async Task>> GetCaseFlowLog(string id) { using (var db = base.UnitWork.CreateContext()) { var caseInfo = new Sugar_Drone_caseinfo(); if (Infrastructure.Extensions.StringExtension.IsGuid(id)) { caseInfo = await this.Repository.AsSugarClient().Queryable().Where(c => c.Id == id).FirstAsync(); } else { caseInfo = await this.Repository.AsSugarClient().Queryable().Where(c => c.case_no == id).FirstAsync(); } var dealInfo = await this.Repository.AsSugarClient().Queryable().Where(c => c.caseid == caseInfo.Id && (c.is_delete == null || c.is_delete == 0)).OrderBy(c => c.createtime, OrderByType.Desc).FirstAsync(); int? status = 1; List list = new List(); //下发 CaseFlowLogModel first = new CaseFlowLogModel { status = 1, name = "下发", user_name = caseInfo.identification_user, time = caseInfo.identification_time == null ? "" : caseInfo.identification_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), }; list.Add(first); //核查 if (caseInfo.handle_status_id > 0 || (caseInfo.is_examine == 1 && caseInfo.handle_status_id == 0)) { caseInfo.examiner_name = string.IsNullOrEmpty(caseInfo.examiner_name) ? "已核查" : caseInfo.examiner_name; CaseFlowLogModel second = new CaseFlowLogModel { status = 1, name = "核查", user_name = caseInfo.examiner_name, time = caseInfo.examine_time == null ? "" : caseInfo.examine_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), }; list.Add(second); } else { CaseFlowLogModel second = new CaseFlowLogModel { status = 0, name = "核查", user_name = "", time = "", }; list.Add(second); } //办理 if (caseInfo.handle_status_id > 0 && (caseInfo.is_illegal == 0 || caseInfo.is_illegal == 1)) { CaseFlowLogModel third = new CaseFlowLogModel { status = 1, user_name = caseInfo.deal_username, time = caseInfo.deal_time == null ? "" : caseInfo.deal_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), }; if (caseInfo.is_illegal == 0) third.name = "合法举证"; else third.name = dealInfo.measure_name; list.Add(third); } else if (caseInfo.handle_status_id == 0 && caseInfo.is_examine == 1) { CaseFlowLogModel third = new CaseFlowLogModel { status = 0, name = "办理", user_name = "", time = "", }; list.Add(third); } //审核 if (caseInfo.handle_status_id == 2) { CaseFlowLogModel fourth = new CaseFlowLogModel { status = 1, name = "审核", user_name = caseInfo.verifyuser, time = caseInfo.verifytime == null ? "" : caseInfo.verifytime.Value.ToString("yyyy-MM-dd HH:mm:ss"), }; list.Add(fourth); //归档 CaseFlowLogModel fifth = new CaseFlowLogModel { status = 1, name = "归档", user_name = "已归档", time = "", }; list.Add(fifth); } else { CaseFlowLogModel fourth = new CaseFlowLogModel { status = 0, name = "审核", user_name = "", time = "", }; list.Add(fourth); //归档 CaseFlowLogModel fifth = new CaseFlowLogModel { status = 0, name = "归档", user_name = "", time = "", }; list.Add(fifth); } return new Response> { Result = list, Message = "获取数据成功" }; } } /// /// 查询案件 /// /// public async Task> LoadCaseInfoData() { var user = _auth.GetCurrentUser().User; var list = await this.Repository.AsSugarClient().Queryable() //是否完整性、是否关闭、是否删除过滤 .Where(c => c.is_intact == 1 && (c.is_closed == 0 || c.is_closed == null) && (c.is_delete == 0 || c.is_delete == null)) //执行人过滤 .WhereIF(user.Account != Define.SYSTEM_USERNAME, c => SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == c.communityid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == c.streetid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == c.countyid && it.UserId == user.Id).Any() || c.createuser == user.Id.ToString()) .OrderBy(c => c.createtime, OrderByType.Desc) .Select(c => new { c.Id, c.lng, c.lat, c.case_name, c.handle_status_id }) .ToListAsync(); return new Response { Result = list, Message = "获取数据成功" }; } /// /// 删除案件 /// /// /// public async Task> DeleteDroneCaseInfo(string[] ids) { var flag = await this.Repository.AsSugarClient().Updateable() .SetColumns(c => new Sugar_Drone_caseinfo { is_delete = 1 }) .Where(c => ids.Contains(c.Id)) .ExecuteCommandAsync(); if (flag > 0) return new Response { Result = true, Message = "删除成功" }; else return new Response { Result = false, Code = 500, Message = "删除失败" }; } /// /// 删除文件 /// /// /// public async Task> DeleteDroneFiles(string[] ids) { if (ids == null) throw new Exception("ids is null"); int flag = -1; flag = await this.Repository.AsSugarClient().Updateable() .SetColumns(c => new DroneFiles { is_delete = 1 }) .Where(c => ids.Contains(c.Id)) .ExecuteCommandAsync(); if (flag >= 0) return new Response { Result = true, Message = "删除成功" }; else return new Response { Result = false, Code = 500, Message = "删除失败" }; } /// /// 删除文件 - 通过路径删除 /// /// /// public async Task> DeleteDroneFilesByPath(string[] paths) { if (paths == null) throw new Exception("paths is null"); int flag = -1; flag = await this.Repository.AsSugarClient().Updateable() .SetColumns(c => new DroneFiles { is_delete = 1 }) .Where(c => paths.Contains(c.path)) .ExecuteCommandAsync(); if (flag >= 0) return new Response { Result = true, Message = "删除成功" }; else return new Response { Result = false, Message = "删除失败" }; } /// /// 获取所有案件中心点 /// APP获取中心点和图层的坐标点集合 /// /// public async Task> GetAllDroneCaseCenterApp(string id) { var user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { if (!Infrastructure.Extensions.StringExtension.IsGuid(id)) { id = (await db.Queryable().FirstAsync(a => a.case_no == id)).Id; } var query = db.Queryable((a, b) => new JoinQueryInfos( JoinType.Left, a.Id == b.relid )) //过滤判读、是否删除、是否关闭、geom不为空 .Where((a, b) => a.is_intact == 1 && (a.is_delete == 0 || a.is_delete == null) && b.geom != null) //根据权限过滤、组织机构权限、自己添加的数据权限 .WhereIF(user.Account != Define.SYSTEM_USERNAME, a => SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == a.communityid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == a.streetid && it.UserId == user.Id).Any() || SqlFunc.Subqueryable().Where(it => it.OrgId.ToString() == a.countyid && it.UserId == user.Id).Any() ) //是否查询单条数据 .WhereIF(!string.IsNullOrEmpty(id), (a, b) => a.Id == id); //查询:案件表关联图层表 var dt = query //查询字段 .Select("a.case_no,a.handle_status_id,a.\"Id\" as id,a.countyname,a.streetname,a.communityname,a.createtime,a.case_description,a.address,a.typename,a.handle_status_name,st_astext(ST_Centroid(geom)) as point,st_astext(geom) cover") //转为DataTable .ToDataTable(); //转换JToken var resJToken = dt.ToJson().ToJToken(); //返回的Array数据 JArray array = new JArray(); for (int i = 0; i < resJToken.Count(); i++) { JObject obj = new JObject(); var item = resJToken[i]; obj.Add("id", item["id"]); obj.Add("case_no", item["case_no"]); obj.Add("handle_status_id", item["handle_status_id"]); obj.Add("countyname", item["countyname"]); obj.Add("streetname", item["streetname"]); obj.Add("communityname", item["communityname"]); obj.Add("createtime", item["createtime"]); obj.Add("case_description", item["case_description"]); obj.Add("address", item["address"]); obj.Add("typename", item["typename"]); obj.Add("handle_status_name", item["handle_status_name"]); //中心点数据 string pointStr = item["point"].ToString(); var pointInfo = pointStr.Replace("POINT(", "").Replace(")", "").Split(" "); //中心点经纬度 obj.Add("longitude", Decimal.Round(Decimal.Parse(pointInfo[0]), 6)); obj.Add("latitude", Decimal.Round(Decimal.Parse(pointInfo[1]), 6)); //面数据 string coverStr = item["cover"].ToString(); //面的所有点 var point_list = coverStr.Replace("MULTIPOLYGON ZM (((", "").Replace(")", "").Replace("(", "").Split(","); //面的数组 JArray pointArray = new JArray(); //遍历面的数据 foreach (var pointItem in point_list) { JObject pointObj = new JObject(); var pointItemList = pointItem.Split(" "); pointObj.Add("longitude", Decimal.Round(Decimal.Parse(pointItemList[0]), 6)); pointObj.Add("latitude", Decimal.Round(Decimal.Parse(pointItemList[1]), 6)); pointArray.Add(pointObj); } //添加面的点数据 obj.Add("point_list", pointArray); array.Add(obj); } return new Response { Result = array, Message = "获取数据成功" }; } } /// /// 添加图片保存 /// /// /// public async Task> AddDroneCasePic(AddFroneCasePicReq req) { var _user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { List filesList = new List(); if (string.IsNullOrEmpty(req.caseid) || string.IsNullOrEmpty(req.path)) { throw new Exception("保存失败:图斑id和路径不能都为空!"); } DroneFiles pic = new DroneFiles(); pic.Id = SqlSugar.SnowFlakeSingle.instance.getID().ToString(); pic.path = req.path; pic.type = 0; pic.tablename = "drone_caseinfo"; pic.createtime = DateTime.Now; pic.createuser = _user.Id.ToString(); pic.createusername = _user.Name; pic.is_delete = 0; pic.relid = req.caseid; var flag = await db.Insertable(pic).ExecuteCommandAsync(); if (flag >= 0) return new Response { Result = pic.Id, Message = "删除成功" }; else return new Response { Message = "添加图片失败" }; } } /// /// 添加案件处理图片 /// /// /// public async Task> AddDroneDealPic(AddDroneDealPicReq req) { var _user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { List filesList = new List(); if (string.IsNullOrEmpty(req.deal_id) || string.IsNullOrEmpty(req.path)) { throw new Exception("保存失败:案件id和路径不能都为空!"); } DroneFiles pic = new DroneFiles(); pic.Id = SqlSugar.SnowFlakeSingle.instance.getID().ToString(); pic.path = req.path; pic.type = req.type; pic.tablename = "drone_case_deal"; pic.createtime = DateTime.Now; pic.createuser = _user.Id.ToString(); pic.createusername = _user.Name; pic.is_delete = 0; pic.relid = req.deal_id; pic.tag = req.tag; pic.latitude = req.latitude; pic.longitude = req.longitude; pic.angle = req.angle; var flag = await db.Insertable(pic).ExecuteCommandAsync(); if (flag >= 0) return new Response { Result = pic.Id, Message = "删除成功" }; else return new Response { Message = "添加图片失败" }; } } /// /// 更新删除图片 /// /// /// public async Task> DeleteDroneCasePic(string id) { var flag = await this.Repository.AsSugarClient().Updateable().Where(c => id == c.Id).SetColumns(c => c.is_delete == 1).ExecuteCommandAsync(); if (flag >= 0) return new Response { Result = true, Message = "图片删除成功" }; else return new Response { Result = false, Message = "图片删除失败" }; } #endregion #region 通知 /// /// 查询所有通信信息 /// /// public async Task>> LoadMessageList(QueryDroneCaseinfoReq req) { var user = _auth.GetCurrentUser().User; RefAsync totalCount = 0; List listPage = new List(); if (user.Account == Define.SYSTEM_USERNAME) { //超级管理员 看到全部通知 listPage = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.is_delete == 0 || c.is_delete == null) //根据标题过滤 .WhereIF(!string.IsNullOrEmpty(req.msg_title), c => c.msg_title.Contains(req.msg_title)) //通知类型过滤 .WhereIF(req.msg_type != null, c => c.msg_type == req.msg_type) //排序 .OrderBy(c => c.createtime, OrderByType.Desc) //分页 .ToPageListAsync(req.page, req.limit, totalCount); } else { listPage = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.is_delete == 0 || c.is_delete == null) //根据标题过滤 .WhereIF(!string.IsNullOrEmpty(req.msg_title), c => c.msg_title.Contains(req.msg_title)) //创建人过滤 .WhereIF(req.is_create == 1, c => c.createuser == user.Id.ToString()) //接收人过滤 .WhereIF(req.is_receiver == 1, c => SqlFunc.Subqueryable().Where(it => it.messageid == c.Id && it.userid == user.Id.ToString()).Any() || SqlFunc.Subqueryable().Where(it => it.messageid == c.Id && SqlFunc.Subqueryable().Where(itA => itA.OrgId.ToString() == it.orgid && itA.UserId == user.Id).Any()).Any() || SqlFunc.Subqueryable().Where(it => it.messageid == c.Id && SqlFunc.Subqueryable().Where(itA => itA.RoleId.ToString() == it.roleid && itA.UserId == user.Id).Any()).Any() ) //通知类型过滤 .WhereIF(req.msg_type != null, c => c.msg_type == req.msg_type) //是否已读 .WhereIF(req.is_read == 1, c => SqlFunc.Subqueryable().Where(it => c.Id == it.messageid && it.is_read == 1).Any()) .WhereIF(req.is_read == 0, c => !SqlFunc.Subqueryable().Where(it => c.Id == it.messageid && it.is_read == 1).Any()) //排序 .OrderBy(c => c.createtime, OrderByType.Desc) //分页 .ToPageListAsync(req.page, req.limit, totalCount); } var relList = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.userid == user.Id.ToString()).Select(c => new { c.is_read, c.messageid }).ToListAsync(); JToken jTokenList = listPage.ToJson().ToJToken(); for (int i = 0; i < jTokenList.Count(); i++) { var item = jTokenList[i]; string messageid = item["Id"].ToString(); var _relItem = relList.Where(c => c.messageid == messageid).FirstOrDefault(); int? is_read = 0; if (_relItem != null) { is_read = _relItem.is_read; } item["is_read"] = is_read; } return new Response> { Result = new PageInfo { Items = jTokenList, Total = totalCount }, Message = "获取数据成功", }; } /// /// 查询通知信息详情 /// /// 通知信息id /// public async Task> LoadMessageOld(string id) { return new Response { Result = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.Id == id).FirstAsync(), Message = "获取数据成功" }; } /// /// 查询通知信息详情 /// /// 通知信息id /// public async Task> LoadMessage(string id) { var messageinfo = await base.Repository.ChangeRepository>().AsQueryable().Where(c => c.Id == id).FirstAsync(); var model = messageinfo.MapTo(); model.roles = base.Repository.ChangeRepository>().AsQueryable().Where(c => c.Id == id).Select(r => r.roleid).Distinct().ToArray(); model.orgs = base.Repository.ChangeRepository>().AsQueryable().Where(c => c.Id == id).Select(r => r.orgid).Distinct().ToArray(); return new Response { Result = model, Message = "获取数据成功" }; } /// /// 根据权限查看通知详情 /// /// /// public async Task> LoadMessageUser(string id) { using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var model = db.Queryable((r, u) => new JoinQueryInfos( JoinType.Left, r.userid == u.Id.ToString() )) .Where(r => r.messageid == id).Select((r, u) => new { r.userid, r.username }).ToList(); return new Response { Result = await db.Queryable().Where(c => c.Id == id).FirstAsync(), Message = "获取数据成功" }; } } /// /// 添加通知消息 /// /// /// public async Task> AddMessage(QueryDroneCaseRecipientUserReq req) { var _user = _auth.GetCurrentUser().User; //初始化数据 req.Init(); var model = req.MapTo(); model.Init(_user); using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //关联表数据 List relevanceList = new List(); //过滤条件:三表联合过滤 //Sugar_Relevance 用到角色过滤 //Sugar_Org 用到组织机构编码过滤 //不使用SqlFunc.SubQeury过滤是因为组织机构向级联查询Id过多,会导致Sql长度过大引起查询失效 Expressionable exp = new Expressionable(); exp.And((c, d, e, f) => false) //角色过滤 .OrIF(req.roles.Length > 0, (c, d, e, f) => req.roles.Contains(d.RoleId.ToString())) //用户过滤 .OrIF(req.recipientUserId.Length > 0, (c, d, e, f) => req.recipientUserId.Contains(c.Id.ToString())) //发送给所有人 .OrIF(req.is_all == 1, (c, d, e, f) => c.Id.ToString() != null); //组织列表 var orgInfoList = await db.Queryable().WhereIF(req.orgs.Length > 0, c => req.orgs.Contains(c.Id.ToString())).WhereIF(req.is_all == 1, c => c.Id != null).ToListAsync(); //查询组织机构编码 var orgList = orgInfoList.Select(c => c.CascadeId).ToList(); //遍历组织机构编码 foreach (var item in orgList) { //部门过滤 exp.Or((c, d, e, f) => SqlFunc.StartsWith(f.CascadeId, item)); } //添加当前用户 var userList = await db.Queryable((c, d, e, f) => new JoinQueryInfos( JoinType.Left, c.Id == d.UserId, JoinType.Left, c.Id == e.UserId, JoinType.Left, e.OrgId == f.Id )).Where(exp.ToExpression()) .Select((c, d, e, f) => c) .GroupBy(c => new { c.Id, c.Name }) .Select(c => new SysUser { Id = c.Id, Name = c.Name }) .ToListAsync(); var count = userList.Where(c => c.Id == _user.Id).Count(); if (count == 0) { //添加当前用户 userList.Add(new SysUser { Id = _user.Id, Name = _user.Name }); } //遍历用户 for (int i = 0; i < userList.Count; i++) { var item = userList[i]; DroneMessageRelevance modelRel = new DroneMessageRelevance(); modelRel.Id = Guid.NewGuid().ToString(); modelRel.userid = item.Id.ToString(); modelRel.username = item.Name; modelRel.createtime = DateTime.Now; modelRel.createuser = _user.Id.ToString(); modelRel.is_read = 0; modelRel.messageid = model.Id; relevanceList.Add(modelRel); } //关联表数据 List droList = new List(); //角色列表 var roleList = db.Queryable().WhereIF(req.roles.Length > 0, c => req.roles.Contains(c.Id.ToString())).WhereIF(req.is_all == 1, c => c.Id != null).ToList(); for (int i = 0; i < roleList.Count; i++) { for (int j = 0; j < orgList.Count; j++) { //关联表 DroneRoleOrgRel modelRel = new DroneRoleOrgRel(); modelRel.Id = Guid.NewGuid().ToString(); modelRel.roleid = roleList[i].Id.ToString(); modelRel.orgid = orgList[j].ToString(); modelRel.createtime = DateTime.Now; modelRel.createuser = _user.Id.ToString(); modelRel.messageid = model.Id; droList.Add(modelRel); } } //多表数据 使用事务提交 var transFlag = await db.UseTranAsync(async () => { //通知数据 var flag = await db.Insertable(model).ExecuteCommandAsync(); //关联数据 var flag1 = await db.Insertable(relevanceList).ExecuteCommandAsync(); //关联数据 var flag2 = await db.Insertable(droList).ExecuteCommandAsync(); }); if (transFlag.IsSuccess) { return new Response { Result = model.Id, Message = "添加成功" }; } else { throw new Exception("添加失败"); } } } /// /// 根据部门角色关联进行添加 /// /// /// public async Task> AddMessRoleOrg(QueryDroneCaseRecipientOrgRoleReq req) { var _user = _auth.GetCurrentUser().User; var model = req.MapTo(); model.Init(_user); using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //关联表数据 List relevanceList = new List(); //角色列表 var roleList = await db.Queryable().WhereIF(req.roles.Length > 0, c => req.roles.Contains(c.Id.ToString())).WhereIF(req.is_all == 1, c => c.Id != null).ToListAsync(); //组织列表 var orgList = await db.Queryable().WhereIF(req.orgs.Length > 0, c => req.orgs.Contains(c.Id.ToString())).WhereIF(req.is_all == 1, c => c.Id != null).ToListAsync(); for (int i = 0; i < roleList.Count; i++) { for (int j = 0; j < orgList.Count; j++) { //关联表 DroneRoleOrgRel modelRel = new DroneRoleOrgRel(); modelRel.Id = Guid.NewGuid().ToString(); modelRel.roleid = roleList[i].Id.ToString(); modelRel.orgid = orgList[j].Id.ToString(); modelRel.createtime = DateTime.Now; modelRel.createuser = _user.Id.ToString(); modelRel.messageid = model.Id; relevanceList.Add(modelRel); } } //多表数据 使用事务提交 var transFlag = await db.UseTranAsync(async () => { //通知数据 var flag = await db.Insertable(model).ExecuteCommandAsync(); //关联数据 var flag1 = await db.Insertable(relevanceList).ExecuteCommandAsync(); }); if (transFlag.IsSuccess) { return new Response { Result = model.Id, Message = "添加成功" }; } else { throw new Exception("添加失败"); } } } /// /// 编辑通知消息 /// /// /// public async Task> UpdateMessage(DroneMessage obj) { var _user = _auth.GetCurrentUser().User; obj.createusername = _user.Name; obj.createuser = _user.Id.ToString(); var flag = await this.Repository.AsSugarClient().Updateable(obj).ExecuteCommandAsync(); if (flag > 0) { return new Response { Result = obj.Id, Message = "编辑成功" }; } else { throw new Exception("编辑失败"); } } /// /// 更新删除通知消息 /// /// /// public async Task> UpdateDelMessage(string id) { var flag = await this.Repository.AsSugarClient().Updateable().SetColumns(c => new DroneMessage { is_delete = 1 }).Where(c => id == c.Id).ExecuteCommandAsync(); if (flag > 0) { return new Response { Result = true, Message = "删除成功" }; } else { throw new Exception("删除失败"); } } /// /// 设置通知已读 /// /// /// public async Task> SetMessageRead(string messageid) { var user = _auth.GetCurrentUser().User; var model = await base.Repository.ChangeRepository>().AsQueryable() .Where(c => c.userid == user.Id.ToString() && c.messageid == messageid) .FirstAsync(); int flag = 0; if (model == null) { model = new DroneMessageRelevance(); model.Id = Guid.NewGuid().ToString(); model.userid = user.Id.ToString(); model.username = user.Name; model.createtime = DateTime.Now; model.createuser = user.Id.ToString(); model.messageid = messageid; model.is_delete = 0; model.is_read = 1; flag = await this.Repository.AsSugarClient().Insertable(model).ExecuteCommandAsync(); } else { flag = await this.Repository.AsSugarClient().Updateable() .SetColumns(c => new DroneMessageRelevance { is_read = 1 }) .Where(c => c.messageid == messageid && c.userid == user.Id.ToString()) .ExecuteCommandAsync(); } if (flag > 0) { return new Response { Result = true, Message = "设置成功" }; } else { throw new Exception("设置失败"); } } #endregion #region 图层 /// /// 根据表名获取矢量切片 /// /// /// public byte[] QueryVectorTileByTable(QueryVectorTileByTableReq req) { VectorTileSearchModel searchModel = new VectorTileSearchModel { x = req.x, y = req.y, z = req.z, //field = "gid,fwbh,bh,fwlx,\"jzfsQg\",bxdcyy,fwlb,\"kzgzcsQg\",aqjdnf,address,fwsjfs,jgsj,cs,\"jzndQg\",dcmj,ywlfbxqx,sfjgaqjd,sfkzjg,\"kzcszpQg\",\"houseType\",\"hzlxQg\",hzxm,\"jglxQg\",aqjdjl,\"czqtQg\",jzmc,\"lwgQg\",\"dbkjqtQg\",fwmj,fwyt,zff,\"jzytQg\",streetid,streetname,communityid,communityname,", field = req.field, table = req.table, filter = req.filter, }; var result = _commonDataManager.VectorTile(searchModel); return result; } /// /// 添加违建图层 /// /// /// public async Task> AddIllegalBuildeLayer(DroneShpData model) { var _user = _auth.GetCurrentUser().User; model.createtime = DateTime.Now; model.createuser = _user.Name; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //获取主键 string _gid = _commonDataManager.GetMaxKeyVal("gid", "drone_shp_data", 1); model.gid = int.Parse(_gid);//转为数字类型 //格式化数据 string _wktModel = _commonDataManager.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 = await db.UseTranAsync(async () => { //插入图斑数据 var flag = await db.Insertable(model).ExecuteCommandAsync(); //修改图斑数据 var flagGeom = await db.Ado.ExecuteCommandAsync(geomSql.ToString()); //修改图斑面积 var flagUpdate = await db.Ado.ExecuteCommandAsync(sql.ToString()); }); if (transFlag.IsSuccess) return new Response { Result = _gid, Message = "新增成功" }; else return new Response { Message = "新增失败" }; } } /// /// 编辑违法建筑和图层 /// /// /// public async Task> UpdateIllegalBuildeLayer(DroneShpData model) { var _user = _auth.GetCurrentUser().User; using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //格式化数据 string _wktModel = _commonDataManager.WktDataConvert(model.geom, "MULTIPOLYGON ZM", 4); model.geom = _commonDataManager.WktToGeometry(_wktModel, 4326); //更新图斑的数据 StringBuilder sqlUpdate = new StringBuilder(); sqlUpdate.AppendFormat($" update drone_shp_data set geom = '{model.geom}' where gid = '{model.gid}';"); //更新图斑的面积 StringBuilder sql = new StringBuilder(); sql.AppendFormat($" update drone_shp_data set area = st_area(st_transform(geom,4527)) where gid = {model.gid}"); //使用事务提交数据 var transFlag = await db.UseTranAsync(async () => { //更新数据 var flag = await db.Ado.ExecuteCommandAsync(sqlUpdate.ToString()); //更新图斑面积 var flagUpdate = await db.Ado.ExecuteCommandAsync(sql.ToString()); }); if (transFlag.IsSuccess) return new Response { Result = model.gid.ToString(), Message = "编辑成功" }; else return new Response { Message = "编辑失败" }; } } // /// 删除图斑 /// /// /// public async Task> DeleteDroneLayers(int gid) { var flag = await client.Deleteable().Where(c => c.gid == gid).ExecuteCommandAsync(); if (flag > 0) return new Response { Result = true, Message = "删除成功" }; else return new Response { Result = false, Message = "删除失败" }; } /// /// 查询主页违法图层数据 /// 获取所有图斑,主页用 /// /// /// public JToken LoadAllDroneGeoJson(QueryAllDroneGeoJsonReq reqObj) { QueryGeoJsonCommonReq req = new QueryGeoJsonCommonReq(); req.tablename = "drone_shp_data"; StringBuilder whereBuilder = new StringBuilder(); whereBuilder.AppendFormat($" where 1=1"); if (!string.IsNullOrEmpty(reqObj.typeid)) { whereBuilder.AppendFormat($" and relid in (select \"Id\" from drone_caseinfo where typeid = '{reqObj.typeid}')"); } req.where = whereBuilder.ToString(); req.pageIndex = 1; req.limit = 9999; var res = _commonDataManager.PgsqlGeoJsonCommon(req); return res; } /// /// 获取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 = _commonDataManager.PgsqlGeoJsonCommon(req); return res; } /// /// app获取GeoJson /// 替代app获取中心点和图层坐标点集合 /// /// /// public async Task> GetDroneGeoJsonApp(string id) { var user = _auth.GetCurrentUser().User; StringBuilder sqlColumn = new StringBuilder(); sqlColumn.AppendFormat($" select aa.gid,aa.relid as id,bb.handle_status_id from drone_shp_data aa"); sqlColumn.AppendFormat($" left join drone_caseinfo bb on aa.relid = bb.\"Id\" "); sqlColumn.AppendFormat($" where bb.is_intact = 1"); sqlColumn.AppendFormat($" and (is_delete = 0 or is_delete is null)"); sqlColumn.AppendFormat($" and (is_closed = 0 or is_closed is null)"); sqlColumn.AppendFormat($" and geom is not null"); sqlColumn.AppendFormat($" and (bb.communityid in (select CAST(\"OrgId\" AS VARCHAR) from sys_userorg where CAST(\"UserId\" AS VARCHAR) = '{user.Id}') or bb.createuser = '{user.Id}')"); if (!string.IsNullOrEmpty(id)) sqlColumn.AppendFormat($" and aa.relid = '{id}'"); sqlColumn.AppendFormat($" order by aa.gid asc "); StringBuilder sqlGeom = new StringBuilder(); sqlGeom.AppendFormat($" select st_asgeojson(\"geom\") geom from drone_shp_data aa"); sqlGeom.AppendFormat($" left join drone_caseinfo bb on aa.relid = bb.\"Id\" "); sqlGeom.AppendFormat($" where bb.is_intact = 1"); sqlGeom.AppendFormat($" and (is_delete = 0 or is_delete is null)"); sqlGeom.AppendFormat($" and (is_closed = 0 or is_closed is null)"); sqlGeom.AppendFormat($" and geom is not null"); sqlGeom.AppendFormat($" and (bb.communityid in (select CAST(\"OrgId\" AS VARCHAR) from sys_userorg where CAST(\"UserId\" AS VARCHAR) = '{user.Id}') or bb.createuser = '{user.Id}')"); if (!string.IsNullOrEmpty(id)) sqlGeom.AppendFormat($" and aa.relid = '{id}'"); sqlGeom.AppendFormat($" order by aa.gid asc "); var res = _commonDataManager.PgsqlGeoJsonCommon(sqlColumn, sqlGeom, 1, 99999); using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var dtCenter = await db.Queryable((a, b) => new JoinQueryInfos( JoinType.Left, a.Id == b.relid )) //过滤判读、是否删除、是否关闭、geom不为空 .Where((a, b) => a.is_intact == 1 && (a.is_delete == 0 || a.is_delete == null) && (a.is_closed == 0 || a.is_closed == null) && b.geom != null) //根据权限过滤、组织机构权限、自己添加的数据权限 .Where($" ( a.communityid in (select CAST(\"OrgId\" AS VARCHAR) from sys_userorg where CAST(\"UserId\" AS VARCHAR) = '{user.Id}') or a.createuser = '{user.Id}')") //是否查询单条数据 .WhereIF(!string.IsNullOrEmpty(id), (a, b) => a.Id == id) //查询字段 .Select("gid,a.\"Id\" as id,typename,st_asgeojson(ST_Centroid(geom)) as point") //转为DataTable .ToDataTableAsync(); //转换格式 var jtokenCenter = dtCenter.ToJson().ToJToken(); //feature集合 JArray centerFeatureArr = new JArray(); //遍历每条数据 foreach (var item in jtokenCenter) { //feature对象 JObject centerFeatureObj = new JObject(); //类型 string _typename = item["typename"] == null ? "" : item["typename"].ToString(); if (_typename.IndexOf("-") > 0) _typename = _typename.Substring(_typename.LastIndexOf("-") + 1); //属性 JObject property = new JObject(); property.Add("id", item["id"]); property.Add("gid", item["gid"]); property.Add("typename", _typename); //给feature对象赋值 centerFeatureObj.Add("type", "Feature"); centerFeatureObj.Add("properties", property); centerFeatureObj.Add("geometry", item["point"].ToString().ToJToken()); //添加到feature集合 centerFeatureArr.Add(centerFeatureObj); } JObject pointObj = new JObject(); pointObj.Add("type", "FeatureCollection"); pointObj.Add("features", centerFeatureArr); JObject obj = new JObject(); obj.Add("geojson", res); obj.Add("points", pointObj); return new Response { Result = obj, Message = "获取数据成功" }; } } /// /// 根据经纬度获取组织机构 /// /// /// /// public async Task> GetOrgAreaByPoint(decimal lng, decimal lat) { //县id string countyid = ""; //镇id string streetid = ""; //村id string communityid = ""; //SqlSugar实例 using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //查询坐标属于哪个县 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 = await db.SqlQueryable(sql.ToString()).ToListAsync(); if (countyList.Count > 0) { //县名称 string countyName = countyList[0].xzqmc; //根据名称查询组织机构 var countyModel = await db.Queryable().Where(c => c.Name == countyName).FirstAsync(); //组织机构不为空,给县id赋值 if (countyModel != null) countyid = countyModel.Id.ToString(); } //查询坐标属于哪个镇 sql = new StringBuilder(); sql.AppendFormat($" SELECT xzqmc FROM \"shp_drone_town\" where ST_Within(st_geomfromtext('POINT({lng} {lat})',4326), geom) = 't'"); var streetList = await db.SqlQueryable(sql.ToString()).ToListAsync(); if (streetList.Count > 0) { //镇名称 string streetName = streetList[0].xzqmc; //根据名称查询组织机构 var streetModel = await db.Queryable().Where(c => c.Name == streetName).FirstAsync(); //组织机构不为空,给镇id赋值 if (streetModel != null) streetid = streetModel.Id.ToString(); } 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 = await db.SqlQueryable(sql.ToString()).ToListAsync(); if (communityidList.Count > 0) { //村名称 string communityName = communityidList[0].zldwmc; //根据村名称和镇id查询组织机构 var communityModel = await db.Queryable().Where(c => SqlFunc.StartsWith(c.Name, communityName) && c.ParentId.ToString() == streetid).FirstAsync(); //组织机构不为空,给村id赋值 if (communityModel != null) communityid = communityModel.Id.ToString(); } } //拼接json数据,返回到前台 JObject obj = new JObject(); obj.Add("countyid", countyid); obj.Add("streetid", streetid); obj.Add("communityid", communityid); return new Response { Result = obj, Message = "获取数据成功" }; } } /// /// 计算点与shp之间的距离 /// /// public async Task> GetPointShpDistance(string lng, string lat, string caseid) { //查询坐标点到 StringBuilder sql = new StringBuilder(); sql.AppendFormat($" select "); sql.AppendFormat($" ST_Distance("); sql.AppendFormat($" ST_Transform(st_geomfromtext('POINT({lng} {lat})',4326), 26986),"); sql.AppendFormat($" ST_Transform(st_setsrid(geom,4326), 26986)) as distance"); sql.AppendFormat($" from drone_shp_data where relid = '{caseid}' "); sql.AppendFormat($" order by ST_Distance("); sql.AppendFormat($" ST_Transform(st_geomfromtext('POINT({lng} {lat})',4326), 26986),"); sql.AppendFormat($" ST_Transform(st_setsrid(geom,4326), 26986)) limit 1"); using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var result = await db.Ado.GetDataTableAsync(sql.ToString()); if (result.Rows.Count > 0) { string distance = result.Rows[0]["distance"].ToString(); var distanceDecimal = Decimal.Round(Decimal.Parse(distance), 4); int limitShpDistance = int.Parse(_configuration.GetSection("AppSetting:LimitShpDistance").Value); if (distanceDecimal < limitShpDistance) { return new Response { Result = true, Message = "获取数据成功" }; } } throw new Exception("不在处理范围内"); } } #endregion #region 统计 /// /// 综合统计 /// /// public async Task> CaseSynthesisCensus(QueryCaseInfoListReq req) { using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var currentUser = _auth.GetCurrentUser(); var _user = currentUser.User; string countyName = _configuration.GetSection("CountyName").Value; if (string.IsNullOrEmpty(countyName)) countyName = "费县"; var orgList = await db.Queryable().Where(c => c.ParentName == countyName).OrderBy(c => c.SortNo, OrderByType.Asc).ToListAsync(); //无人机发现数量 var reqBody = req.MapTo(); reqBody.is_intact = 1; var allCountList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //完成核查数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var handleStatusList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //24小时未核查 (不包含已退回的部分) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_not_deal_hour24 = 1; reqBody.is_drawback = 0; var notDealHour24List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //分类型统计案件数量 reqBody = req.MapTo(); reqBody.is_intact = 1; var typeCountList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.typeid }).Select(c => new { c.streetid, c.typeid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法类型数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var illegalCountList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.is_illegal }).Select(c => new { c.streetid, c.is_illegal, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleStatusList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.handle_status_id }).Select(c => new { c.streetid, c.handle_status_id, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态 面积 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleAreaList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.handle_status_id }).Select(c => new { c.streetid, c.handle_status_id, area = SqlFunc.AggregateSum(SqlFunc.ToDecimal(c.area)), }).ToList(); //3日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 1; reqBody.is_illegal = 1; var notComplete3List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //7日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 2; reqBody.is_illegal = 1; var notComplete7List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 4; reqBody.is_illegal = 1; var notComplete30List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日以上未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 5; reqBody.is_illegal = 1; var notComplete30MoreList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //var typeList = await db.Queryable().Where(c => c.TypeId == "DRONE_CASE_TYPE").ToListAsync(); var typepid = await db.Queryable().Where(c => c.ItemCode == "DRONE_CASE_TYPE").FirstAsync(); var typeList = await db.Queryable().Where(c => c.ItemId == typepid.ItemId).ToListAsync(); JArray array = new JArray(); for (int i = 0; i < orgList.Count; i++) { var item = orgList[i]; //无人机发现数量 int _allCount = allCountList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //完成核查数量 int _handleStatus = handleStatusList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //24小时未核查 int _notDealHour24 = notDealHour24List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //违法类型数量 int _illegal0Count = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == 0).Sum(c => c.count); int _illegal1Count = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == 1).Sum(c => c.count); int _illegal2Count = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == 2).Sum(c => c.count); int _illegalNullCount = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == null).Sum(c => c.count); //违法 状态查询 int _illegalHandle2Status = illegalHandleStatusList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.count); int _illegalHandle01Status = illegalHandleStatusList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.count); //违法 面积查询 decimal? _illegalHandleAreaList = illegalHandleAreaList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.area); if (_illegalHandleAreaList != null) { _illegalHandleAreaList = Decimal.Round(_illegalHandleAreaList.Value / 666, 2); } decimal? _illegalHandle2AreaList = illegalHandleAreaList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.area); if (_illegalHandle2AreaList != null) { _illegalHandle2AreaList = Decimal.Round(_illegalHandle2AreaList.Value / 666, 2); } decimal? _illegalHandle01AreaList = illegalHandleAreaList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.area); if (_illegalHandle01AreaList != null) { _illegalHandle01AreaList = Decimal.Round(_illegalHandle01AreaList.Value / 666, 2); } //3日内未整改 int _notComplete3 = notComplete3List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //7日内未整改 int _notComplete7 = notComplete7List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //30日内未整改 int _notComplete30 = notComplete30List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //30日以上未整改 int _notComplete30More = notComplete30MoreList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); JObject obj = new JObject(); obj.Add("streetid", item.Id); obj.Add("streetname", item.Name); //分类型统计案件数量 //int _typeCount = typeCountList.Where(c => c.streetid == item.Id).Sum(c => c.count); var typeid_fanxin = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANXIN").First()?.ItemDetailId; var typeid_jiagai = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_JIAGAI").First()?.ItemDetailId; var typeid_fanjian = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANJIAN").First()?.ItemDetailId; var typeid_cunliang = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_CUNLIANG").First()?.ItemDetailId; var typeid_tuitu = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_TUITU").First()?.ItemDetailId; List notTypeids = new List { typeid_fanxin, typeid_jiagai, typeid_fanjian, typeid_cunliang, typeid_tuitu, }; var typeFanxinCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_fanxin).Sum(c => c.count); var typeJiagaiCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_jiagai).Sum(c => c.count); var typeFanjianCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_fanjian).Sum(c => c.count); var typeCunliangCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_cunliang).Sum(c => c.count); var typeTuituCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_tuitu).Sum(c => c.count); var typeOtherCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && !notTypeids.Contains(c.typeid)).Sum(c => c.count); //上报案件数量 obj.Add("allCount", _allCount); //完成外业核查数量 obj.Add("handleStatus", _handleStatus); //24h内未核查 obj.Add("notDealHour24", _notDealHour24); obj.Add("typeFanxinCount", typeFanxinCount); obj.Add("typeJiagaiCount", typeJiagaiCount); obj.Add("typeFanjianCount", typeFanjianCount); obj.Add("typeCunliangCount", typeCunliangCount); obj.Add("typeTuituCount", typeTuituCount); obj.Add("typeOtherCount", typeOtherCount); //合法 obj.Add("illegal0Count", _illegal0Count); //违法 外业核实后确定违法数 obj.Add("illegal1Count", _illegal1Count); //伪变化 obj.Add("illegal2Count", _illegal2Count); //违法类型 未知类型数量 obj.Add("illegalNullCount", _illegalNullCount); //违法面积 obj.Add("illegalHandleAreaList", _illegalHandleAreaList); //整改销号数 obj.Add("illegalHandle2Status", _illegalHandle2Status); //尚未整改宗数 obj.Add("illegalHandle01Status", _illegalHandle01Status); //销号面积 obj.Add("illegalHandle2AreaList", _illegalHandle2AreaList); //未整改面积 obj.Add("illegalHandle01AreaList", _illegalHandle01AreaList); //3日内未整改完成 obj.Add("notComplete3", _notComplete3); //7日内未整改完成 obj.Add("notComplete7", _notComplete7); //30日内未整改完成 obj.Add("notComplete30", _notComplete30); //30日以上未整改完成 obj.Add("notComplete30More", _notComplete30More); array.Add(obj); } JObject _obj = new JObject(); _obj.Add("streetname", "合计"); //上报案件数量 _obj.Add("allCount", array.Sum(c => int.Parse(c["allCount"].ToString()))); //完成外业核查数量 _obj.Add("handleStatus", array.Sum(c => int.Parse(c["handleStatus"].ToString()))); //24h内未核查 _obj.Add("notDealHour24", array.Sum(c => int.Parse(c["notDealHour24"].ToString()))); _obj.Add("typeFanxinCount", array.Sum(c => int.Parse(c["typeFanxinCount"].ToString()))); _obj.Add("typeJiagaiCount", array.Sum(c => int.Parse(c["typeJiagaiCount"].ToString()))); _obj.Add("typeFanjianCount", array.Sum(c => int.Parse(c["typeFanjianCount"].ToString()))); _obj.Add("typeCunliangCount", array.Sum(c => int.Parse(c["typeCunliangCount"].ToString()))); _obj.Add("typeTuituCount", array.Sum(c => int.Parse(c["typeTuituCount"].ToString()))); _obj.Add("typeOtherCount", array.Sum(c => int.Parse(c["typeOtherCount"].ToString()))); //合法 _obj.Add("illegal0Count", array.Sum(c => int.Parse(c["illegal0Count"].ToString()))); //违法 外业核实后确定违法数 _obj.Add("illegal1Count", array.Sum(c => int.Parse(c["illegal1Count"].ToString()))); //伪变化 _obj.Add("illegal2Count", array.Sum(c => int.Parse(c["illegal2Count"].ToString()))); //违法类型 未知类型数量 _obj.Add("illegalNullCount", array.Sum(c => int.Parse(c["illegalNullCount"].ToString()))); //违法面积 _obj.Add("illegalHandleAreaList", array.Sum(c => decimal.Parse(c["illegalHandleAreaList"].ToString()))); //整改销号数 _obj.Add("illegalHandle2Status", array.Sum(c => int.Parse(c["illegalHandle2Status"].ToString()))); //尚未整改宗数 _obj.Add("illegalHandle01Status", array.Sum(c => int.Parse(c["illegalHandle01Status"].ToString()))); //销号面积 _obj.Add("illegalHandle2AreaList", array.Sum(c => decimal.Parse(c["illegalHandle2AreaList"].ToString()))); //未整改面积 _obj.Add("illegalHandle01AreaList", array.Sum(c => decimal.Parse(c["illegalHandle01AreaList"].ToString()))); //3日内未整改完成 _obj.Add("notComplete3", array.Sum(c => int.Parse(c["notComplete3"].ToString()))); //7日内未整改完成 _obj.Add("notComplete7", array.Sum(c => int.Parse(c["notComplete7"].ToString()))); //30日内未整改完成 _obj.Add("notComplete30", array.Sum(c => int.Parse(c["notComplete30"].ToString()))); //30日以上未整改完成 _obj.Add("notComplete30More", array.Sum(c => int.Parse(c["notComplete30More"].ToString()))); array.Add(_obj); return new Response { Result = array, Message = "获取数据成功" }; } } public async Task> CaseSynthesisCensusSingle(QueryCaseInfoListReq req) { using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { var currentUser = _auth.GetCurrentUser(); var _user = currentUser.User; string sql1 = "select min(\"Level\") from sys_userorg where \"UserId\"=" + _user.Id; int level = db.Ado.GetInt(sql1); string countyName = ""; if ((string.IsNullOrEmpty(req.countyid) && level == 0) || (_user.Id == -1 && string.IsNullOrEmpty(req.countyid))) { countyName = "临沂市"; var orgList = await db.Queryable().Where(c => c.ParentName == countyName).OrderBy(c => c.SortNo, OrderByType.Asc).ToListAsync(); //无人机发现数量 var reqBody = req.MapTo(); reqBody.is_intact = 1; var allCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //完成核查数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var handleStatusList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //24小时未核查 (不包含已退回的部分) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_not_deal_hour24 = 1; reqBody.is_drawback = 0; var notDealHour24List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //分类型统计案件数量 reqBody = req.MapTo(); reqBody.is_intact = 1; var typeCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.typeid }).Select(c => new { c.countyid, c.typeid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法类型数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var illegalCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.is_illegal }).Select(c => new { c.countyid, c.is_illegal, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleStatusList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.handle_status_id }).Select(c => new { c.countyid, c.handle_status_id, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态 面积 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleAreaList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.handle_status_id }).Select(c => new { c.countyid, c.handle_status_id, area = SqlFunc.AggregateSum(SqlFunc.ToDecimal(c.area)), }).ToList(); //3日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 1; reqBody.is_illegal = 1; var notComplete3List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //7日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 2; reqBody.is_illegal = 1; var notComplete7List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 4; reqBody.is_illegal = 1; var notComplete30List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日以上未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 5; reqBody.is_illegal = 1; var notComplete30MoreList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //var typeList = await db.Queryable().Where(c => c.TypeId == "DRONE_CASE_TYPE").ToListAsync(); var typepid = await db.Queryable().Where(c => c.ItemCode == "DRONE_CASE_TYPE").FirstAsync(); var typeList = await db.Queryable().Where(c => c.ItemId == typepid.ItemId).ToListAsync(); JArray array = new JArray(); for (int i = 0; i < orgList.Count; i++) { var item = orgList[i]; //无人机发现数量 int _allCount = allCountList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //完成核查数量 int _handleStatus = handleStatusList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //24小时未核查 int _notDealHour24 = notDealHour24List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //违法类型数量 int _illegal0Count = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == 0).Sum(c => c.count); int _illegal1Count = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == 1).Sum(c => c.count); int _illegal2Count = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == 2).Sum(c => c.count); int _illegalNullCount = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == null).Sum(c => c.count); //违法 状态查询 int _illegalHandle2Status = illegalHandleStatusList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.count); int _illegalHandle01Status = illegalHandleStatusList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.count); //违法 面积查询 decimal? _illegalHandleAreaList = illegalHandleAreaList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.area); if (_illegalHandleAreaList != null) { _illegalHandleAreaList = Decimal.Round(_illegalHandleAreaList.Value / 666, 2); } decimal? _illegalHandle2AreaList = illegalHandleAreaList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.area); if (_illegalHandle2AreaList != null) { _illegalHandle2AreaList = Decimal.Round(_illegalHandle2AreaList.Value / 666, 2); } decimal? _illegalHandle01AreaList = illegalHandleAreaList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.area); if (_illegalHandle01AreaList != null) { _illegalHandle01AreaList = Decimal.Round(_illegalHandle01AreaList.Value / 666, 2); } //3日内未整改 int _notComplete3 = notComplete3List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //7日内未整改 int _notComplete7 = notComplete7List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //30日内未整改 int _notComplete30 = notComplete30List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //30日以上未整改 int _notComplete30More = notComplete30MoreList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); JObject obj = new JObject(); obj.Add("streetid", item.Id); obj.Add("streetname", item.Name); //分类型统计案件数量 //int _typeCount = typeCountList.Where(c => c.streetid == item.Id).Sum(c => c.count); var typeid_fanxin = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANXIN").First()?.ItemDetailId; var typeid_jiagai = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_JIAGAI").First()?.ItemDetailId; var typeid_fanjian = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANJIAN").First()?.ItemDetailId; var typeid_cunliang = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_CUNLIANG").First()?.ItemDetailId; var typeid_tuitu = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_TUITU").First()?.ItemDetailId; List notTypeids = new List { typeid_fanxin, typeid_jiagai, typeid_fanjian, typeid_cunliang, typeid_tuitu, }; var typeFanxinCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_fanxin).Sum(c => c.count); var typeJiagaiCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_jiagai).Sum(c => c.count); var typeFanjianCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_fanjian).Sum(c => c.count); var typeCunliangCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_cunliang).Sum(c => c.count); var typeTuituCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_tuitu).Sum(c => c.count); var typeOtherCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && !notTypeids.Contains(c.typeid)).Sum(c => c.count); //上报案件数量 obj.Add("allCount", _allCount); //完成外业核查数量 obj.Add("handleStatus", _handleStatus); //24h内未核查 obj.Add("notDealHour24", _notDealHour24); obj.Add("typeFanxinCount", typeFanxinCount); obj.Add("typeJiagaiCount", typeJiagaiCount); obj.Add("typeFanjianCount", typeFanjianCount); obj.Add("typeCunliangCount", typeCunliangCount); obj.Add("typeTuituCount", typeTuituCount); obj.Add("typeOtherCount", typeOtherCount); //合法 obj.Add("illegal0Count", _illegal0Count); //违法 外业核实后确定违法数 obj.Add("illegal1Count", _illegal1Count); //伪变化 obj.Add("illegal2Count", _illegal2Count); //违法类型 未知类型数量 obj.Add("illegalNullCount", _illegalNullCount); //违法面积 obj.Add("illegalHandleAreaList", _illegalHandleAreaList); //整改销号数 obj.Add("illegalHandle2Status", _illegalHandle2Status); //尚未整改宗数 obj.Add("illegalHandle01Status", _illegalHandle01Status); //销号面积 obj.Add("illegalHandle2AreaList", _illegalHandle2AreaList); //未整改面积 obj.Add("illegalHandle01AreaList", _illegalHandle01AreaList); //3日内未整改完成 obj.Add("notComplete3", _notComplete3); //7日内未整改完成 obj.Add("notComplete7", _notComplete7); //30日内未整改完成 obj.Add("notComplete30", _notComplete30); //30日以上未整改完成 obj.Add("notComplete30More", _notComplete30More); array.Add(obj); } JObject _obj = new JObject(); _obj.Add("streetname", "合计"); //上报案件数量 _obj.Add("allCount", array.Sum(c => int.Parse(c["allCount"].ToString()))); //完成外业核查数量 _obj.Add("handleStatus", array.Sum(c => int.Parse(c["handleStatus"].ToString()))); //24h内未核查 _obj.Add("notDealHour24", array.Sum(c => int.Parse(c["notDealHour24"].ToString()))); _obj.Add("typeFanxinCount", array.Sum(c => int.Parse(c["typeFanxinCount"].ToString()))); _obj.Add("typeJiagaiCount", array.Sum(c => int.Parse(c["typeJiagaiCount"].ToString()))); _obj.Add("typeFanjianCount", array.Sum(c => int.Parse(c["typeFanjianCount"].ToString()))); _obj.Add("typeCunliangCount", array.Sum(c => int.Parse(c["typeCunliangCount"].ToString()))); _obj.Add("typeTuituCount", array.Sum(c => int.Parse(c["typeTuituCount"].ToString()))); _obj.Add("typeOtherCount", array.Sum(c => int.Parse(c["typeOtherCount"].ToString()))); //合法 _obj.Add("illegal0Count", array.Sum(c => int.Parse(c["illegal0Count"].ToString()))); //违法 外业核实后确定违法数 _obj.Add("illegal1Count", array.Sum(c => int.Parse(c["illegal1Count"].ToString()))); //伪变化 _obj.Add("illegal2Count", array.Sum(c => int.Parse(c["illegal2Count"].ToString()))); //违法类型 未知类型数量 _obj.Add("illegalNullCount", array.Sum(c => int.Parse(c["illegalNullCount"].ToString()))); //违法面积 _obj.Add("illegalHandleAreaList", array.Sum(c => decimal.Parse(c["illegalHandleAreaList"].ToString()))); //整改销号数 _obj.Add("illegalHandle2Status", array.Sum(c => int.Parse(c["illegalHandle2Status"].ToString()))); //尚未整改宗数 _obj.Add("illegalHandle01Status", array.Sum(c => int.Parse(c["illegalHandle01Status"].ToString()))); //销号面积 _obj.Add("illegalHandle2AreaList", array.Sum(c => decimal.Parse(c["illegalHandle2AreaList"].ToString()))); //未整改面积 _obj.Add("illegalHandle01AreaList", array.Sum(c => decimal.Parse(c["illegalHandle01AreaList"].ToString()))); //3日内未整改完成 _obj.Add("notComplete3", array.Sum(c => int.Parse(c["notComplete3"].ToString()))); //7日内未整改完成 _obj.Add("notComplete7", array.Sum(c => int.Parse(c["notComplete7"].ToString()))); //30日内未整改完成 _obj.Add("notComplete30", array.Sum(c => int.Parse(c["notComplete30"].ToString()))); //30日以上未整改完成 _obj.Add("notComplete30More", array.Sum(c => int.Parse(c["notComplete30More"].ToString()))); array.Add(_obj); return new Response { Result = array, Message = "获取数据成功" }; } else if (string.IsNullOrEmpty(req.countyid) && level == 1) { string sql2 = "select \"OrgId\" from sys_userorg where \"Level\"=1 and \"UserId\"=" + _user.Id; var liststring = db.Ado.SqlQuery(sql2); var orgList = await db.Queryable().Where(c => liststring.Contains(c.Id)).OrderBy(c => c.SortNo, OrderByType.Asc).ToListAsync(); //无人机发现数量 var reqBody = req.MapTo(); reqBody.is_intact = 1; var allCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //完成核查数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var handleStatusList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //24小时未核查 (不包含已退回的部分) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_not_deal_hour24 = 1; reqBody.is_drawback = 0; var notDealHour24List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //分类型统计案件数量 reqBody = req.MapTo(); reqBody.is_intact = 1; var typeCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.typeid }).Select(c => new { c.countyid, c.typeid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法类型数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var illegalCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.is_illegal }).Select(c => new { c.countyid, c.is_illegal, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleStatusList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.handle_status_id }).Select(c => new { c.countyid, c.handle_status_id, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态 面积 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleAreaList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.handle_status_id }).Select(c => new { c.countyid, c.handle_status_id, area = SqlFunc.AggregateSum(SqlFunc.ToDecimal(c.area)), }).ToList(); //3日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 1; reqBody.is_illegal = 1; var notComplete3List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //7日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 2; reqBody.is_illegal = 1; var notComplete7List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 4; reqBody.is_illegal = 1; var notComplete30List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日以上未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 5; reqBody.is_illegal = 1; var notComplete30MoreList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.countyid, c.streetname }).Select(c => new { c.countyid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //var typeList = await db.Queryable().Where(c => c.TypeId == "DRONE_CASE_TYPE").ToListAsync(); var typepid = await db.Queryable().Where(c => c.ItemCode == "DRONE_CASE_TYPE").FirstAsync(); var typeList = await db.Queryable().Where(c => c.ItemId == typepid.ItemId).ToListAsync(); JArray array = new JArray(); for (int i = 0; i < orgList.Count; i++) { var item = orgList[i]; //无人机发现数量 int _allCount = allCountList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //完成核查数量 int _handleStatus = handleStatusList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //24小时未核查 int _notDealHour24 = notDealHour24List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //违法类型数量 int _illegal0Count = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == 0).Sum(c => c.count); int _illegal1Count = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == 1).Sum(c => c.count); int _illegal2Count = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == 2).Sum(c => c.count); int _illegalNullCount = illegalCountList.Where(c => c.countyid == item.Id.ToString() && c.is_illegal == null).Sum(c => c.count); //违法 状态查询 int _illegalHandle2Status = illegalHandleStatusList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.count); int _illegalHandle01Status = illegalHandleStatusList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.count); //违法 面积查询 decimal? _illegalHandleAreaList = illegalHandleAreaList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.area); if (_illegalHandleAreaList != null) { _illegalHandleAreaList = Decimal.Round(_illegalHandleAreaList.Value / 666, 2); } decimal? _illegalHandle2AreaList = illegalHandleAreaList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.area); if (_illegalHandle2AreaList != null) { _illegalHandle2AreaList = Decimal.Round(_illegalHandle2AreaList.Value / 666, 2); } decimal? _illegalHandle01AreaList = illegalHandleAreaList.Where(c => c.countyid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.area); if (_illegalHandle01AreaList != null) { _illegalHandle01AreaList = Decimal.Round(_illegalHandle01AreaList.Value / 666, 2); } //3日内未整改 int _notComplete3 = notComplete3List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //7日内未整改 int _notComplete7 = notComplete7List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //30日内未整改 int _notComplete30 = notComplete30List.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); //30日以上未整改 int _notComplete30More = notComplete30MoreList.Where(c => c.countyid == item.Id.ToString()).Sum(c => c.count); JObject obj = new JObject(); obj.Add("streetid", item.Id); obj.Add("streetname", item.Name); //分类型统计案件数量 //int _typeCount = typeCountList.Where(c => c.streetid == item.Id).Sum(c => c.count); var typeid_fanxin = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANXIN").First()?.ItemDetailId; var typeid_jiagai = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_JIAGAI").First()?.ItemDetailId; var typeid_fanjian = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANJIAN").First()?.ItemDetailId; var typeid_cunliang = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_CUNLIANG").First()?.ItemDetailId; var typeid_tuitu = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_TUITU").First()?.ItemDetailId; List notTypeids = new List { typeid_fanxin, typeid_jiagai, typeid_fanjian, typeid_cunliang, typeid_tuitu, }; var typeFanxinCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_fanxin).Sum(c => c.count); var typeJiagaiCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_jiagai).Sum(c => c.count); var typeFanjianCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_fanjian).Sum(c => c.count); var typeCunliangCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_cunliang).Sum(c => c.count); var typeTuituCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && c.typeid == typeid_tuitu).Sum(c => c.count); var typeOtherCount = typeCountList.Where(c => c.countyid == item.Id.ToString() && !notTypeids.Contains(c.typeid)).Sum(c => c.count); //上报案件数量 obj.Add("allCount", _allCount); //完成外业核查数量 obj.Add("handleStatus", _handleStatus); //24h内未核查 obj.Add("notDealHour24", _notDealHour24); obj.Add("typeFanxinCount", typeFanxinCount); obj.Add("typeJiagaiCount", typeJiagaiCount); obj.Add("typeFanjianCount", typeFanjianCount); obj.Add("typeCunliangCount", typeCunliangCount); obj.Add("typeTuituCount", typeTuituCount); obj.Add("typeOtherCount", typeOtherCount); //合法 obj.Add("illegal0Count", _illegal0Count); //违法 外业核实后确定违法数 obj.Add("illegal1Count", _illegal1Count); //伪变化 obj.Add("illegal2Count", _illegal2Count); //违法类型 未知类型数量 obj.Add("illegalNullCount", _illegalNullCount); //违法面积 obj.Add("illegalHandleAreaList", _illegalHandleAreaList); //整改销号数 obj.Add("illegalHandle2Status", _illegalHandle2Status); //尚未整改宗数 obj.Add("illegalHandle01Status", _illegalHandle01Status); //销号面积 obj.Add("illegalHandle2AreaList", _illegalHandle2AreaList); //未整改面积 obj.Add("illegalHandle01AreaList", _illegalHandle01AreaList); //3日内未整改完成 obj.Add("notComplete3", _notComplete3); //7日内未整改完成 obj.Add("notComplete7", _notComplete7); //30日内未整改完成 obj.Add("notComplete30", _notComplete30); //30日以上未整改完成 obj.Add("notComplete30More", _notComplete30More); array.Add(obj); } JObject _obj = new JObject(); _obj.Add("streetname", "合计"); //上报案件数量 _obj.Add("allCount", array.Sum(c => int.Parse(c["allCount"].ToString()))); //完成外业核查数量 _obj.Add("handleStatus", array.Sum(c => int.Parse(c["handleStatus"].ToString()))); //24h内未核查 _obj.Add("notDealHour24", array.Sum(c => int.Parse(c["notDealHour24"].ToString()))); _obj.Add("typeFanxinCount", array.Sum(c => int.Parse(c["typeFanxinCount"].ToString()))); _obj.Add("typeJiagaiCount", array.Sum(c => int.Parse(c["typeJiagaiCount"].ToString()))); _obj.Add("typeFanjianCount", array.Sum(c => int.Parse(c["typeFanjianCount"].ToString()))); _obj.Add("typeCunliangCount", array.Sum(c => int.Parse(c["typeCunliangCount"].ToString()))); _obj.Add("typeTuituCount", array.Sum(c => int.Parse(c["typeTuituCount"].ToString()))); _obj.Add("typeOtherCount", array.Sum(c => int.Parse(c["typeOtherCount"].ToString()))); //合法 _obj.Add("illegal0Count", array.Sum(c => int.Parse(c["illegal0Count"].ToString()))); //违法 外业核实后确定违法数 _obj.Add("illegal1Count", array.Sum(c => int.Parse(c["illegal1Count"].ToString()))); //伪变化 _obj.Add("illegal2Count", array.Sum(c => int.Parse(c["illegal2Count"].ToString()))); //违法类型 未知类型数量 _obj.Add("illegalNullCount", array.Sum(c => int.Parse(c["illegalNullCount"].ToString()))); //违法面积 _obj.Add("illegalHandleAreaList", array.Sum(c => decimal.Parse(c["illegalHandleAreaList"].ToString()))); //整改销号数 _obj.Add("illegalHandle2Status", array.Sum(c => int.Parse(c["illegalHandle2Status"].ToString()))); //尚未整改宗数 _obj.Add("illegalHandle01Status", array.Sum(c => int.Parse(c["illegalHandle01Status"].ToString()))); //销号面积 _obj.Add("illegalHandle2AreaList", array.Sum(c => decimal.Parse(c["illegalHandle2AreaList"].ToString()))); //未整改面积 _obj.Add("illegalHandle01AreaList", array.Sum(c => decimal.Parse(c["illegalHandle01AreaList"].ToString()))); //3日内未整改完成 _obj.Add("notComplete3", array.Sum(c => int.Parse(c["notComplete3"].ToString()))); //7日内未整改完成 _obj.Add("notComplete7", array.Sum(c => int.Parse(c["notComplete7"].ToString()))); //30日内未整改完成 _obj.Add("notComplete30", array.Sum(c => int.Parse(c["notComplete30"].ToString()))); //30日以上未整改完成 _obj.Add("notComplete30More", array.Sum(c => int.Parse(c["notComplete30More"].ToString()))); array.Add(_obj); return new Response { Result = array, Message = "获取数据成功" }; } else { if (level > 1) { JArray array1 = new JArray(); JObject _obj1 = new JObject(); _obj1.Add("streetname", "合计"); //上报案件数量 _obj1.Add("allCount", 0); //完成外业核查数量 _obj1.Add("handleStatus", 0); //24h内未核查 _obj1.Add("notDealHour24", 0); _obj1.Add("typeFanxinCount", 0); _obj1.Add("typeJiagaiCount", 0); _obj1.Add("typeFanjianCount", 0); _obj1.Add("typeCunliangCount", 0); _obj1.Add("typeTuituCount", 0); _obj1.Add("typeOtherCount", 0); //合法 _obj1.Add("illegal0Count", 0); //违法 外业核实后确定违法数 _obj1.Add("illegal1Count", 0); //伪变化 _obj1.Add("illegal2Count", 0); //违法类型 未知类型数量 _obj1.Add("illegalNullCount", 0); //违法面积 _obj1.Add("illegalHandleAreaList", 0); //整改销号数 _obj1.Add("illegalHandle2Status", 0); //尚未整改宗数 _obj1.Add("illegalHandle01Status", 0); //销号面积 _obj1.Add("illegalHandle2AreaList", 0); //未整改面积 _obj1.Add("illegalHandle01AreaList", 0); //3日内未整改完成 _obj1.Add("notComplete3", 0); //7日内未整改完成 _obj1.Add("notComplete7", 0); //30日内未整改完成 _obj1.Add("notComplete30", 0); //30日以上未整改完成 _obj1.Add("notComplete30More", 0); array1.Add(_obj1); return new Response { Result = array1, Message = "获取数据成功" }; } string sql = "select \"Name\" from sys_org where \"Id\"=" + req.countyid; string name = db.Ado.GetString(sql); var orgList = await db.Queryable().Where(c => c.ParentName == name).OrderBy(c => c.SortNo, OrderByType.Asc).ToListAsync(); //无人机发现数量 var reqBody = req.MapTo(); reqBody.is_intact = 1; var allCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //完成核查数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var handleStatusList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //24小时未核查 (不包含已退回的部分) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_not_deal_hour24 = 1; reqBody.is_drawback = 0; var notDealHour24List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //分类型统计案件数量 reqBody = req.MapTo(); reqBody.is_intact = 1; var typeCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.typeid }).Select(c => new { c.streetid, c.typeid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法类型数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; var illegalCountList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.is_illegal }).Select(c => new { c.streetid, c.is_illegal, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleStatusList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.handle_status_id }).Select(c => new { c.streetid, c.handle_status_id, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态 面积 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; var illegalHandleAreaList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.handle_status_id }).Select(c => new { c.streetid, c.handle_status_id, area = SqlFunc.AggregateSum(SqlFunc.ToDecimal(c.area)), }).ToList(); //3日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 1; reqBody.is_illegal = 1; var notComplete3List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //7日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 2; reqBody.is_illegal = 1; var notComplete7List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 4; reqBody.is_illegal = 1; var notComplete30List = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日以上未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 5; reqBody.is_illegal = 1; var notComplete30MoreList = QueryCaseInfoSingleList(db, reqBody, _user, 0).GroupBy(c => new { c.streetid, c.streetname }).Select(c => new { c.streetid, c.streetname, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //var typeList = await db.Queryable().Where(c => c.TypeId == "DRONE_CASE_TYPE").ToListAsync(); var typepid = await db.Queryable().Where(c => c.ItemCode == "DRONE_CASE_TYPE").FirstAsync(); var typeList = await db.Queryable().Where(c => c.ItemId == typepid.ItemId).ToListAsync(); JArray array = new JArray(); for (int i = 0; i < orgList.Count; i++) { var item = orgList[i]; //无人机发现数量 int _allCount = allCountList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //完成核查数量 int _handleStatus = handleStatusList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //24小时未核查 int _notDealHour24 = notDealHour24List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //违法类型数量 int _illegal0Count = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == 0).Sum(c => c.count); int _illegal1Count = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == 1).Sum(c => c.count); int _illegal2Count = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == 2).Sum(c => c.count); int _illegalNullCount = illegalCountList.Where(c => c.streetid == item.Id.ToString() && c.is_illegal == null).Sum(c => c.count); //违法 状态查询 int _illegalHandle2Status = illegalHandleStatusList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.count); int _illegalHandle01Status = illegalHandleStatusList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.count); //违法 面积查询 decimal? _illegalHandleAreaList = illegalHandleAreaList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.area); if (_illegalHandleAreaList != null) { _illegalHandleAreaList = Decimal.Round(_illegalHandleAreaList.Value / 666, 2); } decimal? _illegalHandle2AreaList = illegalHandleAreaList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.area); if (_illegalHandle2AreaList != null) { _illegalHandle2AreaList = Decimal.Round(_illegalHandle2AreaList.Value / 666, 2); } decimal? _illegalHandle01AreaList = illegalHandleAreaList.Where(c => c.streetid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.area); if (_illegalHandle01AreaList != null) { _illegalHandle01AreaList = Decimal.Round(_illegalHandle01AreaList.Value / 666, 2); } //3日内未整改 int _notComplete3 = notComplete3List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //7日内未整改 int _notComplete7 = notComplete7List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //30日内未整改 int _notComplete30 = notComplete30List.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); //30日以上未整改 int _notComplete30More = notComplete30MoreList.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count); JObject obj = new JObject(); obj.Add("streetid", item.Id); obj.Add("streetname", item.Name); //分类型统计案件数量 //int _typeCount = typeCountList.Where(c => c.streetid == item.Id).Sum(c => c.count); var typeid_fanxin = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANXIN").First()?.ItemDetailId; var typeid_jiagai = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_JIAGAI").First()?.ItemDetailId; var typeid_fanjian = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_FANJIAN").First()?.ItemDetailId; var typeid_cunliang = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_CUNLIANG").First()?.ItemDetailId; var typeid_tuitu = typeList.Where(c => c.ItemValue == "DRONE_CASE_TYPE_TUITU").First()?.ItemDetailId; List notTypeids = new List { typeid_fanxin, typeid_jiagai, typeid_fanjian, typeid_cunliang, typeid_tuitu, }; var typeFanxinCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_fanxin).Sum(c => c.count); var typeJiagaiCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_jiagai).Sum(c => c.count); var typeFanjianCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_fanjian).Sum(c => c.count); var typeCunliangCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_cunliang).Sum(c => c.count); var typeTuituCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && c.typeid == typeid_tuitu).Sum(c => c.count); var typeOtherCount = typeCountList.Where(c => c.streetid == item.Id.ToString() && !notTypeids.Contains(c.typeid)).Sum(c => c.count); //上报案件数量 obj.Add("allCount", _allCount); //完成外业核查数量 obj.Add("handleStatus", _handleStatus); //24h内未核查 obj.Add("notDealHour24", _notDealHour24); obj.Add("typeFanxinCount", typeFanxinCount); obj.Add("typeJiagaiCount", typeJiagaiCount); obj.Add("typeFanjianCount", typeFanjianCount); obj.Add("typeCunliangCount", typeCunliangCount); obj.Add("typeTuituCount", typeTuituCount); obj.Add("typeOtherCount", typeOtherCount); //合法 obj.Add("illegal0Count", _illegal0Count); //违法 外业核实后确定违法数 obj.Add("illegal1Count", _illegal1Count); //伪变化 obj.Add("illegal2Count", _illegal2Count); //违法类型 未知类型数量 obj.Add("illegalNullCount", _illegalNullCount); //违法面积 obj.Add("illegalHandleAreaList", _illegalHandleAreaList); //整改销号数 obj.Add("illegalHandle2Status", _illegalHandle2Status); //尚未整改宗数 obj.Add("illegalHandle01Status", _illegalHandle01Status); //销号面积 obj.Add("illegalHandle2AreaList", _illegalHandle2AreaList); //未整改面积 obj.Add("illegalHandle01AreaList", _illegalHandle01AreaList); //3日内未整改完成 obj.Add("notComplete3", _notComplete3); //7日内未整改完成 obj.Add("notComplete7", _notComplete7); //30日内未整改完成 obj.Add("notComplete30", _notComplete30); //30日以上未整改完成 obj.Add("notComplete30More", _notComplete30More); array.Add(obj); } JObject _obj = new JObject(); _obj.Add("streetname", "合计"); //上报案件数量 _obj.Add("allCount", array.Sum(c => int.Parse(c["allCount"].ToString()))); //完成外业核查数量 _obj.Add("handleStatus", array.Sum(c => int.Parse(c["handleStatus"].ToString()))); //24h内未核查 _obj.Add("notDealHour24", array.Sum(c => int.Parse(c["notDealHour24"].ToString()))); _obj.Add("typeFanxinCount", array.Sum(c => int.Parse(c["typeFanxinCount"].ToString()))); _obj.Add("typeJiagaiCount", array.Sum(c => int.Parse(c["typeJiagaiCount"].ToString()))); _obj.Add("typeFanjianCount", array.Sum(c => int.Parse(c["typeFanjianCount"].ToString()))); _obj.Add("typeCunliangCount", array.Sum(c => int.Parse(c["typeCunliangCount"].ToString()))); _obj.Add("typeTuituCount", array.Sum(c => int.Parse(c["typeTuituCount"].ToString()))); _obj.Add("typeOtherCount", array.Sum(c => int.Parse(c["typeOtherCount"].ToString()))); //合法 _obj.Add("illegal0Count", array.Sum(c => int.Parse(c["illegal0Count"].ToString()))); //违法 外业核实后确定违法数 _obj.Add("illegal1Count", array.Sum(c => int.Parse(c["illegal1Count"].ToString()))); //伪变化 _obj.Add("illegal2Count", array.Sum(c => int.Parse(c["illegal2Count"].ToString()))); //违法类型 未知类型数量 _obj.Add("illegalNullCount", array.Sum(c => int.Parse(c["illegalNullCount"].ToString()))); //违法面积 _obj.Add("illegalHandleAreaList", array.Sum(c => decimal.Parse(c["illegalHandleAreaList"].ToString()))); //整改销号数 _obj.Add("illegalHandle2Status", array.Sum(c => int.Parse(c["illegalHandle2Status"].ToString()))); //尚未整改宗数 _obj.Add("illegalHandle01Status", array.Sum(c => int.Parse(c["illegalHandle01Status"].ToString()))); //销号面积 _obj.Add("illegalHandle2AreaList", array.Sum(c => decimal.Parse(c["illegalHandle2AreaList"].ToString()))); //未整改面积 _obj.Add("illegalHandle01AreaList", array.Sum(c => decimal.Parse(c["illegalHandle01AreaList"].ToString()))); //3日内未整改完成 _obj.Add("notComplete3", array.Sum(c => int.Parse(c["notComplete3"].ToString()))); //7日内未整改完成 _obj.Add("notComplete7", array.Sum(c => int.Parse(c["notComplete7"].ToString()))); //30日内未整改完成 _obj.Add("notComplete30", array.Sum(c => int.Parse(c["notComplete30"].ToString()))); //30日以上未整改完成 _obj.Add("notComplete30More", array.Sum(c => int.Parse(c["notComplete30More"].ToString()))); array.Add(_obj); return new Response { Result = array, Message = "获取数据成功" }; } } } public Response ListToExcel(JArray list, List headers) { Response response = new Response(); try { HSSFWorkbook workbook = new HSSFWorkbook(); #region 内容样式 IFont font1 = workbook.CreateFont(); //创建一个字体样式对象 font1.FontName = "Microsoft YaHei"; //和excel里面的字体对应 //font1.Boldweight = short.MaxValue;//字体加粗 font1.FontHeightInPoints = 12; //字体大小 ICellStyle style = workbook.CreateCellStyle(); //创建样式对象 style.BorderBottom = BorderStyle.Thin; style.BorderLeft = BorderStyle.Thin; style.BorderRight = BorderStyle.Thin; style.BorderTop = BorderStyle.Thin; style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; style.VerticalAlignment = VerticalAlignment.Center; style.SetFont(font1); //将字体样式赋给样式对象 style.WrapText = true; #endregion #region 标题样式 IFont font = workbook.CreateFont(); //创建一个字体样式对象 font.FontName = "Microsoft YaHei"; //和excel里面的字体对应 font.Boldweight = (short)FontBoldWeight.Bold; //字体加粗 font.FontHeightInPoints = 12; //字体大小 ICellStyle style1 = workbook.CreateCellStyle(); //创建样式对象 style1.BorderBottom = BorderStyle.Thin; style1.BorderLeft = BorderStyle.Thin; style1.BorderRight = BorderStyle.Thin; style1.BorderTop = BorderStyle.Thin; style1.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; style1.VerticalAlignment = VerticalAlignment.Center; style1.SetFont(font); //将字体样式赋给样式对象 #endregion #region 创建表头 int m = list.Count() / 60000 + 1; for (int k = 0; k < m; k++) { ISheet sheet = workbook.CreateSheet("Sheet" + k.ToString()); IRow rowHeader = sheet.CreateRow(0); rowHeader.Height = 20 * 30; for (int i = 0; i < headers.Count; i++) { ModuleColumn header = headers[i]; rowHeader.CreateCell(i); rowHeader.Cells[i].CellStyle = style1; rowHeader.Cells[i].SetCellValue(header.value); sheet.SetColumnWidth(i, 20 * 350); } #endregion #region 填充数据 var val = (k + 1) * 60000; var num = 60000; if (val > list.Count()) { num = list.Count() - k * 60000; } for (int i = 0; i < num; i++) //循环数据 { JObject item = (JObject)list[k * 60000 + i]; //获取数据 IRow dataRow = sheet.CreateRow(i + 1); //创建行 for (int j = 0; j < headers.Count; j++) //循环表头 { //数据处理 var objValue = ""; if (item.ContainsKey(headers[j].key)) { objValue = item[headers[j].key].ToString(); } else { objValue = ""; } //创建单元格 dataRow.CreateCell(j); dataRow.Cells[j].CellStyle = style; //添加单元格样式 if (objValue != null && !string.IsNullOrEmpty(objValue.ToString())) { dataRow.Cells[j].SetCellValue(objValue.ToString()); //填充Excel单元格 } else { dataRow.Cells[j].SetCellValue(""); //填充Excel单元格 } } } } #endregion response.Result = new MemoryStream(); workbook.Write(response.Result); workbook = null; response.Result.Close(); response.Result.Dispose(); response.Code = 200; response.Message = "获取成功"; } catch (Exception ex) { response.Code = 500; response.Message = ex.Message; } return response; } /// /// 综合统计,统计镇权限 /// /// public JArray CaseSynthesisCensusStreet(QueryCaseInfoListReq req) { using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { //当前账号的权限 var currentUser = _auth.GetCurrentUser(); var _user = currentUser.User; var currentOrgs = currentUser.Orgs.Select(c => c.Id).ToList(); //当前县名称 string countyName = _configuration.GetSection("CountyName").Value; if (string.IsNullOrEmpty(countyName)) countyName = "费县"; //查询系统中镇的数据 var streetList = db.Queryable().Where(c => c.ParentName == countyName).ToList(); //当前用户所属的镇 var currentStreet = streetList.Where(c => currentOrgs.Contains(c.Id)).FirstOrDefault(); if (currentStreet == null) throw new Exception("没有权限"); JArray array = new JArray(); if (currentStreet.Name == "费城街道") { // 获取工作区案件统计的数据 // array = GetSynthesisCensusWorkAreaData(db, currentStreet, _user, req); } else { // 获取街道案件统计数据 array = GetSynthesisCensusStreetData(db, currentStreet, _user, req); } return array; } } /// /// 获取街道案件统计数据 /// /// /// /// /// /// private JArray GetSynthesisCensusStreetData(SqlSugarClient db, SysOrg currentStreet, SysUser _user, QueryCaseInfoListReq req) { var orgList = db.Queryable().Where(c => c.ParentId == currentStreet.Id).OrderBy(c => c.SortNo, OrderByType.Asc).ToList(); //无人机发现数量 var reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.streetid = currentStreet.Id.ToString(); var allCountList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid }).Select(c => new { c.communityid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //完成核查数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; reqBody.streetid = currentStreet.Id.ToString(); var handleStatusList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid }).Select(c => new { c.communityid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //24小时未核查 (不包含已退回的部分) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_not_deal_hour24 = 1; reqBody.is_drawback = 0; reqBody.streetid = currentStreet.Id.ToString(); var notDealHour24List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid }).Select(c => new { c.communityid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //分类型统计案件数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.streetid = currentStreet.Id.ToString(); var typeCountList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid, c.typeid }).Select(c => new { c.communityid, c.typeid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法类型数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_deal = 1; reqBody.streetid = currentStreet.Id.ToString(); var illegalCountList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid, c.is_illegal }).Select(c => new { c.communityid, c.is_illegal, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态数量 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; reqBody.streetid = currentStreet.Id.ToString(); var illegalHandleStatusList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid, c.handle_status_id }).Select(c => new { c.communityid, c.handle_status_id, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //违法数据 整改状态 面积 reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_illegal = 1; reqBody.is_deal = 1; reqBody.streetid = currentStreet.Id.ToString(); var illegalHandleAreaList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid, c.handle_status_id }).Select(c => new { c.communityid, c.handle_status_id, area = SqlFunc.AggregateSum(SqlFunc.ToDecimal(c.area)), }).ToList(); //3日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 1; reqBody.is_illegal = 1; reqBody.streetid = currentStreet.Id.ToString(); var notComplete3List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid }).Select(c => new { c.communityid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //7日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 2; reqBody.is_illegal = 1; reqBody.streetid = currentStreet.Id.ToString(); var notComplete7List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid }).Select(c => new { c.communityid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日内未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 4; reqBody.is_illegal = 1; reqBody.streetid = currentStreet.Id.ToString(); var notComplete30List = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid }).Select(c => new { c.communityid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); //30日以上未整改 (外业确认违法的案件) reqBody = req.MapTo(); reqBody.is_intact = 1; reqBody.is_complete = 0; reqBody.out_time_flag = 5; reqBody.is_illegal = 1; reqBody.streetid = currentStreet.Id.ToString(); var notComplete30MoreList = QueryCaseInfoList(db, reqBody, _user, 0).GroupBy(c => new { c.communityid }).Select(c => new { c.communityid, count = SqlFunc.AggregateCount(c.Id), }).ToList(); var typepid = db.Queryable().Where(c => c.ItemCode == "DRONE_CASE_TYPE").First(); var typeList = db.Queryable().Where(c => c.ItemId == typepid.ItemId).ToList(); //var typeList = db.Queryable().Where(c => c.TypeId == "DRONE_CASE_TYPE").ToList(); JArray array = new JArray(); for (int i = 0; i < orgList.Count; i++) { var item = orgList[i]; //无人机发现数量 int _allCount = allCountList.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.count); //完成核查数量 int _handleStatus = handleStatusList.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.count); //24小时未核查 int _notDealHour24 = notDealHour24List.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.count); //违法类型数量 int _illegal0Count = illegalCountList.Where(c => c.communityid == item.Id.ToString() && c.is_illegal == 0).Sum(c => c.count); int _illegal1Count = illegalCountList.Where(c => c.communityid == item.Id.ToString() && c.is_illegal == 1).Sum(c => c.count); int _illegal2Count = illegalCountList.Where(c => c.communityid == item.Id.ToString() && c.is_illegal == 2).Sum(c => c.count); int _illegalNullCount = illegalCountList.Where(c => c.communityid == item.Id.ToString() && c.is_illegal == null).Sum(c => c.count); //违法 状态查询 int _illegalHandle2Status = illegalHandleStatusList.Where(c => c.communityid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.count); int _illegalHandle01Status = illegalHandleStatusList.Where(c => c.communityid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.count); //违法 面积查询 decimal? _illegalHandleAreaList = illegalHandleAreaList.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.area); if (_illegalHandleAreaList != null) { _illegalHandleAreaList = Decimal.Round(_illegalHandleAreaList.Value / 666, 2); } decimal? _illegalHandle2AreaList = illegalHandleAreaList.Where(c => c.communityid == item.Id.ToString() && c.handle_status_id == 2).Sum(c => c.area); if (_illegalHandle2AreaList != null) { _illegalHandle2AreaList = Decimal.Round(_illegalHandle2AreaList.Value / 666, 2); } decimal? _illegalHandle01AreaList = illegalHandleAreaList.Where(c => c.communityid == item.Id.ToString() && c.handle_status_id < 2).Sum(c => c.area); if (_illegalHandle01AreaList != null) { _illegalHandle01AreaList = Decimal.Round(_illegalHandle01AreaList.Value / 666, 2); } //3日内未整改 int _notComplete3 = notComplete3List.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.count); //7日内未整改 int _notComplete7 = notComplete7List.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.count); //30日内未整改 int _notComplete30 = notComplete30List.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.count); //30日以上未整改 int _notComplete30More = notComplete30MoreList.Where(c => c.communityid == item.Id.ToString()).Sum(c => c.count); JObject obj = new JObject(); //所属镇 obj.Add("streetid", currentStreet.Id); obj.Add("streetname", currentStreet.Name); //所属社区 obj.Add("communityid", item.Id); obj.Add("communityname", item.Name); obj.Add("is_area", 0); //分类型统计案件数量 //int _typeCount = typeCountList.Where(c => c.streetid == item.Id).Sum(c => c.count); var typeid_fanxin = typeList.Where(c => c.ItemCode == "DRONE_CASE_TYPE_FANXIN").First().ItemDetailId; var typeid_jiagai = typeList.Where(c => c.ItemCode == "DRONE_CASE_TYPE_JIAGAI").First().ItemDetailId; var typeid_fanjian = typeList.Where(c => c.ItemCode == "DRONE_CASE_TYPE_FANJIAN").First().ItemDetailId; var typeid_cunliang = typeList.Where(c => c.ItemCode == "DRONE_CASE_TYPE_CUNLIANG").First().ItemDetailId; var typeid_tuitu = typeList.Where(c => c.ItemCode == "DRONE_CASE_TYPE_TUITU").First().ItemDetailId; List notTypeids = new List { typeid_fanxin, typeid_jiagai, typeid_fanjian, typeid_cunliang, typeid_tuitu, }; var typeFanxinCount = typeCountList.Where(c => c.communityid == item.Id.ToString() && c.typeid == typeid_fanxin).Sum(c => c.count); var typeJiagaiCount = typeCountList.Where(c => c.communityid == item.Id.ToString() && c.typeid == typeid_jiagai).Sum(c => c.count); var typeFanjianCount = typeCountList.Where(c => c.communityid == item.Id.ToString() && c.typeid == typeid_fanjian).Sum(c => c.count); var typeCunliangCount = typeCountList.Where(c => c.communityid == item.Id.ToString() && c.typeid == typeid_cunliang).Sum(c => c.count); var typeTuituCount = typeCountList.Where(c => c.communityid == item.Id.ToString() && c.typeid == typeid_tuitu).Sum(c => c.count); var typeOtherCount = typeCountList.Where(c => c.communityid == item.Id.ToString() && !notTypeids.Contains(c.typeid)).Sum(c => c.count); //上报案件数量 obj.Add("allCount", _allCount); //完成外业核查数量 obj.Add("handleStatus", _handleStatus); //24h内未核查 obj.Add("notDealHour24", _notDealHour24); obj.Add("typeFanxinCount", typeFanxinCount); obj.Add("typeJiagaiCount", typeJiagaiCount); obj.Add("typeFanjianCount", typeFanjianCount); obj.Add("typeCunliangCount", typeCunliangCount); obj.Add("typeTuituCount", typeTuituCount); obj.Add("typeOtherCount", typeOtherCount); //合法 obj.Add("illegal0Count", _illegal0Count); //违法 外业核实后确定违法数 obj.Add("illegal1Count", _illegal1Count); //伪变化 obj.Add("illegal2Count", _illegal2Count); //违法类型 未知类型数量 obj.Add("illegalNullCount", _illegalNullCount); //违法面积 obj.Add("illegalHandleAreaList", _illegalHandleAreaList); //整改销号数 obj.Add("illegalHandle2Status", _illegalHandle2Status); //尚未整改宗数 obj.Add("illegalHandle01Status", _illegalHandle01Status); //销号面积 obj.Add("illegalHandle2AreaList", _illegalHandle2AreaList); //未整改面积 obj.Add("illegalHandle01AreaList", _illegalHandle01AreaList); //3日内未整改完成 obj.Add("notComplete3", _notComplete3); //7日内未整改完成 obj.Add("notComplete7", _notComplete7); //30日内未整改完成 obj.Add("notComplete30", _notComplete30); //30日以上未整改完成 obj.Add("notComplete30More", _notComplete30More); array.Add(obj); } JObject _obj = new JObject(); //所属镇 _obj.Add("streetid", currentStreet.Id); _obj.Add("streetname", currentStreet.Name); _obj.Add("communityid", ""); _obj.Add("communityname", "合计"); _obj.Add("is_area", 0); //上报案件数量 _obj.Add("allCount", array.Sum(c => int.Parse(c["allCount"].ToString()))); //完成外业核查数量 _obj.Add("handleStatus", array.Sum(c => int.Parse(c["handleStatus"].ToString()))); //24h内未核查 _obj.Add("notDealHour24", array.Sum(c => int.Parse(c["notDealHour24"].ToString()))); _obj.Add("typeFanxinCount", array.Sum(c => int.Parse(c["typeFanxinCount"].ToString()))); _obj.Add("typeJiagaiCount", array.Sum(c => int.Parse(c["typeJiagaiCount"].ToString()))); _obj.Add("typeFanjianCount", array.Sum(c => int.Parse(c["typeFanjianCount"].ToString()))); _obj.Add("typeCunliangCount", array.Sum(c => int.Parse(c["typeCunliangCount"].ToString()))); _obj.Add("typeTuituCount", array.Sum(c => int.Parse(c["typeTuituCount"].ToString()))); _obj.Add("typeOtherCount", array.Sum(c => int.Parse(c["typeOtherCount"].ToString()))); //合法 _obj.Add("illegal0Count", array.Sum(c => int.Parse(c["illegal0Count"].ToString()))); //违法 外业核实后确定违法数 _obj.Add("illegal1Count", array.Sum(c => int.Parse(c["illegal1Count"].ToString()))); //伪变化 _obj.Add("illegal2Count", array.Sum(c => int.Parse(c["illegal2Count"].ToString()))); //违法类型 未知类型数量 _obj.Add("illegalNullCount", array.Sum(c => int.Parse(c["illegalNullCount"].ToString()))); //违法面积 _obj.Add("illegalHandleAreaList", array.Sum(c => decimal.Parse(c["illegalHandleAreaList"].ToString()))); //整改销号数 _obj.Add("illegalHandle2Status", array.Sum(c => int.Parse(c["illegalHandle2Status"].ToString()))); //尚未整改宗数 _obj.Add("illegalHandle01Status", array.Sum(c => int.Parse(c["illegalHandle01Status"].ToString()))); //销号面积 _obj.Add("illegalHandle2AreaList", array.Sum(c => decimal.Parse(c["illegalHandle2AreaList"].ToString()))); //未整改面积 _obj.Add("illegalHandle01AreaList", array.Sum(c => decimal.Parse(c["illegalHandle01AreaList"].ToString()))); //3日内未整改完成 _obj.Add("notComplete3", array.Sum(c => int.Parse(c["notComplete3"].ToString()))); //7日内未整改完成 _obj.Add("notComplete7", array.Sum(c => int.Parse(c["notComplete7"].ToString()))); //30日内未整改完成 _obj.Add("notComplete30", array.Sum(c => int.Parse(c["notComplete30"].ToString()))); //30日以上未整改完成 _obj.Add("notComplete30More", array.Sum(c => int.Parse(c["notComplete30More"].ToString()))); array.Add(_obj); return array; } #endregion #region 关闭案件,同步航飞库复提关闭用 /// /// 关闭案件 /// /// /// public async Task> CloseDroneCaseInfos(string no, string subject) { using (var db = base.UnitWork.CreateContext().Db.CopyNew()) { int flag = 1; switch (subject) { case "Subject_WFYD": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoSingle { is_intact = 99, close_time = DateTime.Now, is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; case "Subject_GDFLH": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoFLH { is_intact = 99, close_time = DateTime.Now, is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; case "Subject_FFCK": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoMinerals { is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; case "Subject_XCSJ": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoXcsj { is_intact = 99, close_time = DateTime.Now, is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; case "Subject_ZDWT1": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoZdwt1 { is_intact = 99, close_time = DateTime.Now, is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; case "Subject_ZDWT2": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoZdwt2 { is_intact = 99, close_time = DateTime.Now, is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; case "Subject_STBHHXJG": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoSTHX { is_intact = 99, close_time = DateTime.Now, is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; case "Subject_STXF": flag = await db.Updateable() .SetColumns(c => new DroneCaseInfoSTXF { is_intact = 99, close_time = DateTime.Now, is_closed = 1, close_reason = "复提关闭" }) .Where(c => c.original_case_no == no) .ExecuteCommandAsync(); break; } if (flag > 0) return new Response { Result = true, Message = "关闭成功" }; else return new Response { Code = 500, Result = false, Message = "关闭失败" }; } } #endregion } }