using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Interfaces; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.BasicData.Entities; 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 ToolMoldsService : IOverideVisualDevService, IToolMoldsService, IDynamicApiController, ITransient { public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); private const string ModuleId = "26103059189781"; private readonly IVisualDevService _visualDevService; private readonly IUserManager _userManager; private readonly ISqlSugarRepository _repository; private readonly IRunService _runService; public ToolMoldsService(IUserManager userManager, ISqlSugarRepository repository, IVisualDevService visualDevService, IRunService runService) { _visualDevService = visualDevService; _userManager = userManager; _repository = repository; _runService = runService; OverideFuncs.CreateAsync = Create; OverideFuncs.UpdateAsync = Update; } private async Task Create(VisualDevModelDataCrInput visualDevModelDataCrInput) { string? qrcode = visualDevModelDataCrInput.data.ContainsKey("qrcode") ? visualDevModelDataCrInput.data["qrcode"].ToString() : ""; if (!string.IsNullOrEmpty(qrcode) && await _repository.AsSugarClient().Queryable().AnyAsync(x => x.code == qrcode)) { throw Oops.Bah("二维码总表中已存在该二维码"); } else { VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); await _runService.Create(templateEntity, visualDevModelDataCrInput); string ToolId = visualDevModelDataCrInput.data["ReturnIdentity"].ToString() ?? ""; if (!string.IsNullOrEmpty(qrcode)) { BasQrcode basQrcode = new() { code = visualDevModelDataCrInput.data["qrcode"].ToString(), source_id = ToolId, source_name = "TOOL_MOLDS", create_id = _userManager.UserId, create_time = DateTime.Now, org_id = _userManager.GetUserInfo().Result.organizeId, }; _ = await _repository.AsSugarClient().Insertable(basQrcode).ExecuteCommandAsync(); } } return await Task.FromResult(true); } private async Task Update(string id, VisualDevModelDataUpInput visualDevModelDataUpInput) { string? qrcode = string.Empty; if (visualDevModelDataUpInput.data.ContainsKey("qrcode") && visualDevModelDataUpInput.data["qrcode"] != null) { qrcode = visualDevModelDataUpInput.data["qrcode"].ToString(); } if (!string.IsNullOrEmpty(qrcode) && await _repository.AsSugarClient().Queryable().AnyAsync(x => x.code == visualDevModelDataUpInput.data["qrcode"] && x.source_id != id)) { throw Oops.Bah("二维码总表中已存在该二维码"); } else { VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); await _runService.Update(id, templateEntity, visualDevModelDataUpInput); if (!string.IsNullOrEmpty(qrcode)) { if (await _repository.AsSugarClient().Queryable().AnyAsync(x => x.source_id == id)) { _ = await _repository.AsSugarClient().Updateable() .SetColumns(x => x.code == visualDevModelDataUpInput.data["qrcode"].ToString()).Where(x => x.source_id == id) .ExecuteCommandAsync(); } else { BasQrcode basQrcode = new() { code = visualDevModelDataUpInput.data["qrcode"].ToString(), source_id = id, source_name = "TOOL_MOLDS", create_id = _userManager.UserId, create_time = DateTime.Now, org_id = _userManager.GetUserInfo().Result.organizeId, }; _ = await _repository.AsSugarClient().Insertable(basQrcode).ExecuteCommandAsync(); } } } return await Task.FromResult(true); } /// /// 获取模具列表 /// /// /// [HttpGet] public async Task> GetListByIds(List ids) { return await _repository.AsSugarClient().Queryable().Where(it => ids.Contains(it.id)).ToListAsync(); } /// /// 根据设备id 获取匹配的模具列表 /// /// 设备Id /// [HttpGet] public async Task> GetListByEqpId([FromRoute] string eqpId) { ISqlSugarClient db = _repository.AsSugarClient(); List result = await db.Queryable().InnerJoin((a, b) => a.id == b.mold_id) .Where((a, b) => b.equipment_id == eqpId) .Select((a, b) => a) .ToListAsync(); return result; } /// /// 根据模具id获取设备集合 /// /// [HttpPost] public async Task> GetEquipmentLists(ToolMoldInput ToolMoldInput) { ISqlSugarClient db = _repository.AsSugarClient(); List list = await db.Queryable((a, b) => new object[] { JoinType.Inner, a.id == b.equipment_id, }) .Where((a, b) => b.mold_id == ToolMoldInput.mold) .Select((a, b) => new Tnb.EquipMgr.Entities.Dto.EquipmentListOutput { id = a.id, eqp_code = a.code, eqp_name = a.name }).ToListAsync(); return list; } /// /// 增加模具设备绑定 /// /// /// [HttpPost] public async Task SaveData(ToolMoldInput ToolMoldInput) { DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { List his = await _repository.AsSugarClient().Queryable().ToListAsync(); List list = new(); foreach (string equip in ToolMoldInput.equipid) { if (his.Where(p => p.mold_id == ToolMoldInput.mold && p.equipment_id == equip).ToList().Count > 0) { continue; } ToolMoldsEquipment entity = new() { id = SnowflakeIdHelper.NextId(), mold_id = ToolMoldInput.mold, equipment_id = equip, create_time = DateTime.Now, create_id = _userManager.UserId }; list.Add(entity); } _ = await _repository.AsSugarClient().Insertable(list).ExecuteCommandAsync(); }); return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : (dynamic)(result.IsSuccess ? "保存成功" : result.ErrorMessage); } /// /// 批量删除模具设备绑定 /// /// /// [HttpPost] public async Task DetachData(ToolMoldInput ToolMoldInput) { DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { List arr = _repository.AsSugarClient().Queryable().Where(x => x.mold_id == ToolMoldInput.mold && ToolMoldInput.equipid.Contains(x.equipment_id)).ToList(); _ = await _repository.AsSugarClient().Deleteable(arr).ExecuteCommandAsync(); }); return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : (dynamic)(result.IsSuccess ? "操作成功" : result.ErrorMessage); } public Task GetListById(string moldId) { return _repository.GetFirstAsync(it => it.id == moldId); } } }