using JNPF; using JNPF.Common.Core.Manager; using JNPF.Common.Extension; using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Extras.CollectiveOAuth.Utils; using JNPF.FriendlyException; using JNPF.Logging; 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.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using SqlSugar; using Tnb.BasicData; using Tnb.BasicData.Entities; using Tnb.EquipMgr.Entities; using Tnb.ProductionMgr.Entities; using Tnb.ProductionMgr.Entities.Dto; using Tnb.ProductionMgr.Entities.Dto.PrdManage; using Tnb.ProductionMgr.Entities.Enums; using Tnb.ProductionMgr.Interfaces; using AuthResponse = JNPF.Extras.CollectiveOAuth.Models.AuthResponse; using StringExtensions = JNPF.Common.Extension.StringExtensions; namespace Tnb.ProductionMgr { /// /// 人员产量统计表 /// [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] [Route("api/[area]/[controller]/[action]")] [OverideVisualDev(ModuleId)] public class PrdReportUserListService : IOverideVisualDevService, IDynamicApiController, ITransient { private const string ModuleId = "37231170320661"; private readonly ISqlSugarRepository _repository; private readonly IDataBaseManager _dataBaseManager; private readonly IUserManager _userManager; private readonly IDictionaryDataService _dictionaryDataService; private readonly IRunService _runService; private readonly IVisualDevService _visualDevService; private readonly ISqlSugarClient _db; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public PrdReportUserListService( ISqlSugarRepository repository, IDataBaseManager dataBaseManager, IUserManager userManager, IDictionaryDataService dictionaryDataService, IRunService runService, IVisualDevService visualDevService ) { _repository = repository; _dataBaseManager = dataBaseManager; _userManager = userManager; _dictionaryDataService = dictionaryDataService; _runService = runService; _visualDevService = visualDevService; _db = _repository.AsSugarClient(); OverideFuncs.GetListAsync = GetList; } private async Task GetList(VisualDevModelListQueryInput input) { ISqlSugarClient db = _repository.AsSugarClient(); Dictionary? queryJson = !string.IsNullOrEmpty(input.queryJson) ? Newtonsoft.Json.JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); string moTaskCode = queryJson.ContainsKey("mo_task_id") ? queryJson["mo_task_id"].ToString() : ""; string equipInfo = queryJson.ContainsKey("equip_id") ? queryJson["equip_id"].ToString() : ""; string materialInfo = queryJson.ContainsKey("material_id") ? queryJson["material_id"].ToString() : ""; string createInfo = queryJson.ContainsKey("create_id") ? queryJson["create_id"].ToString() : ""; DateTime[] createTime = queryJson.ContainsKey("create_time") ? queryJson["create_time"].ToObject().Select(x => DateTimeOffset.FromUnixTimeSeconds(x / 1000).ToLocalTime().DateTime).ToArray() : null; DateTime? sDate = null; DateTime? eDate = null; if (createTime != null && createTime.Length == 2) { sDate = createTime[0]; eDate = createTime[1]; } SqlSugarPagedList result = await db.Queryable() .Select(a=>new { a.create_id, a.material_id, a.batch, create_time = a.create_time.Date, a.reported_qty, a.pqty, a.rqty }) .MergeTable() .LeftJoin((a, b) => a.material_id == b.id) .LeftJoin((a, b,c) => a.create_id == c.Id) .WhereIF(!string.IsNullOrEmpty(materialInfo), (a, b, c) => b.code.Contains(materialInfo) || b.name.Contains(materialInfo)) .WhereIF(!string.IsNullOrEmpty(createInfo), (a, b, c) => c.Account.Contains(createInfo) || c.RealName.Contains(createInfo)) .WhereIF(createTime!=null && createTime.Length==2,a=>a.create_time>=sDate && a.create_time<=eDate) .GroupBy((a,b,c)=>new {a.create_id,a.material_id,b.code,b.name,a.batch,a.create_time,c.RealName}) .OrderByDescending(a => a.create_time) .Select((a, b, c) => new PrdReportUserListOutput { id = "", mo_task_id = "", equip_id = "", material_id = b.code+"/"+b.name, batch = a.batch, reported_qty = SqlFunc.AggregateSumNoNull(a.reported_qty), rqty = SqlFunc.AggregateSumNoNull(a.rqty), create_id = c.RealName, create_time = a.create_time.ToString("yyyy-MM-dd") }).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } } }