diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/HBPO_SA_DTO.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/HBPO_SA_DTO.cs
index a4523b04..d1b2da11 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/HBPO_SA_DTO.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/HBPO_SA_DTO.cs
@@ -60,7 +60,7 @@ public class HBPO_SA_DETAIL_IMPORT_DTO
///
/// 结算日期
///
- [Display(Name = "结算日期")]
+ [Display(Name = "ReceiveDate")]
[ImporterHeader(Name = "ReceiveDate", Format = "yyyy/MM/dd HH:mm:ss")]
public DateTime SettleDate { set; get; }
diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs
index 926de242..777f59b6 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs
@@ -145,6 +145,50 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Dtos
public string GroupNum { get; set; }
}
+ ///
+ /// 买单件HBPO导入
+ ///
+ public class MaiDanJianHBPOImportDto
+ {
+ ///
+ /// 结算日期
+ ///
+ [Display(Name = "买单日期")]
+ [ImporterHeader(Name = "买单日期")]
+ public DateTime SettleDate { set; get; }
+
+ ///
+ /// 零件号
+ ///
+ [Display(Name = "零件号")]
+ [Required(ErrorMessage = "{0}不能为空")]
+ [ImporterHeader(Name = "零件号")]
+ public string LU { get; set; }
+
+ ///
+ /// 生产号
+ ///
+ [Display(Name = "现产品生产号")]
+ [ImporterHeader(Name = "现产品生产号")]
+ [Required(ErrorMessage = "{0}不能为空")]
+ public string PN { get; set; }
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ [ImporterHeader(Name = "数量")]
+ public decimal Qty { get; set; }
+
+ ///
+ /// 结算分组号
+ ///
+ [Display(Name = "五联单号")]
+ [ImporterHeader(Name = "五联单号")]
+ [Required(ErrorMessage = "{0}不能为空")]
+ public string GroupNum { get; set; }
+ }
+
///
/// 备件导入
///
diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_SA_SERVICE.cs
index 187cf6f4..dc287b5c 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_SA_SERVICE.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_SA_SERVICE.cs
@@ -1,28 +1,26 @@
+using System;
using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
using SettleAccount.Domain.BQ;
-using Volo.Abp.Application.Dtos;
-using Volo.Abp.Domain.Repositories;
using Volo.Abp;
-using Win.Sfs.SettleAccount.Entities.BQ.Dtos;
+using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Win.Abp.Snowflakes;
using Win.Sfs.BaseData.ImportExcelCommon;
-using Win.Sfs.SettleAccount.CommonManagers;
-using Win.Sfs.SettleAccount.Entities.Prices;
-using Win.Sfs.SettleAccount.MaterialRelationships;
-using Win.Sfs.Shared.RepositoryBase;
-using System;
-using System.Linq;
-using Microsoft.AspNetCore.Http;
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 OfficeOpenXml;
-using OfficeOpenXml.Core;
+using Win.Sfs.SettleAccount.MaterialRelationships;
+using Win.Sfs.Shared.RepositoryBase;
namespace Win.Sfs.SettleAccount.Entities.BQ;
@@ -73,6 +71,11 @@ public class HBPO_SA_SERVICE : SettleAccountApplicationBase
///
private readonly INormalEfCoreRepository _tbRePartsRelationshipRepository;
+ ///
+ /// 业务类型
+ ///
+ private readonly EnumBusinessType _businessType = EnumBusinessType.JisHBPO;
+
///
/// 构造
///
@@ -142,12 +145,19 @@ public class HBPO_SA_SERVICE : SettleAccountApplicationBase
#region 导入数据转换、数据校验
ExportImporter _exportImporter = new ExportImporter();
var result = await _exportImporter.UploadExcelImport(files, _excelImportService);
- var importPubSaDetails = ObjectMapper.Map, List>(result);
+ var importHBOPSaDetails = ObjectMapper.Map, List>(result);
+ //Site包含CN1 亦庄
+ //Site包含CN5 顺义
+ var importCN1HBOPSaDetails = importHBOPSaDetails.FindAll(t => t.Site.Contains("CN1"));
+ var importCN5HBOPSaDetails = importHBOPSaDetails.FindAll(t => t.Site.Contains("CN5"));
+
+ await SaDataHandleAsync(importCN1HBOPSaDetails, "CN1");
+ await SaDataHandleAsync(importCN5HBOPSaDetails, "CN5");
return "";
//结算分组号
- var hbpoSaGroupNums = importPubSaDetails.Select(t => t.GroupNum).Distinct();
+ var hbpoSaGroupNums = importHBOPSaDetails.Select(t => t.GroupNum).Distinct();
//已存在的结算分组号
var havPubSaGroupNums = (await _hbpoSaDetailRepository.GetListAsync(t => hbpoSaGroupNums.Contains(t.GroupNum))).Select(t => t.GroupNum).Distinct();
@@ -166,12 +176,11 @@ public class HBPO_SA_SERVICE : SettleAccountApplicationBase
}
#endregion
-
#region 处理结算数据
//销售价格
var priceListEntitys = await _priceListRepository.GetAllAsync();
- importPubSaDetails.ForEach(importPubSaDetail =>
+ importHBOPSaDetails.ForEach(importPubSaDetail =>
{
List luList = importPubSaDetail.LU.Split(" ").ToList();
importPubSaDetail.LU = luList[0].Replace(" ", "");
@@ -193,7 +202,7 @@ public class HBPO_SA_SERVICE : SettleAccountApplicationBase
});
//导入的零件号集合
- var importPubSaLUs = importPubSaDetails.Select(t => t.LU).Distinct();
+ var importPubSaLUs = importHBOPSaDetails.Select(t => t.LU).Distinct();
var materialRelationshipEntitys = await _materialRelationshipRepository.GetListAsync(t => importPubSaLUs.Contains(t.SettleMaterialCode));
var materialRelationshipEntitySettleMaterialCodes = materialRelationshipEntitys.Select(t => t.SettleMaterialCode).Distinct();
@@ -213,7 +222,7 @@ public class HBPO_SA_SERVICE : SettleAccountApplicationBase
#region 入库数据赋值
//结算明细
- hbpoSaDetails = importPubSaDetails;
+ hbpoSaDetails = importHBOPSaDetails;
//不可结算 结算分组号码(根据价格区分结算、不可结算)
var hbpoNotSaGroupNums = hbpoSaDetails.FindAll(t => t.Price == default(decimal)).Select(t => t.GroupNum).Distinct();
@@ -329,5 +338,245 @@ public class HBPO_SA_SERVICE : SettleAccountApplicationBase
}
}
+
+ ///
+ /// 删除
+ ///
+ [HttpPost]
+ public async Task DeleteListAsync(List ids)
+ {
+ //结算主表
+ List hbpoSas = new List();
+ //结算明细
+ List hbpoSaDetails = new List();
+ //可结算主表
+ List hbpoCanSas = new List();
+ //可结算明细
+ List hbpoCanSaDetails = new List();
+ //不可结算
+ List hbpoNotSaDetails = new List();
+
+ foreach (var id in ids)
+ {
+ try
+ {
+ var hbpoSaDelItems = await GetHBPOSaDelItemsAsync(id);
+
+ hbpoSas.AddRange(hbpoSaDelItems.hbpoSas);
+ hbpoSaDetails.AddRange(hbpoSaDelItems.hbpoSaDetails);
+ hbpoCanSas.AddRange(hbpoSaDelItems.hbpoCanSas);
+ hbpoCanSaDetails.AddRange(hbpoSaDelItems.hbpoCanSaDetails);
+ hbpoNotSaDetails.AddRange(hbpoSaDelItems.hbpoNotSaDetails);
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+ }
+
+ //删除
+ if (hbpoSas.Any())
+ {
+ await _hbpoSaRepository.DeleteManyAsync(hbpoSas);
+ }
+ if (hbpoSaDetails.Any())
+ {
+ await _hbpoSaDetailRepository.DeleteManyAsync(hbpoSaDetails);
+ }
+ if (hbpoCanSas.Any())
+ {
+ await _hbpoCanSaRepository.DeleteManyAsync(hbpoCanSas);
+ }
+ if (hbpoCanSaDetails.Any())
+ {
+ await _hbpoCanSaDetailRepository.DeleteManyAsync(hbpoCanSaDetails);
+ }
+ if (hbpoNotSaDetails.Any())
+ {
+ await _hbpoNotSaDetailRepository.DeleteManyAsync(hbpoNotSaDetails);
+ }
+ }
+ #endregion
+
+ #region 私有方法
+ ///
+ /// 结算数据处理
+ ///
+ private async Task SaDataHandleAsync(List hbpoSaDetails, string site)
+ {
+ //数据校验
+ var checkList = new List();
+ //结算单号
+ var hbpoSaBillNum = OrderNumberGenerator.GenerateOrderNumber("SA");
+ //结算主表
+ var hbpoSa = new HBPO_SA()
+ {
+ BillNum = hbpoSaBillNum,
+ State = "1",
+ BusinessType = _businessType,
+ Site = site,
+ };
+ //可结算单号
+ var hbpoCanSaBillNum = OrderNumberGenerator.GenerateOrderNumber("C");
+ //可结算主表
+ var hbpoCanSa = new HBPO_CAN_SA()
+ {
+ BillNum = hbpoCanSaBillNum,
+ SettleBillNum = hbpoSaBillNum,
+ State = SettleBillState.未结状态,
+ BusinessType = _businessType,
+ Site = site,
+ };
+ //可结算明细
+ var hbpoCanSaDetails = new List();
+ //不可结算明细
+ var hbpoNotSaDetails = new List();
+ //客户零件关系
+ var materialRelationships = new List();
+
+ #region 数据校验
+ //结算分组号
+ var hbpoSaGroupNums = hbpoSaDetails.Select(t => t.GroupNum).Distinct();
+
+ //已存在的结算分组号
+ var havPubSaGroupNums = (await _hbpoSaDetailRepository.GetListAsync(t => hbpoSaGroupNums.Contains(t.GroupNum))).Select(t => t.GroupNum).Distinct();
+ if (havPubSaGroupNums.Any() == true)
+ {
+ foreach (var item in havPubSaGroupNums)
+ {
+ 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
+
+ #region 处理结算数据
+ //销售价格
+ var priceListEntitys = await _priceListRepository.GetAllAsync();
+
+ hbpoSaDetails.ForEach(hbpoSaDetail =>
+ {
+ List luList = hbpoSaDetail.LU.Split(" ").ToList();
+ hbpoSaDetail.LU = luList[0].Replace(" ", "");
+ if (luList.Count > 1)
+ {
+ luList.RemoveAt(0);
+ var luAssemble = luList.Select(t => t.Replace(" ", ""));
+ hbpoSaDetail.LU += luAssemble.Aggregate(" ", (current, index) => current + index);
+ }
+
+ hbpoSaDetail.BillNum = hbpoSaBillNum;
+ hbpoSaDetail.KeyCode = hbpoSaDetail.PN + hbpoSaDetail.LU;
+
+ //根据物料号、结算日期获取价格
+ var priceListEntity = priceListEntitys.Find(t => t.LU == hbpoSaDetail.LU && hbpoSaDetail.SettleDate > t.BeginTime && hbpoSaDetail.SettleDate < t.EndTime);
+ hbpoSaDetail.Price = priceListEntity?.Price ?? default;
+ hbpoSaDetail.BusinessType = _businessType;
+ });
+
+ //导入的零件号集合
+ var importPubSaLUs = hbpoSaDetails.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 hbpoSaDetailsCanSes = hbpoSaDetails.FindAll(t => t.Price != default);
+ var hbpoSaDetailsNotCanSes = hbpoSaDetails.FindAll(t => t.Price == default);
+
+ //可结算明细
+ hbpoCanSaDetails = ObjectMapper.Map, List>(hbpoSaDetailsCanSes);
+ //不可结算明细
+ hbpoNotSaDetails = ObjectMapper.Map, List>(hbpoSaDetailsNotCanSes);
+ #endregion
+
+ #region 添加入库
+ await _hbpoSaRepository.InsertAsync(hbpoSa);
+ await _hbpoSaDetailRepository.InsertManyAsync(hbpoSaDetails);
+ if (hbpoCanSaDetails.Count > 0)
+ {
+ hbpoCanSa.InvGroupNum = hbpoCanSaDetails.Count.ToString();
+ hbpoCanSaDetails.ForEach(hbpoCanSaDetail =>
+ {
+ hbpoCanSaDetail.BillNum = hbpoCanSaDetail.InvGroupNum = hbpoCanSaBillNum;
+ hbpoCanSaDetail.BusinessType = _businessType;
+ });
+
+ await _hbpoCanSaRepository.InsertAsync(hbpoCanSa);
+ await _hbpoCanSaDetailRepository.InsertManyAsync(hbpoCanSaDetails);
+ }
+ if (hbpoNotSaDetails.Count > 0)
+ {
+ hbpoNotSaDetails.ForEach(hbpoNotSaDetail =>
+ {
+ hbpoNotSaDetail.BusinessType = _businessType;
+ });
+
+ await _hbpoNotSaDetailRepository.InsertManyAsync(hbpoNotSaDetails);
+ }
+ if (materialRelationships.Count > 0)
+ {
+ await _materialRelationshipRepository.InsertManyAsync(materialRelationships);
+ }
+ #endregion
+
+ return ApplicationConsts.SuccessStr;
+ }
+
+ ///
+ /// 获取结算关联项
+ ///
+ private async Task<(List hbpoSas, List hbpoSaDetails, List hbpoCanSas, List hbpoCanSaDetails, List hbpoNotSaDetails)> GetHBPOSaDelItemsAsync(Guid id)
+ {
+ //结算主表
+ List hbpoSas = new List();
+ //结算明细
+ List hbpoSaDetails = new List();
+ //可结算主表
+ List hbpoCanSas = new List();
+ //可结算明细
+ List hbpoCanSaDetails = new List();
+ //不可结算
+ List hbpoNotSaDetails = new List();
+
+ var hbpoSaEntity = await _hbpoSaRepository.FirstOrDefaultAsync(t => t.Id.Equals(id));
+ if (hbpoSaEntity != null)
+ {
+ //结算单据
+ string hbpoSaBillNum = hbpoSaEntity.BillNum;
+
+ hbpoCanSas = await _hbpoCanSaRepository.GetListAsync(t => t.SettleBillNum == hbpoSaBillNum);
+ //验证可结算主表状态
+ if (hbpoCanSas.Any() && hbpoCanSas.Any(t => t.State != SettleBillState.未结状态))
+ {
+ throw new UserFriendlyException($"{hbpoSaBillNum} 该单据可结算单状态无法删除!", "400");
+ }
+
+ hbpoSas.Add(hbpoSaEntity);
+ hbpoSaDetails = await _hbpoSaDetailRepository.GetListAsync(t => t.BillNum == hbpoSaBillNum);
+ hbpoCanSaDetails = await _hbpoCanSaDetailRepository.GetListAsync(t => t.SettleBillNum == hbpoSaBillNum);
+ hbpoNotSaDetails = await _hbpoNotSaDetailRepository.GetListAsync(t => t.SettleBillNum == hbpoSaBillNum);
+ }
+
+ return (hbpoSas, hbpoSaDetails, hbpoCanSas, hbpoCanSaDetails, hbpoNotSaDetails);
+ }
#endregion
}
diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs
index 75c4e6cb..76829264 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs
@@ -110,7 +110,6 @@ public class PUB_SA_SERVICE : SettleAccountApplicationBase
public async Task ImportByBusinessTypeAsync([FromForm] PUB_SAImportRequestDto pubSaImportRequestDto)
{
string result = string.Empty;
- //return await ImportAsync(pubSaImportRequestDto.Files, pubSaImportRequestDto.BusinessType);
switch (pubSaImportRequestDto.BusinessType)
{
case EnumBusinessType.None:
@@ -128,6 +127,7 @@ public class PUB_SA_SERVICE : SettleAccountApplicationBase
case EnumBusinessType.MaiDanJianBBAC:
break;
case EnumBusinessType.MaiDanJianHBPO:
+ result = await ImportMaiDanJianHBPOAsync(pubSaImportRequestDto.Files);
break;
case EnumBusinessType.BeiJian:
result = await ImportBeiJianAsync(pubSaImportRequestDto.Files);
@@ -476,6 +476,34 @@ public class PUB_SA_SERVICE : SettleAccountApplicationBase
return await SaDataHandleAsync(importPubSaDetails, EnumBusinessType.ZhiGongJianHBPO);
}
+ ///
+ /// 买单件HBPO导入
+ ///
+ private async Task ImportMaiDanJianHBPOAsync([FromForm] IFormFileCollection files)
+ {
+ #region 导入数据转换
+ ExportImporter _exportImporter = new ExportImporter();
+ var importResults = await _exportImporter.UploadExcelImport(files, _excelImportService);
+
+ importResults.ForEach(importResult =>
+ {
+ importResult.SettleDate = DateTime.Now;
+ });
+
+ var importPubSaDetails = ObjectMapper.Map, List>(importResults);
+ #endregion
+
+ #region 数据校验
+ var checkList = await CheckAsync(importPubSaDetails);
+ if (checkList.Count > 0)
+ {
+ return await ExportErrorReportAsync(checkList);
+ }
+ #endregion
+
+ return await SaDataHandleAsync(importPubSaDetails, EnumBusinessType.BeiJian);
+ }
+
///
/// 备件导入
///
@@ -505,7 +533,7 @@ public class PUB_SA_SERVICE : SettleAccountApplicationBase
}
///
- /// 备件导入
+ /// 印度件导入
///
private async Task ImportYinDuJianAsync([FromForm] IFormFileCollection files)
{
diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationAutoMapperProfile.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationAutoMapperProfile.cs
index 053b9c19..c23bba28 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationAutoMapperProfile.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationAutoMapperProfile.cs
@@ -1023,6 +1023,7 @@ namespace Win.Sfs.SettleAccount
CreateMap();
CreateMap();
CreateMap();
+ CreateMap();
CreateMap();
CreateMap();
}