using BPA.SAAS.Manage.Application.DataBase.Dtos.Bom; using BPA.SAAS.Manage.Application.DataBase.Dtos.GoodsAttribute; using BPA.SAAS.Manage.Application.DataBase.Interface; using BPA.SAAS.Manage.Comm.Enum; using BPA.SAAS.Manage.Core.Base; 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; } /// ///获取 配方列表 /// /// /// public async Task BomPage(BomPageInputDto inputDto) { var pertainList = _db.Queryable((a, b) => new JoinQueryInfos(JoinType.Left, a.BomTypeId == b.Id)) .Where((a, b) => a.IsDeleted == 0 && b.IsDeleted == 0) //.WhereIF(inputDto.Pertains != null && inputDto.Pertains.Count > 0, (a, b) => inputDto.Pertains.Contains(b.Pertain)) //.WhereIF(!string.IsNullOrWhiteSpace(inputDto.bomTypeList), (a, b) => b.Id == inputDto.bomTypeList) .Select((a, b) => a.BomId) .ToList(); int total = new RefAsync(); var res = _db.Queryable() .Where(it => it.IsDeleted == 0) .WhereIF(!string.IsNullOrEmpty(inputDto.Name),x=>x.Name.Contains(inputDto.Name)) //.WhereIF(!string.IsNullOrWhiteSpace(inputDto.bomTypeList), x => pertainList.Contains(x.Id)) .OrderBy(i => i.CreateAt, OrderByType.Desc) .ToPageList(inputDto.Current, inputDto.PageSize, ref total); var listtype = _db.Queryable() .Where(a => res.Select(x => x.Id).Contains(a.BomId) && a.IsDeleted == 0).ToList(); var data = new List(); foreach (var item in res) { var obj = listtype.Where(x => x.BomId == item.Id).Select(x => x.BomTypeId).ToList(); data.Add(new { BomTypeList = obj, Name = item.Name, Code = item.Code, item.IsMain, item.BOMInfo, item.Status, item.Id, item.Sort, }); } PageUtil util = new PageUtil() { Total = total, Data = data }; return util; } /// /// 添加配方 /// /// /// public async Task AddBom(BomCreateInputDto dto) { _db.Ado.BeginTran(); try { var sortMax = _db.Queryable().Max(x => x.Sort); BPA_Bom newbPA_BOM = new BPA_Bom { Name = dto.BomName, Code = GetNumber2(), IsMain = true, Sort = sortMax + 1, Id = Guid.NewGuid().ToString(), CreateAt = DateTime.Now, Status = CommonStatus.ENABLE, }; //添加配方 var res = _db.Insertable(newbPA_BOM).CallEntityMethod(m => m.Create()).ExecuteCommand(); //添加配方分类 var list = dto.BomtypeList.Select(item => new BPA_BomTypeInfo() { BomId = newbPA_BOM.Id, BomTypeId = item }).ToList(); _db.Insertable(list).CallEntityMethod(m => m.Create()).ExecuteCommand(); List BOMEntryList = new(); if (dto.Mate.Count > 0) { for (int i = 0; i < dto.Mate.Count; i++) { BPA_BomEntry newbPA_BOMEnty = new BPA_BomEntry { BatchingId = dto.Mate[i].batchingId, //BatchingKey = dto.Mate[i].AutoKey, BomQty = dto.Mate[i].dosage, BomId = newbPA_BOM.Id, Status = CommonStatus.ENABLE, IsReplace = false, }; BOMEntryList.Add(newbPA_BOMEnty); } } //添加配方物料关系 _db.Insertable(BOMEntryList).CallEntityMethod(m => m.Create()).ExecuteCommand(); _db.Ado.CommitTran(); return true; } catch (Exception e) { _db.Ado.RollbackTran(); throw Oops.Oh("添加失败,失败信息:" + e.Message); } } /// /// 删除配方 /// /// /// public async Task DelBom(string id) { try { _db.Ado.BeginTran(); await _db.Deleteable().Where(x => x.Id == id).ExecuteCommandAsync(); await _db.Deleteable().Where(x => x.BomId == id).ExecuteCommandAsync(); _db.Ado.CommitTran(); return true; } catch (Exception e) { _db.Ado.RollbackTran(); throw Oops.Oh("删除失败" + e.Message); } } } }