using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Aop.Api.Domain; using Aspose.Cells.Drawing; using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Filter; 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.Identity; using Microsoft.AspNetCore.Mvc; using NPOI.SS.Formula.Functions; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.EquipMgr.Entities; using Tnb.EquipMgr.Entities.Dto; using Tnb.EquipMgr.Interfaces; using Tnb.ProductionMgr.Entities.Dto; 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 BasQrcode() { 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 = visualDevModelDataUpInput.data.ContainsKey("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 BasQrcode() { 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) { var db = _repository.AsSugarClient(); var 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) { var db = _repository.AsSugarClient(); var 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 () => { var his = await _repository.AsSugarClient().Queryable().ToListAsync(); var list = new List(); foreach (var equip in ToolMoldInput.equipid) { if (his.Where(p => p.mold_id == ToolMoldInput.mold && p.equipment_id == equip).ToList().Count > 0) continue; var entity = new ToolMoldsEquipment(); entity.id = SnowflakeIdHelper.NextId(); entity.mold_id = ToolMoldInput.mold; entity.equipment_id = equip; entity.create_time = DateTime.Now; entity.create_id = _userManager.UserId; list.Add(entity); } await _repository.AsSugarClient().Insertable(list).ExecuteCommandAsync(); }); if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008); return result.IsSuccess ? "保存成功" : result.ErrorMessage; } /// /// 批量删除模具设备绑定 /// /// /// /// [HttpPost] public async Task DetachData(ToolMoldInput ToolMoldInput) { DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { var arr = _repository.AsSugarClient().Queryable().Where(x => x.mold_id == ToolMoldInput.mold && ToolMoldInput.equipid.Contains(x.equipment_id)).ToList(); await _repository.AsSugarClient().Deleteable(arr).ExecuteCommandAsync(); }); if (!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008); return result.IsSuccess ? "操作成功" : result.ErrorMessage; } public Task GetListById(string moldId) { return _repository.GetFirstAsync(it => it.id == moldId); } } }