using DocumentFormat.OpenXml.Office2010.Excel;
using Hotline.Caching.Interfaces;
using Hotline.File;
using Hotline.Repository.SqlSugar.Extensions;
using Hotline.Share.Dtos;
using Hotline.Share.Dtos.Snapshot;
using Hotline.Share.Tools;
using Hotline.Snapshot;
using Hotline.Snapshot.Interfaces;
using Hotline.Tools;
using Mapster;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using XF.Domain.Dependency;
using XF.Domain.Exceptions;
namespace Hotline.Application.Snapshot;
public class IndustryApplication : IIndustryApplication, IScopeDependency
{
private readonly IIndustryRepository _industryRepository;
private readonly IFileRepository _fileRepository;
private readonly ISystemSettingCacheManager _sysSetting;
private readonly IIndustryCaseRepository _industryCaseRepository;
private readonly ISnapshotSMSTemplateRepository _snapshotSMSTemplateRepository;
public IndustryApplication(IIndustryRepository industryRepository, IFileRepository fileRepository, ISystemSettingCacheManager sysSetting, IIndustryCaseRepository industryCaseRepository, ISnapshotSMSTemplateRepository snapshotSMSTemplateRepository)
{
_industryRepository = industryRepository;
_fileRepository = fileRepository;
_sysSetting = sysSetting;
_industryCaseRepository = industryCaseRepository;
_snapshotSMSTemplateRepository = snapshotSMSTemplateRepository;
}
///
/// 新增行业
///
///
///
///
public async Task AddIndustryAsync(AddIndustryDto dto, CancellationToken cancellationToken)
{
var entity = dto.Adapt();
var id = await _industryRepository.AddAsync(entity, cancellationToken);
if (dto.Files.NotNullOrEmpty())
{
var fileEntities = dto.Files.Adapt>();
fileEntities.ForEach(m => m.Key = id);
await _fileRepository.AddRangeAsync(fileEntities, cancellationToken);
}
return id;
}
public ISugarQueryable GetIndustres(IndustryListInDto dto)
{
var query = _industryRepository.Queryable()
.WhereIF(dto.Name.NotNullOrEmpty(), m => m.Name.Contains(dto.Name))
.WhereIF(dto.ApproveOrgName.NotNullOrEmpty(), m => m.ApproveOrgName.Contains(dto.ApproveOrgName))
.Select();
return query;
}
public async Task GetIndustryDetailAsync(string id)
{
var fileServiceUrl = _sysSetting.FileServerUrl;
var fileDownloadApi = fileServiceUrl + _sysSetting.FileDownloadApi;
var industry = await _industryRepository.GetAsync(id);
var files = await _fileRepository.GetByKeyAsync(id, CancellationToken.None);
var outDto = industry.Adapt();
outDto.Files = files.Adapt>();
if (outDto.BackgroundImgUrl.NotNullOrEmpty())
outDto.BackgroundImgUrl = fileDownloadApi + outDto.BackgroundImgUrl;
if (outDto.BannerImgUrl.NotNullOrEmpty())
outDto.BannerImgUrl = fileDownloadApi + outDto.BannerImgUrl;
if (outDto.CareCellImgUrl.NotNullOrEmpty())
outDto.CareCellImgUrl = fileDownloadApi + outDto.CareCellImgUrl;
if (outDto.CellImgUrl.NotNullOrEmpty())
outDto.CellImgUrl = fileDownloadApi + outDto.CellImgUrl;
return outDto;
}
///
/// 修改行业
///
///
///
///
///
public async Task UpdateIndustryAsync(UpdateIndustryInDto dto, CancellationToken requestAborted)
{
dto.ValidateObject();
var entity = await _industryRepository.GetAsync(dto.Id) ?? throw UserFriendlyException.SameMessage($"行业不存在 {dto.Id}");
if (dto.Files.NotNullOrEmpty())
{
var fileEntities = dto.Files.Adapt>();
fileEntities.ForEach(m => m.Key = entity.Id);
await _fileRepository.Removeable().Where(m => m.Key == entity.Id).ExecuteCommandAsync(requestAborted);
await _fileRepository.AddRangeAsync(fileEntities, requestAborted);
}
dto.Adapt(entity);
await _industryRepository.UpdateAsync(entity, requestAborted);
}
#region 行业线索
public ISugarQueryable GetIndustryCaseItems(IndustryCaseItemInDto dto)
{
var query = _industryCaseRepository.Queryable()
.LeftJoin((c, i) => c.IndustryId == i.Id)
.WhereIF(dto.IndustryName.NotNullOrEmpty(), (c, i) => i.Name.Contains(dto.IndustryName))
.WhereIF(dto.CaseName.NotNullOrEmpty(), (c, i) => c.Name.Contains(dto.CaseName))
.Select((c, i) =>
new IndustryCaseItemOutDto {
Id = c.Id,
Name = c.Name,
IndustryId = i.Id,
IndustryName = i.Name}, true);
return query;
}
///
/// 添加行业线索
///
///
///
public async Task AddIndustryCaseAsync(AddIndustryCaseDto dto)
{
dto.ValidateObject();
var entity = dto.Adapt();
entity.CitizenReadPackAmount = entity.CitizenReadPackAmount * 100;
entity.GuiderReadPackAmount = entity.GuiderReadPackAmount * 100;
return await _industryCaseRepository.AddAsync(entity);
}
///
/// 修改行业线索
///
///
///
public async Task UpdateIndustryCaseAsync(UpdateIndustryCaseDto dto)
{
dto.ValidateObject();
var entity = await _industryCaseRepository.GetAsync(dto.Id)
?? throw UserFriendlyException.SameMessage($"行业线索不存在 {dto.Id}");
dto.Adapt(entity);
await _industryCaseRepository.UpdateAsync(entity);
}
public async Task GetIndustryCaseAsync(string caseId)
{
return await _industryCaseRepository.GetAsync(caseId);
}
#endregion
#region 行业短信模板
///
/// 行业模板集合
///
///
///
public ISugarQueryable GetSMSTemplates(SnapshotSMSTemplateItemsInDto dto)
{
var query = _snapshotSMSTemplateRepository.Queryable()
.LeftJoin((s, i) => s.IndustryId == i.Id)
.WhereIF(dto.IndustryName.NotNullOrEmpty(), (s, i) => i.Name.Contains(dto.IndustryName))
.Select();
return query;
}
///
/// 添加行业模板
///
///
///
public async Task AddSMSTemplateAsync(AddSnapshotSMSTemplateInDto dto)
{
dto.ValidateObject();
var entity = dto.Adapt();
return await _snapshotSMSTemplateRepository.AddAsync(entity);
}
#endregion
}