using JNPF.Common.Core.Manager; using JNPF.Common.Filter; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; using JNPF.VisualDev.Interfaces; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using SqlSugar; using Tnb.BasicData; using Tnb.EquipMgr.Entities; using Tnb.EquipMgr.Entities.Dto; namespace Tnb.EquipMgr { /// /// 设备故障统计报表 /// [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)] [Route("api/[area]/[controller]/[action]")] [OverideVisualDev(ModuleId)] public class EqpFaultReportService: IOverideVisualDevService,IDynamicApiController, ITransient { private const string ModuleId = "27897732990485"; private readonly ISqlSugarRepository _repository; private readonly IVisualDevService _visualDevService; private readonly IRunService _runService; private readonly IUserManager _userManager; private readonly IBillRullService _billRuleService; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public EqpFaultReportService(ISqlSugarRepository repository, IRunService runService, IVisualDevService visualDevService, IBillRullService billRuleService, IUserManager userManager) { _repository = repository; _visualDevService = visualDevService; _runService = runService; _userManager = userManager; _billRuleService = billRuleService; OverideFuncs.GetListAsync = GetList; } private async Task GetList(VisualDevModelListQueryInput input) { ISqlSugarClient db = _repository.AsSugarClient(); Dictionary? queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); string month = queryJson != null && queryJson.ContainsKey("month") ? queryJson["month"].ToString() : ""; string name = queryJson != null && queryJson.ContainsKey("name") ? queryJson["name"].ToString() : ""; string userId = _userManager.UserId; month = !string.IsNullOrEmpty(month) ? month : DateTime.Now.ToString("yyyy-MM"); SqlSugarPagedList result = await db.Queryable() .LeftJoin((a,b)=>1==1) .LeftJoin((a,b,c)=>c.EnCode==DictConst.FaultType) .LeftJoin((a,b,c,d)=>c.Id==d.DictionaryTypeId && b.fault_type_id==d.EnCode) .WhereIF(!string.IsNullOrEmpty("name"), (a, b) => b.fault_name.Contains(name)) .OrderBy((a,b,c,d)=>a.name) .OrderBy((a,b,c,d)=>b.fault_name) .OrderBy((a,b,c,d)=>d.FullName) .Select((a, b,c,d) => new EqpFaultReportOutput { id = a.id, month = month, fault_name = b.fault_name, fault_type_name = d.FullName, equip_type_name = a.name, count = SqlFunc.Subqueryable().InnerJoin((x,y)=>x.id==y.equip_id).Where((x,y)=>x.equip_type_id==a.id && y.create_time.Value.ToString("yyyy-MM")==month).Count(), repair_take_time = SqlFunc.Subqueryable().InnerJoin((x,y)=>x.id==y.equip_id).Where((x,y)=>x.equip_type_id==a.id && y.create_time.Value.ToString("yyyy-MM")==month).Sum((x,y)=>SqlFunc.IsNull(y.repair_take_time,0)) }).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } } }