214 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			9.2 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))
 | 
						||
                {
 | 
						||
                    result.cleans.Where(p => Convert.ToDateTime(p.Time) >= Convert.ToDateTime(input.startTime)).ToList();
 | 
						||
                }
 | 
						||
                if (!string.IsNullOrWhiteSpace(input.endTime))
 | 
						||
                {
 | 
						||
                    result.cleans.Where(p => Convert.ToDateTime(p.Time) <= Convert.ToDateTime(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 "";
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |