diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Application.Contracts/ExportAndImport/ImportDetailAttribute.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Application.Contracts/ExportAndImport/ImportDetailAttribute.cs
new file mode 100644
index 000000000..9d862ca2e
--- /dev/null
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Application.Contracts/ExportAndImport/ImportDetailAttribute.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Win_in.Sfs.Shared.Application.Contracts.ExportAndImport;
+
+///
+/// 导入模板是否是 详情 中的属性
+///
+[AttributeUsage(AttributeTargets.Property)]
+public class ImportDetailAttribute:Attribute
+{
+ public bool IsDetail { get; set; } = true;
+}
diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/ExportAndImport/ClosedXmlExportImportService.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/ExportAndImport/ClosedXmlExportImportService.cs
index 0b3a14df9..c5e494509 100644
--- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/ExportAndImport/ClosedXmlExportImportService.cs
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/ExportAndImport/ClosedXmlExportImportService.cs
@@ -110,7 +110,7 @@ public class ClosedXmlExportImportService : IExportImportService
SetCellStyle(cell, 1, i + 1, true, property.GetCustomAttributes().Any());
}
- //
+
var stream = new MemoryStream();
workbook.SaveAs(stream);
stream.Seek(0, SeekOrigin.Begin);
@@ -161,7 +161,7 @@ public class ClosedXmlExportImportService : IExportImportService
.FirstOrDefault();
property.SetValue(model, enumValue);
}
- else if(propertyType.Name== typeof(bool).Name)
+ else if(propertyType.Name== nameof(Boolean))
{
if (value.GetText() == "是")
{
diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs
index b58cd415a..b3a1cac93 100644
--- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs
@@ -5,9 +5,11 @@ using System.IO;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
+using System.Reflection;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
+using AutoMapper.Internal;
using DocumentFormat.OpenXml.Math;
using DocumentFormat.OpenXml.Spreadsheet;
using EFCore.BulkExtensions;
@@ -332,7 +334,9 @@ public abstract class SfsCrudWithDetailsAppServiceBase();
if (entityList.Count > 0)
{
- await context.BulkInsertOrUpdateAsync(entityList).ConfigureAwait(false);
+ foreach (var entity in entityList)
+ {
+ foreach (var propertyInfo in entity.GetType().GetProperties())
+ {
+ if (propertyInfo.PropertyType.IsListType() && propertyInfo.Name == "Details")
+ {
+ var entityDetails= propertyInfo.GetValue(entity, null);
+
+ list.AddRange(((List)entityDetails)!);
+ }
+ }
+ }
+ var bulkConfig = new BulkConfig()
+ {
+ SetOutputIdentity = true,
+ PreserveInsertOrder = true
+ };
+ await context.BulkInsertOrUpdateAsync(entityList, bulkConfig).ConfigureAwait(false);
+ await context.BulkInsertAsync(list).ConfigureAwait(false);
}
}
@@ -686,7 +709,7 @@ public abstract class SfsCrudWithDetailsAppServiceBase(model);
+ var detail = ObjectMapper.Map(item);
masterEntity.Details.Add(detail);
if (detail is ISetId entityWithId)
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/Inputs/PurchaseOrderImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/Inputs/PurchaseOrderImportInput.cs
index 52b95495b..d259aa32a 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/Inputs/PurchaseOrderImportInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/Inputs/PurchaseOrderImportInput.cs
@@ -1,6 +1,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
+using Win_in.Sfs.Shared.Application.Contracts.ExportAndImport;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@@ -18,6 +19,7 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 采购订单号
///
[Display(Name = "采购订单号")]
+ [Key]
public string Number { get; set; }
///
/// 供应商代码
@@ -84,12 +86,14 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 明细-订单行
///
[Display(Name = "明细-订单行")]
+ [ImportDetail(IsDetail = true)]
public string PoLine { get; set; }
///
/// 明细-物品代码
///
[Display(Name = "明细-物品代码")]
+ [ImportDetail(IsDetail = true)]
public string ItemCode { get; set; }
///
@@ -97,18 +101,21 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
///
[Display(Name = "明细-数量")]
[Required(ErrorMessage = "{0}是必填项")]
+ [ImportDetail(IsDetail = true)]
public decimal Qty { get; set; }
///
/// 数量计量单位
///
[Display(Name = "明细-数量计量单位")]
+ [ImportDetail(IsDetail = true)]
public string Uom { get; set; }
///
/// 明细-标准包装数量
///
[Display(Name = "明细-标准包装数量")]
[Required(ErrorMessage = "{0}是必填项")]
+ [ImportDetail(IsDetail = true)]
public decimal StdPackQty { get; set; }
///
@@ -116,12 +123,14 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
///
[Display(Name = "明细-供应商包装数量")]
[Required(ErrorMessage = "{0}是必填项")]
+ [ImportDetail(IsDetail = true)]
public decimal SupplierPackQty { get; set; }
///
/// 明细-供应商包装单位
///
[Display(Name = "明细-供应商包装单位")]
+ [ImportDetail(IsDetail = true)]
public string SupplierPackUom { get; set; }
///
@@ -129,6 +138,7 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
///
[Display(Name = "明细-转换率")]
[Required(ErrorMessage = "{0}是必填项")]
+ [ImportDetail(IsDetail = true)]
public decimal ConvertRate { get; set; }
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/Inputs/SupplierAsnImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/Inputs/SupplierAsnImportInput.cs
index 9fbbace00..825d588c7 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/Inputs/SupplierAsnImportInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/Inputs/SupplierAsnImportInput.cs
@@ -97,5 +97,5 @@ public class SupplierAsnImportInput : SfsStoreImportInputBase
/// 订单备注
///
[Display(Name = "订单备注")]
- public DateTime Remark { get; set; }
+ public string Remark { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/Project/FuWeiDongYang/FuWeiDongYang_PurchaseOrderAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/Project/FuWeiDongYang/FuWeiDongYang_PurchaseOrderAppService.cs
index 0956485ba..e77181e18 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/Project/FuWeiDongYang/FuWeiDongYang_PurchaseOrderAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/Project/FuWeiDongYang/FuWeiDongYang_PurchaseOrderAppService.cs
@@ -7,14 +7,17 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application;
+using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
+using Win_in.Sfs.Wms.Store.Domain.Shared;
+using Win_in.Sfs.Wms.Store.Project;
namespace Win_in.Sfs.Wms.Store.Orders.PurchaseOrders.Project.FuWeiDongYang;
-public class FuWeiDongYang_PurchaseOrderAppService
+[Route($"{ProjectStoreConsts.RootPath}purchase-order-fuweidongyang")]
+public class FuWeiDongYang_PurchaseOrderAppService:PurchaseOrderAppService
{
- //public FuWeiDongYang_PurchaseOrderAppService(IPurchaseOrderRepository repository, IPurchaseOrderManager purchaseOrderManager, ISupplierAppService supplierAppService) : base(repository, purchaseOrderManager, supplierAppService)
- //{
-
- //}
+ public FuWeiDongYang_PurchaseOrderAppService(IPurchaseOrderRepository repository, IPurchaseOrderManager purchaseOrderManager, ISupplierAppService supplierAppService) : base(repository, purchaseOrderManager, supplierAppService)
+ {
+ }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs
index d55802158..e1adb4284 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts;
@@ -21,7 +22,7 @@ namespace Win_in.Sfs.Wms.Store.Application;
[Authorize]
[Route($"{StoreConsts.RootPath}purchase-order")]
-public abstract class PurchaseOrderAppService :
+public class PurchaseOrderAppService :
SfsStoreWithDetailsAppServiceBase,
IPurchaseOrderAppService
{
@@ -115,6 +116,17 @@ public abstract class PurchaseOrderAppService :
return ObjectMapper.Map, List>(entityList);
}
+ ///
+ /// 用来重写 导入数据时可以加工数据
+ ///
+ ///
+ ///
+ protected override Task> ImportProcessingEntityAsync(Dictionary dictionary)
+ {
+ return base.ImportProcessingEntityAsync(dictionary);
+ }
+
+
#region Function
[HttpPost("complete/{number}")]
@@ -204,9 +216,4 @@ public abstract class PurchaseOrderAppService :
return dtos;
}
-
- protected override Task ImportInternalAsync(SfsImportRequestInput requestInput, byte[] inputFileBytes)
- {
- return base.ImportInternalAsync(requestInput, inputFileBytes);
- }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAutoMapperProfile.cs
index 3b137c8f6..33303b1c1 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAutoMapperProfile.cs
@@ -16,6 +16,10 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.IgnoreAuditedObjectProperties()
.ReverseMap();
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ .ReverseMap();
+
CreateMap()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.ReceivedQty)
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Shared/Project/ProjectStoreConsts.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Shared/Project/ProjectStoreConsts.cs
new file mode 100644
index 000000000..754402918
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Shared/Project/ProjectStoreConsts.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Win_in.Sfs.Wms.Store.Project;
+public class ProjectStoreConsts
+{
+ public const string RootPath = "api/wms/store/fuweidongyang/";
+ public const string CachePrefix = "Store";
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrder.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrder.cs
index b696c92cf..4296d25cc 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrder.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrder.cs
@@ -70,7 +70,7 @@ public class PurchaseOrder : SfsStoreAggregateRootBase
///
/// 明细列表
///
- [IgnoreUpdate]
+ //[IgnoreUpdate]
public override List Details { get; set; } = new List();
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs
index 5c8480da8..c87e0fc62 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs
@@ -50,9 +50,9 @@ public class PurchaseOrderManager : SfsStoreManagerBase CreateAsync(PurchaseOrder purchaseOrder)
{
//接收到新的采购订单时,更新无PO收货单的PoNumber
- await _purchaseReceiptNoteManager.AppendPoNumberAsync(purchaseOrder).ConfigureAwait(false);
+ //await _purchaseReceiptNoteManager.AppendPoNumberAsync(purchaseOrder).ConfigureAwait(false);
purchaseOrder.SetIdAndNumberWithDetails(GuidGenerator, purchaseOrder.Number);
- await PublishCreatedAsync(purchaseOrder).ConfigureAwait(false);
+ //await PublishCreatedAsync(purchaseOrder).ConfigureAwait(false);
//不要用base.create 要不会把number覆盖
return await Repository.InsertAsync(purchaseOrder).ConfigureAwait(false);