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 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]")] public class EqpRepairApplyService : IEqpRepairApplyService, IDynamicApiController, ITransient { private readonly ISqlSugarRepository _repository; private readonly IUserManager _userManager; public EqpRepairApplyService(ISqlSugarRepository repository, IUserManager userManager) { _repository = repository; _userManager = userManager; } [HttpPost] public async Task Repeal(Dictionary dic) { string id = dic["id"]; await _repository.UpdateAsync(x => new EqpRepairApply() { status = RepairApplyStatus.REPEAL }, x => x.id == id); return "作废成功"; } [HttpPost] public async Task Close(Dictionary dic) { string id = dic["id"]; await _repository.UpdateAsync(x => new EqpRepairApply() { status = RepairApplyStatus.CLOSE }, x => x.id == id); return "关闭成功"; } [HttpPost] public async Task Assign(Dictionary dic) { string id = dic["id"]; string repairerId = dic["repairerId"]; await _repository.UpdateAsync(x => new EqpRepairApply() { repairer_id = repairerId, status = RepairApplyStatus.TOBERECEIVED, }, x => x.id == id); return "指派成功"; } [HttpPost] public async Task Receive(Dictionary dic) { string id = dic["id"]; await _repository.UpdateAsync(x => new EqpRepairApply() { status = RepairApplyStatus.RECEIVED, }, x => x.id == id); return "接收成功"; } [HttpPost] public async Task Refuse(Dictionary dic) { string id = dic["id"]; string reason = dic["reason"]; var db = _repository.AsSugarClient(); DbResult result = await db.Ado.UseTranAsync(async () => { await _repository.UpdateAsync(x => new EqpRepairApply() { status = RepairApplyStatus.REFUSE, }, x => x.id == id); EqpRepairRefuse eqpRepairRefuse = new EqpRepairRefuse() { repair_apply_id = id, reason = reason, create_id = _userManager.UserId, create_time = DateTime.Now, org_id = _userManager.GetUserInfo().Result.organizeId }; await db.Insertable(eqpRepairRefuse).ExecuteCommandAsync(); }); if(!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008); return "拒绝成功"; } [HttpPost] public async Task GetInfo(Dictionary dic) { string id = dic["id"]; return await _repository.GetSingleAsync(x => x.id == id); } [HttpPost] public async Task Register(RepairApplyRegisterInput input) { string status = input.is_out_apply==1 ? RepairApplyStatus.TOBEOUTAPPLY : RepairApplyStatus.COMPLETED; await _repository.UpdateAsync(x => new EqpRepairApply() { fault_id = input.fault_id, is_complete = input.is_complete, complete_time = input.complete_time, repair_take_time = input.repair_take_time, is_halt = input.is_halt, halt_take_time = input.halt_take_time, repair_description = input.repair_description, repair_img = input.repair_img, is_out_apply = input.is_out_apply, status = status, }, x => x.id == input.id); return "登记成功"; } [HttpPost] public async Task GetRepairApplyDetail(Dictionary dic) { string id = dic["id"]; EqpRepairApply eqpRepairApply = await _repository.GetSingleAsync(x => x.id == id); EqpRepairOutApply eqpRepairOutApply = await _repository.AsSugarClient().Queryable().FirstAsync(x=>x.repair_apply_id==id); return new RepairApplyDetailOutput() { eqpRepairApply = eqpRepairApply, eqpRepairOutApply = eqpRepairOutApply, }; } [HttpPost] public async Task GetRepairRecordList(EquipQueryInput input) { var db = _repository.AsSugarClient(); Dictionary? queryJson = new Dictionary(); if (!string.IsNullOrEmpty(input.queryJson)) { queryJson = JsonConvert.DeserializeObject>(input.queryJson); } var result = await db.Queryable() .LeftJoin((a,b)=>a.apply_user_id==b.Id) .LeftJoin((a,b,c)=>a.repairer_id==c.Id) .Where(a=>a.equip_id==input.equip_id) .Select((a,b,c) => new EquipRepairRecordQueryOutput { id = a.id, equip_id = a.equip_id, code = a.code, name = a.name, apply_user_id =b.RealName, is_ugent = a.is_ugent==1 ? "是" : "否", description = a.description, repair_description = a.repair_description, complete_time = a.complete_time==null ? null : a.complete_time.Value.ToString("yyyy-MM-dd HH:mm"), repairer_id = c.RealName }).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } [HttpPost] public async Task GetPadRepairList(PadRepairListInput input) { List statusList = new List(); if (!string.IsNullOrEmpty(input.status)) { switch (input.status) { case "1" : statusList.Add(RepairApplyStatus.TOBEEXECUTED); statusList.Add(RepairApplyStatus.REFUSE); break; case "2" : statusList.Add(RepairApplyStatus.TOBERECEIVED); statusList.Add(RepairApplyStatus.RECEIVED); statusList.Add(RepairApplyStatus.OUTAPPLYAPPROVE); statusList.Add(RepairApplyStatus.APPROVEPASS); statusList.Add(RepairApplyStatus.APPROVENOTPASS); statusList.Add(RepairApplyStatus.TOBEOUTAPPLY); break; case "3" : statusList.Add(RepairApplyStatus.COMPLETED); statusList.Add(RepairApplyStatus.CLOSE); statusList.Add(RepairApplyStatus.REPEAL); break; } } var db = _repository.AsSugarClient(); var result = await db.Queryable() .LeftJoin((a,b)=>a.apply_user_id==b.Id) .LeftJoin((a,b,c)=>a.repairer_id==c.Id) .LeftJoin((a,b,c,d)=>a.equip_id==d.id) .LeftJoin((a,b,c,d,e)=>e.EnCode==DictConst.RepairStatus) .LeftJoin((a,b,c,d,e,f)=>e.Id==f.DictionaryTypeId && a.status==f.EnCode) .WhereIF(!string.IsNullOrEmpty(input.equip_info),(a,b,c,d)=>d.code.Contains(input.equip_info) || d.name.Contains(input.equip_info)) .WhereIF(!string.IsNullOrEmpty(input.status),(a,b,c,d)=>statusList.Contains(a.status)) .Select((a,b,c,d,e,f) => new PadRepairListOutput { id = a.id, equip_id = d.code+"/"+d.name, equip_id_id = a.equip_id, code = a.code, name = a.name, apply_user_id =b.RealName, apply_user_id_id =b.Id, is_ugent = a.is_ugent==1 ? "是" : "否", description = a.description, create_time = a.create_time==null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), complete_time = a.complete_time==null ? "" : a.complete_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), expect_complete_time = a.expect_complete_time==null ? "" : a.expect_complete_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), repairer_id = c.RealName, repairer_id_id = c.Id, remark = a.remark, status = f.FullName }).ToListAsync(); return result; } } }