using DS.Module.Core; using DS.Module.Core.Constants; using DS.Module.Core.Extensions; using DS.Module.SqlSugar; using DS.Module.UserModule; using DS.WMS.Core.Map.Dtos; using DS.WMS.Core.Map.Interface; using DS.WMS.Core.Op.Dtos; using DS.WMS.Core.Op.Entity; using DS.WMS.Core.Op.Interface; using Mapster; using Microsoft.Extensions.DependencyInjection; using NLog; using SqlSugar; namespace DS.WMS.Core.Op.Method { public class BookingContractNoManageService : IBookingContractNoManageService { private readonly IServiceProvider _serviceProvider; private readonly ISqlSugarClient db; private readonly IUser user; private readonly ISaasDbService saasService; private readonly IMappingCarrierService _mappingCarrierService; private static readonly NLog.Logger Logger = LogManager.GetCurrentClassLogger(); //船公司基础映射模块 const string CONST_MAPPING_CARRIER_MODULE = "CarrierBaseMapping"; public BookingContractNoManageService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); saasService = _serviceProvider.GetRequiredService(); _mappingCarrierService = _serviceProvider.GetRequiredService(); } #region 保存 /// /// 保存 /// /// 合约号详情 /// 返回回执 public async Task> Save(BookingContractNoManageDto model) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); BookingContractNoManage info = null; try { List mapCarrierList = new List(); var cacheRlt = await _mappingCarrierService.GetAllList(); if (cacheRlt.Succeeded) { mapCarrierList = cacheRlt.Data; if (model.CarrierId.HasValue && model.CarrierId.Value > 0) { var mapInfo = mapCarrierList.FirstOrDefault(a => a.Module == CONST_MAPPING_CARRIER_MODULE && a.LinkId == model.CarrierId.Value); if (mapInfo != null) { model.CarrierCode = mapInfo.MapCode; } } } //校验约号不能重复 if (model.Id > 0) { info = await tenantDb.Queryable().FirstAsync(t => t.Id == model.Id); //合约数据不存在或已作废 if (info == null) throw new Exception(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.BookingContractRecordDeletedOrNoExists))); info = model.Adapt(); info.UpdateTime = DateTime.Now; info.UpdateBy = long.Parse(user.UserId); info.UpdateUserName = user.UserName; await tenantDb.UpdateNav(info) .Include(it => it.LaneList) .ExecuteCommandAsync(); } else { info = model.Adapt(); await tenantDb.InsertNav(info) .Include(t => t.LaneList) .ExecuteCommandAsync(); } } catch (Exception ex) { return DataResult.FailedData(info.Id, ex.Message); } return DataResult.Success(info.Id); } #endregion #region 主键获取合约号详情 /// /// 主键获取合约号详情 /// /// 合约号主键 /// 返回合约号详情 public async Task> GetInfo(long Id) { BookingContractNoManageDto model = null; var tenantDb = saasService.GetBizDbScopeById(user.TenantId); try { var info = await tenantDb.Queryable() .Includes(t => t.LaneList) .FirstAsync(t => t.Id == Id); //合约数据不存在或已作废 if (info == null) throw new Exception(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.BookingContractRecordDeletedOrNoExists))); model = info.Adapt(); } catch (Exception ex) { return DataResult.FailedData(model, ex.Message); } return DataResult.Success(model); } #endregion #region 检索合约列表 /// /// 检索合约列表 /// /// 检索值可(模糊查询) /// 返回记录最大行数 /// 船公司代码 /// 航线代码 /// 航线中文 /// 目的港代码 /// 返回合约号详情列表 public async Task>> QuerytContractNoInfo(string queryItem, int top = 10, string carrier = "", string lane = "", string lanecname = "", string pod = "") { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); var query = tenantDb.Queryable(); query.Includes(t => t.LaneList); if (!string.IsNullOrWhiteSpace(queryItem)) { query = query.Where(t => t.ContractNo.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) || t.ContractName.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) || t.ContractNote.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) || t.ContractPartyCode.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) || t.ContractPartyName.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) || t.ContractLinkName.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) || t.ContractLinkEmail.Contains(queryItem.Trim(), StringComparison.OrdinalIgnoreCase) ); } if (!string.IsNullOrWhiteSpace(carrier)) { query = query.Where(t => t.CarrierCode.Equals(carrier)); } if (!string.IsNullOrWhiteSpace(lane)) { query.Where(t => t.LaneList!.Any(z => string.IsNullOrWhiteSpace(z.LaneCode) || (z.LaneCode != null && z.LaneCode.Contains(lane)))); } if (!string.IsNullOrWhiteSpace(lanecname)) { query.Where(t => t.LaneList!.Any(z => string.IsNullOrWhiteSpace(z.LaneCName) || (z.LaneCName != null && z.LaneCName.Contains(lanecname)))); } if (!string.IsNullOrWhiteSpace(pod)) { query = query.Where(t => string.IsNullOrWhiteSpace(t.PodCode) || t.PodCode.Contains(pod)); } var data = await query.OrderBy(a => a.ContractNo).Take(top).ToListAsync(); var result = data.Adapt>(); if (result.Count == 0) return DataResult>.FailedData(result); return DataResult>.Success(result); } #endregion #region 作废(可批量删除) /// /// 作废(可批量删除) /// /// 合约号主键组 /// 返回回执 public async Task> Delete(long[] Ids) { try { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); //没有提供需要作废的主键信息 if (Ids.Length == 0) throw new Exception(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.BookingContractDeleteIdsNull))); var list = tenantDb.Queryable().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 new Exception(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.BookingContractRecordDeletedOrNoExists))); } list.ForEach(async entity => { entity.Deleted = true; entity.DeleteTime = DateTime.Now; entity.DeleteBy = long.Parse(user.UserId); //entity.UpdatedUserName = UserManager.Name; await tenantDb.Updateable().RemoveDataCache($"{SqlSugarCacheConst.ContractNo}{user.TenantId}").IgnoreColumns(it => new { it.CreateTime, it.CreateBy, //it.CreatedUserName }).ExecuteCommandAsync(); }); } catch (Exception ex) { //throw Oops.Bah($"作废约号参数异常,{ex.Message}"); return DataResult.FailedData(string.Empty, ex.Message); } return DataResult.Success(string.Empty); } #endregion #region 合约号管理台账 /// /// 合约号管理台账 /// /// 查询条件 /// 返回台账列表 public async Task>> GetPageAsync(PageRequest querySearch) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(querySearch.QueryCondition); var list = tenantDb.Queryable() .Includes(x => x.LaneList) .Where(whereList) .WhereIF(!string.IsNullOrEmpty(querySearch.OtherQueryCondition?.LaneCode) || querySearch.OtherQueryCondition?.LaneId != null, x => x.LaneList!.Any(z => z.LaneCode == querySearch.OtherQueryCondition!.LaneCode || z.LaneId == querySearch.OtherQueryCondition!.LaneId)) .ToQueryPage(querySearch.PageCondition); var result = list.Data.Adapt>(); return DataResult>.PageList(list.Count, result, MultiLanguageConst.DataQuerySuccess); } #endregion } }