|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 自动订舱模板
|
|
|
|
|
/// </summary>
|
|
|
|
|
[ApiDescriptionSettings("Application", Name = "BookingSoTemplate", Order = 1)]
|
|
|
|
|
public class BookingSoTemplateService : IDynamicApiController, ITransient
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
private readonly ILogger<BookingSlotService> _logger;
|
|
|
|
|
private readonly ISysCacheService _cache;
|
|
|
|
|
private readonly SqlSugarRepository<BookingSoTemplate> _rep;
|
|
|
|
|
|
|
|
|
|
public BookingSoTemplateService(ILogger<BookingSlotService> logger,
|
|
|
|
|
ISysCacheService cache,
|
|
|
|
|
SqlSugarRepository<BookingSoTemplate> rep)
|
|
|
|
|
{
|
|
|
|
|
_logger = logger;
|
|
|
|
|
_cache = cache;
|
|
|
|
|
|
|
|
|
|
_rep = rep;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 分页查询订舱模板
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="input"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet("/BookingSoTemplate/page")]
|
|
|
|
|
public async Task<SqlSugarPagedList<BookingSoTemplateListOutput>> 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<SqlSugarPagedList<BookingSoTemplateListOutput>>();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 保存订舱模板
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="input"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost("/BookingSoTemplate/save")]
|
|
|
|
|
public async Task<BookingSoTemplateDetailOutput> 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<BookingSoTemplate>();
|
|
|
|
|
await _rep.InsertAsync(model);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return model.Adapt<BookingSoTemplateDetailOutput>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 删除订舱模板
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="id"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取订舱模板
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="id"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet("/BookingSoTemplate/detail")]
|
|
|
|
|
public async Task<BookingSoTemplateDetailOutput> 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<BookingSoTemplateDetailOutput>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|