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 e11d79d97..570ff326f 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 @@ -47,24 +47,25 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase,List>(query.ToList()); - //foreach (var itm in details) - //{ - // itm.MasterId = first.Id; - // first.Details.Add(itm); - //} - - //var entity = await _repository.UpdateAsync(first, true).ConfigureAwait(false); - // return ObjectMapper.Map(first); + throw new UserFriendlyException($"已存在编码:{input.Code}的Kitting箱"); + + + //var query = from itm in input.Details + // join itm1 in first.Details on itm.PartCode equals itm1.PartCode + // into temp1 + // from tm1 in temp1.DefaultIfEmpty() + // where tm1 == null + // select itm; + //var details = ObjectMapper.Map, List>(query.ToList()); + //foreach (var itm in details) + //{ + // itm.SetId(GuidGenerator.Create()); + // itm.MasterId = first.Id; + // first.AddDetails(itm); + //} + //var entity= await _repository.UpdateAsync(first).ConfigureAwait(false); + + //return ObjectMapper.Map(entity); } else { @@ -92,8 +93,30 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase UpdateAsync(Guid id, KittingEditInput input) + public override Task UpdateAsync(Guid id, KittingEditInput input) { + var detailquery = _repository.WithDetails(); + var first = detailquery.FirstOrDefault(p => p.Id == id); + if (first.Code == input.Code) + { + throw new UserFriendlyException($"已存在编码:{input.Code}的Kitting箱"); + } + + var query = from itm in input.Details + join itm1 in first.Details on itm.PartCode equals itm1.PartCode + select itm; + List errors = new List(); + foreach (var itm in query.ToList()) + { + errors.Add(itm.PartCode); + } + if(errors.Count > 0) + { + throw new UserFriendlyException($"零件号${string.Join(",", errors)}已存在"); + + } + + return base.UpdateAsync(id, input); } 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 311196b07..acd90d147 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 @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; +using NetTopologySuite.Index.HPRtree; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Shared; @@ -24,6 +25,13 @@ public class Kitting : SfsBaseDataAggregateRootBase, IHasCode this.Id = id; } + public void AddDetails(KittingDetail item) + { + Details.Add(item); + } + + + ///// ///// 设置任务明细的实际库位和实际数量 @@ -40,7 +48,7 @@ public class Kitting : SfsBaseDataAggregateRootBase, IHasCode // detail.Desc2 = desc2; // detail.Qty = qty; // detail.Conf = conf; - + // await Task.CompletedTask.ConfigureAwait(false); //} } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs index 6f955c033..b1af95693 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs @@ -37,5 +37,11 @@ public class KittingDetail : AuditedEntity, IMultiTenant, IRemark public string Remark { get; set; } + + public void SetId(Guid guid) + { + Id= guid; + } + } 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 324addcc7..ec56fd4f3 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 @@ -23,6 +23,11 @@ public static class KittingDbContextModelCreatingExtensions b.Property(q => q.Code).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); //Relations b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterId).IsRequired(); + + + + + //Indexes b.HasIndex(q => new { q.Code }).IsUnique(); }); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs new file mode 100644 index 000000000..2d249d85e --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.Store.Notes.ProductRecycleNotes.DTOs; +public class ProductRecycleNoteDetailExtendDto +{ + + [Display(Name ="报废类型")] + public string Type { get; set; } + [Display(Name = "物料代码")] + public string ItemCode { get; set; } + [Display(Name = "报废库位")] + + public string LocCode { get; set; } + [Display(Name = "数量")] + public Decimal Qty { get; set; } + + [Display(Name = "报废原因")] + public string Reason { get; set; } + + + +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs index db384ee8f..4e3ec69d7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Linq; using Volo.Abp.Data; using Win_in.Sfs.Shared.Application.Contracts; +using Win_in.Sfs.Wms.Store.Notes.ProductRecycleNotes.DTOs; /// /// 成品回收记录 @@ -91,6 +92,60 @@ public class ProductRecycleNoteAppService : } } + + /// + /// 导出报废 + /// + [HttpPost("export-scrap")] + public virtual async Task ExportScrapAsync(SfsExportRequestInput requestInput) + { + try + { + var pagedResult = await GetPagedListByFilterAsync( + new SfsStoreRequestInputBase() { Condition = requestInput.Condition }, + true).ConfigureAwait(false); + + var items = pagedResult.Items.ToList(); + + await SetNoteAndBackFlushDetailsAsync(pagedResult.Items.ToList()).ConfigureAwait(false); + + var exports = BuildProductRecycleNoteAndBackFlushDetailExport(items); + List exportlist=new List(); + foreach (var itm in exports) + { + exportlist.Add(new ProductRecycleNoteDetailExtendDto() + { + + ItemCode = itm.ItemCode, + LocCode = itm.LocationCode, + Reason = string.Empty, + Qty = itm.Qty, + Type = "客户退拆" + + + + }); + } + + + + return ExportImportService.Export(exports); + } + catch (Exception ex) + { + Logger.LogException(ex); + throw new Exception(ex.Message); + } + } + + + + + + + + + protected virtual async Task SetNoteAndBackFlushDetailsAsync(List dtos) { await Task.CompletedTask.ConfigureAwait(false);