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