using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Web; using WebAPiDemo.GeneralMethod.Common; using WebAPiDemo.Models; using WebAPiDemo.Models.Common; namespace WebAPiDemo.GeneralMethod.Services { /// /// 车流量数据分析业务层 /// public class CartCountAnalysisHelper { /// /// Oracle 查询初始化帮助类 /// private readonly OracleHelper _oracleHelper; /// /// 默认初始化表【卡口车辆进出月度汇总表】 /// public CartCountAnalysisHelper() { _oracleHelper = new OracleHelper(OracleConfigHelper.Server, OracleConfigHelper.Name, OracleConfigHelper.UserName_PLATFORM_DASHBOARD, OracleConfigHelper.UserPwd); } /// /// 月度车辆类型占比分页查询 /// /// 查询参数 /// public List MonthCartTypeList(PageCartCountAnalysisRequestDto pageResultDto) { StringBuilder sbSql = new StringBuilder(); //查询Sql StringBuilder sbWhere = new StringBuilder($" where INOUT_TYPE={pageResultDto.InoutType}"); //条件Sql,默认 进出类型【INOUT_TYPE】=0 StringBuilder groupWhere = new StringBuilder(); //分组Sql StringBuilder orderBy = new StringBuilder(pageResultDto.SortStr); //排序Sql //判断月度是否为空 if(!string.IsNullOrWhiteSpace(pageResultDto.StatisticsMonth)) { //查询月度字段 sbWhere.Append($" AND STATISTICS_MONTH='{pageResultDto.StatisticsMonth}'"); } //判断服务区内码是否为空,以,分组 if (!string.IsNullOrWhiteSpace(pageResultDto.ServerpartIds)) { var ids = pageResultDto.ServerpartIds.Split(',').ToArray(); if(ids!=null && ids.Any()) { //查询服务区内码 sbWhere.Append($" AND SERVERPART_ID in( {string.Join(",", ids)})"); } } //判断服务区方位是否为空 if (!string.IsNullOrWhiteSpace(pageResultDto.ServerpartRegion)) { //查询服务区方位 sbWhere.Append($" AND SERVERPART_REGION='{pageResultDto.ServerpartRegion}'"); } //从【卡口车辆进出月度汇总表】 查询月度车辆类型占比数据 //统计字段:车辆类型【VEHICLE_TYPE】,车流量【VEHICLE_COUNT】,停留时长(s)【STAY_TIMES】,记录条数(停留时长)【STAY_TIMESCOUNT】 sbSql.Append("select VEHICLE_TYPE,sum(STAY_TIMES) STAY_TIMES,sum(VEHICLE_COUNT)VEHICLE_COUNT,sum(STAY_TIMESCOUNT)STAY_TIMESCOUNT from T_BAYONETMONTHLY_AH"); //车辆类型【VEHICLE_TYPE】分组 groupWhere.Append(" Group by VEHICLE_TYPE"); sbSql.Append(sbWhere).Append(groupWhere).Append(orderBy); var result = _oracleHelper.ExcuteSqlGetDataSet(sbSql.ToString()); //查询不为空,则转成List列表返回 if (result != null) { var list = (IList)DataTableHelper.DataTableToIList(result.Tables[0]); if(list!=null && list.Any()) { //遍历list,停留时长=求和(停留时长)/求和(停留时长记录条数),余2位小数 foreach (var item in list) { item.STAY_TIMES = Math.Round(item.STAY_TIMES / item.STAY_TIMESCOUNT, 2); } } return list.ToList(); } return null; } /// 获取月度车辆归属地排行 /// 统计月份 /// 服务区内码集合,多个用,隔开 /// 服务区方位 /// 车辆类型 /// public CartCountAnalysisRankModel MonthCartRank(string StatisticsMonth,string ServerpartIds,string ServerpartRegion,string CartType) { StringBuilder sbSql = new StringBuilder(); //Sql StringBuilder sbWhere = new StringBuilder($" where 1=1"); //条件Sql //判断月度是否为空 if (!string.IsNullOrWhiteSpace(StatisticsMonth)) { //查询月度字段 sbWhere.Append($" AND STATISTICS_MONTH='{StatisticsMonth}'"); } //判断服务区内码是否为空,以,分组 if (!string.IsNullOrWhiteSpace(ServerpartIds)) { var ids = ServerpartIds.Split(',').ToArray(); if (ids != null && ids.Any()) { //查询服务区内码 sbWhere.Append($" AND SERVERPART_ID in( {string.Join(",", ids)})"); } } //判断服务区方位是否为空 if (!string.IsNullOrWhiteSpace(ServerpartRegion)) { //查询服务区方位 sbWhere.Append($" AND SERVERPART_REGION='{ServerpartRegion}'"); } //判断车辆类型是否为空 if (!string.IsNullOrWhiteSpace(CartType)) { //查询车辆类型 sbWhere.Append($" AND VEHICLE_TYPE='{CartType}'"); } //从【卡口车辆进出月度汇总表】 查询月度车辆归属地排行 //统计字段:省内车流量【PROVINCE_COUNT】,省外车流量【OUTPROVINCE_COUNT】,总车流量【Ttoal_COUNT】 sbSql.Append("select sum(PROVINCE_COUNT) PROVINCE_COUNT,sum(OUTPROVINCE_COUNT)OUTPROVINCE_COUNT from T_BAYONETMONTHLY_AH"); sbSql.Append(sbWhere); var result = _oracleHelper.ExcuteSqlGetDataSet(sbSql.ToString()); //返回是否为空 if (result != null) { var model = DataTableHelper.DataTableToModel(result.Tables[0]); //车辆归属地列表 var plateList = GetLicensePlateModelList(StatisticsMonth,ServerpartIds, ServerpartRegion, CartType); if (plateList != null && plateList.Any()) { //计算列表内 车流量占比 【VEHICLE_COUNT_RATIO】=车流量【VEHICLE_COUNT】/总车流量【Ttoal_COUNT】,并取4位余数 foreach (var item in plateList) { item.VEHICLE_COUNT_RATIO = Math.Round(item.VEHICLE_COUNT / model.Ttoal_COUNT, 4) * 100; } } //将车辆归属地列表添加入 model model.LicensePlateList.AddRange(plateList); return model; } return null; } ////车辆归属地列表 /// 统计月份 /// 服务区内码集合,多个用,隔开 /// 服务区方位 /// 车辆类型 /// public List GetLicensePlateModelList(string StatisticsMonth, string ServerpartIds, string ServerpartRegion, string CartType) { StringBuilder sbSql = new StringBuilder(); //sql StringBuilder sbWhere = new StringBuilder($" where 1=1"); //条件Sql StringBuilder groupWhere = new StringBuilder(); //分组Sql //判断月度是否为空 if (!string.IsNullOrWhiteSpace(StatisticsMonth)) { //查询月度字段 sbWhere.Append($" AND STATISTICS_MONTH='{StatisticsMonth}'"); } //判断服务区内码是否为空,以,分组 if (!string.IsNullOrWhiteSpace(ServerpartIds)) { var ids = ServerpartIds.Split(',').ToArray(); if (ids != null && ids.Any()) { //查询服务区内码 sbWhere.Append($" AND SERVERPART_ID in( {string.Join(",", ids)})"); } } //判断服务区方位是否为空 if (!string.IsNullOrWhiteSpace(ServerpartRegion)) { //查询服务区方位 sbWhere.Append($" AND SERVERPART_REGION='{ServerpartRegion}'"); } //判断车辆类型是否为空 if (!string.IsNullOrWhiteSpace(CartType)) { //查询车辆类型 sbWhere.Append($" AND VEHICLE_TYPE='{CartType}'"); } //从【卡口车辆归属月度统计表】 查询车辆归属地列表 //统计字段:车牌归属地【LICENSE_PLATE】,停留时长【STAY_TIMES】,车流量【VEHICLE_COUNT】,记录条数(停留时长)【STAY_TIMESCOUNT】 sbSql.Append("select LICENSE_PLATE,sum(STAY_TIMES)STAY_TIMES,sum(VEHICLE_COUNT)VEHICLE_COUNT,sum(STAY_TIMESCOUNT)STAY_TIMESCOUNT from T_BAYONETOWNERMONTH_AH"); //根据 车牌归属地【LICENSE_PLATE】 分组 groupWhere.Append("Group by LICENSE_PLATE"); sbSql.Append(sbWhere).Append(groupWhere); //Sql查询帮助类 OracleHelper oracleHelper = new OracleHelper(OracleConfigHelper.Server, OracleConfigHelper.Name, OracleConfigHelper.UserName_HIGHWAY_SELLDATA, OracleConfigHelper.UserPwd); var result = oracleHelper.ExcuteSqlGetDataSet(sbSql.ToString()); //判断返回是否为空 if (result != null) { //实例化成List var list = (List)DataTableHelper.DataTableToIList(result.Tables[0]); if (list != null && list.Any()) { //遍历list,停留时长=求和(停留时长)/求和(停留时长记录条数),余2位小数 foreach (var item in list) { item.STAY_TIMES = Math.Round(item.STAY_TIMES / item.STAY_TIMESCOUNT, 2); } } return list; } return new List(); } } }