216 lines
9.3 KiB
C#
216 lines
9.3 KiB
C#
using langguanApi.Extensions.AutoDI;
|
||
using langguanApi.Model;
|
||
using Mapster;
|
||
using System.Linq.Expressions;
|
||
|
||
namespace langguanApi.Service
|
||
{
|
||
/// <summary>
|
||
/// TransportService 运输服务
|
||
/// </summary>
|
||
[ServiceInjection(InjectionType.Transient)]
|
||
public class TransportService : BaseService<Transport>
|
||
{
|
||
private TruckScalesService _truckScalesService;
|
||
public TransportService(IConfiguration config, TruckScalesService truckScalesService) : base(config, nameof(Transport))
|
||
{
|
||
_truckScalesService = truckScalesService;
|
||
}
|
||
/// <summary>
|
||
/// 新增运输
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
public async Task<Transport> addTransport(AddTransport input)
|
||
{
|
||
var entity = input.Adapt<Transport>();
|
||
entity.effluent = input.EmissionLevel;
|
||
entity.imgUrl=input.EntryExitPictureUrl;
|
||
entity.TransportType = input.EntryDirection;
|
||
return await base.CreateAsync(entity);
|
||
}
|
||
/// <summary>
|
||
/// 首页统计
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<object> GetIndexCount()
|
||
{
|
||
return null;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 分页取数据
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
public async Task<object> GetPage(reqpage input)
|
||
{
|
||
Expression<Func<Transport, bool>> exp = filter => filter.CarNumber.Contains(input.key) && filter.IsDelete == false;
|
||
var list = await base.GetListWithExp(exp);
|
||
var result = new List<TransportDto>();
|
||
if (list.Any())
|
||
{
|
||
foreach (var item in list)
|
||
{
|
||
var entity = item.Adapt<TransportDto>();
|
||
entity.CarColorString = GetColorString(item.CarColor);
|
||
entity.TransportTypeString = item.TransportType == 1 ? "进场" : "出场";
|
||
entity.TimeString = item.Time.ToString("yyyy-MM-dd HH:mm:ss");
|
||
entity.effluent = GetEffluentString(item.effluent);
|
||
result.Add(entity);
|
||
}
|
||
}
|
||
return result.Skip(input.current - 1).Take(input.pageSize);
|
||
}
|
||
/// <summary>
|
||
/// 获取清洁运输统计数字
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<ApiResult> GetCount()
|
||
{
|
||
Expression<Func<Transport, bool>> exp = filter => filter.TransportType == 1;
|
||
var comeCount = await base.Count(exp);
|
||
exp = filter => filter.TransportType == 2;
|
||
var outCount = await base.Count(exp);
|
||
return new ApiResult()
|
||
{
|
||
code = 0,
|
||
data = new
|
||
{
|
||
comeCount,
|
||
outCount,
|
||
inCount = comeCount - outCount,
|
||
AddCount = 0
|
||
}
|
||
};
|
||
}
|
||
/// <summary>
|
||
/// 获取清洁运输趋势列表(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆)
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
public async Task<object> GetTransport(transportReqPage input)
|
||
{
|
||
var result = new CleanTransportationAllDto();
|
||
result.cleans = new List<CleanTransportationDto>();
|
||
//获取门禁数据
|
||
Expression<Func<Transport, bool>> exp = filter => filter.TransportType == 1 && filter.IsDelete == false;
|
||
var list = (await base.GetListWithExp(exp)).ToList();
|
||
//获取地磅数据
|
||
var TruckScaleslist = _truckScalesService.GetTruckScalesList().Result;
|
||
//合并数据
|
||
foreach (var item in TruckScaleslist)
|
||
{
|
||
var transport = list.FirstOrDefault(p => p.CarNumber == item.CarNumber);
|
||
if (transport != null)
|
||
{
|
||
result.cleans.Add(new CleanTransportationDto()
|
||
{
|
||
CarColor = GetColorString(transport.CarColor),
|
||
CarNumber = transport.CarNumber,
|
||
CarType = transport.CarType,
|
||
Time = transport.Time.ToString("yyyy-MM-dd HH:mm:ss"),
|
||
Weight = item.Weight,
|
||
Effluent = GetEffluentString(transport.effluent)
|
||
});
|
||
}
|
||
}
|
||
if (result.cleans.Any())
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(input.startTime))
|
||
{
|
||
//c#集合筛选大于开始时间的数据
|
||
result.cleans = result.cleans.Where(p => DateTime.Parse(p.Time) >= DateTime.Parse(input.startTime)).ToList();
|
||
|
||
}
|
||
if (!string.IsNullOrWhiteSpace(input.endTime))
|
||
{
|
||
result.cleans = result.cleans.Where(p => DateTime.Parse(p.Time) <= DateTime.Parse(input.endTime)).ToList();
|
||
}
|
||
result.cleans = result.cleans.Skip(input.current - 1).Take(input.pageSize).ToList();
|
||
}
|
||
if (result.cleans.Any())
|
||
{
|
||
result.V5Percent =((double)result.cleans.Count(p => p.Effluent == "国五") / result.cleans.Count()).ToString();
|
||
result.V5Numer = (double)result.cleans.Count(p => p.Effluent == "国五");
|
||
result.V5WeightPercent = (result.cleans.Where(p => p.Effluent == "国五").Sum(p=>p.Weight) / result.cleans.Sum(p=>p.Weight)).ToString("0.00");
|
||
result.V5WeightNumber = result.cleans.Where(p => p.Effluent == "国五").Sum(p => p.Weight);
|
||
result.V6Percent = ((double)result.cleans.Count(p => p.Effluent == "国六") / result.cleans.Count()).ToString("0.00");
|
||
result.V6Number = (double)result.cleans.Count(p => p.Effluent == "国六");
|
||
result.V6WeightPercent = (result.cleans.Where(p => p.Effluent == "国六").Sum(p => p.Weight) / result.cleans.Sum(p => p.Weight)).ToString("0.00");
|
||
result.V6WeightNumber = result.cleans.Where(p => p.Effluent == "国六").Sum(p => p.Weight);
|
||
result.ElectricPrecent = ((double)result.cleans.Count(p => p.Effluent == "电动") / result.cleans.Count()).ToString("0.00");
|
||
result.ElectricNumber = (double)result.cleans.Count(p => p.Effluent == "电动");
|
||
result.ElectricWeightPrecent = (result.cleans.Where(p => p.Effluent == "电动").Sum(p => p.Weight) / result.cleans.Sum(p => p.Weight)).ToString("0.00");
|
||
result.ElectricWeightNumber = result.cleans.Where(p => p.Effluent == "电动").Sum(p => p.Weight);
|
||
result.OtherPrecent = ((double)result.cleans.Count(p => p.Effluent != "电动" && p.Effluent != "国五" && p.Effluent != "国六") / result.cleans.Count()).ToString("0.00");
|
||
result.OtherNumber = (double)result.cleans.Count(p => p.Effluent != "电动" && p.Effluent != "国五" && p.Effluent != "国六");
|
||
result.OtherWeightPrecent = (result.cleans.Where(p => p.Effluent != "电动" && p.Effluent != "国五" && p.Effluent != "国六").Sum(p => p.Weight) / result.cleans.Sum(p => p.Weight)).ToString("0.00");
|
||
result.OtherWeightNumber = (double)result.cleans.Where(p => p.Effluent != "电动" && p.Effluent != "国五" && p.Effluent != "国六").Sum(p => p.Weight);
|
||
}
|
||
return new ApiResult()
|
||
{
|
||
code = 0,
|
||
data = new { total=result.cleans.Count, item=result }
|
||
};
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取车辆颜色
|
||
/// </summary>
|
||
/// <param name="color"></param>
|
||
/// <returns></returns>
|
||
public string GetColorString(int color)
|
||
{
|
||
switch (color)
|
||
{
|
||
case 1:
|
||
return CarColor.蓝色.ToString();
|
||
case 2:
|
||
return CarColor.绿色.ToString();
|
||
case 3:
|
||
return CarColor.黄色.ToString();
|
||
case 4:
|
||
return CarColor.白色.ToString();
|
||
case 5:
|
||
return CarColor.黑色.ToString();
|
||
case 6:
|
||
return CarColor.黄绿.ToString();
|
||
default:
|
||
return "";
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 排放标准(0-7是国1-7,D:电动 X:无排放阶段)
|
||
/// </summary>
|
||
/// <param name="effluent"></param>
|
||
/// <returns></returns>
|
||
|
||
public string GetEffluentString(string effluent)
|
||
{
|
||
switch (effluent)
|
||
{
|
||
case "1":
|
||
return "国一";
|
||
case "2":
|
||
return "国二";
|
||
case "3":
|
||
return "国三";
|
||
case "4":
|
||
return "国四";
|
||
case "5":
|
||
return "国五";
|
||
case "6":
|
||
return "国六";
|
||
case "D":
|
||
return "电动";
|
||
case "X":
|
||
return "无排放阶段";
|
||
default:
|
||
return "";
|
||
}
|
||
}
|
||
}
|
||
}
|