using OpenAuth.App.BaseApp.Base; using OpenAuth.Repository.Domain; using OpenAuth.Repository; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OpenAuth.App.Interface; using SqlSugar; using Infrastructure; using OpenAuth.App.ServiceApp.CompanyManage.Request; using OpenAuth.App.ServiceApp.TaxManage.Response; using NPOI.SS.Formula.Functions; namespace OpenAuth.App.ServiceApp.TaxManage { public class TaxManagementApp : SqlSugarBaseApp { private ISqlSugarClient client; #region 构造函数 public TaxManagementApp( ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, ISqlSugarClient sqlSugarClient ) : base(unitWork, repository, auth) { this.client = sqlSugarClient; } #endregion #region 图层查询 public async Task> GetTucengInfo() { var list = await client.Queryable().ToTreeAsync(it => it.Child, it => it.PId, 0); return list; } #endregion #region 用地、房屋图层相关企业查询 public async Task> GetTaxBuildingInfo(string req) { string sql = "select * from view_building"; if (!string.IsNullOrEmpty(req)) { sql += " where syrmc like '%" + req + "%' or zdbm='" + req + "'"; } var list = await client.SqlQueryable(sql).ToListAsync(); return list; } public async Task> GetTaxZongdiInfo(string req) { string sql = "select * from view_zongdi"; if (!string.IsNullOrEmpty(req)) { sql += " where syrmc like '%" + req + "%' or zdbm='" + req + "'"; } var list = await client.SqlQueryable(sql).ToListAsync(); return list; } #endregion #region 图表数据查询 /// /// 查询地图数据 /// /// public async Task> LoadMapTotalData() { //区域面积 decimal? qymj = await client.Queryable()?.SumAsync(r => SqlFunc.IsNull(r.zdfzmj,0)); decimal qymjtotal = 0; if (qymj != null) { qymjtotal = Math.Round((decimal)qymj / 1000, 2); } //地块总数 int dkzs = await client.Queryable().CountAsync(); //企业数量 int qysl=await client.Queryable().CountAsync(); //年度利润总数 decimal? ndlr = await client.Queryable().Where(r=>r.tjnd==DateTime.Now.Year.ToString())?.SumAsync(r => SqlFunc.IsNull(r.ndgx, 0)); return new Response { Code = 200, Message = "success", Result = new { qymj= qymjtotal, dkzs=dkzs, qysl=qysl, ndlr=ndlr } }; } /// /// 查询图表数据 /// /// public async Task>> LoadChartData() { //获取行政区数据 var xzq = await client.Queryable() .OrderBy(r => r.djqdm) .GroupBy(r => new { r.djqdm, r.djqmc }) .Select(r => new XZQ { djqdm=r.djqdm, djqmc=r.djqmc, }).ToListAsync(); //获取房屋面积数据 var fw = await client.Queryable() .LeftJoin((r, z) => r.szzdbm == z.zdbm) .GroupBy((r, z) => z.djqdm) .Select((r, z) => new CompanyData { name=z.djqdm, data=(decimal)SqlFunc.AggregateSumNoNull(r.jzwfzmj) }).ToListAsync(); //获取宗地面积 var zd = await client.Queryable() .GroupBy(r => r.djqdm) .Select(r => new CompanyData { name = r.djqdm, data = (decimal)SqlFunc.AggregateSumNoNull(r.zdfzmj) }).ToListAsync(); List response = new List(); foreach ( var x in xzq) { TaxResponse res = new TaxResponse(); res.djqmc = x.djqmc; var fwdata=fw.Where(r=>r.name== x.djqdm).FirstOrDefault(); if(fwdata != null) { res.fcmj = Math.Round(fwdata.data,2); } var dkdata=zd.Where(r=>r.name==x.djqdm).FirstOrDefault(); if (dkdata != null) { res.tdmj=Math.Round(dkdata.data,2); } response.Add(res); } return new Response> { Code = 200, Message = "success", Result = response }; } /// /// 企业收入分乡镇情况 /// /// public async Task>> LoadgongxianChartData() { //获取行政区数据 var xzq = await client.Queryable() .OrderBy(r => r.djqdm) .GroupBy(r => new { r.djqdm, r.djqmc }) .Select(r => new XZQ { djqdm = r.djqdm, djqmc = r.djqmc, }).ToListAsync(); //获取房屋贡献 var fw = await client.Queryable() .Where(r=>r.tjnd==DateTime.Now.Year.ToString()) .LeftJoin((r, z) => r.zzwbm == z.jzwbm) .LeftJoin((r,z,d)=>z.szzdbm==d.zdbm) .GroupBy((r, z, d) => d.djqdm) .Select((r, z, d) => new CompanyData { name = d.djqdm, data = (decimal)SqlFunc.AggregateSumNoNull(r.ndgx) }).ToListAsync(); //获取宗地贡献 var zd = await client.Queryable() .Where(r => r.tjnd == DateTime.Now.Year.ToString()) .LeftJoin((r,z)=>r.sszdbm==z.zdbm) .GroupBy((r, z) => z.djqdm) .Select((r, z) => new CompanyData { name = z.djqdm, data = (decimal)SqlFunc.AggregateSumNoNull(r.ndgx) }).ToListAsync(); List response = new List(); foreach (var x in xzq) { TaxgongxianResponse res = new TaxgongxianResponse(); res.djqmc = x.djqmc; var fwdata = fw.Where(r => r.name == x.djqdm).FirstOrDefault(); if (fwdata != null) { res.fcgx = Math.Round(fwdata.data, 2); } var dkdata = zd.Where(r => r.name == x.djqdm).FirstOrDefault(); if (dkdata != null) { res.tdgx = Math.Round(dkdata.data, 2); } response.Add(res); } return new Response> { Code = 200, Message = "success", Result = response }; } #endregion } }