You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
6.1 KiB
138 lines
6.1 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using DocumentFormat.OpenXml.Office2010.Excel;
|
|
using EFCore.BulkExtensions;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using SettleAccount.Bases;
|
|
using SettleAccount.Domain.BQ;
|
|
using Volo.Abp;
|
|
using Volo.Abp.Application.Dtos;
|
|
using Win.Abp.Snowflakes;
|
|
using Win.Sfs.BaseData.ImportExcelCommon;
|
|
using Win.Sfs.SettleAccount.Bases.DomainServices;
|
|
using Win.Sfs.SettleAccount.CommonManagers;
|
|
using Win.Sfs.SettleAccount.Constant;
|
|
using Win.Sfs.SettleAccount.Entities.BQ.Dtos;
|
|
using Win.Sfs.SettleAccount.Entities.BQ.Managers;
|
|
using Win.Sfs.SettleAccount.ExcelImporter;
|
|
using Win.Sfs.SettleAccount.ExportReports;
|
|
using Win.Sfs.Shared.RepositoryBase;
|
|
|
|
namespace Win.Sfs.SettleAccount.Bases;
|
|
/// <summary>
|
|
/// 发票明细调整表
|
|
/// </summary>
|
|
[AllowAnonymous]
|
|
[Route("api/settleaccount/[controller]/[action]")]
|
|
public class ADJ_SERVICE : BASE_SERVICE
|
|
{
|
|
protected readonly INormalEfCoreRepository<PUB_ADJ_DETAIL, Guid> _repository;
|
|
protected readonly BaseDomainService _baseDomainService;
|
|
protected readonly INormalEfCoreRepository<INVOICE_GRP, Guid> _invRepository;
|
|
|
|
public ADJ_SERVICE(
|
|
INormalEfCoreRepository<PUB_ADJ_DETAIL, Guid> repository,
|
|
BaseDomainService baseDomainService,
|
|
IExcelImportAppService excelImportService,
|
|
ISnowflakeIdGenerator snowflakeIdGenerator,
|
|
ICommonManager commonManager,
|
|
INormalEfCoreRepository<INVOICE_GRP, Guid> invRepository
|
|
|
|
)
|
|
: base(excelImportService, snowflakeIdGenerator, commonManager)
|
|
{
|
|
_invRepository = invRepository;
|
|
_repository = repository;
|
|
_baseDomainService = baseDomainService;
|
|
}
|
|
/// <summary>
|
|
///查询明细
|
|
/// </summary>
|
|
/// <param name="input">明细查询条件</param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
|
|
public virtual async Task<PagedResultDto<PUB_ADJ_DETAIL_DTO>> DetailQueryAsync(PUB_ADJ_DETAIL_REQ_DTO input)
|
|
{
|
|
var entitys = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount);
|
|
var totalCount = await _repository.GetCountByFilterAsync(input.Filters);
|
|
var dtos = ObjectMapper.Map<List<PUB_ADJ_DETAIL>, List<PUB_ADJ_DETAIL_DTO>>(entitys);
|
|
return new PagedResultDto<PUB_ADJ_DETAIL_DTO>(totalCount, dtos);
|
|
}
|
|
/// <summary>
|
|
/// 导入文件
|
|
/// </summary>
|
|
/// <param name="files"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="BusinessException"></exception>
|
|
[HttpPost]
|
|
[DisableRequestSizeLimit]
|
|
public async Task<string> ExcelImport([FromForm] IFormFileCollection files)
|
|
{
|
|
List<ErrorExportDto> errorList = new List<ErrorExportDto>();
|
|
ExportImporter _exportImporter = new ExportImporter();
|
|
var result = await _exportImporter.UploadExcelImport<PUB_ADJ_DETAIL_IMP_DTO>(files, _excelImportService);
|
|
if (result.Count == 0)
|
|
{
|
|
throw new BusinessException("8989", "导入数据记录为0条");
|
|
}
|
|
var invs=result.Select(p => p.OldInvBillNum).ToList();//所有发票号
|
|
var deletels = _repository.Where(p =>invs.Contains(p.OldInvBillNum) ).ToList();//所有关联发票号的调整表
|
|
var invlist= _invRepository.Where(p => invs.Contains(p.InvbillNum)).ToList();//所有发票
|
|
var dlists= deletels.Where(p=>string.IsNullOrEmpty(p.InvBillNum)).ToList();//所有新发票号不为空的调整记录
|
|
foreach (var itm in dlists)
|
|
{
|
|
errorList.Add(new ErrorExportDto() { ItemCode = $"{itm.LU}", Message = $"客户零件号{itm.LU}标识号{itm.PN}下线日期{itm.SettleDate}记录已经被重新开票,新发票号为:{itm.InvBillNum}" });
|
|
}
|
|
//var first = deletels.FirstOrDefault();
|
|
//if (!string.IsNullOrEmpty(first.InvBillNum))
|
|
//{
|
|
// throw new BusinessException("8989", $"调整记录已经生成新发票号:{first.InvBillNum}");
|
|
//}
|
|
var entityList = ObjectMapper.Map<List<PUB_ADJ_DETAIL_IMP_DTO>, List<PUB_ADJ_DETAIL>>(result);
|
|
var codelist = entityList.Select(p => p.LU).ToList();
|
|
var errors = await _baseDomainService.CheckBase(codelist, new BASE_CONF() { IsRelationShip = true });
|
|
foreach (var itm in errors)
|
|
{
|
|
errorList.Add(
|
|
new ErrorExportDto() { ItemCode = $"{itm}", Message = $"[客户零件关系表]不存在客户零件号{itm}" });
|
|
}
|
|
var errorEntitylist = await _baseDomainService.CheckPriceList(entityList);
|
|
if (errorEntitylist.Count > 0)
|
|
{
|
|
foreach (var itm in errorEntitylist)
|
|
{
|
|
errorList.Add(new ErrorExportDto() { ItemCode = $"{itm.LU}", Message = $"客户零件号{itm.LU}标识号{itm.PN}下线日期{itm.SettleDate}不存在价格单记录" });
|
|
}
|
|
}
|
|
var query = from itm in entityList
|
|
join itm1 in invlist
|
|
on itm.InvBillNum equals itm1.InvbillNum
|
|
select new PUB_ADJ_DETAIL(
|
|
id: GuidGenerator.Create(),
|
|
keyCode: itm.PN + itm.LU,
|
|
version: itm.Version,
|
|
settleBillNum: itm.SettleBillNum,
|
|
lU: itm.LU,
|
|
pN: itm.PN,
|
|
site: itm.Site,
|
|
qty: itm.Qty,
|
|
extend1: string.Empty,
|
|
price: 0,
|
|
invGroupNum: itm1.InvGroupNum,
|
|
settleDate: itm.SettleDate,
|
|
businessType: itm1.BusinessType,
|
|
groupNum: itm.GroupNum,
|
|
oldinv: itm.InvBillNum,
|
|
inv: string.Empty);
|
|
await _repository.DbContext.BulkDeleteAsync(deletels);//删除发票下所有调整明细
|
|
await _repository.DbContext.BulkInsertAsync(query.ToList());
|
|
return ApplicationConsts.SuccessStr;
|
|
}
|
|
|
|
}
|
|
|