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() .LeftJoin((a,b)=>a.mo_task_id==b.id) .LeftJoin((a, b,c) => a.material_id == c.id) .LeftJoin((a, b,c,d) => a.create_id == d.Id) .LeftJoin((a, b,c,d,e) => a.equip_id == e.id) .WhereIF(!string.IsNullOrEmpty(moTaskCode), (a, b, c, d) => b.mo_task_code.Contains(moTaskCode)) .WhereIF(!string.IsNullOrEmpty(equipInfo), (a, b, c, d,e) => e.code.Contains(equipInfo) || e.name.Contains(equipInfo)) .WhereIF(!string.IsNullOrEmpty(materialInfo), (a, b, c, d,e) => c.code.Contains(materialInfo) || c.name.Contains(materialInfo)) .WhereIF(!string.IsNullOrEmpty(createInfo), (a, b, c, d,e) => d.Account.Contains(createInfo) || d.RealName.Contains(createInfo)) .WhereIF(createTime!=null && createTime.Length==2,a=>a.create_time>=sDate && a.create_time<=eDate) .OrderByDescending(a => a.create_time) .Select((a, b, c, d, e) => new PrdReportUserListOutput { id = a.id, mo_task_id = b.mo_task_code, equip_id = e.name, material_id = c.code+"/"+c.name, batch = a.batch, reported_qty = a.reported_qty, rqty = a.rqty, create_id = d.RealName, create_time = a.create_time.ToString(DbTimeFormat.SS) }).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } } }