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); } } }