|
@ -5,6 +5,7 @@ using System.LinqAsync; |
|
|
using System.Security.Policy; |
|
|
using System.Security.Policy; |
|
|
using System.Threading.Tasks; |
|
|
using System.Threading.Tasks; |
|
|
using AutoMapper; |
|
|
using AutoMapper; |
|
|
|
|
|
using DocumentFormat.OpenXml.Drawing.Charts; |
|
|
using EFCore.BulkExtensions; |
|
|
using EFCore.BulkExtensions; |
|
|
using Microsoft.AspNetCore.Authorization; |
|
|
using Microsoft.AspNetCore.Authorization; |
|
|
using Microsoft.AspNetCore.Http; |
|
|
using Microsoft.AspNetCore.Http; |
|
@ -146,6 +147,22 @@ public class BBAC_SA_SERVICE : SettleAccountApplicationBase<BBAC_SA> |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!checkList.Any()) |
|
|
|
|
|
{ |
|
|
|
|
|
//验证客户对应厂内零件号是否存在
|
|
|
|
|
|
//导入的零件号集合
|
|
|
|
|
|
var importPubSaLUs = importBBACSaDetails.Select(t => t.LU).Distinct(); |
|
|
|
|
|
var materialRelationshipEntitys = await _materialRelationshipRepository.GetListAsync(t => importPubSaLUs.Contains(t.SettleMaterialCode)).ConfigureAwait(false); |
|
|
|
|
|
var materialRelationshipEntitySettleMaterialCodes = materialRelationshipEntitys.Select(t => t.SettleMaterialCode).Distinct(); |
|
|
|
|
|
|
|
|
|
|
|
//不存在的客户零件号(差集)
|
|
|
|
|
|
var noExistSettleMaterialCodes = importPubSaLUs.Except(materialRelationshipEntitySettleMaterialCodes); |
|
|
|
|
|
noExistSettleMaterialCodes.ForEach(t => |
|
|
|
|
|
{ |
|
|
|
|
|
checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, $"客户零件号【{t}】对应厂内零件号系统中不存在", string.Empty)); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (checkList.Count > 0) |
|
|
if (checkList.Count > 0) |
|
|
{ |
|
|
{ |
|
|
string fileName = await ExportErrorReportAsync(checkList).ConfigureAwait(false); |
|
|
string fileName = await ExportErrorReportAsync(checkList).ConfigureAwait(false); |
|
@ -253,7 +270,7 @@ public class BBAC_SA_SERVICE : SettleAccountApplicationBase<BBAC_SA> |
|
|
{ |
|
|
{ |
|
|
try |
|
|
try |
|
|
{ |
|
|
{ |
|
|
var bbacSaDelItems = await GetBBACSaDelItemsAsync(id); |
|
|
var bbacSaDelItems = await GetBBACSaDelItemsAsync(id).ConfigureAwait(false); |
|
|
|
|
|
|
|
|
bbacSas.AddRange(bbacSaDelItems.bbacSas); |
|
|
bbacSas.AddRange(bbacSaDelItems.bbacSas); |
|
|
bbacSaDetails.AddRange(bbacSaDelItems.bbacSaDetails); |
|
|
bbacSaDetails.AddRange(bbacSaDelItems.bbacSaDetails); |
|
@ -325,9 +342,6 @@ public class BBAC_SA_SERVICE : SettleAccountApplicationBase<BBAC_SA> |
|
|
var materialRelationships = new List<MaterialRelationship>(); |
|
|
var materialRelationships = new List<MaterialRelationship>(); |
|
|
|
|
|
|
|
|
#region 处理结算数据
|
|
|
#region 处理结算数据
|
|
|
//销售价格
|
|
|
|
|
|
var priceListEntitys = await _priceListRepository.GetAllAsync(); |
|
|
|
|
|
|
|
|
|
|
|
bbacSaDetails.ForEach(bbacSaDetail => |
|
|
bbacSaDetails.ForEach(bbacSaDetail => |
|
|
{ |
|
|
{ |
|
|
bbacSaDetail.SetId(GuidGenerator.Create()); |
|
|
bbacSaDetail.SetId(GuidGenerator.Create()); |
|
@ -342,35 +356,21 @@ public class BBAC_SA_SERVICE : SettleAccountApplicationBase<BBAC_SA> |
|
|
|
|
|
|
|
|
bbacSaDetail.BillNum = bbacSaBillNum; |
|
|
bbacSaDetail.BillNum = bbacSaBillNum; |
|
|
bbacSaDetail.KeyCode = bbacSaDetail.PN + bbacSaDetail.LU; |
|
|
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; |
|
|
|
|
|
bbacSaDetail.BusinessType = bbacSaDetail.PN.Contains("R0") ? EnumBusinessType.MaiDanJianBBAC : _businessType; |
|
|
bbacSaDetail.BusinessType = bbacSaDetail.PN.Contains("R0") ? EnumBusinessType.MaiDanJianBBAC : _businessType; |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
//导入的零件号集合
|
|
|
//导入的零件号集合
|
|
|
var importPubSaLUs = bbacSaDetails.Select(t => t.LU).Distinct(); |
|
|
var importPubSaLUs = bbacSaDetails.Select(t => t.LU).Distinct(); |
|
|
|
|
|
//销售价格
|
|
|
|
|
|
var priceListEntitys = _priceListRepository.Where(t => importPubSaLUs.Contains(t.LU)).ToList(); |
|
|
var materialRelationshipEntitys = await _materialRelationshipRepository.GetListAsync(t => importPubSaLUs.Contains(t.SettleMaterialCode)); |
|
|
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); |
|
|
|
|
|
materialRelationships.Add(materialRelationship); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
var seAllMaterialRelationships = materialRelationshipEntitys.Union(materialRelationships); |
|
|
|
|
|
bbacSaDetails.ForEach(bbacSaDetail => |
|
|
bbacSaDetails.ForEach(bbacSaDetail => |
|
|
{ |
|
|
{ |
|
|
bbacSaDetail.PartCode = seAllMaterialRelationships.FirstOrDefault(t => t.SettleMaterialCode == bbacSaDetail.LU)?.ErpMaterialCode ?? bbacSaDetail.LU.Replace(" ", "-"); |
|
|
//根据物料号、结算日期获取价格
|
|
|
|
|
|
var priceListEntity = priceListEntitys.FirstOrDefault(t => t.LU == bbacSaDetail.LU && bbacSaDetail.SettleDate >= t.BeginTime && bbacSaDetail.SettleDate <= t.EndTime); |
|
|
|
|
|
bbacSaDetail.Price = priceListEntity?.Price ?? 0; |
|
|
|
|
|
|
|
|
|
|
|
bbacSaDetail.PartCode = materialRelationshipEntitys.FirstOrDefault(t => t.SettleMaterialCode == bbacSaDetail.LU)?.ErpMaterialCode ?? bbacSaDetail.LU.Replace(" ", "-"); |
|
|
}); |
|
|
}); |
|
|
#endregion
|
|
|
#endregion
|
|
|
|
|
|
|
|
@ -430,14 +430,14 @@ public class BBAC_SA_SERVICE : SettleAccountApplicationBase<BBAC_SA> |
|
|
List<BBAC_CAN_SA_DETAIL> bbacCanSaDetails = new List<BBAC_CAN_SA_DETAIL>(); |
|
|
List<BBAC_CAN_SA_DETAIL> bbacCanSaDetails = new List<BBAC_CAN_SA_DETAIL>(); |
|
|
//不可结算
|
|
|
//不可结算
|
|
|
List<BBAC_NOT_SA_DETAIL> bbacNotSaDetails = new List<BBAC_NOT_SA_DETAIL>(); |
|
|
List<BBAC_NOT_SA_DETAIL> bbacNotSaDetails = new List<BBAC_NOT_SA_DETAIL>(); |
|
|
|
|
|
var bbacSaEntity = await _bbacSaRepository.FirstOrDefaultAsync(t => t.Id.Equals(id)).ConfigureAwait(false); |
|
|
var bbacSaEntity = await _bbacSaRepository.FirstOrDefaultAsync(t => t.Id.Equals(id)); |
|
|
//var bbacSaEntity = await _bbacSaRepository.FindAsync(id).ConfigureAwait(false);
|
|
|
if (bbacSaEntity != null) |
|
|
if (bbacSaEntity != null) |
|
|
{ |
|
|
{ |
|
|
//结算单据
|
|
|
//结算单据
|
|
|
string bbacSaBillNum = bbacSaEntity.BillNum; |
|
|
string bbacSaBillNum = bbacSaEntity.BillNum; |
|
|
|
|
|
|
|
|
bbacCanSas = await _bbacCanSaRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
|
|
bbacCanSas = await _bbacCanSaRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum).ConfigureAwait(false); |
|
|
//验证可结算主表状态
|
|
|
//验证可结算主表状态
|
|
|
if (bbacCanSas.Any() && bbacCanSas.Any(t => t.State != SettleBillState.未结状态)) |
|
|
if (bbacCanSas.Any() && bbacCanSas.Any(t => t.State != SettleBillState.未结状态)) |
|
|
{ |
|
|
{ |
|
@ -445,9 +445,9 @@ public class BBAC_SA_SERVICE : SettleAccountApplicationBase<BBAC_SA> |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bbacSas.Add(bbacSaEntity); |
|
|
bbacSas.Add(bbacSaEntity); |
|
|
bbacSaDetails = await _bbacSaDetailRepository.GetListAsync(t => t.BillNum == bbacSaBillNum); |
|
|
bbacSaDetails = await _bbacSaDetailRepository.GetListAsync(t => t.BillNum == bbacSaBillNum).ConfigureAwait(false); |
|
|
bbacCanSaDetails = await _bbacCanSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
|
|
bbacCanSaDetails = await _bbacCanSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum).ConfigureAwait(false); |
|
|
bbacNotSaDetails = await _bbacNotSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum); |
|
|
bbacNotSaDetails = await _bbacNotSaDetailRepository.GetListAsync(t => t.SettleBillNum == bbacSaBillNum).ConfigureAwait(false); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return (bbacSas, bbacSaDetails, bbacCanSas, bbacCanSaDetails, bbacNotSaDetails); |
|
|
return (bbacSas, bbacSaDetails, bbacCanSas, bbacCanSaDetails, bbacNotSaDetails); |
|
|