using Entity.Api.Req; using Entity.Api.Resp; using Entity.DbModel.Station; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Entity; using Repository.Station; using SqlSugar; using System.Linq.Expressions; using AutoMapper; using Entity.Dto; using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.Mvc; using Service.Mgr; namespace Service.Station; /// /// 充电订单 /// [Scope("SingleInstance")] public class SwapOrderService : BaseServices { public SwapOrderRepository swapOrderRepository { get; set; } public SwapOrderReportCloudRepository SwapOrderReportCloudRepository { get; set; } public SwapOrderMgr SwapOrderMgr { get; set; } public SwapOrderService(SwapOrderRepository dal) { BaseDal = dal; } public Result UploadCloud(int id) { List list = SwapOrderReportCloudRepository.QueryListByClause(i => i.CloudReportStatus == 0 && i.SwapOrderId == id); if (list.Count <= 0) { return Result.Fail("当前换电订单不满足上报云平台的条件"); } return SwapOrderMgr.UploadCloud(list,2) ? Result.Success() : Result.Fail(); } /// /// 导出充电订单 /// /// /// public async Task ExportSwapOrder(QuerySwapOrderPageReq swapOrder) { // 查询订单 List swapOrders = await QuerySwapOrderListAsync(swapOrder); var config = new MapperConfiguration(cfg => { cfg.CreateMap().ReverseMap(); }); IMapper mapper = config.CreateMapper(); List list = mapper.Map>(swapOrders); IExcelExporter excelExporter = new ExcelExporter(); var res = await excelExporter.ExportAsByteArray(list); return new FileStreamResult(new MemoryStream(res), "application/octet-stream") { FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "换电订单.xlsx" }; } /// /// 查询需要导出换电订单 /// /// /// public async Task> QuerySwapOrderListAsync(QuerySwapOrderPageReq swapOrder) { Expression> where = null; ParameterExpression parameter = Expression.Parameter(typeof(SwapOrder), "u"); #region 构建动态查询树 where = queryTree(swapOrder, where, parameter); #endregion // 查询需要导出充电订单 不分页 return await swapOrderRepository.QuerySwapOrderList(where); } /// /// 根据条件查询分页数据 /// /// /// public PageResult QuerySwapOrder(QuerySwapOrderPageReq swapOrder) { //创建一个空的表达式树 Expression> where = null; //// 定义参数表达式 ParameterExpression parameter = Expression.Parameter(typeof(SwapOrder), "u"); #region 构建动态查询树 where = queryTree(swapOrder, where, parameter); #endregion //查询 //var swapOrderResp = PageResult.ConvertPage(swapOrderRepository.QueryIPageByCause(swapOrder, where)); //for (int i = 0; i < swapOrderResp.Rows.Count; i++) //{ // swapOrderResp.Rows[0].BatteryList.AddRange() //} //List BatteryList = new List(); //List StepList = new List(); return PageResult.ConvertPage(swapOrderRepository.QueryIPage(swapOrder, where)); } private static Expression>? queryTree(QuerySwapOrderPageReq swapOrder, Expression>? where, ParameterExpression parameter) { if (!string.IsNullOrEmpty(swapOrder.Sn)) { Expression> condition2Expr = u => u.Sn == swapOrder.Sn; where = where == null ? condition2Expr : Expression.Lambda>(Expression.AndAlso(where.Body, condition2Expr.Body), parameter); } if (!string.IsNullOrEmpty(swapOrder.VehicleNo)) { Expression> condition2Expr = u => u.VehicleNo == swapOrder.VehicleNo; where = where == null ? condition2Expr : Expression.Lambda>(Expression.AndAlso(where.Body, condition2Expr.Body), parameter); } if (!string.IsNullOrEmpty(swapOrder.VehicleMac)) { Expression> condition2Expr = u => u.VehicleMac == swapOrder.VehicleMac; where = where == null ? condition2Expr : Expression.Lambda>(Expression.AndAlso(where.Body, condition2Expr.Body), parameter); } if (!string.IsNullOrEmpty(swapOrder.VehicleVin)) { Expression> condition2Expr = u => u.VehicleVin == swapOrder.VehicleVin; where = where == null ? condition2Expr : Expression.Lambda>(Expression.AndAlso(where.Body, condition2Expr.Body), parameter); } if (swapOrder.SwapBeginTime != null && swapOrder.SwapBeginTime != DateTime.MinValue) { Expression> condition2Expr = u => u.SwapBeginTime == swapOrder.SwapBeginTime; where = where == null ? condition2Expr : Expression.Lambda>(Expression.AndAlso(where.Body, condition2Expr.Body), parameter); } if (swapOrder.SwapEndTime != null && swapOrder.SwapEndTime != DateTime.MinValue) { Expression> condition2Expr = u => u.SwapEndTime == swapOrder.SwapEndTime; where = where == null ? condition2Expr : Expression.Lambda>(Expression.AndAlso(where.Body, condition2Expr.Body), parameter); } if (swapOrder.SwapResult != 0) { Expression> condition2Expr = u => u.SwapResult == swapOrder.SwapResult; where = where == null ? condition2Expr : Expression.Lambda>(Expression.AndAlso(where.Body, condition2Expr.Body), parameter); } return where; } }