You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BookingHeChuan/Myshipping.Core/Service/DjyCustomer/DjyCustomerService.cs

208 lines
9.5 KiB
C#

using Myshipping.Core;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System.Linq;
using System.Threading.Tasks;
using Myshipping.Core.Entity;
2 years ago
using System.Collections.Generic;
using Furion.FriendlyException;
using Furion.Logging;
using Microsoft.Extensions.Logging;
2 years ago
namespace Myshipping.Core.Service
{
/// <summary>
/// 客户服务
/// </summary>
[ApiDescriptionSettings(Name = "DjyCustomer", Order = 1)]
public class DjyCustomerService : IDjyCustomerService, IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<DjyCustomer> _rep;
private readonly SqlSugarRepository<DjyCustomerContact> _repContact;
private readonly ILogger<DjyCustomerService> _logger;
public DjyCustomerService(SqlSugarRepository<DjyCustomer> rep, SqlSugarRepository<DjyCustomerContact> repContact, ILogger<DjyCustomerService> logger)
{
_rep = rep;
2 years ago
_repContact = repContact;
_logger = logger;
}
/// <summary>
/// 分页查询客户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/DjyCustomer/page")]
public async Task<dynamic> Page([FromQuery] QueryDjyCustomerInput input)
{
var entities = await _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.CodeName), u => u.CodeName.Contains(input.CodeName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ShortName), u => u.ShortName.Contains(input.ShortName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.FullName), u => u.FullName.Contains(input.FullName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Chief), u => u.Chief.Contains(input.Chief.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Tel), u => u.Tel.Contains(input.Tel.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Email), u => u.Email.Contains(input.Email.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.QQ), u => u.QQ.Contains(input.QQ.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.WebUrl), u => u.WebUrl.Contains(input.WebUrl.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Province), u => u.Province.Contains(input.Province.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.City), u => u.City.Contains(input.City.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Addr), u => u.Addr.Contains(input.Addr.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.FullNameEN), u => u.FullNameEN.Contains(input.FullNameEN.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.AddrEN), u => u.AddrEN.Contains(input.AddrEN.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.PropString), u => u.PropString.Contains(input.PropString.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.InvTitle), u => u.InvTitle.Contains(input.InvTitle.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.TaxNO), u => u.TaxNO.Contains(input.TaxNO.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.InvAddrTel), u => u.InvAddrTel.Contains(input.InvAddrTel.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.RMBBank), u => u.RMBBank.Contains(input.RMBBank.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.RmbAccount), u => u.RmbAccount.Contains(input.RmbAccount.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.USDBank), u => u.USDBank.Contains(input.USDBank.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.USDAccount), u => u.USDAccount.Contains(input.USDAccount.Trim()))
2 years ago
.WhereIF(!string.IsNullOrWhiteSpace(input.ServiceItem), u => u.ServiceItem.Contains(input.ServiceItem.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchValue), u => u.ShortName.Contains(input.SearchValue.Trim()) || u.CodeName.Contains(input.SearchValue.Trim()))
.Where(u => u.TenantId == UserManager.TENANT_ID) //权限范围目前不支持根据模块设置,客户模块暂时写死本公司数据
.ToPagedListAsync(input.PageNo, input.PageSize);
return entities.XnPagedResult();
}
/// <summary>
/// 增加客户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/DjyCustomer/add"), SqlSugarUnitOfWork]
public async Task<long> Add(AddDjyCustomerInput input)
{
var find = await _rep.FirstOrDefaultAsync(u => u.CodeName == input.CodeName);
2 years ago
if (find != null)
{
throw Oops.Oh($"助记码已存在:{input.CodeName}");
}
var entity = input.Adapt<DjyCustomer>();
await _rep.InsertAsync(entity);
var contactList = input.Contacts.Adapt<List<DjyCustomerContact>>();
2 years ago
contactList.ForEach(x => x.CustomerId = entity.Id);
await _repContact.InsertAsync(contactList);
return entity.Id;
}
/// <summary>
/// 更新客户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/DjyCustomer/edit"), SqlSugarUnitOfWork]
public async Task<long> Update(UpdateDjyCustomerInput input)
{
2 years ago
var find = await _rep.FirstOrDefaultAsync(u => u.Id == input.Id);
if (find == null)
{
throw Oops.Oh(ErrorCode.D1002);
}
find = await _rep.FirstOrDefaultAsync(u => u.CodeName == input.CodeName && u.Id != input.Id);
2 years ago
if (find != null)
{
throw Oops.Oh($"助记码已存在:{input.CodeName}");
}
var entity = input.Adapt<DjyCustomer>();
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
await _repContact.DeleteAsync(x => x.CustomerId == input.Id);
var contactList = input.Contacts.Adapt<List<DjyCustomerContact>>();
2 years ago
contactList.ForEach(x => x.CustomerId = entity.Id);
await _repContact.InsertAsync(contactList);
return entity.Id;
}
/// <summary>
/// 删除客户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/DjyCustomer/delete"), SqlSugarUnitOfWork]
public async Task Delete(GetDjyCustomerInput input)
{
var entity = await _rep.FirstOrDefaultAsync(u => u.Id == input.Id);
2 years ago
if (entity == null)
{
throw Oops.Oh(ErrorCode.D1002);
}
else
{
await _repContact.DeleteAsync(x => x.CustomerId == input.Id);
await _rep.DeleteAsync(entity);
}
}
/// <summary>
/// 获取客户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/DjyCustomer/detail")]
public async Task<DjyCustomerOutput> Detail([FromQuery] GetDjyCustomerInput input)
{
Log.Information($"查询客户详情:{input.Id}");
_logger.LogInformation($"查询客户详情:{input.Id}");
var cust = await _rep.FirstOrDefaultAsync(u => u.Id == input.Id);
if (cust == null)
{
throw Oops.Oh(ErrorCode.D1002);
}
var custOut = cust.Adapt<DjyCustomerOutput>();
custOut.Contacts = _repContact.Where(x => x.CustomerId == input.Id).OrderBy(x => x.Sort).ToList().Adapt<List<DjyCustomerContactOutput>>();
return custOut;
}
2 years ago
/// <summary>
/// 根据客户id获取所有联系人
/// </summary>
/// <param name="customerId"></param>
/// <returns></returns>
[HttpGet("/DjyCustomer/contacts")]
public async Task<List<DjyCustomerContactOutput>> ListContact(long customerId)
{
var list = await _repContact.Where(x => x.CustomerId == customerId).OrderBy(x => x.Sort).ToListAsync();
return list.Adapt<List<DjyCustomerContactOutput>>();
}
///// <summary>
///// 获取客户列表
///// </summary>
///// <param name="input"></param>
///// <returns></returns>
//[HttpGet("/DjyCustomer/list")]
//public async Task<dynamic> List([FromQuery] QueryDjyCustomerInput input)
//{
// return await _rep.ToListAsync();
//}
2 years ago
/// <summary>
/// 下拉筛选
/// </summary>
/// <param name="keyword">关键字</param>
/// <param name="type">类型参考字典参数客户属性djy_cust_prop</param>
/// <returns></returns>
[HttpGet("/DjyCustomer/Suggest")]
public async Task<dynamic> Suggest(string keyword, string type)
{
List<long> userlist = await DataFilterExtensions.GetDataScopeIdList();
var entities = await _rep.AsQueryable().Filter(null, true)
.Where(x => x.TenantId == UserManager.TENANT_ID)
.WhereIF(!string.IsNullOrWhiteSpace(type), u => u.PropString.Contains(type))
.WhereIF(!string.IsNullOrWhiteSpace(keyword), u => u.CodeName.Contains(keyword) || u.ShortName.Contains(keyword))
.ToPagedListAsync(1, 10);
return entities.XnPagedResult();
}
2 years ago
}
}