lg_backend/langguanApi/Service/TransportService.cs

216 lines
9.3 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 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-7D电动 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 "";
}
}
}
}