using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Extension;
using JNPF.Common.Filter;
using JNPF.FriendlyException;
using JNPF.VisualDev;
using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Interfaces;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
///
/// 齐套配套方案服务
///
[OverideVisualDev(ModuleId)]
public class WmsCollocationSchemeSevice : WmsBasicConfBase, IWmsCollocationSchemeSevice
{
private const string ModuleId = "26167204892965";
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
private readonly ISqlSugarRepository _repository;
public WmsCollocationSchemeSevice(
ISqlSugarRepository repository,
IRunService runService,
IVisualDevService visualDevService
)
{
_repository = repository;
DbContext = _db = repository.AsSugarClient();
_runService = runService;
_visualDevService = visualDevService;
OverideFuncs.CreateAsync = Create;
}
private async Task Create(VisualDevModelDataCrInput input)
{
string materialCode = "";
int seq = 0;
if (input.data.ContainsKey(nameof(WmsCollocationSchemeH.material_code)))
{
materialCode = input.data[nameof(WmsCollocationSchemeH.material_code)]?.ToString()!;
}
if (input.data.ContainsKey(nameof(WmsCollocationSchemeH.seq)) && input.data[nameof(WmsCollocationSchemeH.seq)] != null)
{
seq = input.data[nameof(WmsCollocationSchemeH.seq)].ParseToInt();
}
if (!materialCode.IsNullOrEmpty() && seq > 0)
{
WmsCollocationSchemeH item = await _repository.GetFirstAsync(it => it.material_code == materialCode && it.seq == seq);
if (item != null)
{
throw new AppFriendlyException($"物料+顺序【{materialCode}{seq}】,在数据库中已存在", 500);
}
}
try
{
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
await _runService.Create(templateEntity, input);
}
catch (Exception)
{
return Task.FromResult(false);
}
return await Task.FromResult(true);
}
///
/// MES齐套搭配方案查询接口
///
///
///
[HttpPost]
//[NonUnify]
public async Task MESCollocationSchemeQuery(MESCollocationSchemeQueryInput input)
{
if (input.IsNull())
{
throw new ArgumentNullException("input");
}
SqlSugarPagedList pageData = new();
try
{
pageData = await _db.Queryable()
.Where(a => a.material_id == input.material_id)
.Select(a => new CollocationSchemeOutput
{
list = SqlFunc.Subqueryable().Where(b => b.bill_id == a.id).ToList(),
}, true)
.Mapper(it => it.CollocationSchemeDsJson = JsonConvert.SerializeObject(it.list))
.ToPagedListAsync(input.currentPage, input.pageSize);
}
catch (Exception)
{
}
return pageData == null ? Enumerable.Empty() : PageResult.SqlSugarPageResult(pageData);
}
}
}