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();
}
}
}