From 3171c6d9ca285a1bbd93234b683ba958813b4519 Mon Sep 17 00:00:00 2001 From: zhaoxinyu <89237069@qq.com> Date: Mon, 4 Mar 2024 15:06:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Kittings/DTOs/KittingDTO.cs | 2 +- .../Kittings/Inputs/KittingEditInput.cs | 2 +- .../Kittings/KittingAppService.cs | 17 +- .../Kittings/IKittingRepository.cs | 3 +- .../Kittings/Kitting.cs | 12 +- ...KittingDbContextModelCreatingExtensions.cs | 11 +- .../Kittings/KittingEfCoreRepository.cs | 231 ++++++++++++++---- 7 files changed, 213 insertions(+), 65 deletions(-) diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs index ac0cb8661..a4ed711da 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs @@ -16,5 +16,5 @@ public class KittingDTO : SfsBaseDataDTOBase, IHasCode, IHasName public string Name { get; set; } [Display(Name = "明细")] - public virtual ICollection Details { set; get; }= new List(); + public List Details { set; get; }= new List(); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs index 422404a21..df0b27c65 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs @@ -15,7 +15,7 @@ public class KittingEditInput : SfsBaseDataCreateOrUpdateInputBase public string Name { get; set; } - public virtual ICollection Details { get; set; }=new List(); + public virtual List Details { get; set; }=new List(); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs index 570ff326f..81ebf359c 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs @@ -48,8 +48,6 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase 0) { throw new UserFriendlyException($"零件号${string.Join(",", errors)}已存在"); - } - - return base.UpdateAsync(id, input); } @@ -133,6 +127,17 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase(input); + await _repository.UpsertAsync(entity).ConfigureAwait(false); + } + + + + protected override async Task GetFromRepositoryAsync(string code) { var displayName = typeof(KittingDTO).GetNameOfDisplay(); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs index d86331d6c..5a5b51ebe 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs @@ -1,9 +1,10 @@ +using System.Threading.Tasks; using Win_in.Sfs.Shared.Domain; namespace Win_in.Sfs.Basedata.Domain; public interface IKittingRepository : ISfsBaseDataRepositoryBase, ISfsBulkRepositoryBase { - + Task UpsertAsync(Kitting newData); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs index acd90d147..ab3e5ae38 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs @@ -15,15 +15,15 @@ namespace Win_in.Sfs.Basedata.Domain; /// [Serializable] [Display(Name = "Kitting箱")] -public class Kitting : SfsBaseDataAggregateRootBase, IHasCode +public class Kitting : SfsBaseDataAggregateRootBase, IHasCode { public string Code { get ; set ; } public string Name { get ; set ; } - public virtual ICollection Details { get; set; } = new List(); - public void SetId(Guid id) - { - this.Id = id; - } + public virtual List Details { get; set; } = new List(); + //public void SetId(Guid id) + //{ + // this.Id = id; + //} public void AddDetails(KittingDetail item) { diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs index ec56fd4f3..c1f8ac6b8 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs @@ -18,13 +18,13 @@ public static class KittingDbContextModelCreatingExtensions b.ConfigureByConvention(); //Configure Sfs base properties b.ConfigureSfsBase(); - b.Property(p=>p.Name).HasMaxLength(SfsPropertyConst.DescLength); + b.Property(p => p.Name).HasMaxLength(SfsPropertyConst.DescLength); //Properties b.Property(q => q.Code).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); //Relations b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterId).IsRequired(); - + @@ -47,7 +47,12 @@ public static class KittingDbContextModelCreatingExtensions //Relations b.Property(q => q.MasterId).IsRequired(); //Indexes - + + + //b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); + + + }); } //public static void ConfigureCustomer(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options) diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs index 3a2da3b64..6687685bd 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs @@ -1,4 +1,6 @@ +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -13,66 +15,201 @@ public class KittingEfCoreRepository : SfsBaseDataEfCoreRepositoryBase(); + var detail=DbContext.Set(); + var dbSet = await GetDbSetAsync().ConfigureAwait(false); - var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code).ConfigureAwait(false); + + + var exist = await main.FirstOrDefaultAsync(p => p.Code == newData.Code).ConfigureAwait(false); if (exist == null) { - var insRet = await InsertAsync(entity).ConfigureAwait(false); + newData.SetId(GuidGenerator.Create()); + await InsertAsync(newData).ConfigureAwait(false); } else { + var detailList= detail.Where(p => p.MasterId == exist.Id).ToList(); + + var left=from itm in newData.Details join itm1 in detailList on + itm.PartCode equals itm1.PartCode + into temp + from tm in temp.DefaultIfEmpty() + where tm == null + select itm; + var inner = from itm in detailList + join itm1 in newData.Details on + itm.PartCode equals itm1.PartCode + select itm1; + //await detail.AddRangeAsync(left.ToList()).ConfigureAwait(false); + + List insert = new List(); + List update = new List(); + foreach (var itm in inner.ToList()) + { + var first=newData.Details.FirstOrDefault(p=>p.PartCode==itm.PartCode); + itm.Qty = first.Qty; + itm.Desc1= first.Desc1; + itm.Desc2=first.Desc2; + update.Add(itm); + + } + + foreach (var itm in left.ToList()) + { + itm.SetId(GuidGenerator.Create()); + itm.MasterId = exist.Id; + insert.Add(itm); + } + + detail.AddRange(insert.ToArray()); + + detail.UpdateRange(update.ToArray()); + + + + DbContext.SaveChanges(); + + - //exist.Code = entity.Code; - exist.Name = entity.Name; - //exist.Address = entity.Address; - //exist.Country = entity.Country; - //exist.City = entity.City; - //exist.Phone = entity.Phone; - //exist.Fax = entity.Fax; - //exist.PostID = entity.PostID; - //exist.Contacts = entity.Contacts; - //exist.Currency = entity.Currency; - //exist.IsActive = entity.IsActive; - //exist.Type = entity.Type; - exist.TenantId = entity.TenantId; - exist.Remark = entity.Remark; + //foreach (var itm in detail) + //{ + // var existDetail = + // detailList.FirstOrDefault(p => p.PartCode == newDetail.PartCode); + //} + + + //detailRep.Where(p=>p.PartCode==); + + + //exist.Name = newData.Name; + + //UpsertDetail(newData, exist); + + //await UpdateAsync(exist).ConfigureAwait(false); } - // var context = await GetDbContextAsync(); - // await context.SingleMergeAsync(entity, options => - // { - // //业务主键,可以是联合主键 - // options.ColumnPrimaryKeyExpression = c => new - // { - // c.Company, - // c.Code - // }; - // //需要在更新时忽略的属性 - // options.IgnoreOnMergeUpdateExpression = c => new - // { - // c.Id, - // }; - // }); } + //private void UpsertDetail(List newData, List exist) + //{ + // foreach (var newDetail in newData) + // { + // var existDetail = + // exist.FirstOrDefault(p =>p.PartCode==newDetail.PartCode); + // if (existDetail == null) + // { + // newDetail.SetId(GuidGenerator.Create()); + // newDetail.MasterId = exist.Id; + // exist.Details.Add(newDetail); + // } + // else + // { + // existDetail.Desc1= newDetail.Desc1; + // existDetail.Desc2= newDetail.Desc2; + // existDetail.Qty= newDetail.Qty; + // existDetail.Remark= newDetail.Remark; + + // //existDetail.SupplierPackUom = newDetail.SupplierPackUom; + // //existDetail.SupplierPackQty = newDetail.SupplierPackQty; + // //existDetail.ConvertRate = newDetail.ConvertRate; + // //existDetail.IsConsignment = newDetail.IsConsignment; + // //existDetail.LineStatus = newDetail.LineStatus; + // //existDetail.Uom = newDetail.Uom; + // //existDetail.Qty = newDetail.Qty; + // //existDetail.StdPackQty = newDetail.StdPackQty; + // //existDetail.ItemName = newDetail.ItemName; + // //existDetail.ItemDesc1 = newDetail.ItemDesc1; + // //existDetail.ItemDesc2 = newDetail.ItemDesc2; + // //existDetail.ItemCode = newDetail.ItemCode; + // //existDetail.Remark = newDetail.Remark; + // } + // } + //} - public virtual async Task UpsertAsyncByInterface(Kitting entity) - { - //var dbSet = await GetDbSetAsync().ConfigureAwait(false); - //var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code).ConfigureAwait(false); - //if (exist == null) - //{ - // var insRet = await InsertAsync(entity).ConfigureAwait(false); - //} - //else - //{ - // exist.Name = entity.Name; - // exist.ShortName = entity.ShortName; - // exist.LastModificationTime = DateTime.Now; - //} - } + + + + + + + + + + + + + + + + + + + + //public virtual async Task UpsertAsync(Kitting entity) + //{ + // var dbSet = await GetDbSetAsync().ConfigureAwait(false); + // var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code).ConfigureAwait(false); + // if (exist == null) + // { + // var insRet = await InsertAsync(entity).ConfigureAwait(false); + // } + // else + // { + + + + // //exist.Code = entity.Code; + // exist.Name = entity.Name; + // //exist.Address = entity.Address; + // //exist.Country = entity.Country; + // //exist.City = entity.City; + // //exist.Phone = entity.Phone; + // //exist.Fax = entity.Fax; + // //exist.PostID = entity.PostID; + // //exist.Contacts = entity.Contacts; + // //exist.Currency = entity.Currency; + // //exist.IsActive = entity.IsActive; + // //exist.Type = entity.Type; + // exist.TenantId = entity.TenantId; + // exist.Remark = entity.Remark; + + // } + // // var context = await GetDbContextAsync(); + // // await context.SingleMergeAsync(entity, options => + // // { + // // //业务主键,可以是联合主键 + // // options.ColumnPrimaryKeyExpression = c => new + // // { + // // c.Company, + // // c.Code + // // }; + // // //需要在更新时忽略的属性 + // // options.IgnoreOnMergeUpdateExpression = c => new + // // { + // // c.Id, + // // }; + // // }); + //} + + + //public virtual async Task UpsertAsyncByInterface(Kitting entity) + //{ + // //var dbSet = await GetDbSetAsync().ConfigureAwait(false); + // //var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code).ConfigureAwait(false); + // //if (exist == null) + // //{ + // // var insRet = await InsertAsync(entity).ConfigureAwait(false); + // //} + // //else + // //{ + // // exist.Name = entity.Name; + // // exist.ShortName = entity.ShortName; + // // exist.LastModificationTime = DateTime.Now; + // //} + //} }