wanggang
1 year ago
13 changed files with 6018 additions and 145 deletions
@ -0,0 +1,98 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Magicodes.ExporterAndImporter.Core; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace Win.Sfs.SettleAccount.Entities.BQ.Dtos; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// BBAC结算单
|
||||
|
/// </summary>
|
||||
|
public class BBAC_SA_DTO : EntityDto<Guid> |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 期间
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "期间")] |
||||
|
public int Version { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 结算单据
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "结算单据")] |
||||
|
public string BillNum { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 出库单号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "出库单号")] |
||||
|
public string DNBillNum { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 1、新建 2、已有出库3、已有扣减寄售库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "状态")] |
||||
|
public string State { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 明细记录行数
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "明细记录行数")] |
||||
|
public string RecordCount { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工厂地点
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "工厂地点")] |
||||
|
public string Site { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 业务类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "业务类型")] |
||||
|
public EnumBusinessType BusinessType { get; set; } |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// BBAC结算明细导入
|
||||
|
/// </summary>
|
||||
|
public class BBAC_SA_DETAIL_IMPORT_DTO |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 结算日期
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "Posting Date")] |
||||
|
[ImporterHeader(Name = "Posting Date", Format = "yyyy/MM/dd HH:mm:ss")] |
||||
|
public DateTime SettleDate { set; get; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 结算分组号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "Reference")] |
||||
|
[Required(ErrorMessage = "{0}不能为空")] |
||||
|
[ImporterHeader(Name = "Reference")] |
||||
|
public string GroupNum { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 客户零件号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "Material")] |
||||
|
[Required(ErrorMessage = "{0}不能为空")] |
||||
|
[ImporterHeader(Name = "Material")] |
||||
|
public string LU { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "结算数量")] |
||||
|
[ImporterHeader(Name = "Qty")] |
||||
|
public decimal Qty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "External Call Number")] |
||||
|
[Required(ErrorMessage = "{0}不能为空")] |
||||
|
[ImporterHeader(Name = "External Call Number")] |
||||
|
public string PN { get; set; } |
||||
|
} |
@ -0,0 +1,441 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.LinqAsync; |
||||
|
using System.Threading.Tasks; |
||||
|
using AutoMapper; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Http; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using SettleAccount.Domain.BQ; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Caching; |
||||
|
using Win.Abp.Snowflakes; |
||||
|
using Win.Sfs.BaseData.ImportExcelCommon; |
||||
|
using Win.Sfs.SettleAccount.Bases; |
||||
|
using Win.Sfs.SettleAccount.CommonManagers; |
||||
|
using Win.Sfs.SettleAccount.Constant; |
||||
|
using Win.Sfs.SettleAccount.Entities.BQ.Dtos; |
||||
|
using Win.Sfs.SettleAccount.Entities.Prices; |
||||
|
using Win.Sfs.SettleAccount.ExcelImporter; |
||||
|
using Win.Sfs.SettleAccount.ExportReports; |
||||
|
using Win.Sfs.SettleAccount.MaterialRelationships; |
||||
|
using Win.Sfs.Shared.RepositoryBase; |
||||
|
|
||||
|
namespace Win.Sfs.SettleAccount.Entities.BQ; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// JISBBAC结算
|
||||
|
/// </summary>
|
||||
|
[AllowAnonymous] |
||||
|
[Route("api/settleaccount/[controller]/[action]")]
|
||||
|
public class BBAC_SA_SERVICE : SettleAccountApplicationBase<BBAC_SA> |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// BBAC结算仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<BBAC_SA, Guid> _bbacSaRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// BBAC结算明细仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<BBAC_SA_DETAIL, Guid> _bbacSaDetailRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// BBAC可结算仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<BBAC_CAN_SA, Guid> _bbacCanSaRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// BBAC可结算明细仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<BBAC_CAN_SA_DETAIL, Guid> _bbacCanSaDetailRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// BBAC不可结算明细仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> _bbacNotSaDetailRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 销售价格仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<PriceList, Guid> _priceListRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 客户零件关系仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<MaterialRelationship, Guid> _materialRelationshipRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 替换件关系仓储
|
||||
|
/// </summary>
|
||||
|
private readonly INormalEfCoreRepository<TB_RePartsRelationship, Guid> _tbRePartsRelationshipRepository; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 业务类型
|
||||
|
/// </summary>
|
||||
|
private readonly EnumBusinessType _businessType = EnumBusinessType.JisBBAC; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 构造
|
||||
|
/// </summary>
|
||||
|
public BBAC_SA_SERVICE(INormalEfCoreRepository<BBAC_SA, Guid> bbacSaRepository, |
||||
|
INormalEfCoreRepository<BBAC_SA_DETAIL, Guid> bbacSaDetailRepository, |
||||
|
INormalEfCoreRepository<BBAC_CAN_SA, Guid> bbacCanSaRepository, |
||||
|
INormalEfCoreRepository<BBAC_CAN_SA_DETAIL, Guid> bbacCanSaDetailRepository, |
||||
|
INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> bbacNotSaDetailRepository, |
||||
|
INormalEfCoreRepository<PriceList, Guid> priceListRepository, |
||||
|
INormalEfCoreRepository<MaterialRelationship, Guid> materialRelationshipRepository, |
||||
|
INormalEfCoreRepository<TB_RePartsRelationship, Guid> tbRePartsRelationshipRepository, |
||||
|
IDistributedCache<BBAC_SA> cache, |
||||
|
IExcelImportAppService excelImportService, |
||||
|
ISnowflakeIdGenerator snowflakeIdGenerator, |
||||
|
ICommonManager commonManager |
||||
|
) : base(cache, excelImportService, snowflakeIdGenerator, commonManager) |
||||
|
{ |
||||
|
_bbacSaRepository = bbacSaRepository; |
||||
|
_bbacSaDetailRepository = bbacSaDetailRepository; |
||||
|
_bbacCanSaRepository = bbacCanSaRepository; |
||||
|
_bbacCanSaDetailRepository = bbacCanSaDetailRepository; |
||||
|
_bbacNotSaDetailRepository = bbacNotSaDetailRepository; |
||||
|
_priceListRepository = priceListRepository; |
||||
|
_materialRelationshipRepository = materialRelationshipRepository; |
||||
|
_tbRePartsRelationshipRepository = tbRePartsRelationshipRepository; |
||||
|
} |
||||
|
|
||||
|
#region 导入、导出
|
||||
|
/// <summary>
|
||||
|
/// 导入
|
||||
|
/// </summary>
|
||||
|
[HttpPost] |
||||
|
public async Task<string> ImportAsync([FromForm] IFormFileCollection files) |
||||
|
{ |
||||
|
#region 导入数据转换、数据校验
|
||||
|
ExportImporter _exportImporter = new ExportImporter(); |
||||
|
var result = await _exportImporter.UploadExcelImport<BBAC_SA_DETAIL_IMPORT_DTO>(files, _excelImportService); |
||||
|
var importHBOPSaDetails = ObjectMapper.Map<List<BBAC_SA_DETAIL_IMPORT_DTO>, List<BBAC_SA_DETAIL>>(result); |
||||
|
|
||||
|
//Site包含CN1 亦庄
|
||||
|
//Site包含CN5 顺义
|
||||
|
var importCN1HBOPSaDetails = importHBOPSaDetails.FindAll(t => t.Site.Contains("CN1")); |
||||
|
var importCN5HBOPSaDetails = importHBOPSaDetails.FindAll(t => t.Site.Contains("CN5")); |
||||
|
|
||||
|
//数据校验
|
||||
|
var checkList = new List<ErrorExportDto>(); |
||||
|
//结算分组号
|
||||
|
var bbacSaGroupNums = importHBOPSaDetails.Select(t => t.GroupNum).Distinct(); |
||||
|
//已存在的结算分组号
|
||||
|
var havBBACSaGroupNums = (await _bbacSaDetailRepository.GetListAsync(t => bbacSaGroupNums.Contains(t.GroupNum))).Select(t => t.GroupNum).Distinct(); |
||||
|
if (havBBACSaGroupNums.Any() == true) |
||||
|
{ |
||||
|
foreach (var item in havBBACSaGroupNums) |
||||
|
{ |
||||
|
checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, $"结算分组号{item}已存在", string.Empty)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (checkList.Count > 0) |
||||
|
{ |
||||
|
return await ExportErrorReportAsync(checkList); |
||||
|
} |
||||
|
#endregion
|
||||
|
|
||||
|
if (importCN1HBOPSaDetails.Any()) |
||||
|
{ |
||||
|
await SaDataHandleAsync(importCN1HBOPSaDetails, "CN1"); |
||||
|
} |
||||
|
if (importCN5HBOPSaDetails.Any()) |
||||
|
{ |
||||
|
await SaDataHandleAsync(importCN5HBOPSaDetails, "CN5"); |
||||
|
} |
||||
|
|
||||
|
return ApplicationConsts.SuccessStr; |
||||
|
} |
||||
|
#endregion
|
||||
|
|
||||
|
#region CURD
|
||||
|
/// <summary>
|
||||
|
/// 获取列表
|
||||
|
/// </summary>
|
||||
|
[HttpPost] |
||||
|
public async Task<PagedResultDto<BBAC_SA_DTO>> GetListAsync(RequestDto input) |
||||
|
{ |
||||
|
var entities = await _bbacSaRepository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount, true); |
||||
|
var totalCount = await _bbacSaRepository.GetCountByFilterAsync(input.Filters); |
||||
|
var dtos = ObjectMapper.Map<List<BBAC_SA>, List<BBAC_SA_DTO>>(entities); |
||||
|
return new PagedResultDto<BBAC_SA_DTO>(totalCount, dtos); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 删除
|
||||
|
/// </summary>
|
||||
|
[HttpPost] |
||||
|
public async Task DeleteAsync(Guid id) |
||||
|
{ |
||||
|
//结算主表
|
||||
|
BBAC_SA bbacSaDelEntity; |
||||
|
//结算明细
|
||||
|
List<BBAC_SA_DETAIL> bbacSaDetailDelEntitys; |
||||
|
//可结算主表
|
||||
|
List<BBAC_CAN_SA> bbacCanSaDelEntitys; |
||||
|
//可结算明细
|
||||
|
List<BBAC_CAN_SA_DETAIL> bbacCanSaDetailDelEntitys; |
||||
|
//不可结算
|
||||
|
List<BBAC_NOT_SA_DETAIL> bbacNotSaDetailDelEntitys; |
||||
|
|
||||
|
bbacSaDelEntity = await _bbacSaRepository.FindAsync(id); |
||||
|
if (bbacSaDelEntity == null) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"未获取到结算单!", "400"); |
||||
|
} |
||||
|
//结算单据
|
||||
|
string bbacSaBillNum = bbacSaDelEntity.BillNum; |
||||
|
|
||||
|
bbacCanSaDelEntitys = await _bbacCanSaRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
||||
|
//验证可结算主表状态
|
||||
|
if (bbacCanSaDelEntitys.Any(t => t.State != SettleBillState.未结状态)) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"该单据可结算单状态无法删除!", "400"); |
||||
|
} |
||||
|
|
||||
|
bbacSaDetailDelEntitys = await _bbacSaDetailRepository.GetListAsync(t => t.BillNum == bbacSaBillNum); |
||||
|
bbacCanSaDetailDelEntitys = await _bbacCanSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
||||
|
bbacNotSaDetailDelEntitys = await _bbacNotSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
||||
|
|
||||
|
//删除
|
||||
|
await _bbacSaRepository.DeleteAsync(bbacSaDelEntity); |
||||
|
if (bbacSaDetailDelEntitys.Any()) |
||||
|
{ |
||||
|
await _bbacSaDetailRepository.DeleteManyAsync(bbacSaDetailDelEntitys); |
||||
|
} |
||||
|
if (bbacCanSaDelEntitys.Any()) |
||||
|
{ |
||||
|
await _bbacCanSaRepository.DeleteManyAsync(bbacCanSaDelEntitys); |
||||
|
} |
||||
|
if (bbacCanSaDetailDelEntitys.Any()) |
||||
|
{ |
||||
|
await _bbacCanSaDetailRepository.DeleteManyAsync(bbacCanSaDetailDelEntitys); |
||||
|
} |
||||
|
if (bbacNotSaDetailDelEntitys.Any()) |
||||
|
{ |
||||
|
await _bbacNotSaDetailRepository.DeleteManyAsync(bbacNotSaDetailDelEntitys); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 删除
|
||||
|
/// </summary>
|
||||
|
[HttpPost] |
||||
|
public async Task DeleteListAsync(List<Guid> ids) |
||||
|
{ |
||||
|
//结算主表
|
||||
|
List<BBAC_SA> bbacSas = new List<BBAC_SA>(); |
||||
|
//结算明细
|
||||
|
List<BBAC_SA_DETAIL> bbacSaDetails = new List<BBAC_SA_DETAIL>(); |
||||
|
//可结算主表
|
||||
|
List<BBAC_CAN_SA> bbacCanSas = new List<BBAC_CAN_SA>(); |
||||
|
//可结算明细
|
||||
|
List<BBAC_CAN_SA_DETAIL> bbacCanSaDetails = new List<BBAC_CAN_SA_DETAIL>(); |
||||
|
//不可结算
|
||||
|
List<BBAC_NOT_SA_DETAIL> bbacNotSaDetails = new List<BBAC_NOT_SA_DETAIL>(); |
||||
|
|
||||
|
foreach (var id in ids) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
var bbacSaDelItems = await GetBBACSaDelItemsAsync(id); |
||||
|
|
||||
|
bbacSas.AddRange(bbacSaDelItems.bbacSas); |
||||
|
bbacSaDetails.AddRange(bbacSaDelItems.bbacSaDetails); |
||||
|
bbacCanSas.AddRange(bbacSaDelItems.bbacCanSas); |
||||
|
bbacCanSaDetails.AddRange(bbacSaDelItems.bbacCanSaDetails); |
||||
|
bbacNotSaDetails.AddRange(bbacSaDelItems.bbacNotSaDetails); |
||||
|
} |
||||
|
catch (Exception) |
||||
|
{ |
||||
|
throw; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//删除
|
||||
|
if (bbacSas.Any()) |
||||
|
{ |
||||
|
await _bbacSaRepository.DeleteManyAsync(bbacSas); |
||||
|
} |
||||
|
if (bbacSaDetails.Any()) |
||||
|
{ |
||||
|
await _bbacSaDetailRepository.DeleteManyAsync(bbacSaDetails); |
||||
|
} |
||||
|
if (bbacCanSas.Any()) |
||||
|
{ |
||||
|
await _bbacCanSaRepository.DeleteManyAsync(bbacCanSas); |
||||
|
} |
||||
|
if (bbacCanSaDetails.Any()) |
||||
|
{ |
||||
|
await _bbacCanSaDetailRepository.DeleteManyAsync(bbacCanSaDetails); |
||||
|
} |
||||
|
if (bbacNotSaDetails.Any()) |
||||
|
{ |
||||
|
await _bbacNotSaDetailRepository.DeleteManyAsync(bbacNotSaDetails); |
||||
|
} |
||||
|
} |
||||
|
#endregion
|
||||
|
|
||||
|
#region 私有方法
|
||||
|
/// <summary>
|
||||
|
/// 结算数据处理
|
||||
|
/// </summary>
|
||||
|
private async Task SaDataHandleAsync(List<BBAC_SA_DETAIL> bbacSaDetails, string site) |
||||
|
{ |
||||
|
//结算单号
|
||||
|
var bbacSaBillNum = OrderNumberGenerator.GenerateOrderNumber("SA"); |
||||
|
//结算主表
|
||||
|
var bbacSa = new BBAC_SA() |
||||
|
{ |
||||
|
BillNum = bbacSaBillNum, |
||||
|
State = "1", |
||||
|
Site = site, |
||||
|
}; |
||||
|
//可结算单号
|
||||
|
var bbacCanSaBillNum = OrderNumberGenerator.GenerateOrderNumber("C"); |
||||
|
//可结算主表
|
||||
|
var bbacCanSa = new BBAC_CAN_SA() |
||||
|
{ |
||||
|
BillNum = bbacCanSaBillNum, |
||||
|
SettleBillNum = bbacSaBillNum, |
||||
|
State = SettleBillState.未结状态, |
||||
|
BusinessType = _businessType, |
||||
|
Site = site, |
||||
|
}; |
||||
|
//可结算明细
|
||||
|
var bbacCanSaDetails = new List<BBAC_CAN_SA_DETAIL>(); |
||||
|
//不可结算明细
|
||||
|
var bbacNotSaDetails = new List<BBAC_NOT_SA_DETAIL>(); |
||||
|
//客户零件关系
|
||||
|
var materialRelationships = new List<MaterialRelationship>(); |
||||
|
|
||||
|
#region 处理结算数据
|
||||
|
//销售价格
|
||||
|
var priceListEntitys = await _priceListRepository.GetAllAsync(); |
||||
|
|
||||
|
bbacSaDetails.ForEach(bbacSaDetail => |
||||
|
{ |
||||
|
List<string> luList = bbacSaDetail.LU.Split(" ").ToList(); |
||||
|
bbacSaDetail.LU = luList[0].Replace(" ", ""); |
||||
|
if (luList.Count > 1) |
||||
|
{ |
||||
|
luList.RemoveAt(0); |
||||
|
var luAssemble = luList.Select(t => t.Replace(" ", "")); |
||||
|
bbacSaDetail.LU += luAssemble.Aggregate(" ", (current, index) => current + index); |
||||
|
} |
||||
|
|
||||
|
bbacSaDetail.BillNum = bbacSaBillNum; |
||||
|
bbacSaDetail.KeyCode = bbacSaDetail.PN + bbacSaDetail.LU; |
||||
|
|
||||
|
//根据物料号、结算日期获取价格
|
||||
|
var priceListEntity = priceListEntitys.Find(t => t.LU == bbacSaDetail.LU && bbacSaDetail.SettleDate > t.BeginTime && bbacSaDetail.SettleDate < t.EndTime); |
||||
|
bbacSaDetail.Price = priceListEntity?.Price ?? default; |
||||
|
}); |
||||
|
|
||||
|
//导入的零件号集合
|
||||
|
var importPubSaLUs = bbacSaDetails.Select(t => t.LU).Distinct(); |
||||
|
var materialRelationshipEntitys = await _materialRelationshipRepository.GetListAsync(t => importPubSaLUs.Contains(t.SettleMaterialCode)); |
||||
|
var materialRelationshipEntitySettleMaterialCodes = materialRelationshipEntitys.Select(t => t.SettleMaterialCode).Distinct(); |
||||
|
|
||||
|
/* |
||||
|
* (不存在的客户零件号)差集 |
||||
|
* 转换为厂内零件号 |
||||
|
* 转换规则6个空格替换成“-” |
||||
|
*/ |
||||
|
var noExistSettleMaterialCodes = importPubSaLUs.Except(materialRelationshipEntitySettleMaterialCodes); |
||||
|
|
||||
|
noExistSettleMaterialCodes.ForEach(t => |
||||
|
{ |
||||
|
var materialRelationship = new MaterialRelationship(GuidGenerator.Create(), t.Replace(" ", "-"), "", t, _businessType.ToString()); |
||||
|
materialRelationships.Add(materialRelationship); |
||||
|
}); |
||||
|
#endregion
|
||||
|
|
||||
|
#region 入库数据赋值
|
||||
|
//根据价格区分结算、不可结算
|
||||
|
var bbacSaDetailsCanSes = bbacSaDetails.FindAll(t => t.Price != default); |
||||
|
var bbacSaDetailsNotCanSes = bbacSaDetails.FindAll(t => t.Price == default); |
||||
|
|
||||
|
//可结算明细
|
||||
|
bbacCanSaDetails = ObjectMapper.Map<List<BBAC_SA_DETAIL>, List<BBAC_CAN_SA_DETAIL>>(bbacSaDetailsCanSes); |
||||
|
//不可结算明细
|
||||
|
bbacNotSaDetails = ObjectMapper.Map<List<BBAC_SA_DETAIL>, List<BBAC_NOT_SA_DETAIL>>(bbacSaDetailsNotCanSes); |
||||
|
#endregion
|
||||
|
|
||||
|
#region 添加入库
|
||||
|
await _bbacSaRepository.InsertAsync(bbacSa); |
||||
|
await _bbacSaDetailRepository.InsertManyAsync(bbacSaDetails); |
||||
|
if (bbacCanSaDetails.Count > 0) |
||||
|
{ |
||||
|
bbacCanSa.InvGroupNum = bbacCanSaDetails.Count.ToString(); |
||||
|
bbacCanSaDetails.ForEach(bbacCanSaDetail => |
||||
|
{ |
||||
|
bbacCanSaDetail.BillNum = bbacCanSaDetail.InvGroupNum = bbacCanSaBillNum; |
||||
|
bbacCanSaDetail.BusinessType = _businessType; |
||||
|
}); |
||||
|
|
||||
|
await _bbacCanSaRepository.InsertAsync(bbacCanSa); |
||||
|
await _bbacCanSaDetailRepository.InsertManyAsync(bbacCanSaDetails); |
||||
|
} |
||||
|
if (bbacNotSaDetails.Count > 0) |
||||
|
{ |
||||
|
bbacNotSaDetails.ForEach(bbacNotSaDetail => |
||||
|
{ |
||||
|
bbacNotSaDetail.BusinessType = _businessType; |
||||
|
}); |
||||
|
|
||||
|
await _bbacNotSaDetailRepository.InsertManyAsync(bbacNotSaDetails); |
||||
|
} |
||||
|
if (materialRelationships.Count > 0) |
||||
|
{ |
||||
|
await _materialRelationshipRepository.InsertManyAsync(materialRelationships); |
||||
|
} |
||||
|
#endregion
|
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取结算关联项
|
||||
|
/// </summary>
|
||||
|
private async Task<(List<BBAC_SA> bbacSas, List<BBAC_SA_DETAIL> bbacSaDetails, List<BBAC_CAN_SA> bbacCanSas, List<BBAC_CAN_SA_DETAIL> bbacCanSaDetails, List<BBAC_NOT_SA_DETAIL> bbacNotSaDetails)> GetBBACSaDelItemsAsync(Guid id) |
||||
|
{ |
||||
|
//结算主表
|
||||
|
List<BBAC_SA> bbacSas = new List<BBAC_SA>(); |
||||
|
//结算明细
|
||||
|
List<BBAC_SA_DETAIL> bbacSaDetails = new List<BBAC_SA_DETAIL>(); |
||||
|
//可结算主表
|
||||
|
List<BBAC_CAN_SA> bbacCanSas = new List<BBAC_CAN_SA>(); |
||||
|
//可结算明细
|
||||
|
List<BBAC_CAN_SA_DETAIL> bbacCanSaDetails = new List<BBAC_CAN_SA_DETAIL>(); |
||||
|
//不可结算
|
||||
|
List<BBAC_NOT_SA_DETAIL> bbacNotSaDetails = new List<BBAC_NOT_SA_DETAIL>(); |
||||
|
|
||||
|
var bbacSaEntity = await _bbacSaRepository.FirstOrDefaultAsync(t => t.Id.Equals(id)); |
||||
|
if (bbacSaEntity != null) |
||||
|
{ |
||||
|
//结算单据
|
||||
|
string bbacSaBillNum = bbacSaEntity.BillNum; |
||||
|
|
||||
|
bbacCanSas = await _bbacCanSaRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
||||
|
//验证可结算主表状态
|
||||
|
if (bbacCanSas.Any() && bbacCanSas.Any(t => t.State != SettleBillState.未结状态)) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"{bbacSaBillNum} 该单据可结算单状态无法删除!", "400"); |
||||
|
} |
||||
|
|
||||
|
bbacSas.Add(bbacSaEntity); |
||||
|
bbacSaDetails = await _bbacSaDetailRepository.GetListAsync(t => t.BillNum == bbacSaBillNum); |
||||
|
bbacCanSaDetails = await _bbacCanSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
||||
|
bbacNotSaDetails = await _bbacNotSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
||||
|
} |
||||
|
|
||||
|
return (bbacSas, bbacSaDetails, bbacCanSas, bbacCanSaDetails, bbacNotSaDetails); |
||||
|
} |
||||
|
#endregion
|
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,45 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace Win.Sfs.SettleAccount.Migrations |
||||
|
{ |
||||
|
public partial class _202308031 : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "DeleterId", |
||||
|
table: "Set_BBAC_SA"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "DeletionTime", |
||||
|
table: "Set_BBAC_SA"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "IsDeleted", |
||||
|
table: "Set_BBAC_SA"); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.AddColumn<Guid>( |
||||
|
name: "DeleterId", |
||||
|
table: "Set_BBAC_SA", |
||||
|
type: "uniqueidentifier", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<DateTime>( |
||||
|
name: "DeletionTime", |
||||
|
table: "Set_BBAC_SA", |
||||
|
type: "datetime2", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<bool>( |
||||
|
name: "IsDeleted", |
||||
|
table: "Set_BBAC_SA", |
||||
|
type: "bit", |
||||
|
nullable: false, |
||||
|
defaultValue: false); |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue