2025-03-28 09:49:56 +08:00

249 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 车流量数据分析业务层
/// </summary>
public class CartCountAnalysisHelper
{
/// <summary>
/// Oracle 查询初始化帮助类
/// </summary>
private readonly OracleHelper _oracleHelper;
/// <summary>
/// 默认初始化表【卡口车辆进出月度汇总表】
/// </summary>
public CartCountAnalysisHelper()
{
_oracleHelper = new OracleHelper(OracleConfigHelper.Server, OracleConfigHelper.Name, OracleConfigHelper.UserName_PLATFORM_DASHBOARD, OracleConfigHelper.UserPwd);
}
/// <summary>
/// 月度车辆类型占比分页查询
/// </summary>
/// <param name="pageResultDto">查询参数</param>
/// <returns></returns>
public List<CartCountAnalysisModel> 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<CartCountAnalysisModel>)DataTableHelper.DataTableToIList<CartCountAnalysisModel>(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;
}
/// 获取月度车辆归属地排行
/// <param name="StatisticsMonth">统计月份</param>
/// <param name="ServerpartIds">服务区内码集合,多个用,隔开</param>
/// <param name="ServerpartRegion">服务区方位</param>
/// <param name="CartType">车辆类型</param>
/// <returns></returns>
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<CartCountAnalysisRankModel>(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;
}
////车辆归属地列表
/// <param name="StatisticsMonth">统计月份</param>
/// <param name="ServerpartIds">服务区内码集合,多个用,隔开</param>
/// <param name="ServerpartRegion">服务区方位</param>
/// <param name="CartType">车辆类型</param>
/// <returns></returns>
public List<LicensePlateModel> 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<LicensePlateModel>)DataTableHelper.DataTableToIList<LicensePlateModel>(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<LicensePlateModel>();
}
}
}