using DS.Module.Core; using DS.Module.Core.Data; using DS.Module.Core.Extensions; using DS.Module.SqlSugar; using DS.Module.UserModule; using DS.WMS.Core.Check.Entity; using DS.WMS.Core.Code.Entity; using DS.WMS.Core.Fee.Entity; using DS.WMS.Core.Info.Dtos; using DS.WMS.Core.Info.Entity; using DS.WMS.Core.Info.Interface; using DS.WMS.Core.Op.Entity; using DS.WMS.Core.Sys.Entity; using Mapster; using Microsoft.Extensions.DependencyInjection; using Microsoft.Owin.Security.Provider; using SqlSugar; namespace DS.WMS.Core.Info.Method; public class ClientInfoService : IClientInfoService { private readonly IServiceProvider _serviceProvider; private readonly ISqlSugarClient db; private readonly IUser user; private readonly ISaasDbService saasService; /// /// /// /// public ClientInfoService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); saasService = _serviceProvider.GetRequiredService(); } /// /// 列表 /// /// /// public DataResult> GetListByPage(PageRequest request) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); var data = tenantDb.Queryable() .Where(whereList) .Select().ToQueryPage(request.PageCondition); return data; } /// /// 编辑 /// /// /// public DataResult EditClientInfo(ClientInfoReq req) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); if (req.Id == 0) { if (tenantDb.Queryable().Where(x => x.CodeName == req.CodeName).Any()) { return DataResult.Failed("客户信息已存在!", MultiLanguageConst.ClientInfoExist); } var data = req.Adapt(); var tag = req.ClientTag.Adapt(); var entity = tenantDb.Insertable(data).ExecuteReturnEntity(); tag.ClientId = entity.Id; tenantDb.Insertable(tag).ExecuteCommand(); return DataResult.Successed("添加成功!", entity.Id, MultiLanguageConst.DataCreateSuccess); } else { var info = tenantDb.Queryable().Where(x => x.Id == req.Id).First(); var tag = tenantDb.Queryable().Where(x => x.ClientId == req.Id).First(); info = req.Adapt(info); tag = req.ClientTag.Adapt(tag); tenantDb.Updateable(info).IgnoreColumns(ignoreAllNullColumns: true).EnableDiffLogEvent().ExecuteCommand(); tenantDb.Updateable(tag).IgnoreColumns(ignoreAllNullColumns: true).EnableDiffLogEvent().ExecuteCommand(); return DataResult.Successed("更新成功!", MultiLanguageConst.DataUpdateSuccess); } } /// /// 详情 /// /// /// public DataResult GetClientInfo(string id) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); var tag = tenantDb.Queryable().Select() .First(a => a.ClientId == long.Parse(id)); var data = tenantDb.Queryable() .Where(a => a.Id == long.Parse(id)) .Select() // .Select(x => new ClientInfoRes() // { // ClientTag = tag // }) .First(); data.ClientTag = tag; return DataResult.Success(data, MultiLanguageConst.DataQuerySuccess); } public DataResult BatchDelClientInfo(IdModel req) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); var list = tenantDb.Queryable().Where(x => req.Ids.Contains(x.Id)).ToList(); if (list.Count > 0) { if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.ShipperId)).Any()) return DataResult.Failed("存在海运出口使用的发货人信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.ConsigneeId)).Any()) return DataResult.Failed("存在海运出口使用的收货人信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.NotifyPartyId)).Any()) return DataResult.Failed("存在海运出口使用的通知人信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.AgentId)).Any()) return DataResult.Failed("存在海运出口使用的国外代理人信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.ShipAgencyId)).Any()) return DataResult.Failed("存在海运出口使用的船代I信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.CustomerId)).Any()) return DataResult.Failed("存在海运出口使用的委托单位信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.YardId)).Any()) return DataResult.Failed("存在海运出口使用的场站信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.CarrierId)).Any()) return DataResult.Failed("存在海运出口使用的船公司信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.ForwarderId)).Any()) return DataResult.Failed("存在海运出口使用的货代公司信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.CustomserId)).Any()) return DataResult.Failed("存在海运出口使用的报关行信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.TruckerId)).Any()) return DataResult.Failed("存在海运出口使用的承运车队信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.WareHouseId)).Any()) return DataResult.Failed("存在海运出口使用的仓库信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.CustomerId)).Any()) return DataResult.Failed("存在费用记录使用的费用对象信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.CustomerId)).Any()) return DataResult.Failed("存在客户对账使用的对账客户信息!"); if (tenantDb.Queryable().Where(x => req.Ids.Contains((long)x.CustomerId)).Any()) return DataResult.Failed("存在自动对账使用的对账客户信息!"); //银行信息 var banks = tenantDb.Queryable().Where(x => req.Ids.Contains(x.ClientId)).ToList(); if(banks.Count>0) tenantDb.Deleteable(banks).ExecuteCommand(); //联系人 var contacts = tenantDb.Queryable().Where(x => req.Ids.Contains(x.ClientId)).ToList(); if (contacts.Count > 0) tenantDb.Deleteable(contacts).ExecuteCommand(); //合同信息 var contracts = tenantDb.Queryable().Where(x => req.Ids.Contains(x.ClientId)).ToList(); if (contracts.Count > 0) tenantDb.Deleteable(contracts).ExecuteCommand(); //账期 var accountDates = tenantDb.Queryable().Where(x => req.Ids.Contains(x.ClientId)).ToList(); if (accountDates.Count > 0) tenantDb.Deleteable(accountDates).ExecuteCommand(); //收发货人 var clientShippers = tenantDb.Queryable().Where(x => req.Ids.Contains(x.ClientId)).ToList(); if (clientShippers.Count > 0) tenantDb.Deleteable(clientShippers).ExecuteCommand(); //删除客户信息 tenantDb.Deleteable(list).ExecuteCommand(); } return DataResult.Successed("删除成功!", MultiLanguageConst.DataDelSuccess); } #region 获取往来单位详情(含有联系人列表) /// /// 获取往来单位详情(含有联系人列表) /// /// 查询往来单位 /// 返回往来单位详情 public async Task> GetClientInfoWithContact(QueryClientInfo query) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); var data = await tenantDb.Queryable().InnerJoin((c,t)=> c.Id == t.ClientId) .Where((c,t)=> c.Id == query.ClientId) .WhereIF(query.IsController,(c,t)=>t.IsController.HasValue && t.IsController.HasValue) .WhereIF(query.IsSpecialApproval, (c, t) => t.IsSpecialApproval.HasValue && t.IsSpecialApproval.HasValue) .WhereIF(query.IsCarrier, (c, t) => t.IsCarrier.HasValue && t.IsCarrier.HasValue) .WhereIF(query.IsBooking, (c, t) => t.IsBooking.HasValue && t.IsBooking.HasValue) .WhereIF(query.IsYard, (c, t) => t.IsYard.HasValue && t.IsYard.HasValue) .WhereIF(query.IsTruck, (c, t) => t.IsTruck.HasValue && t.IsTruck.HasValue) .WhereIF(query.IsController, (c, t) => t.IsController.HasValue && t.IsController.HasValue) .WhereIF(query.IsCustom, (c, t) => t.IsCustom.HasValue && t.IsCustom.HasValue) .WhereIF(query.IsAgent, (c, t) => t.IsAgent.HasValue && t.IsAgent.HasValue) .WhereIF(query.IsAgentCn, (c, t) => t.IsAgentCn.HasValue && t.IsAgentCn.HasValue) .WhereIF(query.IsExpress, (c, t) => t.IsExpress.HasValue && t.IsExpress.HasValue) .WhereIF(query.IsAirLines, (c, t) => t.IsAirLines.HasValue && t.IsAirLines.HasValue) .WhereIF(query.IsShipper, (c, t) => t.IsShipper.HasValue && t.IsShipper.HasValue) .WhereIF(query.IsConsignee, (c, t) => t.IsConsignee.HasValue && t.IsConsignee.HasValue) .WhereIF(query.IsNotifyParty, (c, t) => t.IsNotifyParty.HasValue && t.IsNotifyParty.HasValue) .WhereIF(query.IsWareHouse, (c, t) => t.IsWareHouse.HasValue && t.IsWareHouse.HasValue) .WhereIF(query.IsWharf, (c, t) => t.IsWharf.HasValue && t.IsWharf.HasValue) .WhereIF(query.IsInsurer, (c, t) => t.IsInsurer.HasValue && t.IsInsurer.HasValue) .WhereIF(query.IsLeasing, (c, t) => t.IsLeasing.HasValue && t.IsLeasing.HasValue) .WhereIF(query.IsTradingAgency, (c, t) => t.IsTradingAgency.HasValue && t.IsTradingAgency.HasValue) .WhereIF(query.IsOther, (c, t) => t.IsOther.HasValue && t.IsOther.HasValue) .WhereIF(!string.IsNullOrWhiteSpace(query.Others), (c, t) => t.Others == query.Others) .WhereIF(query.IsShipAgency, (c, t) => t.IsShipAgency.HasValue && t.IsShipAgency.HasValue) .WhereIF(query.IsEnterprise, (c, t) => t.IsEnterprise.HasValue && t.IsEnterprise.HasValue) .Select((c,t)=> new { Client = c, tag = t }) .FirstAsync(); var clientInfo = data.Client.Adapt(); clientInfo.ClientTag = data.tag.Adapt(); var contactList = tenantDb.Queryable() .Where(a => a.ClientId == clientInfo.Id && a.Status == StatusEnum.Enable).ToList(); if (contactList.Count > 0) clientInfo.ClientContactList = contactList.Adapt>(); if (clientInfo == null) return DataResult.FailedData(clientInfo); return DataResult.Success(clientInfo); } #endregion }