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 Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.BasicData.Entities.Dto;
using Tnb.BasicData.Interfaces;
namespace Tnb.BasicData
{
///
/// 物料清单
///
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 701)]
[Route("api/[area]/[controller]/[action]")]
public class BasRouteService : IBasRouteService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository _repository;
public BasRouteService(
UserManager userManager,
ISqlSugarRepository repository)
{
_repository = repository;
}
///
/// 发布工艺路线
///
/// 工艺路线id id
[HttpPost]
public async Task Publish(Dictionary parameters)
{
string id = parameters["id"];
_ = await _repository.UpdateAsync(x => new BasRouteH()
{
status = "1",
}, x => x.id == id);
}
///
/// 复制工艺路线
///
/// 工艺路线id id
[HttpPost]
public async Task Copy(Dictionary parameters)
{
string id = parameters["id"];
BasRouteH basRouteH = await _repository.GetByIdAsync(id);
List basRouteDs = await _repository.AsSugarClient().Queryable().Where(x => x.route_id == id).ToListAsync();
string newId = SnowflakeIdHelper.NextId();
basRouteH.id = newId;
basRouteH.code += "_复制的请修改";
basRouteH.name += "_复制的请修改";
basRouteH.status = "0";
DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
_ = await _repository.InsertAsync(basRouteH);
foreach (BasRouteD basRouteD in basRouteDs)
{
basRouteD.id = SnowflakeIdHelper.NextId();
basRouteD.route_id = newId;
}
_ = await _repository.AsSugarClient().Insertable(basRouteDs).ExecuteCommandAsync();
});
return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : result.IsSuccess ? "复制成功" : result.ErrorMessage;
}
///
/// 获取有效的已发布的工艺路线
///
[HttpPost]
public async Task GetValidRouteList([FromBody] VisualDevDataFieldDataListInput pageInput)
{
ISqlSugarClient db = _repository.AsSugarClient();
SqlSugarPagedList result = await db.Queryable()
.Where(x => x.status == "1"
&& ((x.start_time != null && x.start_time.Value <= DateTime.Now && x.end_time != null && x.end_time.Value >= DateTime.Now)
|| (x.start_time == null && x.end_time >= DateTime.Now)
|| (x.end_time == null && x.start_time <= DateTime.Now)
|| (x.start_time == null && x.end_time == null)
)).Select(x => new VaildRouteOutput()
{
id = x.id,
code = x.code,
name = x.name,
start_time = x.start_time == null ? "" : x.start_time.Value.ToString("yyyy-MM-dd"),
end_time = x.end_time == null ? "" : x.end_time.Value.ToString("yyyy-MM-dd"),
}).ToPagedListAsync(pageInput.currentPage, pageInput.pageSize);
return PageResult.SqlSugarPageResult(result);
}
}
}