using DS.Module.Core;
using DS.Module.Core.Data;
using DS.Module.Core.Extensions;
using DS.WMS.Core.Code.Entity;
using DS.WMS.Core.Info.Entity;
using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Sys.Entity;
using DS.WMS.Core.Sys.Interface;
namespace DS.WMS.Core.Sys.Method
{
///
/// 放舱通道配置
///
public class ReleaseTypeService : ServiceBase, IReleaseTypeService
{
///
/// 初始化
///
///
public ReleaseTypeService(IServiceProvider provider) : base(provider)
{
TenantDb.QueryFilter.Clear();
}
///
/// 列表
///
///
///
///
public async Task>> GetListAsync(PageRequest request, bool isAdmin = false)
{
var whereList = request.GetConditionalModels(Db);
var tenantId = long.Parse(User.TenantId);
var data = await Db.Queryable()
.Where(whereList).WhereIF(!isAdmin, x => x.TenantId == tenantId)
.ToQueryPageAsync(request.PageCondition);
if (!isAdmin && data.Data?.Count > 0)
{
var ids = data.Data.Where(x => x.CustomerId.HasValue).Select(x => x.CustomerId.Value);
var list = await TenantDb.Queryable().Where(x => ids.Contains(x.Id)).Select(x => new { x.Id, x.ShortName }).ToListAsync();
foreach (var item in data.Data)
item.CustomerName = list.Find(x => x.Id == item.CustomerId)?.ShortName;
}
return data;
}
///
/// 根据业务数据匹配放舱方式
///
/// 业务ID
/// 业务类型
///
public async Task GetReleaseTypeAsync(long businessId, BusinessType businessType)
{
SpaceReleaseType? releaseType = null;
switch (businessType)
{
case BusinessType.OceanShippingExport:
var order1 = await TenantDb.Queryable().Where(x => x.Id == businessId)
.LeftJoin((x, y) => x.CarrierId == y.Id)
.Select((x, y) => new
{
x.CustomerId,
x.LoadPortCode,
CarrierCode = y.Code
}).FirstAsync();
if (order1 == null)
return null;
long tid = long.Parse(User.TenantId);
var list = await Db.Queryable().Where(x => x.TenantId == tid && x.CustomerId == order1.CustomerId && x.LoadingPort == order1.LoadPortCode)
.Select(x => new { x.Carrier, x.ReleaseType }).ToListAsync();
var clientItem = list.Find(x => x.Carrier == order1.CarrierCode);
if (clientItem != null)
return clientItem.ReleaseType;
if (list.Count > 0) //返回默认船公司的配置
return list[0].ReleaseType;
//租户端无匹配的设置,需要从管理端获取全局参数
var list2 = await Db.Queryable().Where(x => x.TenantId == null && x.LoadingPort == order1.LoadPortCode)
.Select(x => new { x.Carrier, x.ReleaseType }).ToListAsync();
var adminItem = list2.Find(x => x.Carrier == order1.CarrierCode);
if (adminItem != null)
return adminItem.ReleaseType;
if (list2.Count > 0)
return list[0].ReleaseType;
break;
case BusinessType.OceanShippingImport:
break;
}
return releaseType;
}
///
/// 详情
///
///
///
public async Task> GetAsync(long id)
{
var data = await Db.Queryable().Where(x => x.Id == id).FirstAsync();
return DataResult.Success(data);
}
///
/// 编辑
///
///
///
public async Task EditAsync(SysReleaseType entity)
{
int rows = 0;
if (entity.Id == 0)
{
rows = await Db.Insertable(entity).ExecuteCommandAsync();
}
else
{
rows = await Db.Updateable(entity).UpdateColumns(x => new
{
x.CustomerId,
x.Carrier,
x.LoadingPort,
x.ReleaseType
}).ExecuteCommandAsync();
}
return rows > 0 ? DataResult.Success : DataResult.FailedWithDesc(MultiLanguageConst.Operation_Failed);
}
///
/// 删除
///
///
///
public async Task DeleteAsync(params long[] ids)
{
int rows = await Db.Deleteable().Where(x => ids.Contains(x.Id)).ExecuteCommandAsync();
return rows > 0 ? DataResult.Success : DataResult.FailedWithDesc(MultiLanguageConst.Operation_Failed);
}
}
}