feixian_weifajianguan/OpenAuth.App/ServiceApp/DroneScreenDisplay/DroneScreenDisplayApp.cs

2478 lines
125 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

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

using Infrastructure;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using OpenAuth.App.Base;
using OpenAuth.App.BasicQueryService;
using OpenAuth.App.Interface;
using OpenAuth.App.Request;
using OpenAuth.App.Response;
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenAuth.App.DroneScreenDisplay.Response;
using OpenAuth.App.ServiceApp.DroneScreenDisplay.Response;
using OpenAuth.App.ServiceApp.Response;
using Infrastructure.Extensions;
using DocumentFormat.OpenXml.Bibliography;
using OpenAuth.App.BaseApp.Base;
namespace OpenAuth.App.DroneScreenDisplay
{
public partial class DroneScreenDisplayApp : SqlSugarBaseApp<Repository.Domain.DroneCaseInfoSingle, SugarDbContext>
{
private IConfiguration _configuration;
ISqlSugarClient client;
CommonDataManager _commonDataManager;
/*
* 根据不同的标签来区分文件的不同分类
* 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 DroneScreenDisplayApp(ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<Repository.Domain.DroneCaseInfoSingle> repository, IAuth auth, IConfiguration configuration, ISqlSugarClient client, CommonDataManager commonDataManager) : base(unitWork, repository, auth)
{
_configuration = configuration;
this.client = client;
_commonDataManager = commonDataManager;
}
#region 大屏展示
/// <summary>
/// 查询案件公共过滤方法
/// </summary>
/// <param name="db"></param>
/// <returns></returns>
private ISugarQueryable<DroneCaseInfoSingle> GetCaseQueryable(GetQueryCaseReq req = null, int? order = null)
{
if (req == null) req = new GetQueryCaseReq();
req.Init();
var query = client.Queryable<DroneCaseInfoSingle>()
//未删除
.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_jieshou == 0 || c.is_jieshou == null)
.WhereIF(req.is_examine == 1, c => c.is_jieshou == 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.countyid == req.streetid || c.streetid == req.streetid || c.communityid == req.streetid))
//.WhereIF(!string.IsNullOrEmpty(req.streetid), c => c.streetid == req.streetid)
//.WhereIF(!string.IsNullOrEmpty(req.countyid), c => c.countyid == req.countyid)
;
return query;
}
/// <summary>
/// 查询条件组装
/// </summary>
/// <param name="db"></param>
/// <param name="req"></param>
/// <param name="user"></param>
/// <param name="is_order"></param>
/// <returns></returns>
private ISugarQueryable<DroneCaseInfoSingle> QueryCaseInfoList(QueryCaseInfoListReq req, SysUser user, int? is_order = 1, List<string> roles = null)
{
DateTime? threeTime = DateTime.Now.AddDays(-3);
DateTime? sevenTime = DateTime.Now.AddDays(-7);
////查询部门及下级部门
var orgid = client.Queryable<SysOrg>().ToChildList(a => a.ParentId, req.countyid).Select(a => a.Id.ToString()).ToList();
var query = client.Queryable<DroneCaseInfoSingle>().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<SysUserOrg>().Where(it => it.OrgId.ToString() == c.communityid && it.UserId == user.Id).Any()
|| SqlFunc.Subqueryable<SysUserOrg>().Where(it => it.OrgId.ToString() == c.streetid && it.UserId == user.Id).Any()
|| SqlFunc.Subqueryable<SysUserOrg>().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<DroneRelevance>().Where(it => it.SecondId == c.Id && it.Key == Define.USERDRONECASE && it.FirstId == user.Id.ToString()).Any())
//处理状态:未办理、办理中、已办结
.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<SysUser>().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_jieshou == null || c.is_jieshou == 0)
.WhereIF(req.is_examine == 1, c => c.is_jieshou == 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(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_jieshou == 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_jieshou == null || c.is_jieshou == 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.tagids))
{
var tags = req.tagids.Trim().Split(",").ToList();
var ids = client.Queryable<DroneCaseInfoTag>().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;
}
/// <summary>
/// 查询案件和处理公共过滤方法
/// </summary>
/// <param name="db"></param>
/// <returns></returns>
private ISugarQueryable<DroneCaseInfoSingle> GetCaseDealQueryable()
{
var query = client.Queryable<DroneCaseInfoSingle>()
.Where(c => c.is_delete == null || c.is_delete == 0)
.Where(c => c.is_intact == 1);
return query;
}
/// <summary>
/// 正式案件记录
/// </summary>
/// <returns></returns>
public List<dynamic> LoadDroneCase(string streetid)
{
var list = GetCaseQueryable(new GetQueryCaseReq { streetid = streetid })
.OrderBy(c => c.identification_time, OrderByType.Desc)
.Select<dynamic>(c => new
{
id = c.Id,
//c.streetname, 县级
streetname = c.countyname,
c.case_description,
c.identification_time
})
.Take(20).ToList();
return list;
}
/// <summary>
/// 最新案件处理
/// </summary>
/// <returns></returns>
public object LoadDroneCaseDeal(int? istoday, string areaid)
{
DateTime? today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var query = GetCaseDealQueryable()
.WhereIF(istoday == 1, (c => c.examine_time >= today))
.WhereIF(!string.IsNullOrEmpty(areaid), c => c.streetid == areaid || c.countyid == areaid || c.communityid == areaid)
//.Where((d, c) => c.Id != null)
.OrderBy(c => c.examine_time, OrderByType.Desc)
.Select(c => new
{
c.Id,
c.examine_time,
c.case_description,
c.typename,
c.countyid,
c.countyname,
c.streetid,
c.streetname,
c.communityid,
c.communityname,
c.result_name
});
if (istoday != 1)
query = query.Take(20);
else
query = query.Take(100);
var list = query.ToList();
return list;
}
/// <summary>
/// 上报和处理案件数量
/// </summary>
/// <returns></returns>
public JObject GetTodayReportAndDealCount(string streetid)
{
var today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var reportCount = GetCaseQueryable(new GetQueryCaseReq { streetid = streetid })
.Where(c => c.identification_time > today)
.Count();
var dealCount = GetCaseQueryable(new GetQueryCaseReq { streetid = streetid })
.Where(c => c.handle_status_id == 2)
.Where(c => c.examine_time > today)
.Count();
JObject obj = new JObject();
obj.Add("reportCount", reportCount);
obj.Add("dealCount", dealCount);
return obj;
}
/// <summary>
/// 案件数量统计
/// </summary>
/// <returns></returns>
public JObject GetDroneCaseCount()
{
var notIntactCount = client.Queryable<Sugar_Drone_caseinfo>().Where(c => c.is_intact == 0).Count();
var intactCount = client.Queryable<Sugar_Drone_caseinfo>().Where(c => c.is_intact == 1).Count();
JObject obj = new JObject();
obj.Add("notIntactCount", notIntactCount);
obj.Add("intactCount", intactCount);
return obj;
}
/// <summary>
/// 违建分类统计
/// </summary>
/// <returns></returns>
public object GetDroneTypeCount(string areaid, int? is_dealer = null)
{
var list = GetCaseQueryable()
.GroupBy(c => new { c.typename })
.Select(c => new
{
c.typename,
count = SqlFunc.AggregateCount(c.Id)
}).ToList();
var user = _auth.GetCurrentUser().User;
//待核查
var status0 = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, handle_status_id = 0, is_examine = 0, countyid = areaid }, user).Count();
//合法
var status1 = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 0, countyid = areaid }, user).Count();
//拆除
var status2 = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 1, measure_name_type = 0, countyid = areaid }, user).Count();
//查处
var status3 = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 1, measure_name_type = 1, countyid = areaid }, user).Count();
//完善手续
var status4 = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 1, measure_name_type = 2, countyid = areaid }, user).Count();
//伪变化
var status5 = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = is_dealer, is_illegal = 2, countyid = areaid }, user).Count();
JArray array = new JArray();
//for (int i = 0; i < list.Count; i++)
//{
// var item = list[i];
// string typename = item.typename;
// int count = item.count;
// if (string.IsNullOrEmpty(typename))
// typename = "未知";
// JObject obj = new JObject();
// obj.Add("typename", typename);
// obj.Add("count", count);
// array.Add(obj);
//}
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 array;
}
/// <summary>
/// 按乡镇统计
/// </summary>
/// <param name="id">行政区划id</param>
/// <returns></returns>
public JArray GetDroneOrgCount(string id)
{
//string countyName = _configuration.GetSection("CountyName").Value;
var areaid = id;
if (string.IsNullOrEmpty(id))
{
areaid = _configuration.GetSection("AppSetting:TopAreaCode").Value;
}
JArray array = new JArray();
var area = client.Queryable<SysOrg>().Where(c => c.Id.ToString() == areaid).First();
if (area != null)
{
var childrenList = client.Queryable<SysOrg>().Where(c => c.ParentId == area.Id).OrderBy(c => c.SortNo, OrderByType.Asc).OrderBy(c => c.CreateTime, OrderByType.Asc).ToList();
var today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
//案件上报数量
var caseList = GetDatas(GetCaseQueryable(new GetQueryCaseReq { streetid = id }), area);
//今日案件上报数量
var caseTodayList = GetDatas(GetCaseQueryable(new GetQueryCaseReq { streetid = id }).Where(c => c.identification_time > today), area);
//历史案件上报数量
var caseHistoryList = GetDatas(GetCaseQueryable(new GetQueryCaseReq { streetid = id }).Where(c => c.identification_time < today), area);
//未办理
var statusFirst = GetDatas(GetCaseQueryable(new GetQueryCaseReq { streetid = id }).Where(c => c.handle_status_id == 0), area);
//待审核
var statusSecond = GetDatas(GetCaseQueryable(new GetQueryCaseReq { streetid = id }).Where(c => c.handle_status_id == 1), area);
//已办结
var statusThrid = GetDatas(GetCaseQueryable(new GetQueryCaseReq { streetid = id }).Where(c => c.handle_status_id == 2), area);
//遍历乡镇
for (int i = 0; i < childrenList.Count; i++)
{
//当前乡镇
var _item = childrenList[i];
int _reportCount = 0; //上报数量
int todayCount = 0; //今日上报
int historyCount = 0; //历史上报
int firstCount = 0; //未办理
int secondCount = 0; //待审核
int thridCount = 0; //已办结
//当前乡镇上报的数量
var _caseModel = caseList.Where(c => c.areaid == _item.Id.ToString()).FirstOrDefault();
//今日案件数
var todayCaseModel = caseTodayList.Where(c => c.areaid == _item.Id.ToString()).FirstOrDefault();
//历史案件数
var historyCaseModel = caseHistoryList.Where(c => c.areaid == _item.Id.ToString()).FirstOrDefault();
//未办理
var firstCountModel = statusFirst.Where(c => c.areaid == _item.Id.ToString()).FirstOrDefault();
//待审核
var secondCountModel = statusSecond.Where(c => c.areaid == _item.Id.ToString()).FirstOrDefault();
//已办结
var thridCountModel = statusThrid.Where(c => c.areaid == _item.Id.ToString()).FirstOrDefault();
if (_caseModel != null)
_reportCount = _caseModel.count;
if (todayCaseModel != null)
todayCount = todayCaseModel.count;
if (historyCaseModel != null)
historyCount = historyCaseModel.count;
if (firstCountModel != null)
firstCount = firstCountModel.count;
if (secondCountModel != null)
secondCount = secondCountModel.count;
if (thridCountModel != null)
thridCount = thridCountModel.count;
JObject obj = new JObject();
obj.Add("name", _item.Name);
obj.Add("areaid", _item.Id.ToString());
obj.Add("reportCount", _reportCount);
obj.Add("todayCount", todayCount);
obj.Add("historyCount", historyCount);
obj.Add("firstCount", firstCount);
obj.Add("secondCount", secondCount);
obj.Add("thridCount", thridCount);
array.Add(obj);
}
}
return array;
}
public List<CountRes> GetDatas(ISugarQueryable<DroneCaseInfoSingle> querys, SysOrg area)
{
var res = new List<CountRes>();
var query = querys.Select(c => new
{
c.countyid,
c.streetid,
c.communityid,
c.Id
}).MergeTable();
switch (area.Level)
{
case 0:
res = query.GroupBy(c => new { c.countyid })
.Select(c => new CountRes
{
areaid = c.countyid,
count = SqlFunc.AggregateCount(c.Id)
})
.ToList();
// Process result0
break;
case 1:
res = query.GroupBy(c => new { c.streetid })
.Select(c => new CountRes
{
areaid = c.streetid,
count = SqlFunc.AggregateCount(c.Id)
})
.ToList();
// Process result1
break;
case 2:
res = query.GroupBy(c => new { c.communityid })
.Select(c => new CountRes
{
areaid = c.communityid,
count = SqlFunc.AggregateCount(c.Id)
})
.ToList();
// Process result2
break;
default:
// Handle default case
break;
}
return res;
}
/// <summary>
/// 案件线索统计-费城街道工作区
/// </summary>
/// <returns></returns>
public JArray GetDroneCityOrgCount()
{
string countyName = _configuration.GetSection("CountyName").Value;
if (string.IsNullOrEmpty(countyName)) countyName = "费城街道";
var countyid = client.Queryable<SysOrg>().Where(c => c.Name == countyName).Select(c => c.Id).First();
var streetList = client.Queryable<SysOrg>().Where(c => c.ParentId == countyid).GroupBy(c => c.CustomCode).Select(c => c.CustomCode).ToList();
#region 案件数量
//费城街道
var feicheng = GetCaseQueryable().Where(c => c.streetname.Contains("费城街道")).ToList();
//今天
var today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
//案件上报数量
var caseList = feicheng.Select(c => new { c.communityid }).ToList();
//今日案件上报数量
var caseTodayList = feicheng.Where(c => c.identification_time > today).Select(c => new { c.communityid }).ToList();
//历史案件上报数量
var caseHistoryList = feicheng.Where(c => c.identification_time < today).Select(c => new { c.communityid }).ToList();
//未办理
var statusFirst = feicheng.Where(c => c.handle_status_id == 0).Select(c => new { c.communityid }).ToList();
//待审核
var statusSecond = feicheng.Where(c => c.handle_status_id == 1).Select(c => new { c.communityid }).ToList();
//已办结
var statusThrid = feicheng.Where(c => c.handle_status_id == 2).Select(c => new { c.communityid }).ToList();
#endregion
JArray array = new JArray();
for (int i = 0; i < streetList.Count; i++)
{
JObject obj = new JObject();
int _reportCount = 0; //上报数量
int todayCount = 0; //今日上报
int historyCount = 0; //历史上报
int noCount = 0; //未办理
int auditCount = 0; //待审核
int finishCount = 0; //已办结
var item = streetList[i];
var org_id = client.Queryable<SysOrg>().Where(c => c.CustomCode == item).Select(c => c.Id).ToList();
for (int k = 0; k < org_id.Count; k++)
{
var _item = org_id[k];
var _caseModel = caseList.Where(c => c.communityid == _item.ToString()).Count();
if (_caseModel > 0)
_reportCount += _caseModel;
//今日案件数
var todayCaseModel = caseTodayList.Where(c => c.communityid == _item.ToString()).Count();
if (todayCaseModel > 0)
todayCount += todayCaseModel;
//历史案件数
var historyCaseModel = caseHistoryList.Where(c => c.communityid == _item.ToString()).Count();
if (historyCaseModel > 0)
historyCount += historyCaseModel;
//未办理
var firstCountModel = statusFirst.Where(c => c.communityid == _item.ToString()).Count();
if (firstCountModel > 0)
noCount += firstCountModel;
//待审核
var secondCountModel = statusSecond.Where(c => c.communityid == _item.ToString()).Count();
if (secondCountModel > 0)
auditCount += secondCountModel;
//已办结
var thridCountModel = statusThrid.Where(c => c.communityid == _item.ToString()).Count();
if (thridCountModel > 0)
finishCount += thridCountModel;
}
obj.Add("name", item);
obj.Add("reportCount", _reportCount);
obj.Add("todayCount", todayCount);
obj.Add("historyCount", historyCount);
obj.Add("noCount", noCount);
obj.Add("auditCount", auditCount);
obj.Add("finishCount", finishCount);
array.Add(obj);
}
return array;
}
/// <summary>
/// 数据统计,按天统计图表
/// </summary>
/// <returns></returns>
public JArray GetDroneCaseDateCount(string type, string streetId)
{
DateTime begin = DateTime.Parse(DateTime.Now.AddDays(-14).ToString("yyyy-MM-dd"));
if (type == "week")
{
begin = DateTime.Parse(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd"));
}
else if (type == "month")
{
begin = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01"));
}
//查询案件数据
var reportList = GetCaseQueryable(new GetQueryCaseReq { streetid = streetId })
.Where(c => c.identification_time > begin).Select(c => new { c.Id, identification_time = c.identification_time }).ToList();
var dealList = GetCaseQueryable().Where(c => c.examine_time > begin)
.WhereIF(!string.IsNullOrEmpty(streetId), c => c.streetid == streetId)
.Select(c => new { c.Id, c.examine_time }).ToList();
//var dealList = GetDealQueryable(db).Where(c => c.createtime > begin)
// .WhereIF(!string.IsNullOrEmpty(streetId), c => SqlFunc.Subqueryable<Sugar_Drone_caseinfo>().Where(it => it.streetid == streetId && it.Id == c.caseid).Any())
// .Select(c => new { c.Id, c.createtime }).ToList();
JArray array = new JArray();
while (begin < DateTime.Now)
{
JObject obj = new JObject();
//日期
obj.Add("day", begin.ToString("yyyy-MM-dd"));
//过滤查询数量
int reportCount = reportList.Where(c => c.identification_time >= begin && c.identification_time < begin.AddDays(1)).Count();
int dealCount = dealList.Where(c => c.examine_time >= begin && c.examine_time < begin.AddDays(1)).Count();
//数量
obj.Add("reportCount", reportCount);
obj.Add("dealCount", dealCount);
array.Add(obj);
//日期+1天
begin = begin.AddDays(1);
}
return array;
}
/// <summary>
/// 查询GeoJson
/// </summary>
/// <returns></returns>
public JToken GetDroneGeoJson()
{
QueryGeoJsonCommonReq req = new QueryGeoJsonCommonReq();
req.tablename = "view_drone_shp_data";
req.pageIndex = 1;
req.limit = 2000;
var res = _commonDataManager.PgsqlGeoJsonCommon(req);
return res;
}
/// <summary>
/// 获取无人机的位置
/// </summary>
/// <returns></returns>
public object GetDroneLocationPoints()
{
string time = DateTime.Now.AddMinutes(-3).ToString("yyyy-MM-dd HH:mm:ss");
StringBuilder sql = new StringBuilder();
sql.AppendFormat($" select \"createuser\",\"createtime\", replace(replace(replace(st_astext(geom),'POINT(',''),')',''),' ',',') point from ");
sql.AppendFormat($" (");
sql.AppendFormat($" SELECT \"createuser\",createtime,geom,\"row_number\"() OVER (PARTITION by \"createuser\" ORDER BY createtime desc) rownum FROM \"drone_point_data\" where createtime > '{time}' ");
sql.AppendFormat($" ) aa where aa.rownum = 1");
var list = client.SqlQueryable<dynamic>(sql.ToString()).ToList();
return list;
}
/// <summary>
/// 获取无人机的历史轨迹
/// </summary>
/// <returns></returns>
public object GetDroneLocationPointsHistory(DateTime startTime, DateTime endTime, string userId)
{
StringBuilder sql = new StringBuilder();
sql.AppendFormat($" select \"createuser\",\"createtime\", replace(replace(replace(st_astext(geom),'POINT(',''),')',''),' ',',') point FROM \"drone_point_data\" where createtime > '{startTime}' and createtime < '{endTime}' and \"createuser\" = '{userId}' order by \"createtime\" desc");
var list = client.SqlQueryable<dynamic>(sql.ToString()).ToList();
return list;
}
/// <summary>
/// 无人机飞行 假数据
/// </summary>
/// <returns></returns>
public object GetDroneLocationPointsFalse()
{
JArray array = new JArray();
StringBuilder sql = new StringBuilder();
sql.AppendFormat($" select \"createuser\",\"createtime\", replace(replace(replace(st_astext(geom),'POINT(',''),')',''),' ',',') point from ");
sql.AppendFormat($" drone_point_data where createtime > '2022-02-11' and createtime < '2022-02-12' order by createtime asc ");
//var listFirst = db.SqlQueryable<dynamic>(sql.ToString()).ToList().ToJson();
sql = new StringBuilder();
sql.AppendFormat($" select \"createuser\",\"createtime\", replace(replace(replace(st_astext(geom),'POINT(',''),')',''),' ',',') point from ");
sql.AppendFormat($" drone_point_data where createtime > '2022-02-15' and createtime < '2022-02-16' order by createtime asc ");
//var listSecond = db.SqlQueryable<dynamic>(sql.ToString()).ToList().ToJson();
JObject objA = new JObject();
objA.Add("name", "listFirst");
objA.Add("point", (JToken)JsonConvert.DeserializeObject("[{\"createuser\":\"13280580815\",\"createtime\":\"2022-04-22 14:22:22\",\"point\":\"117.72339712649222,35.05450202665419\"}]"));
//117.72339712649222,35.05450202665419
array.Add(objA);
JObject objB = new JObject();
objB.Add("name", "listSecond");
objB.Add("point", (JToken)JsonConvert.DeserializeObject("[{\"createuser\":\"13280580815\",\"createtime\":\"2022-04-22 14:22:22\",\"point\":\"117.71858685321234,35.22679558236362\"}]"));
//117.71858685321234,35.22679558236362
array.Add(objB);
JObject objC = new JObject();
objC.Add("name", "listSecond");
objC.Add("point", (JToken)JsonConvert.DeserializeObject("[{\"createuser\":\"13280580815\",\"createtime\":\"2022-04-22 14:22:22\",\"point\":\"118.07365607557824,35.20530775653663\"}]"));
//118.07365607557824,35.20530775653663
array.Add(objC);
JObject objD = new JObject();
objD.Add("name", "listSecond");
objD.Add("point", (JToken)JsonConvert.DeserializeObject("[{\"createuser\":\"13280580815\",\"createtime\":\"2022-04-22 14:22:22\",\"point\":\"117.98160109200148,35.28244211798609\"}]"));
//117.98160109200148,35.28244211798609
array.Add(objD);
JObject objE = new JObject();
objE.Add("name", "listSecond");
objE.Add("point", (JToken)JsonConvert.DeserializeObject("[{\"createuser\":\"13280580815\",\"createtime\":\"2022-04-22 14:22:22\",\"point\":\"117.97323242064601,35.521189135282015\"}]"));
//117.97323242064601,35.521189135282015
array.Add(objE);
return array;
}
/// <summary>
/// 获取无人机的在线率
/// </summary>
/// <returns></returns>
public JObject GetDroneOnlinePercent()
{
string time = DateTime.Now.AddMinutes(-3).ToString("yyyy-MM-dd HH:mm:ss");
StringBuilder sql = new StringBuilder();
sql.AppendFormat($" select \"createuser\",\"createtime\", replace(replace(replace(st_astext(geom),'POINT(',''),')',''),' ',',') point from ");
sql.AppendFormat($" (");
sql.AppendFormat($" SELECT \"createuser\",createtime,geom,\"row_number\"() OVER (PARTITION by \"createuser\" ORDER BY createtime desc) rownum FROM \"drone_point_data\" where createtime > '{time}' ");
sql.AppendFormat($" ) aa where aa.rownum = 1");
//无人机在线数量
var onlineCount = client.SqlQueryable<dynamic>(sql.ToString()).Count();
//无人机的总数量
var totalCount = client.SqlQueryable<dynamic>("select distinct(\"createuser\") \"name\" from drone_point_data").Count();
onlineCount += 5;
totalCount += 5;
decimal onlinePercent = Decimal.Round(100 * Decimal.Parse(onlineCount.ToString()) / Decimal.Parse(totalCount.ToString()), 2);
JObject obj = new JObject();
obj.Add("onlineCount", onlineCount);
obj.Add("offlineCount", totalCount - onlineCount);
obj.Add("totalCount", totalCount);
obj.Add("onlinePercent", onlinePercent);
return obj;
}
/// <summary>
/// 统计图表已完成未完成数量
/// </summary>
/// <returns></returns>
public JObject GetDroneCaseCompleteCount(string areaid)
{
JObject obj = new JObject();
//线索总数
var cluesCount = GetCaseQueryable(new GetQueryCaseReq { streetid = areaid }).Count();
//待核查 数量0
var unHandCount = GetCaseQueryable(new GetQueryCaseReq { handle_status_id = 0, is_examine = 0, streetid = areaid }).Count();
//待办理 数量0
var unDealCount = GetCaseQueryable(new GetQueryCaseReq { handle_status_id = 0, is_examine = 1, streetid = areaid }).Count();
//待审核 数量1
var inHandCount = GetCaseQueryable(new GetQueryCaseReq { handle_status_id = 1, streetid = areaid }).Count();
//已完成 数量2
var completeCount = GetCaseQueryable(new GetQueryCaseReq { handle_status_id = 2, streetid = areaid }).Count();
//全部
obj.Add("cluesCount", cluesCount);
//未核查 核查定性
obj.Add("unHandCount", unHandCount);
//待办理 处置办理--暂时没用
obj.Add("unDealCount", unDealCount);
//待审核 监督审核
obj.Add("inHandCount", inHandCount);
//已办结 查验归档
obj.Add("completeCount", completeCount);
return obj;
}
/// <summary>
/// APP案件数量查询
/// </summary>
/// <returns></returns>
public CaseProcessStatData GetCaseProcessStatData(QueryCaseProcessStatDataReq req)
{
var current = _auth.GetCurrentUser();
var user = current.User;
var roles = current.Roles.Select(c => c.Id.ToString()).ToList();
CaseProcessStatData data = new CaseProcessStatData
{
// 核查定性
proofread_confirm_new = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0, is_examine = 0, is_drawback = 0 }, user).Count(),
proofread_confirm_drawback = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0, is_examine = 0, is_drawback = 1 }, user).Count(),
// 处置办理
handle_demolish = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0, is_examine = 1, is_illegal = 1, measure_name = "拟拆除" }, user).Count(),
handle_detain = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0, is_examine = 1, is_illegal = 1, measure_name = "查处" }, user).Count(),
handle_perfection = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0, is_examine = 1, is_illegal = 1, measure_name = "拟完善手续" }, user).Count(),
handle_legal = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 0, is_examine = 1, is_illegal = 0 }, user).Count(),
// 监督审核
audit_demolish = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 1, is_illegal = 1, measure_name = "拟拆除", is_verify_filter = req.is_verify_filter }, user, roles: roles).Count(),
audit_detain = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 1, is_illegal = 1, measure_name = "查处", is_verify_filter = req.is_verify_filter }, user, roles: roles).Count(),
audit_perfection = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 1, is_illegal = 1, measure_name = "拟完善手续", is_verify_filter = req.is_verify_filter }, user, roles: roles).Count(),
audit_legal = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 1, is_illegal = 0, is_verify_filter = req.is_verify_filter }, user, roles: roles).Count(),
audit_fakeChange = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 1, is_illegal = 2, is_verify_filter = req.is_verify_filter }, user, roles: roles).Count(),
// 归档
archive_demolish = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 2, is_illegal = 1, measure_name = "拟拆除" }, user).Count(),
archive_detain = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 2, is_illegal = 1, measure_name = "查处" }, user).Count(),
archive_perfection = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 2, is_illegal = 1, measure_name = "拟完善手续" }, user).Count(),
archive_legal = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 2, is_illegal = 0 }, user).Count(),
archive_fakeChange = QueryCaseInfoList(new QueryCaseInfoListReq { is_intact = 1, is_dealer = 1, handle_status_id = 2, is_illegal = 2 }, user).Count()
};
// 汇总
//data.proofread_confirm_sum = data.proofread_confirm_drawback + data.proofread_confirm_new;
//data.handle_sum = data.handle_demolish + data.handle_detain + data.handle_legal + data.handle_perfection;
//data.audit_sum = data.audit_demolish + data.audit_detain + data.audit_fakeChange + data.audit_legal + data.audit_perfection;
//data.archive_sum = data.archive_demolish + data.archive_detain + data.archive_fakeChange + data.archive_legal + data.archive_perfection;
return data;
}
/// <summary>
/// 基于乡镇的案件数量统计
/// </summary>
/// <returns></returns>
public List<CaseStatDataPerTown> GetCaseProcessStatDataPerTown(QueryCaseInfoListReq req)
{
string countyName = _configuration.GetSection("CountyName").Value;
if (string.IsNullOrEmpty(countyName)) countyName = "费县";
var orgList = client.Queryable<SysOrg>().Where(c => c.ParentName == countyName).OrderBy(c => c.SortNo, OrderByType.Asc).ToList();
var user = _auth.GetCurrentUser().User;
List<CaseStatDataPerTown> statDataList = new List<CaseStatDataPerTown>();
// 核查定性
var reqBody = req.MapTo<QueryCaseInfoListReq>();
reqBody.is_intact = 1;
reqBody.handle_status_id = 0;
reqBody.is_examine = 0;
var list0 = QueryCaseInfoList(reqBody, user, 0)
.GroupBy(c => new { c.streetname, c.streetid })
.Select(c => new { c.streetname, c.streetid, count = SqlFunc.AggregateCount(c.Id) })
.OrderBy(c => c.streetname).ToList();
// 处置办理
reqBody = req.MapTo<QueryCaseInfoListReq>();
reqBody.is_intact = 1;
reqBody.handle_status_id = 0;
reqBody.is_examine = 1;
var list1 = QueryCaseInfoList(reqBody, user, 0)
.GroupBy(c => new { c.streetname, c.streetid })
.Select(c => new { c.streetname, c.streetid, count = SqlFunc.AggregateCount(c.Id) })
.OrderBy(c => c.streetname).ToList();
// 监督审核
reqBody = req.MapTo<QueryCaseInfoListReq>();
reqBody.is_intact = 1;
reqBody.handle_status_id = 1;
var list2 = QueryCaseInfoList(reqBody, user, 0)
.GroupBy(c => new { c.streetname, c.streetid })
.Select(c => new { c.streetname, c.streetid, count = SqlFunc.AggregateCount(c.Id) })
.OrderBy(c => c.streetname).ToList();
// 归档
reqBody = req.MapTo<QueryCaseInfoListReq>();
reqBody.is_intact = 1;
reqBody.handle_status_id = 2;
var list3 = QueryCaseInfoList(reqBody, user, 0)
.GroupBy(c => new { c.streetname, c.streetid })
.Select(c => new { c.streetname, c.streetid, count = SqlFunc.AggregateCount(c.Id) })
.OrderBy(c => c.streetname).ToList();
foreach (var item in orgList)
{
//核查定性
var count0 = list0.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count);
//处置办理
var count1 = list1.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count);
//监督审核
var count2 = list2.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count);
//核验归档
var count3 = list3.Where(c => c.streetid == item.Id.ToString()).Sum(c => c.count);
CaseStatDataPerTown resultItem = new CaseStatDataPerTown
{
TownId = item.Id.ToString(),
TownName = item.Name,
ProofreadCount = count0,
HandleCount = count1,
AuditCount = count2,
ArchiveCount = count3,
};
statDataList.Add(resultItem);
}
return statDataList;
}
/// <summary>
/// 是否是费城街道
/// </summary>
/// <returns></returns>
public int IsFeiChengStreet()
{
var user = _auth.GetCurrentUser().User;
int res = 0;
var count = client.Queryable<SysRelevance, SysOrg>((r, o) => new JoinQueryInfos(
JoinType.Left, r.SecondId == o.Id.ToString()
)).Where((r, o) => (o.Name.Contains("费城街道") || o.ParentName.Contains("费城街道")) && r.FirstId == user.Id.ToString() && r.Key == Define.USERORG).Count();
if (count > 0)
{
res = 1;
}
return res;
}
/// <summary>
/// 获取处理详情
/// </summary>
/// <param name="id"></param>
/// <param name="caseid"></param>
/// <returns></returns>
public AddOrUpdateDroneCaseDealReq GetDroneCaseDeal(string id, string caseid)
{
AddOrUpdateDroneCaseDealReq res = new AddOrUpdateDroneCaseDealReq();
res.Init();
//详情
var info = client.Queryable<DroneCaseDeal>()
.WhereIF(!string.IsNullOrEmpty(id), c => c.Id == id)
.WhereIF(!string.IsNullOrEmpty(caseid), c => c.caseid == caseid)
.Where(c => c.is_delete == 0 || c.is_delete == null)
.OrderBy(c => c.createtime, OrderByType.Desc)
.First();
if (info == null)
{
return res;
}
//文件
var fileList = client.Queryable<DroneFiles>().Where(c => c.relid == info.Id && (c.is_delete == null || c.is_delete == 0) && c.tablename == "drone_case_deal").ToList();
//图片
List<PicInfo> picInfoList = fileList.Where(c => c.type == 0 && (c.tag == null || c.tag == "")).Select(c => new PicInfo
{
FilePath = c.path,
Latitude = c.latitude,
Longitude = c.longitude,
Angle = c.angle,
}).ToList();
//整改后照片
List<PicInfo> afterPicList = fileList.Where(c => c.type == 0 && c.tag == afterPicTag).Select(c => new PicInfo
{
FilePath = c.path,
Latitude = c.latitude,
Longitude = c.longitude,
Angle = c.angle,
}).ToList();
//合法材料
List<PicInfo> evidenceFileList = fileList.Where(c => c.type == 0 && c.tag == EvidenceFileTag).Select(c => new PicInfo
{
FilePath = c.path,
Latitude = c.latitude,
Longitude = c.longitude,
Angle = c.angle,
}).ToList();
//处罚通知书
var punish_pic_list = fileList.Where(c => c.type == 0 && c.tag == punishPicTag).GroupBy(c => c.path).Select(c => c.Key).ToList();
//交款通知书
var payment_pic_list = fileList.Where(c => c.type == 0 && c.tag == paymentPicTag).GroupBy(c => c.path).Select(c => c.Key).ToList();
//政府同意完善手续证明
var agree_checkout_pic_list = fileList.Where(c => c.type == 0 && c.tag == agreeCheckoutPicTag).GroupBy(c => c.path).Select(c => c.Key).ToList();
//办理手续
var checkout_pic_list = fileList.Where(c => c.type == 0 && c.tag == checkoutPicTag).GroupBy(c => c.path).Select(c => c.Key).ToList();
//勘测定界图
var boundary_pic_list = fileList.Where(c => c.type == 0 && c.tag == boundaryPicTag).GroupBy(c => c.path).Select(c => c.Key).ToList();
//视频
var video_list = fileList.Where(c => c.type == 1 && (c.tag == null || c.tag == "")).GroupBy(c => c.path).Select(c => c.Key).ToList();
var remove_video_list = fileList.Where(c => c.type == 1 && (c.tag == "remove")).GroupBy(c => c.path).Select(c => c.Key).ToList();
//详情
res.info = info;
//照片
res.pic_info_list = picInfoList;
//整改后照片
res.after_pic_list = afterPicList;
//合法材料
res.evidence_file_list = evidenceFileList;
//处罚通知书
res.punish_pic_list = punish_pic_list;
//交款通知书
res.payment_pic_list = payment_pic_list;
//政府同意完善手续证明
res.agree_checkout_pic_list = agree_checkout_pic_list;
//办理手续
res.checkout_pic_list = checkout_pic_list;
//勘测定界图
res.boundary_pic_list = boundary_pic_list;
//视频
res.video_list = video_list;
//拆除视频
res.remove_video_list = remove_video_list;
var caseModel = client.Queryable<Sugar_Drone_caseinfo>()
.Where(c => c.Id == info.caseid)
.First();
res.handle_status_id = caseModel.handle_status_id.Value;
res.is_illegal = caseModel.is_illegal;
var current = _auth.GetCurrentUser();
var roleList = current.Roles;
//判断是否有审核权限
var roles = roleList.Select(c => c.Id.ToString()).ToList();
//查询用户角色绑定的流程有哪些
var flowList = client.Queryable<DroneRelevance>().Where(c => roles.Contains(c.SecondId) && c.Key == Define.FLOW_ROLE).Select(c => c.FirstId).ToList();
//查询用户绑定的流程Sort用于判断用户是否有权限来审核
var currentFlowList = client.Queryable<DroneFlowInstance>().Where(c => flowList.Contains(c.Id) && c.status == 0 && c.instance_name == "CaseVerify").Select(c => c.sort).ToList();
//审核状态和处理状态
var verifystatus = caseModel.verifystatus;
var handle_status_id = caseModel.handle_status_id;
//审核
if (handle_status_id == 1)
{
//当前角色绑定的流程
var count = currentFlowList.Where(c => c == verifystatus).Count();
var hasVerifyRole = roleList.Where(c => c.Name == "案件审核").Count();
if (count > 0 && hasVerifyRole > 0)
{
res.can_verify = 1;
}
}
return res;
}
/// <summary>
/// 案件详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<Response<ScreenDroneCaseInfoReq>> GetCaseInfo(string id)
{
ScreenDroneCaseInfoReq res = new ScreenDroneCaseInfoReq();
res.Init();
//详情
DroneCaseInfoSingle info = null;
var flag = Infrastructure.Extensions.StringExtension.IsGuid(id);
if (flag)
{
info = await client.Queryable<DroneCaseInfoSingle>().Where(c => c.Id == id).FirstAsync();
}
else
{
info = await client.Queryable<DroneCaseInfoSingle>().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<SysOrg>().Where(c => c.Id.ToString() == info.communityid).Select(c => c.CustomCode).FirstAsync();
//文件
var fileList = await client.Queryable<DroneFiles>().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 client.Queryable<DroneCaseInfoRelation>().Where(a => a.caseid == info.Id).Select(a => a.relation_case_no).ToListAsync();
//案件标签
var tags = await client.Queryable<DroneCaseInfoTag>()
.LeftJoin<SysCategory>((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();
if (!string.IsNullOrEmpty(info.geomid))
{
sql.AppendFormat($"SELECT st_astext(ST_Centroid(geom)) lnglat FROM \"drone_shp_data\" where gid in ({info.geomid}) and geom is not null");
var dt = await client.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<ScreenDroneCaseInfoReq>
{
Result = res,
Message = "获取数据成功"
};
}
#endregion
#region 首页大屏
public Response<List<dynamic>> GetTrendData(int datatype, string begindate, string enddate, string countyid, string type)
{
DateTime begin = DateTime.Now.AddDays(-10).Date;
DateTime end = DateTime.Now;
if (string.IsNullOrEmpty(begindate) || string.IsNullOrEmpty(enddate))
{
if (datatype == 1)
{
begin = Convert.ToDateTime(DateTime.Now.AddMonths(-10).ToString("yyyy-MM-01"));
end = DateTime.Now;
}
}
else
{
begin = Convert.ToDateTime(begindate);
end = Convert.ToDateTime(enddate);
}
//聚合时间格式处理
string format = "yyyy-MM-dd";
if (datatype == 1)
{
format = "yyyy-MM";
}
var casetype = client.Queryable<SysDataItemDetail>()
.Where(r => r.ItemName == type).First()?.ItemDetailId;
//var caselistss = client.Queryable<DroneCaseInfoSingle>()
// .Where(r => r.createtime >= begin && r.createtime < end && r.createtime != null && r.typeid == casetype && r.is_closed == 0)
// .WhereIF(!string.IsNullOrEmpty(countyid), r => r.countyid == countyid)
// .OrderBy(r => r.createtime)
// .Select(r => new ChartCaseInfo
// {
// Id = r.Id,
// createtime = Convert.ToDateTime(r.createtime).ToString(format),
// is_illegal = r.is_illegal,
// measure_name = r.measure_name,
// handle_status_id = r.handle_status_id
// })
// .MergeTable()
// .GroupBy(it => it.createtime)
// .Select<dynamic>(it => new
// {
// //时间
// time = it.createtime,
// //违法
// illegal = SqlFunc.Subqueryable<DroneCaseInfoSingle>().Where(c => (c.is_illegal == 1 || c.handle_status_id != 5) && c.createtime != null && Convert.ToDateTime(c.createtime).ToString(format) == it.createtime && c.typeid == casetype && c.is_closed == 0&&c.countyid == countyid).Count(),
// //合法
// unillegal = SqlFunc.Subqueryable<DroneCaseInfoSingle>().Where(c => c.is_illegal == 0 && c.handle_status_id == 5 && c.createtime != null && Convert.ToDateTime(c.createtime).ToString(format) == it.createtime && c.typeid == casetype && c.is_closed == 0 && c.countyid == countyid).Count(),
// //其他
// other = SqlFunc.Subqueryable<DroneCaseInfoSingle>().Where(c => c.is_illegal == 2 && c.handle_status_id == 5 && c.createtime != null && Convert.ToDateTime(c.createtime).ToString(format) == it.createtime && c.typeid == casetype && c.is_closed == 0 && c.countyid == countyid).Count(),
// //复耕
// fugeng = SqlFunc.Subqueryable<DroneCaseInfoSingle>().Where(c => c.measure_name == "0" && c.handle_status_id == 5 && c.createtime != null && Convert.ToDateTime(c.createtime).ToString(format) == it.createtime && c.typeid == casetype && c.is_closed == 0 && c.countyid == countyid).Count(),
// //补办
// buban = SqlFunc.Subqueryable<DroneCaseInfoSingle>().Where(c => c.measure_name == "1" && c.handle_status_id == 5 && c.createtime != null && Convert.ToDateTime(c.createtime).ToString(format) == it.createtime && c.typeid == casetype && c.is_closed == 0 && c.countyid == countyid).Count(),
// }).ToList();
//查询案件信息
var caselistss = client.Queryable<DroneCaseInfoSingle>()
.Where(r => r.createtime >= begin && r.createtime < end && r.createtime != null && r.typeid == casetype && r.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), c => c.countyid == countyid)
.OrderBy(r => r.createtime)
.Select(r => new ChartCaseInfo
{
Id = r.Id,
createtime = Convert.ToDateTime(r.createtime).ToString(format),
is_illegal = r.is_illegal,
measure_name = r.measure_name,
handle_status_id = r.handle_status_id
})
.MergeTable()
.GroupBy(it => it.createtime)
.Select<dynamic>(it => new
{
//时间
time = it.createtime,
//违法
illegal = SqlFunc.AggregateSum(SqlFunc.IIF((it.is_illegal == 1 || it.handle_status_id != 5), 1, 0)),
//合法
unillegal = SqlFunc.AggregateSum(SqlFunc.IIF(it.is_illegal == 0 && it.handle_status_id == 5, 1, 0)),
//其他
other = SqlFunc.AggregateSum(SqlFunc.IIF(it.is_illegal == 2 && it.handle_status_id == 5, 1, 0)),
//复耕
fugeng = SqlFunc.AggregateSum(SqlFunc.IIF(it.measure_name == "0" && it.handle_status_id == 5, 1, 0)),
//补办
buban = SqlFunc.AggregateSum(SqlFunc.IIF(it.measure_name == "1" && it.handle_status_id == 5, 1, 0)),
}).ToList();
return new Response<List<dynamic>>
{
Result = caselistss,
Message = "获取数据成功"
};
}
#endregion
#region 新版大屏
/// <summary>
/// 总数与面积统计
/// </summary>
/// <param name="countyid">地区id</param>
/// <param name="type">案件类型</param>
/// <returns></returns>
public JObject GetTotalAndArea(string countyid, string type)
{
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
var casetype = client.Queryable<SysDataItemDetail>()
.Where(r => r.ItemName == type).First()?.ItemDetailId;
var caseList = client.Queryable<DroneCaseInfoSingle>()
.Where(r => r.typeid == casetype && r.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), c => c.countyid == countyid).ToList();
//下发图斑总数
var xfzs = caseList.Count();
//下发图斑面积
double xfmj = SumArea(caseList, r => r.area);
//下发图斑耕地面积
double xfgdmj = SumArea(caseList, r => r.gengdi_area);
//合法用地宗数
int hfzs = caseList.Count(r => r.is_illegal == 0 && r.handle_status_id == 5);
//合法用地面积
double hfmj = SumArea(caseList.Where(r => r.is_illegal == 0 && r.handle_status_id == 5), r => r.area);
//违法用地宗数
int wfzs = caseList.Count(r => r.is_illegal == 1 || r.handle_status_id != 5);
//违法用地面积
double wfmj = SumArea(caseList.Where(r => r.is_illegal == 1 || r.handle_status_id != 5), r => r.area);
//其他用地宗数
int qtzs = caseList.Count(r => r.is_illegal == 2 && r.handle_status_id == 5);
//其他用地面积
double qtmj = SumArea(caseList.Where(r => r.is_illegal == 2 && r.handle_status_id == 5), r => r.area);
//计算核实后新增违法面积
double wfgdmj = SumArea(caseList.Where(r => r.is_illegal == 1 || r.handle_status_id != 5),
r => r.gengdi_area);
double flhgdmj = SumArea(caseList.Where(r => r.weifaleixing == 1 && r.handle_status_id == 5),
r => r.gengdi_area);
var hshxzwfgdgdmj = wfgdmj - flhgdmj;
//计算整改后剩余耕地面积
double bbsxgdmj = SumArea(caseList.Where(r => r.measure_name == "1" && r.handle_status_id == 5),
r => r.gengdi_area);
double ccgdmj = SumArea(caseList.Where(r => r.measure_name == "0" && r.handle_status_id == 5),
r => r.gengdi_area);
var zghsywfgdgdmj = wfgdmj - flhgdmj - bbsxgdmj - ccgdmj;
JObject obj = new JObject
{
{ "xfzs", xfzs },
{ "xfmj", xfmj },
{ "xfgdmj", xfgdmj },
{ "hfzs", hfzs },
{ "hfmj", hfmj },
{ "wfzs", wfzs },
{ "wfmj", wfmj },
{ "qtzs", qtzs },
{ "qtmj", qtmj },
{ "hshxzwfgdgdmj", hshxzwfgdgdmj },
{ "zghsywfgdgdmj", zghsywfgdgdmj },
};
return obj;
}
/// <summary>
/// 案件类型查询宗数和面积
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public JObject GetTotalAndAreaByType(string countyid, string type)
{
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
var casetype = client.Queryable<SysDataItemDetail>()
.Where(r => r.ItemName == type).First()?.ItemDetailId;
var caseList = client.Queryable<DroneCaseInfoSingle>()
.Where(r => r.typeid == casetype && r.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), c => c.countyid == countyid).ToList();
var totalzs = caseList.Count();
//已办结总数
var ybjzs = caseList.Count(r => r.handle_status_id == 5);
//已办结面积
double ybjmj = SumArea(caseList.Where(r => r.handle_status_id == 5), r => r.area);
//未办结总数
int wbjzs = caseList.Count(r => r.handle_status_id != 5);
//未办结面积
double wbjmj = SumArea(caseList.Where(r => r.handle_status_id != 5), r => r.area);
JObject obj = new JObject
{
{ "totalzs", totalzs },
{ "ybjzs", ybjzs },
{ "ybjmj", ybjmj },
{ "wbjzs", wbjzs },
{ "wbjmj", wbjmj },
};
return obj;
}
/// <summary>
/// 图斑汇总统计
/// </summary>
/// <param name="countyid"></param>
/// <returns></returns>
public Response<List<SummaryResp>> GetTuBanSummary(string countyid, string type)
{
List<SummaryResp> listResp = new List<SummaryResp>();
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
var casetype = client.Queryable<SysDataItemDetail>()
.Where(r => r.ItemName == type).First()?.ItemDetailId;
var caseList = client.Queryable<DroneCaseInfoSingle>()
.Where(r => r.typeid == casetype && r.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), c => c.countyid == countyid).ToList();
List<SysOrg> org = new List<SysOrg>();
if (string.IsNullOrEmpty(countyid))
{
org = client.Queryable<SysOrg>().Where(r => r.Level == 1).ToList();
}
else
{
org = client.Queryable<SysOrg>().Where(r => r.Level == 2 && r.ParentId.ToString() == countyid).ToList();
}
foreach (var item in org)
{
var countyIdString = item.Id.ToString();
var casesForCounty = caseList.Where(r => r.countyid == countyIdString || r.streetid == countyIdString).ToList();
//下发宗数
var xftbzs = casesForCounty.Count;
//剩余违法耕地宗数
var sywfgdtbzs = casesForCounty.Count(r => r.handle_status_id != 5 || r.is_illegal == 1);
//面积
double xfmj = SumArea(casesForCounty, r => r.area);
//剩余违法耕地面积
double sywfgdgdmj = SumArea(casesForCounty.Where(r => r.handle_status_id != 5 || r.is_illegal == 1), r => r.gengdi_area);
SummaryResp summaryResp = new SummaryResp()
{
countyname = item.Name,
countyid = item.Id,
xftbzs = xftbzs,
sywfgdtbzs = sywfgdtbzs,
xfmj = xfmj,
sywfgdgdmj = sywfgdgdmj
};
listResp.Add(summaryResp);
}
listResp = listResp.OrderByDescending(r => r.sywfgdgdmj).ToList();
return new Response<List<SummaryResp>>
{
Result = listResp,
Message = "获取数据成功"
};
}
/// <summary>
/// 获取图斑图例
/// </summary>
/// <param name="countyid"></param>
/// <param name="type"></param>
/// <returns></returns>
public Response<Dictionary<string, List<DroneShpDataResp>>> GetTuBanInfoByType(string countyid, string type)
{
// 获取案件类型ID
var casetype = client.Queryable<SysDataItemDetail>()
.Where(r => r.ItemName == type)
.Select(r => r.ItemDetailId)
.First();
// 获取案件列表
var caseList = client.Queryable<DroneCaseInfoSingle>()
.Where(r => r.typeid == casetype && r.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), c => c.countyid == countyid)
.ToList();
// 获取组织机构列表
var org = string.IsNullOrEmpty(countyid)
? client.Queryable<SysOrg>().Where(r => r.Level == 1).ToList()
: client.Queryable<SysOrg>().Where(r => r.Level == 2 && r.ParentId.ToString() == countyid).ToList();
// 初始化结果字典
var keyValuePairs = new Dictionary<string, List<DroneShpDataResp>>();
// 分类案件列表
var caseTypes = new Dictionary<string, Func<DroneCaseInfoSingle, bool>>
{
{ "合法", r => r.is_illegal == 0 && r.handle_status_id == 5 },
{ "违法", r => r.is_illegal == 1 || r.handle_status_id != 5 },
{ "其他", r => r.is_illegal == 2 && r.handle_status_id == 5},
{ "拆除复耕", r => r.measure_name == "0" && r.handle_status_id == 5},
{ "补办手续", r => r.measure_name == "1"&& r.handle_status_id == 5}
};
foreach (var caseType in caseTypes)
{
// 获取分类案件列表
var filteredCases = caseList.Where(caseType.Value).ToList();
// 获取 GID 列表
var gids = filteredCases.SelectMany(item =>
item.geomid.Split(',')
.Select(id => int.TryParse(id, out var gid) ? gid : (int?)null)
.Where(gid => gid.HasValue)
.Select(gid => gid.Value))
.ToList();
if (gids.Any())
{
// 生成查询字符串
var gidsString = string.Join(",", gids);
var query = $"SELECT gid, ST_AsText(geom) AS geom FROM drone_shp_data WHERE gid IN ({gidsString})";
// 执行查询
var data = client.Ado.SqlQuery<DroneShpDataResp>(query);
// 添加到结果字典
keyValuePairs.Add(caseType.Key, data);
}
else
{
keyValuePairs.Add(caseType.Key, new List<DroneShpDataResp>());
}
}
// 返回结果
return new Response<Dictionary<string, List<DroneShpDataResp>>>
{
Result = keyValuePairs
};
}
#endregion
#region 新版大屏2.0
//右上角
public Response<List<OffenceEChartResp>> CaseOffenceEchartsOld(int type, int month)
{
var (startTime, endTime) = GetMonthStartAndEnd(DateTime.Now.Year, month);
var user = _auth.GetCurrentUser().User;
var orgIds = base._auth.GetCurrentUser().Orgs;
List<OffenceEChartResp> listechartResp = new List<OffenceEChartResp>();
//只查询农用地案件
var casetype = client.Queryable<SysDataItemDetail>()
.Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD").First()?.ItemDetailId;
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
List<SysOrg> org = new List<SysOrg>();
List<DroneCaseInfoSingle> caseList = new List<DroneCaseInfoSingle>();
if (orgIds.Any(r => r.Level == 0) || user.Id == -1) // 查询全部
{
org = client.Queryable<SysOrg>().Where(r => r.Level == 1).ToList();
caseList = client.Queryable<DroneCaseInfoSingle>()
.WhereIF(month != 0, r => r.synchronoustime >= startTime && r.synchronoustime <= endTime)
.Where(r => r.typeid == casetype && r.is_closed == 0).ToList();
}
else if (orgIds.Any(r => r.Level == 1))
{
//县区数据
org = client.Queryable<SysOrg>()
.Where(r => r.Level == 2 && orgIds.Select(a => a.Id).Contains(r.ParentId)).ToList();
//caseList = client.Queryable<DroneCaseInfoSingle>()
// .WhereIF(month != 0, r => r.synchronoustime >= startTime && r.synchronoustime <= endTime)
// .Where(r => r.typeid == casetype && r.is_closed == 0).ToList();
}
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(month != 0, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => a.typeid == casetype && a.is_closed == 0)
.Where((a, b) => !string.IsNullOrEmpty(b.Id)).ToList();
if (type == 1)//下发图斑
{
foreach (var item in org)
{
var countyIdString = item.Id.ToString();
var casesForCounty = caseList.Where(r => r.countyid == countyIdString || r.streetid == countyIdString).ToList();
double xfgdmj = SumArea(casesForCounty, r => r.gengdi_area);
var yongjiujibennongtianarea = SumArea(casesForCounty, r => r.yongjiujibennongtian_area);
double xfmj = SumArea(casesForCounty, r => r.area);
OffenceEChartResp offenceEchartResp = new OffenceEChartResp
{
countyid = item.Id,
countyname = item.Name,
tbzs = casesForCounty.Count,
tbmj = xfmj,
gdmj = xfgdmj,
yjjbntmj = yongjiujibennongtianarea
};
listechartResp.Add(offenceEchartResp);
}
}
else if (type == 2)
{
foreach (var item in org)
{
var countyIdString = item.Id.ToString();
var casesForCounty = caseList.Where(r => r.countyid == countyIdString || r.streetid == countyIdString).ToList();
int wfzs = casesForCounty.Count(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5);
int flhzs = casesForCounty.Count(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1);
int bzgdtbzs = casesForCounty.Count(r => (string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00")
&& r.handle_status_id == 5 && r.is_illegal == 1 && r.weifaleixing == 0);
double xfgdmj = SumArea(casesForCounty, r => r.gengdi_area);
double xfmj = SumArea(casesForCounty, r => r.area);
double wfmj = SumArea(casesForCounty.Where(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5),
r => r.area);
double wfgdmj = SumArea(casesForCounty.Where(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5),
r => r.gengdi_area);
double wfyjjbntmj = SumArea(casesForCounty.Where(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5),
r => r.yongjiujibennongtian_area);
//double yjjbntmj = SumArea(casesForCounty.Where(r => (r.weifaleixing == 0 && r.handle_status_id == 5) || r.handle_status_id != 5),
// r => r.yongjiujibennongtian_area);//未判断
double flhmj = SumArea(casesForCounty.Where(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1),
r => r.area);
double flhgdmj = SumArea(casesForCounty.Where(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1),
r => r.gengdi_area);
double flhyjjbntmj = SumArea(casesForCounty.Where(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1),
r => r.yongjiujibennongtian_area);
OffenceEChartResp offenceEchartResp = new OffenceEChartResp
{
countyid = item.Id,
countyname = item.Name,
tbzs = (wfzs - flhzs - bzgdtbzs),
tbmj = Math.Round((wfmj - flhmj), 2),
gdmj = Math.Round((wfgdmj - flhgdmj), 2),
yjjbntmj = Math.Round(wfyjjbntmj - flhyjjbntmj, 2),
};
listechartResp.Add(offenceEchartResp);
}
}
else
{
foreach (var item in org)
{
var countyIdString = item.Id.ToString();
var casesForCounty = caseList.Where(r => r.countyid == countyIdString || r.streetid == countyIdString).ToList();
int wfzs = casesForCounty.Count(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5);
int flhzs = casesForCounty.Count(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1);
int bbsxzs = casesForCounty.Count(r => r.measure_name == "1" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1);
int cczs = casesForCounty.Count(r => r.measure_name == "0" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1);
int bzgdtbzs = casesForCounty.Count(r => (string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00")
&& r.handle_status_id == 5 && r.is_illegal == 1 && r.weifaleixing == 0);
double hfgdmj = SumArea(casesForCounty.Where(r => r.is_illegal == 0 && r.handle_status_id == 5),
r => r.gengdi_area);
double wfmj = SumArea(casesForCounty.Where(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5),
r => r.area);
double wfgdmj = SumArea(casesForCounty.Where(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5),
r => r.gengdi_area);
double wfyjjbntmj = SumArea(casesForCounty.Where(r => (r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5),
r => r.yongjiujibennongtian_area);
double flhmj = SumArea(casesForCounty.Where(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1),
r => r.area);
double flhgdmj = SumArea(casesForCounty.Where(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1),
r => r.gengdi_area);
double flhyjjbntmj = SumArea(casesForCounty.Where(r => r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1),
r => r.yongjiujibennongtian_area);
double bbsxmj = SumArea(casesForCounty.Where(r => r.measure_name == "1" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1),
r => r.area);
double bbsxgdmj = SumArea(casesForCounty.Where(r => r.measure_name == "1" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1),
r => r.gengdi_area);
double bbsxyjjbntmj = SumArea(casesForCounty.Where(r => r.measure_name == "1" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1),
r => r.yongjiujibennongtian_area);
double ccmj = SumArea(casesForCounty.Where(r => r.measure_name == "0" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1),
r => r.area);
double ccgdmj = SumArea(casesForCounty.Where(r => r.measure_name == "0" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1),
r => r.gengdi_area);
double ccyjjbntmj = SumArea(casesForCounty.Where(r => r.measure_name == "0" && r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1),
r => r.yongjiujibennongtian_area);
OffenceEChartResp offenceEchartResp = new OffenceEChartResp
{
countyid = item.Id,
countyname = item.Name,
tbzs = wfzs - flhzs - bbsxzs - cczs,
tbmj = Math.Round(wfmj - flhmj - bbsxmj - ccmj, 2),
gdmj = Math.Round(wfgdmj - flhgdmj - bbsxgdmj - ccgdmj, 2),
yjjbntmj = Math.Round(wfyjjbntmj - flhyjjbntmj - bbsxyjjbntmj - ccyjjbntmj, 2),
};
listechartResp.Add(offenceEchartResp);
}
}
listechartResp = listechartResp.OrderByDescending(r => r.tbzs).ToList();
return new Response<List<OffenceEChartResp>>
{
Result = listechartResp,
Message = "获取数据成功"
};
}
public Response<List<OffenceEChartResp>> CaseOffenceEcharts(int type, DateTime dateTime)
{
var (startTime, endTime) = GetMonthStartAndEnd(dateTime.Year, dateTime.Month);
var user = _auth.GetCurrentUser().User;
var orgIds = base._auth.GetCurrentUser().Orgs;
List<OffenceEChartResp> listechartResp = new List<OffenceEChartResp>();
////只查询农用地案件
//var casetype = client.Queryable<SysDataItemDetail>()
// .Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD").First()?.ItemDetailId;
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
List<SysOrg> org = new List<SysOrg>();
List<DroneCaseInfoSingle> caseList = new List<DroneCaseInfoSingle>();
if (orgIds.Any(r => r.Level == 0) || user.Id == -1) // 查询全部
{
org = client.Queryable<SysOrg>().Where(r => r.Level == 1).ToList();
caseList = client.Queryable<DroneCaseInfoSingle>()
.WhereIF(dateTime.Year != 0001, r => r.synchronoustime >= startTime && r.synchronoustime <= endTime)
.Where(r => r.typename == "农用地" && r.is_closed == 0).ToList();
}
else if (orgIds.Any(r => r.Level == 1))
{
//县区数据
org = client.Queryable<SysOrg>()
.Where(r => r.Level == 2 && orgIds.Select(a => a.Id).Contains(r.ParentId)).ToList();
//caseList = client.Queryable<DroneCaseInfoSingle>()
// .WhereIF(month != 0, r => r.synchronoustime >= startTime && r.synchronoustime <= endTime)
// .Where(r => r.typeid == casetype && r.is_closed == 0).ToList();
}
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(dateTime.Year != 0001, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => a.typename == "农用地" && a.is_closed == 0)
.Where((a, b) => !string.IsNullOrEmpty(b.Id)).ToList();
if (type == 1)//下发图斑
{
foreach (var item in org)
{
var countyIdString = item.Id.ToString();
var casesForCounty = caseList.Where(r => r.countyid == countyIdString || r.streetid == countyIdString).ToList();
double xfgdmj = SumArea(casesForCounty, r => r.gengdi_area);
var yongjiujibennongtianarea = SumArea(casesForCounty, r => r.yongjiujibennongtian_area);
double xfmj = SumArea(casesForCounty, r => r.area);
OffenceEChartResp offenceEchartResp = new OffenceEChartResp
{
countyid = item.Id,
countyname = item.Name,
tbzs = casesForCounty.Count,
tbmj = xfmj,
gdmj = xfgdmj,
yjjbntmj = yongjiujibennongtianarea
};
listechartResp.Add(offenceEchartResp);
}
}
else if (type == 2)
{
foreach (var item in org)
{
var countyIdString = item.Id.ToString();
var casesForCounty = caseList.Where(r => r.countyid == countyIdString || r.streetid == countyIdString).ToList();
casesForCounty = casesForCounty.Where(r =>
(!(string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00") &&
r.handle_status_id != 5) ||
(r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1 && !(string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00"))).ToList();
double xfgdmj = SumArea(casesForCounty, r => r.gengdi_area);
var yongjiujibennongtianarea = SumArea(casesForCounty, r => r.yongjiujibennongtian_area);
double xfmj = SumArea(casesForCounty, r => r.area);
OffenceEChartResp offenceEchartResp = new OffenceEChartResp
{
countyid = item.Id,
countyname = item.Name,
tbzs = casesForCounty.Count,
tbmj = xfmj,
gdmj = xfgdmj,
yjjbntmj = yongjiujibennongtianarea
};
listechartResp.Add(offenceEchartResp);
}
}
else
{
foreach (var item in org)
{
var countyIdString = item.Id.ToString();
var casesForCounty = caseList.Where(r => r.countyid == countyIdString || r.streetid == countyIdString).ToList();
casesForCounty = casesForCounty.Where(r =>
(!(string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00")) &&
r.handle_status_id != 5).ToList();
double xfgdmj = SumArea(casesForCounty, r => r.gengdi_area);
var yongjiujibennongtianarea = SumArea(casesForCounty, r => r.yongjiujibennongtian_area);
double xfmj = SumArea(casesForCounty, r => r.area);
OffenceEChartResp offenceEchartResp = new OffenceEChartResp
{
countyid = item.Id,
countyname = item.Name,
tbzs = casesForCounty.Count,
tbmj = xfmj,
gdmj = xfgdmj,
yjjbntmj = yongjiujibennongtianarea
};
listechartResp.Add(offenceEchartResp);
}
}
listechartResp = listechartResp.OrderByDescending(r => r.tbzs).ToList();
return new Response<List<OffenceEChartResp>>
{
Result = listechartResp,
Message = "获取数据成功"
};
}
public (DateTime startOfMonth, DateTime endOfMonth) GetMonthStartAndEnd(int year, int month)
{
if (month == 0)
{
return (DateTime.Now.AddMonths(-3), DateTime.Now);
}
// 获取该月的第一天
DateTime startOfMonth = new DateTime(year, month, 1);
// 获取该月的最后一天
DateTime endOfMonth = startOfMonth.AddMonths(1).AddSeconds(-1);
return (startOfMonth, endOfMonth);
}
/// <summary>
/// 趋势图表
/// </summary>
/// <param name="datatype"></param>
/// <param name="begindate"></param>
/// <param name="enddate"></param>
/// <param name="countyid"></param>
/// <param name="type"></param>
/// <returns></returns>
public Response<List<dynamic>> GetTrendEchartsDataOld(int datatype, string begindate, string enddate, string countyid, int type)
{
// 计算开始和结束时间
DateTime begin = DateTime.Now.AddDays(-10).Date;
DateTime end = DateTime.Now;
if (string.IsNullOrEmpty(begindate) || string.IsNullOrEmpty(enddate))
{
if (datatype == 1)
{
begin = Convert.ToDateTime(DateTime.Now.AddMonths(-10).ToString("yyyy-MM-01"));
end = DateTime.Now;
}
}
else
{
begin = Convert.ToDateTime(begindate);
end = Convert.ToDateTime(enddate);
}
// 设置时间格式
string format = datatype == 1 ? "yyyy-MM" : "yyyy-MM-dd";
// 获取案件类型
var casetype = client.Queryable<SysDataItemDetail>()
.Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD")
.Select(r => r.ItemDetailId)
.First();
// 定义查询条件
var query = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.Where((a, b) => a.synchronoustime >= begin && a.synchronoustime < end && a.synchronoustime != null && a.typeid == casetype && a.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), (a, b) => a.countyid == countyid || a.streetid == countyid)
.Where((a, b) => !string.IsNullOrEmpty(b.Id))
.OrderBy((a, b) => a.synchronoustime);
// 根据类型添加额外的过滤条件
if (type == 2)
{
//query = query.Where(a => (a.is_illegal == 1 || a.handle_status_id != 5) &&
// !(a.weifaleixing == 1 && a.handle_status_id == 5) &&
// !(string.IsNullOrEmpty(a.gengdi_area) &&a.handle_status_id == 5));
query = query.Where(a => (!(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00") &&
a.handle_status_id != 5) ||
(!(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00") &&
a.handle_status_id == 5 && a.weifaleixing == 0 && a.is_illegal == 1));
}
else if (type == 3)
{
//query = query.Where(a => (a.is_illegal == 1 || a.handle_status_id != 5) &&
// !(a.weifaleixing == 1 && a.handle_status_id == 5) &&
// !(string.IsNullOrEmpty(a.gengdi_area) && a.handle_status_id == 5) &&
// !(a.measure_name == "1" && a.handle_status_id == 5) &&
// !(a.measure_name == "0" && a.handle_status_id == 5));
query = query.Where(a => (!(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00")) &&
a.handle_status_id != 5);
}
// 查询并处理数据
var caselistss = query
.Select(a => new CaseInfoChartData
{
Id = a.Id,
createtime = Convert.ToDateTime(a.synchronoustime).ToString(format),
is_illegal = a.is_illegal,
measure_name = a.measure_name,
handle_status_id = a.handle_status_id,
weifaleixing = a.weifaleixing,
gengdi_area = a.gengdi_area,
yongjiujibennongtian_area = a.yongjiujibennongtian_area,
area = a.area
})
.MergeTable()
.GroupBy(it => it.createtime)
.OrderBy(it => it.createtime)
.Select(it => (dynamic)new
{
time = it.createtime,
tnmj = SqlFunc.Round(SqlFunc.ToDouble(SqlFunc.AggregateSum(string.IsNullOrEmpty(it.area) ? 0.0 : SqlFunc.ToDouble(it.area))), 2),
gdmj = SqlFunc.Round(SqlFunc.ToDouble(SqlFunc.AggregateSum(string.IsNullOrEmpty(it.gengdi_area) ? 0.0 : SqlFunc.ToDouble(it.gengdi_area))), 2),
yjjbntmj = SqlFunc.Round(SqlFunc.ToDouble(SqlFunc.AggregateSum(string.IsNullOrEmpty(it.yongjiujibennongtian_area) ? 0.0 : SqlFunc.ToDouble(it.yongjiujibennongtian_area))), 2),
tbzs = SqlFunc.AggregateCount(it.Id),
}).ToList();
return new Response<List<dynamic>>
{
Result = caselistss,
Message = "获取数据成功"
};
}
public Response<List<dynamic>> GetTrendEchartsData(int datatype, string begindate, string enddate, string countyid, int type)
{
// 计算开始和结束时间
DateTime begin = DateTime.Now.AddMonths(-3).Date;
DateTime end = DateTime.Now;
if (string.IsNullOrEmpty(begindate) || string.IsNullOrEmpty(enddate))
{
if (datatype == 1)
{
begin = Convert.ToDateTime(DateTime.Now.AddMonths(-10).ToString("yyyy-MM-01"));
end = DateTime.Now;
}
}
else
{
begin = Convert.ToDateTime(begindate);
end = Convert.ToDateTime(enddate);
}
// 设置时间格式
string format = datatype == 1 ? "yyyy-MM" : "yyyy-MM-dd";
if (datatype == 0)
{
// 调整时间范围为整周
begin = begin.AddDays(-(int)begin.DayOfWeek + 1); // 周一
end = end.AddDays(7 - (int)end.DayOfWeek); // 周日
}
//// 获取案件类型
//var casetype = client.Queryable<SysDataItemDetail>()
// .Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD")
// .Select(r => r.ItemDetailId)
// .First();
// 定义查询条件
var query = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.Where((a, b) => a.synchronoustime >= begin && a.synchronoustime < end && a.synchronoustime != null && a.typename == "农用地" && a.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), (a, b) => a.countyid == countyid || a.streetid == countyid)
.Where((a, b) => !string.IsNullOrEmpty(b.Id))
.OrderBy((a, b) => a.synchronoustime);
// 根据类型添加额外的过滤条件
if (type == 2)
{
query = query.Where(a =>
(!(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00") &&
a.handle_status_id != 5) ||
(a.handle_status_id == 5 && a.weifaleixing == 0 && a.is_illegal == 1 && !(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00")));
}
else if (type == 3)
{
query = query.Where(a => (!(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00")) &&
a.handle_status_id != 5);
}
// 查询并处理数据
var caselistss = query
.Select(a => new
{
Id = a.Id,
rawCreatetime = a.synchronoustime, // 暂时存储为原始日期格式
is_illegal = a.is_illegal,
measure_name = a.measure_name,
handle_status_id = a.handle_status_id,
weifaleixing = a.weifaleixing,
gengdi_area = a.gengdi_area,
yongjiujibennongtian_area = a.yongjiujibennongtian_area,
area = a.area
})
.ToList() // 将查询结果加载到内存
.Select(a => new
{
a.Id,
createtime = datatype == 0 ? GetWeekFormat(Convert.ToDateTime(a.rawCreatetime)) : Convert.ToDateTime(a.rawCreatetime).ToString(format),
a.is_illegal,
a.measure_name,
a.handle_status_id,
a.weifaleixing,
a.gengdi_area,
a.yongjiujibennongtian_area,
a.area
})
.GroupBy(it => it.createtime) // 按时间分组
.OrderBy(it => it.Key)
.Select(it => (dynamic)new
{
time = it.Key,
tnmj = Math.Round(it.Sum(x => string.IsNullOrEmpty(x.area) ? 0.0 : Convert.ToDouble(x.area)), 2),
gdmj = Math.Round(it.Sum(x => string.IsNullOrEmpty(x.gengdi_area) ? 0.0 : Convert.ToDouble(x.gengdi_area)), 2),
yjjbntmj = Math.Round(it.Sum(x => string.IsNullOrEmpty(x.yongjiujibennongtian_area) ? 0.0 : Convert.ToDouble(x.yongjiujibennongtian_area)), 2),
tbzs = it.Count()
}).ToList();
return new Response<List<dynamic>>
{
Result = caselistss,
Message = "获取数据成功"
};
// 本地函数用于格式化周数
string GetWeekFormat(DateTime date)
{
var calendar = System.Globalization.CultureInfo.CurrentCulture.Calendar;
var dateTimeFormat = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
int weekOfYear = calendar.GetWeekOfYear(date, dateTimeFormat.CalendarWeekRule, dateTimeFormat.FirstDayOfWeek);
return $"{date.Year}年第{weekOfYear}周";
}
}
/// <summary>
/// 数据分析
/// </summary>
/// <param name="countyid">县区id</param>
/// <param name="month">月份</param>
/// <returns></returns>
public Response<dynamic> GetAnalysisData(string countyid, DateTime dateTime)
{
var (startTime, endTime) = GetMonthStartAndEnd(dateTime.Year, dateTime.Month);
var (startTime2, endTime2) = dateTime.Month == 1 ? GetMonthStartAndEnd(dateTime.Year - 1, 12) : GetMonthStartAndEnd(dateTime.Year, dateTime.Month - 1);
// 获取案件类型
//var casetype = client.Queryable<SysDataItemDetail>()
// .Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD")
// .Select(r => r.ItemDetailId)
// .First();
// 查询本月数据
var currentMonthQuery = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.Where((a, b) => a.synchronoustime >= startTime && a.synchronoustime < endTime && a.synchronoustime != null && a.typename == "农用地" && a.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), (a, b) => a.countyid == countyid || a.streetid == countyid)
.Where((a, b) => !string.IsNullOrEmpty(b.Id));
// 查询上月数据
var previousMonthQuery = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.Where((a, b) => a.synchronoustime >= startTime2 && a.synchronoustime < endTime2 && a.synchronoustime != null && a.typename == "农用地" && a.is_closed == 0)
.WhereIF(!string.IsNullOrEmpty(countyid), (a, b) => a.countyid == countyid || a.streetid == countyid)
.Where((a, b) => !string.IsNullOrEmpty(b.Id));
// 本月数据统计
var currentMonthCount = currentMonthQuery.Count();
var currentMonthGdmj = currentMonthQuery.Sum(a => string.IsNullOrEmpty(a.gengdi_area) ? 0 : double.Parse(a.gengdi_area));
// 上月数据统计
var previousMonthCount = previousMonthQuery.Count();
var previousMonthGdmj = previousMonthQuery.Sum(a => string.IsNullOrEmpty(a.gengdi_area) ? 0 : double.Parse(a.gengdi_area));
// 计算环比,避免除以零
var xftbhb = previousMonthCount != 0 ? (currentMonthCount - previousMonthCount) / (double)previousMonthCount * 100 : 100;
var gdmjhb = previousMonthGdmj != 0 ? (currentMonthGdmj - previousMonthGdmj) / previousMonthGdmj * 100 : 100;
// 新增违法数据统计
var xzwfCurrentMonthQuery = currentMonthQuery.Where(a =>
//(a.is_illegal == 1 && a.handle_status_id == 5) || a.handle_status_id != 5);
(!(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00") &&
a.handle_status_id != 5) ||
(a.handle_status_id == 5 && a.weifaleixing == 0 && a.is_illegal == 1 && !(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00")));
var xzwfPreviousMonthQuery = previousMonthQuery.Where(a =>
(!(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00") &&
a.handle_status_id != 5) ||
(a.handle_status_id == 5 && a.weifaleixing == 0 && a.is_illegal == 1 && !(string.IsNullOrEmpty(a.gengdi_area) || a.gengdi_area == "0" || a.gengdi_area == "0.00")));
//(a.is_illegal == 1 && a.handle_status_id == 5) || a.handle_status_id != 5);
var xzwfCurrentMonthCount = xzwfCurrentMonthQuery.Count();
var xzwfCurrentMonthGdmj = xzwfCurrentMonthQuery.Sum(a => string.IsNullOrEmpty(a.gengdi_area) ? 0 : double.Parse(a.gengdi_area));
var xzwfPreviousMonthCount = xzwfPreviousMonthQuery.Count();
var xzwfPreviousMonthGdmj = xzwfPreviousMonthQuery.Sum(a => string.IsNullOrEmpty(a.gengdi_area) ? 0 : double.Parse(a.gengdi_area));
// 计算环比,避免除以零
var wftbhb = xzwfPreviousMonthCount != 0 ? (xzwfCurrentMonthCount - xzwfPreviousMonthCount) / (double)xzwfPreviousMonthCount * 100 : 100;
var xzwfGdmjhb = xzwfPreviousMonthGdmj != 0 ? (xzwfCurrentMonthGdmj - xzwfPreviousMonthGdmj) / xzwfPreviousMonthGdmj * 100 : 100;
var result = new
{
xftb = currentMonthCount,
gdmj = Math.Round(currentMonthGdmj, 2),
xftbhb = Math.Round(xftbhb, 2),
gdmjhb = Math.Round(gdmjhb, 2),
xzwf = xzwfCurrentMonthCount,
xzwfmj = Math.Round(xzwfCurrentMonthGdmj, 2),
wftbhb = Math.Round(wftbhb, 2),
xzwfgdmjhb = Math.Round(xzwfGdmjhb, 2),
};
return new Response<dynamic>
{
Result = result,
Message = "获取数据成功"
};
}
#endregion
/// <summary>
/// 下发图斑
/// </summary>
/// <param name="month">月份</param>
/// <returns></returns>
public Response<dynamic> CaseOffenceXiaFa(DateTime dateTime)
{
int monthcount = 0;
if (dateTime.Month == 0)
{
monthcount = 1;
}
else
{
monthcount = dateTime.Month;
}
var (startTime, endTime) = GetMonthStartAndEnd(dateTime.Year, dateTime.Month);
var user = _auth.GetCurrentUser().User;
var orgIds = base._auth.GetCurrentUser().Orgs;
List<OffenceEChartResp> listechartResp = new List<OffenceEChartResp>();
////只查询农用地案件
//var casetype = client.Queryable<SysDataItemDetail>()
// .Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD").First()?.ItemDetailId;
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
List<SysOrg> org = new List<SysOrg>();
List<DroneCaseInfoSingle> caseList = new List<DroneCaseInfoSingle>();
if (orgIds.Any(r => r.Level == 0) || user.Id == -1) // 查询全部
{
org = client.Queryable<SysOrg>().Where(r => r.Level == 1).ToList();
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(dateTime.Year != 0001, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => (a.typename == "农用地" || a.typename == "建设用地" || a.typename == "推堆土") && a.is_closed == 0)
.Where((a, b) => !string.IsNullOrEmpty(b.Id)).ToList();
}
else if (orgIds.Any(r => r.Level == 1))
{
List<string> orgstr = new List<string>();
//县区数据
org = client.Queryable<SysOrg>()
.Where(r => r.Level == 2 && orgIds.Select(a => a.Id).Contains(r.ParentId)).ToList();
foreach (var item in org)
{
orgstr.Add(item.Id.ToString());
}
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(dateTime.Year != 0001, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => orgstr.Contains(a.countyid) || orgstr.Contains(a.streetid))
.Where((a, b) => (a.typename == "农用地" || a.typename == "建设用地" || a.typename == "推堆土") && a.is_closed == 0)
.Where((a, b) => !string.IsNullOrEmpty(b.Id)).ToList();
}
int xiafaCount = caseList.Count;
double tubanarea = SumArea(caseList, r => r.area);
double gengdiarea = SumArea(caseList, r => r.gengdi_area);
double jibenarea = SumArea(caseList, r => r.yongjiujibennongtian_area);
int nongyongdicount = caseList.Where(r => r.typename == "农用地").ToList().Count;
int jianshecount = caseList.Where(r => r.typename == "建设用地").ToList().Count;
int tuiduitucount = caseList.Where(r => r.typename == "推堆土").ToList().Count;
var result = new
{
xiafacount = xiafaCount,
tubanarea = Math.Round(tubanarea, 2),
gengdiarea = Math.Round(gengdiarea, 2),
jibenarea = Math.Round(jibenarea, 2),
nongyongdicount = nongyongdicount,
jianshecount = jianshecount,
tuiduitucount = tuiduitucount,
};
return new Response<dynamic>
{
Result = result,
Message = "获取数据成功"
};
}
/// <summary>
/// 核实新增
/// </summary>
/// <param name="month">月份</param>
/// <returns></returns>
public Response<dynamic> CaseOffenceCheckAdd(DateTime dateTime)
{
int monthcount = 0;
if (dateTime.Month == 0)
{
monthcount = 1;
}
else
{
monthcount = dateTime.Month;
}
var (startTime, endTime) = GetMonthStartAndEnd(dateTime.Year, monthcount);
var user = _auth.GetCurrentUser().User;
var orgIds = base._auth.GetCurrentUser().Orgs;
List<OffenceEChartResp> listechartResp = new List<OffenceEChartResp>();
//只查询农用地案件
//var casetype = client.Queryable<SysDataItemDetail>()
// .Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD").First()?.ItemDetailId;
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
List<SysOrg> org = new List<SysOrg>();
List<DroneCaseInfoSingle> caseList = new List<DroneCaseInfoSingle>();
if (orgIds.Any(r => r.Level == 0) || user.Id == -1) // 查询全部
{
org = client.Queryable<SysOrg>().Where(r => r.Level == 1).ToList();
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(dateTime.Year != 0001, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => a.typename == "农用地" && a.is_closed == 0)
.Where((a, b) => !string.IsNullOrEmpty(b.Id)).ToList();
}
else if (orgIds.Any(r => r.Level == 1))
{
List<string> orgstr = new List<string>();
//县区数据
org = client.Queryable<SysOrg>()
.Where(r => r.Level == 2 && orgIds.Select(a => a.Id).Contains(r.ParentId)).ToList();
foreach (var item in org)
{
orgstr.Add(item.Id.ToString());
}
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(dateTime.Year != 0001, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => orgstr.Contains(a.countyid) || orgstr.Contains(a.streetid))
.Where((a, b) => a.typename == "农用地" && a.is_closed == 0)
.Where((a, b) => !string.IsNullOrEmpty(b.Id)).ToList();
}
//var singlist = caseList.Where(r => ((r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5) &&
// !(r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1) &&
// !((string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00") && r.handle_status_id == 5
// && (r.handle_status_id != 5 || (r.is_illegal == 1 && r.handle_status_id == 5)))).ToList();
var singlist = caseList.Where(r =>
(!(string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00") &&
r.handle_status_id != 5) ||
(!(string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00") &&
r.handle_status_id == 5 && r.weifaleixing == 0 && r.is_illegal == 1)).ToList();
int xinzengcount = singlist.Count;
double gengdiarea = SumArea(singlist, r => r.gengdi_area);
double jibenarea = SumArea(singlist, r => r.yongjiujibennongtian_area);
int oneyixia = singlist.Where(r => !string.IsNullOrEmpty(r.gengdi_area) && double.Parse(r.gengdi_area) < 1).ToList().Count;
int onetofive = singlist.Where(r => !string.IsNullOrEmpty(r.gengdi_area) && double.Parse(r.gengdi_area) >= 1 && double.Parse(r.gengdi_area) <= 5).ToList().Count;
int fiveyishang = singlist.Where(r => !string.IsNullOrEmpty(r.gengdi_area) && double.Parse(r.gengdi_area) > 5).ToList().Count;
var result = new
{
xinzengcount = xinzengcount,
gengdiarea = Math.Round(gengdiarea, 2),
jibenarea = Math.Round(jibenarea, 2),
oneyixia = oneyixia,
onetofive = onetofive,
fiveyishang = fiveyishang,
};
return new Response<dynamic>
{
Result = result,
Message = "获取数据成功"
};
}
/// <summary>
/// 整改剩余
/// </summary>
/// <param name="month">月份</param>
/// <returns></returns>
public Response<dynamic> CaseOffenceModifyRemain(DateTime dateTime)
{
int monthcount = 0;
if (dateTime.Month == 0)
{
monthcount = 1;
}
else
{
monthcount = dateTime.Month;
}
var (startTime, endTime) = GetMonthStartAndEnd(dateTime.Year, dateTime.Month);
var user = _auth.GetCurrentUser().User;
var orgIds = base._auth.GetCurrentUser().Orgs;
List<OffenceEChartResp> listechartResp = new List<OffenceEChartResp>();
////只查询农用地案件
//var casetype = client.Queryable<SysDataItemDetail>() dateTime.Year != 0001
// .Where(r => r.ItemCode == "DRONE_CASE_TYPE" && r.ItemValue == "DRONE_CASE_TYPE_NYD").First()?.ItemDetailId;
double SumArea(IEnumerable<DroneCaseInfoSingle> cases, Func<DroneCaseInfoSingle, string> selector)
{
var sum = cases
.Select(selector)
.Where(area => !string.IsNullOrEmpty(area))
.Sum(area => double.TryParse(area, out var result) ? result : 0);
return Math.Round(sum, 2); // 保留两位小数
}
List<SysOrg> org = new List<SysOrg>();
List<DroneCaseInfoSingle> caseList = new List<DroneCaseInfoSingle>();
if (orgIds.Any(r => r.Level == 0) || user.Id == -1) // 查询全部
{
org = client.Queryable<SysOrg>().Where(r => r.Level == 1).ToList();
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(dateTime.Year != 0001, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => a.typename == "农用地" && a.is_closed == 0)
.Where((a, b) => !string.IsNullOrEmpty(b.Id)).ToList();
}
else if (orgIds.Any(r => r.Level == 1))
{
List<string> orgstr = new List<string>();
//县区数据
org = client.Queryable<SysOrg>()
.Where(r => r.Level == 2 && orgIds.Select(a => a.Id).Contains(r.ParentId)).ToList();
foreach (var item in org)
{
orgstr.Add(item.Id.ToString());
}
caseList = client.Queryable<DroneCaseInfoSingle>()
.LeftJoin<WFProcess>((a, b) => SqlFunc.JsonField(b.InstanceInfo, "pkeyValue") == a.Id)
.WhereIF(dateTime.Year != 0001, (a, b) => a.synchronoustime >= startTime && a.synchronoustime <= endTime)
.Where((a, b) => orgstr.Contains(a.countyid) || orgstr.Contains(a.streetid))
.Where((a, b) => a.typename == "农用地" && a.is_closed == 0).ToList();
}
//var singlist = caseList.Where(r => ((r.is_illegal == 1 && r.handle_status_id == 5) || r.handle_status_id != 5) &&
// !(r.weifaleixing == 1 && r.handle_status_id == 5 && r.is_illegal == 1) &&
// !((string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00") && r.handle_status_id == 5 && (r.handle_status_id != 5 || (r.is_illegal == 1 && r.handle_status_id == 5))) &&
// !(r.measure_name == "1" && r.handle_status_id == 5 && r.weifaleixing == 0) &&
// !(r.measure_name == "0" && r.handle_status_id == 5 && r.weifaleixing == 0)).ToList();
var singlist = caseList.Where(r =>
(!(string.IsNullOrEmpty(r.gengdi_area) || r.gengdi_area == "0" || r.gengdi_area == "0.00")) &&
r.handle_status_id != 5).ToList();
int shengyucount = singlist.Count;
double gengdiarea = SumArea(singlist, r => r.gengdi_area);
double jibenarea = SumArea(singlist, r => r.yongjiujibennongtian_area);
int oneyixia = singlist.Where(r => !string.IsNullOrEmpty(r.gengdi_area) && double.Parse(r.gengdi_area) < 1).ToList().Count;
int onetofive = singlist.Where(r => !string.IsNullOrEmpty(r.gengdi_area) && double.Parse(r.gengdi_area) >= 1 && double.Parse(r.gengdi_area) <= 5).ToList().Count;
int fiveyishang = singlist.Where(r => !string.IsNullOrEmpty(r.gengdi_area) && double.Parse(r.gengdi_area) > 5).ToList().Count;
var result = new
{
shengyucount = shengyucount,
gengdiarea = Math.Round(gengdiarea, 2),
jibenarea = Math.Round(jibenarea, 2),
oneyixia = oneyixia,
onetofive = onetofive,
fiveyishang = fiveyishang,
};
return new Response<dynamic>
{
Result = result,
Message = "获取数据成功"
};
}
public async Task<Response<PageInfo<List<DroneCaseInfoSingle>>>> ReFlyVerifyPage(PageReq req)
{
RefAsync<int> totalCount = 0;
var data = await Repository.ChangeRepository<SugarRepositiry<DroneCaseInfoSingle>>()
.AsQueryable()
.Where(t => t.measure_name.Equals("0")) // 拆除复耕
.Where(t => t.is_closed.Equals(0))
.ToPageListAsync(req.page, req.limit, totalCount);
return new Response<PageInfo<List<DroneCaseInfoSingle>>>
{
Result = new PageInfo<List<DroneCaseInfoSingle>>
{
Items = data,
Total = totalCount
}
};
}
}
}