using Furion.DynamicApiController;
using Furion.FriendlyException;
using Furion.Templates;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Myshipping.Application.Entity;
using Myshipping.Application.Helper;
using Myshipping.Application.Service.BookingOrder.Dto;
using Myshipping.Core;
using Myshipping.Core.Entity;
using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.SS.Formula.Functions;
using NPOI.XWPF.UserModel;
using Org.BouncyCastle.Crypto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Myshipping.Application
{
///
/// 订舱业务参数
///
[ApiDescriptionSettings("Application", Name = "Para", Order = 10)]
public class ParaService : IParaService, IDynamicApiController
{
private readonly SqlSugarRepository _paraGoodsInfoRepository;
private readonly SqlSugarRepository _paraGoodsCategoryInfoRepository;
private readonly SqlSugarRepository _paraContractNoInfoRepository;
private readonly ILogger _logger;
public ParaService(SqlSugarRepository paraGoodsInfoRepository,
SqlSugarRepository paraGoodsCategoryInfoRepository,
SqlSugarRepository paraContractNoInfoRepository,
ILogger logger
)
{
_paraGoodsInfoRepository = paraGoodsInfoRepository;
_paraGoodsCategoryInfoRepository = paraGoodsCategoryInfoRepository;
_paraContractNoInfoRepository = paraContractNoInfoRepository;
_logger = logger;
}
///
/// 保存品名参数
///
/// 品名参数
/// 返回回执
[HttpPost("/Para/SaveParaGoodsInfo")]
public async Task SaveParaGoodsInfo(ParaGoodsDto model)
{
ParaGoodsInfo info = null;
try
{
//判断代码不能重复
var sameList = _paraGoodsInfoRepository.AsQueryable()
.Where(t => t.GOODS_CODE.Equals(model.GoodsCode, StringComparison.OrdinalIgnoreCase)).ToList();
if(sameList.Count > 0 && !string.IsNullOrWhiteSpace(model.Id) && sameList.Any(t=>t.Id != long.Parse(model.Id)))
throw Oops.Oh($"商品编码【{model.GoodsCode}】已存在不能重复保存");
//如果填写了品名分配需要确认根据库中数据一致
if (!string.IsNullOrWhiteSpace(model.GoodsCategory))
{
var categoryInfo = _paraGoodsCategoryInfoRepository.AsQueryable().First(t => t.GOODS_CATEGORY.Equals(model.GoodsCategory.Trim()));
if (categoryInfo == null)
throw Oops.Oh($"品名分类代码【{model.GoodsCategory}】不存在,请确认品名分类");
if (!string.IsNullOrWhiteSpace(model.GoodsCategoryName) && !categoryInfo.GOODS_CATEGORY_NAME.Equals(model.GoodsCategoryName.Trim()))
throw Oops.Oh($"品名分类名称【{model.GoodsCategoryName}】错误,code={model.GoodsCategory}请确认品名分类");
}
if (!string.IsNullOrWhiteSpace(model.Id))
{
info = await _paraGoodsInfoRepository.AsQueryable().FirstAsync(t => t.Id == long.Parse(model.Id));
if(info == null)
throw Oops.Oh($"品名信息获取失败,请确认{model.Id}对应记录是否存在");
info.GOODS_CODE = model.GoodsCode;
info.GOODS_NAME_CN = model.GoodsNameCN;
info.GOODS_NAME_EN = model.GoodsNameEN;
info.GOODS_DESP = model.GoodsDesp;
info.GOODS_CATEGORY = model.GoodsCategory;
info.GOODS_CATEGORY_NAME = model.GoodsCategoryName;
await _paraGoodsInfoRepository.AsUpdateable(info).IgnoreColumns(it => new
{
it.TenantId,
it.CreatedTime,
it.CreatedUserId,
it.CreatedUserName
}).ExecuteCommandAsync();
}
else
{
info = model.Adapt();
await _paraGoodsInfoRepository.InsertAsync(info);
}
}
catch (Exception ex)
{
throw Oops.Bah($"保存品名参数异常,{ex.Message}");
}
return info.Id;
}
///
/// 作废品名参数
///
/// 品名参数主键数组
/// 返回回执
[HttpPost("/Para/DeleteParaGoodsInfo")]
public async Task DeleteParaGoodsInfo([FromBody] long[] Ids)
{
try
{
//如果没有给主键直接抛异常
if (Ids.Length == 0)
throw Oops.Oh("没有提供需要作废的主键信息");
var list = _paraGoodsInfoRepository.AsQueryable().Where(t => Ids.Contains(t.Id)).ToList();
if (list.Count != Ids.Length)
{
var noRecord = string.Join(",", Ids.GroupJoin(list, l => l, r => r.Id, (l, r) => {
var currList = r.ToList();
if (r.Count() > 0)
return string.Empty;
return l.ToString();
}).Where(t => !string.IsNullOrWhiteSpace(t)).ToArray());
throw Oops.Oh($"以下主键信息 {noRecord} 检索失败或者已作废过");
}
list.ForEach(async entity =>
{
entity.IsDeleted = true;
entity.UpdatedTime = DateTime.Now;
entity.UpdatedUserId = UserManager.UserId;
entity.UpdatedUserName = UserManager.Name;
await _paraGoodsInfoRepository.AsUpdateable(entity).IgnoreColumns(it => new
{
it.TenantId,
it.CreatedTime,
it.CreatedUserId,
it.CreatedUserName
}).ExecuteCommandAsync();
});
}
catch (Exception ex)
{
throw Oops.Bah($"作废品名参数异常,{ex.Message}");
}
return "作废成功";
}
///
/// 主键获取品名参数
///
/// 品名主键
/// 返回回执
[HttpGet("/Para/GetParaGoodsInfo")]
public async Task GetParaGoodsInfo([FromQuery]long Id)
{
ParaGoodsShowDto model = null;
try
{
ParaGoodsInfo info = _paraGoodsInfoRepository.AsQueryable().First(t => t.Id == Id);
if(info == null)
throw Oops.Oh($"获取品名参数失败");
model = info.Adapt();
}
catch (Exception ex)
{
throw Oops.Bah($"获取品名参数异常,{ex.Message}");
}
return model;
}
///
/// 检索品名参数
///
/// 检索值
/// 默认最大行数
/// 返回回执
[HttpGet("/Para/QueryParaGoodsInfo")]
public async Task> QueryParaGoodsInfo([FromQuery] string queryItem, [FromQuery] int top = 10)
{
List list = new List();
try
{
var query = _paraGoodsInfoRepository.AsQueryable();
if (!string.IsNullOrWhiteSpace(queryItem))
{
query = query.Where(t => t.GOODS_CODE.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.GOODS_NAME_CN.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.GOODS_NAME_EN.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.GOODS_DESP.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.GOODS_CATEGORY.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.GOODS_CATEGORY_NAME.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase)
);
}
query = query.OrderBy("GOODS_CODE asc");
var goodsList = await query.Take(top).ToListAsync();
if (goodsList.Count > 0)
list = goodsList.Select(t => t.Adapt()).ToList();
}
catch (Exception ex)
{
throw Oops.Bah($"保存品名参数异常,{ex.Message}");
}
return list;
}
///
/// 品名参数台账查询
///
/// 品名参数台账查询请求
/// 返回结果
[HttpPost("/Para/GetParaGoodsPage")]
public async Task GetParaGoodsPageAsync(QueryParaGoodsDto QuerySearch)
{
DateTime createBegin = DateTime.MinValue;
DateTime createEnd = DateTime.MinValue;
DateTime updateBegin = DateTime.MinValue;
DateTime updateEnd = DateTime.MinValue;
if (!string.IsNullOrWhiteSpace(QuerySearch.CreateTimeBegin))
{
if (!DateTime.TryParse(QuerySearch.CreateTimeBegin, out createBegin))
throw Oops.Oh($"创建开始日期格式错误,{QuerySearch.CreateTimeBegin}");
}
if (!string.IsNullOrWhiteSpace(QuerySearch.CreateTimeEnd))
{
if (!DateTime.TryParse(QuerySearch.CreateTimeEnd, out createEnd))
throw Oops.Oh($"创建结束日期格式错误,{QuerySearch.CreateTimeEnd}");
createEnd = createEnd.AddDays(1);
}
if (!string.IsNullOrWhiteSpace(QuerySearch.UpdateTimeBegin))
{
if (!DateTime.TryParse(QuerySearch.UpdateTimeBegin, out updateBegin))
throw Oops.Oh($"更新起始日期格式错误,{QuerySearch.UpdateTimeBegin}");
}
if (!string.IsNullOrWhiteSpace(QuerySearch.UpdateTimeEnd))
{
if (!DateTime.TryParse(QuerySearch.UpdateTimeEnd, out updateEnd))
throw Oops.Oh($"更新结束日期格式错误,{QuerySearch.UpdateTimeEnd}");
updateEnd = updateEnd.AddDays(1);
}
string entityOrderCol = "CreatedTime";
//这里因为返回给前端的台账数据是DTO,所以这里排序时候需要转换成Entity对应的字段
if (!string.IsNullOrWhiteSpace(QuerySearch.SortField))
entityOrderCol = MapsterExtHelper.GetAdaptProperty(QuerySearch.SortField);
var entities = await _paraGoodsInfoRepository.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.GoodsCode), t => t.GOODS_CODE.Contains(QuerySearch.GoodsCode.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.GoodsNameCN), t => t.GOODS_NAME_CN.Contains(QuerySearch.GoodsNameCN.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(createBegin != DateTime.MinValue, t => t.CreatedTime.HasValue && t.CreatedTime.Value >= createBegin)
.WhereIF(createEnd != DateTime.MinValue, t => t.CreatedTime.HasValue && t.CreatedTime.Value < createEnd)
.WhereIF(updateBegin != DateTime.MinValue, t => t.UpdatedTime.HasValue && t.UpdatedTime.Value >= updateBegin)
.WhereIF(updateEnd != DateTime.MinValue, t => t.UpdatedTime.HasValue && t.UpdatedTime.Value < updateEnd)
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.GoodsDesp), t => t.GOODS_DESP.Contains(QuerySearch.GoodsDesp.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.GoodsNameEN), t => t.GOODS_NAME_EN.Contains(QuerySearch.GoodsNameEN.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.GoodsCategory), t => t.GOODS_CATEGORY.Equals(QuerySearch.GoodsCategory.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.CreateUserName), t => t.CreatedUserName.Contains(QuerySearch.CreateUserName.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.UpdateUserName), t => t.UpdatedUserName.Contains(QuerySearch.UpdateUserName.Trim(), StringComparison.OrdinalIgnoreCase))
.OrderBy(entityOrderCol + (QuerySearch.descSort ? " asc " : " desc "))
.ToPagedListAsync(QuerySearch.PageNo, QuerySearch.PageSize);
return entities.Adapt>();
}
///
/// 保存品名分类参数
///
/// 品名分类参数
/// 返回回执
[HttpPost("/Para/SaveParaGoodsCategoryInfo")]
public async Task SaveParaGoodsCategoryInfo(ParaGoodsCategoryDto model)
{
ParaGoodsCategoryInfo info = null;
try
{
//判断代码不能重复
var sameList = _paraGoodsCategoryInfoRepository.AsQueryable()
.Where(t => t.GOODS_CATEGORY.Equals(model.GoodsCategory, StringComparison.OrdinalIgnoreCase)).ToList();
if (sameList.Count > 0)
{
if (string.IsNullOrWhiteSpace(model.Id) || (!string.IsNullOrWhiteSpace(model.Id) && sameList.Any(t => t.Id != long.Parse(model.Id))))
{
throw Oops.Oh($"商品分类代码【{model.GoodsCategory}】已存在不能重复保存");
}
}
if (!string.IsNullOrWhiteSpace(model.Id))
{
info = await _paraGoodsCategoryInfoRepository.AsQueryable().FirstAsync(t => t.Id == long.Parse(model.Id));
if (info == null)
throw Oops.Oh($"品名分类获取失败,请确认{model.Id}对应记录是否存在");
//如果填写了品名分配需要确认根据库中数据一致
if (!info.GOODS_CATEGORY.Equals(model.GoodsCategory, StringComparison.OrdinalIgnoreCase))
{
var existsList = _paraGoodsCategoryInfoRepository.AsQueryable()
.LeftJoin(_paraGoodsInfoRepository.AsQueryable(), (cate, goods) => cate.GOODS_CATEGORY == goods.GOODS_CATEGORY)
.Where(cate => cate.Id == info.Id)
.Select((cate, goods) => new { Cate = cate, Goods = goods }).ToList();
if (existsList.Any(t => t.Goods != null))
throw Oops.Oh($"原分类代码{info.GOODS_CATEGORY}已有对应品名参数,不能修改");
}
info.GOODS_CATEGORY = model.GoodsCategory;
info.GOODS_CATEGORY_NAME = model.GoodsCategoryName;
await _paraGoodsCategoryInfoRepository.AsUpdateable(info).IgnoreColumns(it => new
{
it.TenantId,
it.CreatedTime,
it.CreatedUserId,
it.CreatedUserName
}).ExecuteCommandAsync();
}
else
{
info = model.Adapt();
await _paraGoodsCategoryInfoRepository.InsertAsync(info);
}
}
catch (Exception ex)
{
throw Oops.Bah($"保存品名分类参数异常,{ex.Message}");
}
return info.Id;
}
///
/// 主键获取品名分类参数
///
/// 品名分类主键
/// 返回回执
[HttpGet("/Para/GetParaGoodsCategoryInfo")]
public async Task GetParaGoodsCategoryInfo(long Id)
{
ParaGoodsCategoryShowDto model = null;
try
{
ParaGoodsCategoryInfo info = _paraGoodsCategoryInfoRepository.AsQueryable().First(t => t.Id == Id);
if (info == null)
throw Oops.Oh($"获取品名分类参数失败");
model = info.Adapt();
}
catch (Exception ex)
{
throw Oops.Bah($"获取品名分类参数异常,{ex.Message}");
}
return model;
}
///
/// 检索品名分类参数
///
/// 检索值
/// 默认最大行数
/// 返回回执
[HttpGet("/Para/QueryParaGoodsCategoryInfo")]
public async Task> QueryParaGoodsCategoryInfo([FromQuery] string queryItem, [FromQuery] int top = 10)
{
List list = new List();
try
{
var query = _paraGoodsCategoryInfoRepository.AsQueryable();
if (!string.IsNullOrWhiteSpace(queryItem))
{
query = query.Where(t =>
t.GOODS_CATEGORY.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.GOODS_CATEGORY_NAME.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase)
);
}
query = query.OrderBy("GOODS_CATEGORY asc");
var currList = await query.Take(top).ToListAsync();
if (currList.Count > 0)
list = currList.Select(t => t.Adapt()).ToList();
}
catch (Exception ex)
{
throw Oops.Bah($"保存品名参数异常,{ex.Message}");
}
return list;
}
///
/// 作废品名分类参数
///
/// 品名分类参数主键数组
/// 返回回执
[HttpPost("/Para/DeleteParaGoodsCategoryInfo")]
public async Task DeleteParaGoodsCategoryInfo(long[] Ids)
{
try
{
//如果没有给主键直接抛异常
if (Ids.Length == 0)
throw Oops.Oh("没有提供需要作废的主键信息");
var list = _paraGoodsCategoryInfoRepository.AsQueryable().Where(t => Ids.Contains(t.Id)).ToList();
if (list.Count != Ids.Length)
{
var noRecord = string.Join(",", Ids.GroupJoin(list, l => l, r => r.Id, (l, r) => {
var currList = r.ToList();
if (r.Count() > 0)
return string.Empty;
return l.ToString();
}).Where(t => !string.IsNullOrWhiteSpace(t)).ToArray());
throw Oops.Oh($"以下主键信息 {noRecord} 检索失败或者已作废过");
}
//这里需要判断当前的品名分类是否已经对应到品名上,如果已有对应则不能直接作废
var existsList = _paraGoodsCategoryInfoRepository.EntityContext.Queryable()
.InnerJoin((cate, goods) => cate.GOODS_CATEGORY == goods.GOODS_CATEGORY)
.Where(cate => Ids.Contains(cate.Id))
.Select((cate, goods) => new { Cate = cate, Goods = goods }).ToList();
if(existsList.Count > 0)
throw Oops.Oh($"以下分类代码已指定品名参数不能直接删除,{string.Join(",",existsList.Select(t=>t.Cate.GOODS_CATEGORY).Distinct().ToArray())}");
list.ForEach(async entity =>
{
entity.IsDeleted = true;
entity.UpdatedTime = DateTime.Now;
entity.UpdatedUserId = UserManager.UserId;
entity.UpdatedUserName = UserManager.Name;
await _paraGoodsCategoryInfoRepository.AsUpdateable(entity).IgnoreColumns(it => new
{
it.TenantId,
it.CreatedTime,
it.CreatedUserId,
it.CreatedUserName
}).ExecuteCommandAsync();
});
}
catch (Exception ex)
{
throw Oops.Bah($"作废品名参数异常,{ex.Message}");
}
return "作废成功";
}
#region 品名分类参数台账查询
///
/// 品名分类参数台账查询
///
/// 品名分类参数台账查询请求
/// 返回结果
[HttpPost("/Para/GetParaGoodsCategoryPage")]
public async Task GetParaGoodsCategoryPageAsync(QueryParaGoodsCategoryDto QuerySearch)
{
DateTime createBegin = DateTime.MinValue;
DateTime createEnd = DateTime.MinValue;
DateTime updateBegin = DateTime.MinValue;
DateTime updateEnd = DateTime.MinValue;
if (!string.IsNullOrWhiteSpace(QuerySearch.CreateTimeBegin))
{
if (!DateTime.TryParse(QuerySearch.CreateTimeBegin, out createBegin))
throw Oops.Oh($"创建开始日期格式错误,{QuerySearch.CreateTimeBegin}");
}
if (!string.IsNullOrWhiteSpace(QuerySearch.CreateTimeEnd))
{
if (!DateTime.TryParse(QuerySearch.CreateTimeEnd, out createEnd))
throw Oops.Oh($"创建结束日期格式错误,{QuerySearch.CreateTimeEnd}");
createEnd = createEnd.AddDays(1);
}
if (!string.IsNullOrWhiteSpace(QuerySearch.UpdateTimeBegin))
{
if (!DateTime.TryParse(QuerySearch.UpdateTimeBegin, out updateBegin))
throw Oops.Oh($"更新起始日期格式错误,{QuerySearch.UpdateTimeBegin}");
}
if (!string.IsNullOrWhiteSpace(QuerySearch.UpdateTimeEnd))
{
if (!DateTime.TryParse(QuerySearch.UpdateTimeEnd, out updateEnd))
throw Oops.Oh($"更新结束日期格式错误,{QuerySearch.UpdateTimeEnd}");
updateEnd = updateEnd.AddDays(1);
}
string entityOrderCol = "CreatedTime";
//这里因为返回给前端的台账数据是DTO,所以这里排序时候需要转换成Entity对应的字段
if (!string.IsNullOrWhiteSpace(QuerySearch.SortField))
entityOrderCol = MapsterExtHelper.GetAdaptProperty(QuerySearch.SortField);
var entities = await _paraGoodsCategoryInfoRepository.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.GoodsCategory), t => t.GOODS_CATEGORY.Contains(QuerySearch.GoodsCategory.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.GoodsCategoryName), t => t.GOODS_CATEGORY_NAME.Contains(QuerySearch.GoodsCategoryName.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(createBegin != DateTime.MinValue, t => t.CreatedTime.HasValue && t.CreatedTime.Value >= createBegin)
.WhereIF(createEnd != DateTime.MinValue, t => t.CreatedTime.HasValue && t.CreatedTime.Value < createEnd)
.WhereIF(updateBegin != DateTime.MinValue, t => t.UpdatedTime.HasValue && t.UpdatedTime.Value >= updateBegin)
.WhereIF(updateEnd != DateTime.MinValue, t => t.UpdatedTime.HasValue && t.UpdatedTime.Value < updateEnd)
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.CreateUserName), t => t.CreatedUserName.Contains(QuerySearch.CreateUserName.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.UpdateUserName), t => t.UpdatedUserName.Contains(QuerySearch.UpdateUserName.Trim(), StringComparison.OrdinalIgnoreCase))
.OrderBy(entityOrderCol + (QuerySearch.descSort ? " asc " : " desc "))
.ToPagedListAsync(QuerySearch.PageNo, QuerySearch.PageSize);
return entities.Adapt>();
}
#endregion
#region 保存约号参数
///
/// 保存约号参数
///
/// 约号参数
/// 返回回执
[HttpPost("/Para/SaveParaContractNoInfo")]
public async Task SaveParaContractNoInfo(ParaContractNoDto model)
{
ParaContractNoInfo info = null;
try
{
////判断代码不能重复
//var sameList = _paraContractNoInfoRepository.AsQueryable()
// .Where(t => t.CONTRACT_NO.Equals(model.ContractNo, StringComparison.OrdinalIgnoreCase)).ToList();
//if (sameList.Count > 0)
//{
// if (string.IsNullOrWhiteSpace(model.Id) || (!string.IsNullOrWhiteSpace(model.Id) && sameList.Any(t => t.Id != long.Parse(model.Id))))
// {
// throw Oops.Oh($"合约号编号【{model.ContractNo}】已存在不能重复保存");
// }
//}
if (!string.IsNullOrWhiteSpace(model.Id))
{
info = await _paraContractNoInfoRepository.AsQueryable().FirstAsync(t => t.Id == long.Parse(model.Id));
if (info == null)
throw Oops.Oh($"约号获取失败,请确认{model.Id}对应记录是否存在");
info.CONTRACT_NO = model.ContractNo?.Trim();
info.CONTRACT_NAME = model.ContractName?.Trim();
info.CONTRACT_NOTE = model.ContractNote?.Trim();
info.LANE_CODE = model.LaneCode?.Trim();
info.LANE_CNAME = model.LaneCName?.Trim();
info.POD_CODE = model.PODCode?.Trim();
info.CARRIER_CODE = model.CarrierCode?.Trim();
info.CONTRACT_PARTY_CODE = model.ContractPartyCode?.Trim();
info.CONTRACT_PARTY_NAME = model.ContractPartyName?.Trim();
info.CONTRACT_LINK_NAME = model.ContractLinkName?.Trim();
info.CONTRACT_LINK_EMAIL = model.ContractLinkEmail?.Trim();
info.IS_OUR_OWN_PRICE = model.IsOurOwnPrice;
await _paraContractNoInfoRepository.AsUpdateable(info).IgnoreColumns(it => new
{
it.TenantId,
it.CreatedTime,
it.CreatedUserId,
it.CreatedUserName
}).ExecuteCommandAsync();
}
else
{
info = model.Adapt();
await _paraContractNoInfoRepository.InsertAsync(info);
}
}
catch (Exception ex)
{
throw Oops.Bah($"保存约号参数异常,{ex.Message}");
}
return info.Id;
}
#endregion
#region 主键获取约号参数
///
/// 主键获取约号参数
///
/// 约号主键
/// 返回回执
[HttpGet("/Para/GetParaContractNoInfo")]
public async Task GetParaContractNoInfo(long Id)
{
ParaContractNoShowDto model = null;
try
{
ParaContractNoInfo info = _paraContractNoInfoRepository.AsQueryable().First(t => t.Id == Id);
if (info == null)
throw Oops.Oh($"获取约号参数失败");
model = info.Adapt();
}
catch (Exception ex)
{
throw Oops.Bah($"获取约号参数异常,{ex.Message}");
}
return model;
}
#endregion
#region 检索约号参数
///
/// 检索约号参数
///
/// 检索值
/// 默认最大行数
/// 船公司代码
/// 航线代码
/// 航线中文
/// 目的港代码
/// 返回回执
[HttpGet("/Para/QuerytParaContractNoInfo")]
public async Task> QuerytParaContractNoInfo([FromQuery] string queryItem, [FromQuery] int top = 10,
[FromQuery] string carrier = "", [FromQuery] string lane = "", [FromQuery] string lanecname = "", [FromQuery] string pod = "")
{
List list = new List();
try
{
var query = _paraContractNoInfoRepository.AsQueryable();
if (!string.IsNullOrWhiteSpace(queryItem))
{
query = query.Where(t =>
t.CONTRACT_NO.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.CONTRACT_NAME.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.CONTRACT_NOTE.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase)||
t.CONTRACT_PARTY_CODE.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.CONTRACT_PARTY_NAME.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.CONTRACT_LINK_NAME.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ||
t.CONTRACT_LINK_EMAIL.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase)
);
}
if (!string.IsNullOrWhiteSpace(carrier))
{
query = query.Where(t => t.CARRIER_CODE.Equals(carrier));
}
//else
//{
// throw Oops.Bah($"检索约号失败,船公司不能为空");
//}
if (!string.IsNullOrWhiteSpace(lane))
{
query = query.Where(t => string.IsNullOrWhiteSpace(t.LANE_CODE) || t.LANE_CODE.Contains(lane));
}
if (!string.IsNullOrWhiteSpace(lanecname))
{
query = query.Where(t => string.IsNullOrWhiteSpace(t.LANE_CNAME) || t.LANE_CNAME.Contains(lanecname));
}
if (!string.IsNullOrWhiteSpace(pod))
{
query = query.Where(t => string.IsNullOrWhiteSpace(t.POD_CODE) || t.POD_CODE.Contains(pod));
}
query = query.OrderBy("CONTRACT_NO asc");
var currList = await query.Take(top).ToListAsync();
if (currList.Count > 0)
list = currList.Select(t => t.Adapt()).ToList();
}
catch (Exception ex)
{
throw Oops.Bah($"检索约号参数异常,{ex.Message}");
}
return list;
}
#endregion
#region 作废约号参数
///
/// 作废约号参数
///
/// 约号参数主键数组
/// 返回回执
[HttpPost("/Para/DeleteParaContractNoInfo")]
public async Task DeleteParaContractNoInfo(long[] Ids)
{
try
{
//如果没有给主键直接抛异常
if (Ids.Length == 0)
throw Oops.Oh("没有提供需要作废的主键信息");
var list = _paraContractNoInfoRepository.AsQueryable().Where(t => Ids.Contains(t.Id)).ToList();
if (list.Count != Ids.Length)
{
var noRecord = string.Join(",", Ids.GroupJoin(list, l => l, r => r.Id, (l, r) => {
var currList = r.ToList();
if (r.Count() > 0)
return string.Empty;
return l.ToString();
}).Where(t => !string.IsNullOrWhiteSpace(t)).ToArray());
throw Oops.Oh($"以下主键信息 {noRecord} 检索失败或者已作废过");
}
list.ForEach(async entity =>
{
entity.IsDeleted = true;
entity.UpdatedTime = DateTime.Now;
entity.UpdatedUserId = UserManager.UserId;
entity.UpdatedUserName = UserManager.Name;
await _paraContractNoInfoRepository.AsUpdateable(entity).IgnoreColumns(it => new
{
it.TenantId,
it.CreatedTime,
it.CreatedUserId,
it.CreatedUserName
}).ExecuteCommandAsync();
});
}
catch (Exception ex)
{
throw Oops.Bah($"作废约号参数异常,{ex.Message}");
}
return "作废成功";
}
#endregion
#region 约号参数台账查询
///
/// 约号参数台账查询
///
/// 约号参数台账查询请求
/// 返回结果
[HttpPost("/Para/GetParaContractNoPage")]
public async Task GetParaContractNoPageAsync(QueryParaContractNoDto QuerySearch)
{
DateTime createBegin = DateTime.MinValue;
DateTime createEnd = DateTime.MinValue;
DateTime updateBegin = DateTime.MinValue;
DateTime updateEnd = DateTime.MinValue;
if (!string.IsNullOrWhiteSpace(QuerySearch.CreateTimeBegin))
{
if (!DateTime.TryParse(QuerySearch.CreateTimeBegin, out createBegin))
throw Oops.Oh($"创建开始日期格式错误,{QuerySearch.CreateTimeBegin}");
}
if (!string.IsNullOrWhiteSpace(QuerySearch.CreateTimeEnd))
{
if (!DateTime.TryParse(QuerySearch.CreateTimeEnd, out createEnd))
throw Oops.Oh($"创建结束日期格式错误,{QuerySearch.CreateTimeEnd}");
createEnd = createEnd.AddDays(1);
}
if (!string.IsNullOrWhiteSpace(QuerySearch.UpdateTimeBegin))
{
if (!DateTime.TryParse(QuerySearch.UpdateTimeBegin, out updateBegin))
throw Oops.Oh($"更新起始日期格式错误,{QuerySearch.UpdateTimeBegin}");
}
if (!string.IsNullOrWhiteSpace(QuerySearch.UpdateTimeEnd))
{
if (!DateTime.TryParse(QuerySearch.UpdateTimeEnd, out updateEnd))
throw Oops.Oh($"更新结束日期格式错误,{QuerySearch.UpdateTimeEnd}");
updateEnd = updateEnd.AddDays(1);
}
string entityOrderCol = "CreatedTime";
//这里因为返回给前端的台账数据是DTO,所以这里排序时候需要转换成Entity对应的字段
if (!string.IsNullOrWhiteSpace(QuerySearch.SortField))
entityOrderCol = MapsterExtHelper.GetAdaptProperty(QuerySearch.SortField);
var entities = await _paraContractNoInfoRepository.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.ContractNo), t => t.CONTRACT_NO.Contains(QuerySearch.ContractNo.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.ContractName), t => t.CONTRACT_NAME.Contains(QuerySearch.ContractName.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.ContractNote), t => t.CONTRACT_NOTE.Contains(QuerySearch.ContractNote.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.CarrierCode), t => t.CARRIER_CODE.Contains(QuerySearch.CarrierCode.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.PODCode), t => t.POD_CODE.Equals(QuerySearch.PODCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.LaneCName), t => t.LANE_CNAME.Contains(QuerySearch.LaneCName.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(createBegin != DateTime.MinValue, t => t.CreatedTime.HasValue && t.CreatedTime.Value >= createBegin)
.WhereIF(createEnd != DateTime.MinValue, t => t.CreatedTime.HasValue && t.CreatedTime.Value < createEnd)
.WhereIF(updateBegin != DateTime.MinValue, t => t.UpdatedTime.HasValue && t.UpdatedTime.Value >= updateBegin)
.WhereIF(updateEnd != DateTime.MinValue, t => t.UpdatedTime.HasValue && t.UpdatedTime.Value < updateEnd)
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.CreateUserName), t => t.CreatedUserName.Contains(QuerySearch.CreateUserName.Trim(), StringComparison.OrdinalIgnoreCase))
.WhereIF(!string.IsNullOrWhiteSpace(QuerySearch.UpdateUserName), t => t.UpdatedUserName.Contains(QuerySearch.UpdateUserName.Trim(), StringComparison.OrdinalIgnoreCase))
.OrderBy(entityOrderCol + (QuerySearch.descSort ? " asc " : " desc "))
.ToPagedListAsync(QuerySearch.PageNo, QuerySearch.PageSize);
return entities.Adapt>();
}
#endregion
}
}