using BPA.SAAS.Manage.Application.DataBase.Dtos.Bom; using BPA.SAAS.Manage.Application.DataBase.Interface; using BPA.SAAS.Manage.Comm.Enum; using BPA.SAAS.Manage.Core.DataBase; using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BPA.SAAS.Manage.Application.DataBase.Services { public class BomService: IBomService,ITransient { private readonly ISqlSugarClient _db; public BomService(ISqlSugarClient db) { _db=db; } /// /// 配方分类列表 /// /// public async Task> GetBomList() { var res = await _db.Queryable().Select(x => new BomSelectList { Id = x.Id, Name = x.Name }).ToListAsync(); return res; } /// /// 根据配方id查询配方信息 /// /// /// public async Task GetBomList(string bomId) { var res = await _db.Queryable().Where(x=>x.Id== bomId).Select(x => new BomList { Id = x.Id, Name = x.Name, Code=x.Code, IsMain=x.IsMain, Sort=x.Sort, }).Mapper(x => { x.BomTypeIds = _db.Queryable().Where(t => t.BomId == x.Id).Select(t => t.BomTypeId).ToList(); x.BomEntry = _db.Queryable().Where(t => t.BomId == x.Id).ToList(); }).FirstAsync(); return res; } /// /// 添加 /// /// /// public async Task AddBom(BomInputDto dto) { BPA_Bom newbPA_BOM = new BPA_Bom { Name = dto.Name, Code = GetNumber2(), IsMain = dto.IsMain, Sort = dto.Sort, }; var bom =await _db.Insertable(newbPA_BOM).CallEntityMethod(m => m.Create()).ExecuteReturnEntityAsync(); //添加配方分类 var list = dto.BomTypeIds.Select(item => new BPA_BomTypeInfo() { BomId = bom.Id, BomTypeId = item }).ToList(); var res =await _db.Insertable(list).CallEntityMethod(m => m.Create()).ExecuteCommandAsync(); return res > 0; } /// /// 更新 /// /// /// public async Task UpdateBom(BomInputDto dto) { try { _db.Ado.BeginTran(); // 查询数据库中是否存在未删除的商品类型 var resEntity = _db.Queryable().Where(it => it.IsDeleted == 0).First(it => it.Id == dto.Id); if (null == resEntity) { return false; } resEntity.Name = dto.Name; resEntity.IsMain = dto.IsMain; resEntity.Sort = dto.Sort; var res = await _db.Updateable(resEntity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); var bomType = _db.Queryable().Where(it => it.BomId == dto.Id).ToList(); await _db.Deleteable(bomType).ExecuteCommandAsync(); List list = new(); for (int i = 0; i < dto.BomTypeIds.Count; i++) { BPA_BomTypeInfo bomTypeInfo = new(); bomTypeInfo.BomId = dto.Id; bomTypeInfo.BomTypeId = dto.BomTypeIds[i]; bomTypeInfo.Status = CommonStatus.ENABLE; list.Add(bomTypeInfo); } await _db.Insertable(list).CallEntityMethod(m => m.Create()).ExecuteCommandAsync(); _db.Ado.CommitTran(); return res > 0; } catch (Exception e) { _db.Ado.RollbackTran(); throw Oops.Oh("更新失败,失败信息:"+e.Message); } } /// /// 更新配方详情 /// /// /// public async Task UpdateBomBatcing(BomBatcingInputDto dto) { try { _db.Ado.BeginTran(); // 查询数据库中是否存在未删除的商品类型 var resEntity = _db.Queryable().Where(it => it.IsDeleted == 0).First(it => it.Id == dto.BomId); if (null == resEntity) { throw Oops.Oh("配方不存在"); } var bomEntry = _db.Queryable().Where(it => it.BomId == dto.BomId).ToList(); await _db.Deleteable(bomEntry).ExecuteCommandAsync(); List list = new(); for (int i = 0; i < dto.BomEntry.Count; i++) { BPA_BomEntry bomEntryInfo = new(); bomEntryInfo.BomId = dto.BomEntry[i].BomId; bomEntryInfo.BatchingId = dto.BomEntry[i].BatchingId; bomEntryInfo.BomQty = dto.BomEntry[i].Dosage; bomEntryInfo.IsReplace = false; bomEntryInfo.Status = CommonStatus.ENABLE; list.Add(bomEntryInfo); } var res=await _db.Insertable(list).CallEntityMethod(m => m.Create()).ExecuteCommandAsync(); _db.Ado.CommitTran(); return res > 0; } catch (Exception e) { _db.Ado.RollbackTran(); throw Oops.Oh("更新失败,失败信息:" + e.Message); } } /// /// 删除 /// /// /// public async Task DeleteBom(string id) { try { _db.Ado.BeginTran(); var resEntity = _db.Queryable().Where(it => it.IsDeleted == 0).First(it => it.Id == id); if (null == resEntity) { throw Oops.Oh("配方不存在"); } resEntity.IsDeleted = 1; var res = await _db.Updateable(resEntity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); var BomTypeInfo = _db.Queryable().Where(it => it.BomId == id).Select(x => x.Id).ToList(); await _db.Deleteable(BomTypeInfo).ExecuteCommandAsync(); _db.Ado.CommitTran(); return res > 0; } catch (Exception) { _db.Ado.RollbackTran(); throw Oops.Oh("删除失败"); ; } } /// /// 添加 /// /// /// public async Task AddBomType(AddBomTypeInputDto dto) { BPA_BomType newbPA_BOM = new BPA_BomType { Name = dto.Name }; var res = await _db.Insertable(newbPA_BOM).CallEntityMethod(m => m.Create()).ExecuteCommandAsync(); return res > 0; } /// /// 配方分类列表 /// /// public async Task> GetBomTypeList() { var res = await _db.Queryable().Select(x => new { id = x.Id, name = x.Name }).ToListAsync(); return res; } private string GetNumber2(int Length = 10) { byte[] buffer = Guid.NewGuid().ToByteArray(); var ram = BitConverter.ToInt64(buffer, 0); var str = string.Format("{0}", ram.ToString().Substring(0, Length)); return str; } } }