using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Myshipping.Application.Entity;
using Myshipping.Core;
using Myshipping.Core.Service;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Myshipping.Application.Service
{
///
/// 自动订舱模板
///
[ApiDescriptionSettings("Application", Name = "BookingSoTemplate", Order = 1)]
public class BookingSoTemplateService : IDynamicApiController, ITransient
{
private readonly ILogger _logger;
private readonly ISysCacheService _cache;
private readonly SqlSugarRepository _rep;
public BookingSoTemplateService(ILogger logger,
ISysCacheService cache,
SqlSugarRepository rep)
{
_logger = logger;
_cache = cache;
_rep = rep;
}
///
/// 分页查询订舱模板
///
///
///
[HttpGet("/BookingSoTemplate/page")]
public async Task> Page([FromQuery] QueryBookingSoTemplateInput input)
{
var query = _rep.AsQueryable().Filter(null, true)
.Where(x => x.IsDeleted == false)
.WhereIF(!string.IsNullOrEmpty(input.CustName), u => u.CustName.Contains(input.CustName))
.WhereIF(!string.IsNullOrEmpty(input.Carrier), u => u.Carrier.Contains(input.Carrier))
.WhereIF(!string.IsNullOrEmpty(input.TemplateName), u => u.TemplateName.Contains(input.TemplateName))
.WhereIF(!string.IsNullOrEmpty(input.ContractNO), u => u.ContractNO.Contains(input.ContractNO))
.WhereIF(!string.IsNullOrEmpty(input.BookingAccount), u => u.BookingAccount.Contains(input.BookingAccount))
.WhereIF(!string.IsNullOrEmpty(input.CarrierId), u => u.CarrierId == input.CarrierId);
if (!string.IsNullOrEmpty(input.SortField) || input.MultiSort == null || input.MultiSort.Count == 0)
{
query = query.OrderBy(PageInputOrder.OrderBuilder(input.SortField, input.DescSort));
}
else
{
query = query.OrderBy(PageInputOrder.MultiOrderBuilder(input.MultiSort));
}
var entities = await query.ToPagedListAsync(input.PageNo, input.PageSize);
return entities.Adapt>();
}
///
/// 保存订舱模板
///
///
///
[HttpPost("/BookingSoTemplate/save")]
public async Task Save(BookingSoTemplateSaveInput input)
{
BookingSoTemplate model = null;
if (input.Id > 0)
{
//同一用户,同一船公司,只允许生效一个模板。
if (input.IsEnable)
{
var c = _rep.AsQueryable().Filter(null, true).Count(x => x.IsDeleted == false
&& x.UserId == input.UserId
&& x.CarrierId == input.CarrierId
&& x.IsEnable
&& x.ContractNO == input.ContractNO
&& x.BookingAccount == input.BookingAccount
&& x.Id != input.Id);
if (c > 0)
{
throw Oops.Bah($"客户:{input.CustName},用户:{input.UserName},船司:{input.Carrier},合约号:{input.ContractNO},订舱账号:{input.BookingAccount} 已存在启用的模板");
}
}
model = _rep.FirstOrDefault(x => x.Id == input.Id);
input.Adapt(model);
await _rep.UpdateAsync(model);
}
else
{
//同一用户,同一船公司,只允许生效一个模板。
if (input.IsEnable)
{
var c = _rep.AsQueryable().Filter(null, true).Count(x => x.IsDeleted == false
&& x.UserId == input.UserId
&& x.CarrierId == input.CarrierId
&& x.IsEnable
&& x.ContractNO == input.ContractNO
&& x.BookingAccount == input.BookingAccount);
if (c > 0)
{
throw Oops.Bah($"客户:{input.CustName},用户:{input.UserName},船司:{input.Carrier},合约号:{input.ContractNO},订舱账号:{input.BookingAccount} 已存在启用的模板");
}
}
model = input.Adapt();
await _rep.InsertAsync(model);
}
return model.Adapt();
}
///
/// 删除订舱模板
///
///
///
[HttpPost("/BookingSoTemplate/delete")]
public async Task Delete(long id)
{
var entity = await _rep.AsQueryable().Filter(null, true)
.FirstAsync(u => u.Id == id && u.IsDeleted == false);
if (entity == null)
{
throw Oops.Bah("未找到模板数据");
}
entity.IsDeleted = true;
await _rep.UpdateAsync(entity);
}
///
/// 获取订舱模板
///
///
///
[HttpGet("/BookingSoTemplate/detail")]
public async Task Get(long id)
{
var model = await _rep.AsQueryable().Filter(null, true)
.FirstAsync(u => u.Id == id && u.IsDeleted == false);
if (model == null)
{
throw Oops.Bah("未找到模板数据");
}
return model.Adapt();
}
}
}