using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Entitys.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; using Tnb.EquipMgr.Interfaces; namespace Tnb.EquipMgr { /// /// 模具保养计划执行管理 /// [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)] [Route("api/[area]/[controller]/[action]")] [OverideVisualDev(ModuleId)] public class ToolMoldMaintainRecordService : IOverideVisualDevService, IDynamicApiController, ITransient { public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); private const string ModuleId = "35902722254101"; private readonly ISqlSugarRepository _repository; private readonly IVisualDevService _visualDevService; private readonly IRunService _runService; private readonly IUserManager _userManager; public ToolMoldMaintainRecordService(ISqlSugarRepository repository, IRunService runService, IUserManager userManager, IVisualDevService visualDevService) { _repository = repository; _visualDevService = visualDevService; _runService = runService; _userManager = userManager; OverideFuncs.GetListAsync = GetList; // OverideFuncs.UpdateAsync = ExecuteSpotIns; } private async Task GetList(VisualDevModelListQueryInput input) { ISqlSugarClient db = _repository.AsSugarClient(); Dictionary? queryJson = (input == null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary() : input.queryJson.ToObject>(); string moldInfo = queryJson.ContainsKey("query_info") ? (queryJson["query_info"].ToString() ?? "") : ""; string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : ""; DateTime? start_time = queryJson.ContainsKey("start_time") ? queryJson["start_time"].ToString() == "" ? null : Convert.ToDateTime(queryJson["start_time"]) : null; DateTime? end_time = queryJson.ContainsKey("end_time") ? queryJson["end_time"].ToString() == "" ? null : Convert.ToDateTime(queryJson["end_time"]) : null; if (string.IsNullOrEmpty(input.sidx)) { input.sidx = "a.create_time"; input.sort = "desc"; } else { input.sidx = "a." + input.sidx; } SqlSugarPagedList list = await db.Queryable((a, b, c, d,e) => new object[] { JoinType.Left, a.mold_id == b.id, JoinType.Left, a.execute_user_id == c.Id, JoinType.Left, a.repeat_user_id == d.Id, JoinType.Left, a.modify_id == e.Id, }) .WhereIF(!string.IsNullOrEmpty(status), (a, b, c) => a.status == status) .WhereIF(!string.IsNullOrEmpty(moldInfo), (a, b, c) => b.mold_code.Contains(moldInfo) || b.mold_name.Contains(moldInfo)) .WhereIF(status == "3" && start_time != null, a => a.execute_time >= start_time) .WhereIF(status == "3" && end_time != null, a => a.execute_time <= end_time) .OrderBy($"{input.sidx} {input.sort}") .Select((a, b, c, d,e) => new ToolMoldMaintainRecordListOutput { id = a.id, code = a.code, mold_id = b.mold_code + "/" + b.mold_name, mold_id_id = a.mold_id, status = a.status, result = a.result == "1" ? "合格" : "不合格", repeat_result = a.repeat_result == "1" ? "合格" : "不合格", date_create_time = a.create_time, date_execute_time = a.execute_time, date_repeat_time = a.repeat_time, execute_user_id = c.RealName, execute_user_id_id = a.execute_user_id, repeat_user_id = d.RealName, repeat_user_id_id = a.repeat_user_id, result_remark = a.result_remark, repeat_remark = a.repeat_remark, date_last_execute_time = SqlFunc.Subqueryable().Where(x => a.mold_id == x.mold_id && a.execute_time != null).OrderByDesc(x => x.execute_time).Select(x => x.execute_time), modify_id = e.RealName, modify_id_id = e.Id, date_modify_time = a.modify_time , }) .Mapper(a => { a.status = a.status == "1" ? "待执行" : a.status == "2" ? "待复核" : "已完成"; a.create_time = a.date_create_time == null ? "" : a.date_create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); a.execute_time = a.date_execute_time == null ? "" : a.date_execute_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); a.repeat_time = a.date_repeat_time == null ? "" : a.date_repeat_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); a.last_execute_time = a.date_last_execute_time == null ? "" : a.date_last_execute_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); a.modify_time = a.date_modify_time == null ? "" : a.date_modify_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); }) .ToPagedListAsync(input?.currentPage ?? 1, input?.pageSize ?? 50); var ToolMoldMaintainRecordHs = await db.Queryable().Where(p => list.list.Select(p => p.mold_id_id).ToList().Contains(p.mold_id)).ToListAsync(); foreach (var data in list.list) { data.last_execute_time = ToolMoldMaintainRecordHs.Where(x => data.mold_id_id == x.mold_id && x.execute_time != null).Any() ? ToolMoldMaintainRecordHs.Where(x => data.mold_id_id == x.mold_id && x.execute_time != null).OrderByDescending(x => x.execute_time).FirstOrDefault()!.execute_time!.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""; } return PageResult.SqlSugarPageResult(list); } /// /// 执行模具保养计划 /// /// [HttpPost] public async Task ExecuteMaintain(SpotInsRecordExecuteInput input) { DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { ToolMoldMaintainRecordH eqpSpotInsRecordH = _repository.GetSingle(x => x.id == input.id); string status = eqpSpotInsRecordH.is_repeat == "1" ? SpotInsRecordExecutionStatus.TOBECHECK : SpotInsRecordExecutionStatus.COMPLETED; _ = await _repository.UpdateAsync(x => new ToolMoldMaintainRecordH() { result = input.result, attachment = input.attachment, result_remark = input.result_remark, status = status, execute_time = DateTime.Now, execute_user_id = _userManager.UserId }, x => x.id == input.id); if (input != null && input.details != null) { foreach (Dictionary item in input.details) { _ = await _repository.AsSugarClient().Updateable() .SetColumns(x => x.result == item["result"]) .SetColumnsIF(item.ContainsKey("maintain_descrip"), x => x.maintain_descrip == item["maintain_descrip"]) .Where(x => x.id == item["id"]) .ExecuteCommandAsync(); } } }); return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : (dynamic)(result.IsSuccess ? "执行成功" : result.ErrorMessage); } /// /// 获取模具保养计划复核信息 /// /// /// [HttpPost] public async Task GetMaintainRecordRepeatInfo(Dictionary dic) { string id = dic["id"]; ToolMoldMaintainRecordH eqpSpotInsRecordH = await _repository.GetSingleAsync(x => x.id == id); ToolMolds toolMolds = await _repository.AsSugarClient().Queryable().SingleAsync(x=>x.id==eqpSpotInsRecordH.mold_id); List eqpSpotInsRecordDs = await _repository.AsSugarClient().Queryable() .Where(x => x.maintain_record_id == id).ToListAsync(); Dictionary typeDic = await _repository.AsSugarClient().Queryable() .LeftJoin((a, b) => a.Id == b.DictionaryTypeId) .Where((a, b) => a.EnCode == DictConst.EqpMaintainType) .Select((a, b) => new { b.EnCode, b.FullName }) .MergeTable() .ToDictionaryAsync(it => it.EnCode, it => it.FullName); eqpSpotInsRecordDs.ForEach(x => { x.maintain_type = typeDic.ContainsKey(x.maintain_type) ? typeDic[x.maintain_type] + "" : x.maintain_type; }); // eqpSpotInsRecordH.mold_id = (toolMolds?.mold_code ?? "") + "/" + (toolMolds?.mold_name ?? ""); ToolMoldMaintainRecordRepeatOutput output = new() { model = eqpSpotInsRecordH, details = eqpSpotInsRecordDs, }; return output; } /// /// 复核模具保养计划 /// /// [HttpPost] public async Task RepeatMaintain(MaintainRecordRepeatInput input) { ISqlSugarClient db = _repository.AsSugarClient(); ToolMoldMaintainRecordH toolMoldMaintainRecordH = await _repository.GetSingleAsync(x => x.id == input.id); if (toolMoldMaintainRecordH.status == "1") { throw Oops.Bah("状态错误"); } DbResult result = await db.Ado.UseTranAsync(async () => { if (input != null && input.details != null) { foreach (Dictionary item in input.details) { _ = await db.Updateable() .SetColumnsIF(item.ContainsKey("repeat_descrip"), x => x.repeat_descrip == item["repeat_descrip"]) .SetColumns(x => x.repeat_result == item["repeat_result"]) .Where(x => x.id == item["id"]).ExecuteCommandAsync(); } } if (input != null) { _ = await _repository.UpdateAsync(x => new ToolMoldMaintainRecordH() { fhattachment=input.attachment, repeat_result = input.repeat_result, repeat_remark = input.repeat_remark, repeat_user_id = _userManager.UserId, repeat_time = DateTime.Now, status = SpotInsRecordExecutionStatus.COMPLETED }, x => x.id == input.id); } }); return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : result.IsSuccess ? "复核成功" : result.ErrorMessage; } [HttpPost] public async Task GetMaintainRecordList(EquipQueryInput input) { ISqlSugarClient db = _repository.AsSugarClient(); Dictionary? queryJson = new(); if (!string.IsNullOrEmpty(input.queryJson)) { queryJson = JsonConvert.DeserializeObject>(input.queryJson); } SqlSugarPagedList result = await db.Queryable() .LeftJoin((a, b) => a.mold_id == b.id) .LeftJoin((a, b, c) => a.execute_user_id == c.Id) .LeftJoin((a, b, c, d) => a.repeat_user_id == d.Id) .Where(a => a.mold_id == input.mold_id) .Select((a, b, c, d) => new EquipMaintainRecordQueryOutput { id = a.id, attachment = a.attachment, fhattachment= a.fhattachment, create_time = a.create_time == null ? null : a.create_time.Value.ToString(DbTimeFormat.MM), mold_id = b.mold_code, mold_id_id = a.mold_id, repeat_remark = a.repeat_remark, repeat_result = a.repeat_result == "1" ? "合格" : "不合格", repeat_time = a.repeat_time == null ? null : a.repeat_time.Value.ToString(DbTimeFormat.MM), repeat_user_id = d.RealName, result = a.result == "1" ? "合格" : "不合格", result_remark = a.result_remark, maintain_tem_equip_id = a.maintain_tem_mold_id, execute_time = a.execute_time == null ? null : a.execute_time.Value.ToString(DbTimeFormat.MM), execute_user_id = c.RealName, status = SqlFunc.IF(a.status.Equals("1")).Return("待执行").ElseIF(a.status.Equals("2")).Return("待复核").ElseIF(a.status.Equals("3")).Return("已完成").End("") }).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } /// /// 根据id获取保养相关信息 /// /// [HttpPost] public async Task GetEqpMaintainRecordInfoById(Dictionary dic) { string id = dic.ContainsKey("id") ? dic["id"] : ""; if (string.IsNullOrEmpty(id)) { return null; } ISqlSugarClient db = _repository.AsSugarClient(); return await db.Queryable() .LeftJoin((a, b) => a.mold_id == b.id) .Where((a, b) => a.id == id) .Select((a, b) => new { a.id, a.mold_id, mold_code = b.mold_code, mold_name = b.mold_name, create_time = a.create_time == null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), a.result_remark, a.result, a.status, }).FirstAsync(); } [HttpPost] public async Task Assign(Dictionary dic) { string id = dic["id"]; string executeUserId = dic["executeUserId"]; string repeat_user_id = dic["repeat_user_id"]; ToolMoldMaintainRecordH eqpSpotInsRecordH = await _repository.GetSingleAsync(x => x.id == id); // if (eqpSpotInsRecordH.status == "1") // { _ = await _repository.UpdateAsync(x => new ToolMoldMaintainRecordH() { execute_user_id = executeUserId, repeat_user_id = repeat_user_id, modify_id = _userManager.UserId, modify_time = DateTime.Now }, x => x.id == id); return "指派成功"; // } // else // { // throw Oops.Bah("状态错误"); // } } } }