Browse Source

Merge branch 'dev_DY_CC' of http://dev.ccwin-in.com:3000/BoXu.Zheng/WZC2 into dev_DY_CC

dev_DY_CC
赵新宇 1 year ago
parent
commit
18176b0457
  1. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/DTOs/ProductionLineDTO.cs
  2. 3
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/IProductionLineAppService.cs
  3. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/Inputs/ProductionLineEditInput.cs
  4. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/Inputs/ProductionLineImportInput.cs
  5. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs
  6. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLines/ProductionLineAppService.cs
  7. 16
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Enum/EnumProductionLineType.cs
  8. 5
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs
  9. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/IBomManager.cs
  10. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ProductionLines/ProductionLine.cs
  11. 5
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumLocationType.cs
  12. 23
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumProductionLineType.cs
  13. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/KittingPackagingNotes/DTOs/KittingPackagingNoteDTO.cs
  14. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/KittingPackagingNotes/Inputs/KittingPackagingNoteChassisDetailInput.cs
  15. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/KittingPackagingNotes/Inputs/KittingPackagingNoteEditInput.cs
  16. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Chassis/ChassisAppService.cs
  17. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ChassisOperationSequence/ChassisOperationSequenceAppService.cs
  18. 56
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/KittingPackagingNotes/KittingPackagingNoteAppService.cs
  19. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/CountJobs/CountJob.cs
  20. 31
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/CountJobs/CountJobManager.cs
  21. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/KittingPackagingNotes/KittingPackagingNote.cs
  22. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/KittingPackagingNotes/KittingPackagingNoteChassisDetail.cs
  23. 32133
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240423013517_Update_KittingPackagingNoteV3.Designer.cs
  24. 91
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240423013517_Update_KittingPackagingNoteV3.cs
  25. 29
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/StoreDbContextModelSnapshot.cs
  26. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CountPlanEventHandler.cs
  27. 149
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/KittingPackagingNoteHandler.cs
  28. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Win_in.Sfs.Wms.Store.Event.csproj
  29. 4
      build/src/docker/publish/conf/settings/appsettings.Development.json

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/DTOs/ProductionLineDTO.cs

@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
@ -37,4 +38,10 @@ public class ProductionLineDTO : SfsBaseDataDTOBase, IHasCode, IHasName
/// </summary>
[Display(Name = "描述")]
public string Description { get; set; }
/// <summary>
/// 生产线类型
/// </summary>
[Display(Name = "生产线类型")]
public EnumProductionLineType ProductionLineType { get; set; }
}

3
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/IProductionLineAppService.cs

@ -1,5 +1,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
@ -9,4 +11,5 @@ public interface IProductionLineAppService
, ISfsUpsertAppService<ProductionLineEditInput>
{
Task<ProductionLineDTO> GetByLocationCodeAsync(string locationCode);
Task<List<ProductionLineDTO>> GetByLocationCodeAsync(EnumProductionLineType productionLineType);
}

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/Inputs/ProductionLineEditInput.cs

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
@ -35,4 +36,10 @@ public class ProductionLineEditInput : SfsBaseDataCreateOrUpdateInputBase
/// </summary>
[Display(Name = "描述")]
public string Description { get; set; }
/// <summary>
/// 生产线类型
/// </summary>
[Display(Name = "生产线类型")]
public EnumProductionLineType ProductionLineType { get; set; }
}

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ProductionLines/Inputs/ProductionLineImportInput.cs

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
@ -36,4 +37,10 @@ public class ProductionLineImportInput : SfsBaseDataImportInputBase
/// </summary>
[Display(Name = "描述")]
public string Description { get; set; }
/// <summary>
/// 生产线类型
/// </summary>
[Display(Name = "生产线类型")]
public EnumProductionLineType ProductionLineType { get; set; }
}

6
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs

@ -20,8 +20,6 @@ public class BomAppService :
SfsBaseDataAppServiceBase<Bom, BomDTO, SfsBaseDataRequestInputBase, BomEditInput, BomImportInput>,
IBomAppService
{
private new readonly IBomRepository _repository;
private readonly IBomManager _bomManager;
@ -110,7 +108,7 @@ public class BomAppService :
[HttpGet("get-bom-tree-by-code")]
public virtual async Task<List<BomDTO>> GetBomTreeByCodeAsync(string productCode)
{
var entities = await _bomManager.GetAllItemByCode(productCode).ConfigureAwait(false);
var entities = await _bomManager.GetAllItemByCode(productCode,GuidGenerator.Create()).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<Bom>, List<BomDTO>>(entities);
@ -224,7 +222,7 @@ public class BomAppService :
return ObjectMapper.Map<List<Bom>, List<BomDTO>>(entities);
}
[HttpPost("get_bom_sublist")]
[HttpPost("get-bom-sublist")]
public async Task<List<BomComponentDTO>> GetSubcomponentsRecursiveList(List<BomComponentDTO> p_lst,
EnumBomSelectedType p_type
)

11
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLines/ProductionLineAppService.cs

@ -1,12 +1,15 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application;
@ -57,4 +60,12 @@ public class ProductionLineAppService
return ObjectMapper.Map<ProductionLine, ProductionLineDTO>(entity);
}
[HttpPost("get-by-type")]
public virtual async Task<List<ProductionLineDTO>> GetByLocationCodeAsync(EnumProductionLineType productionLineType)
{
var entitList = await _repository.GetListAsync(p => p.ProductionLineType == productionLineType).ConfigureAwait(false);
return ObjectMapper.Map<List<ProductionLine>, List<ProductionLineDTO>>(entitList);
}
}

16
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Enum/EnumProductionLineType.cs

@ -1,16 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Basedata.Domain.Shared;
/// <summary>
/// 生产线类型
/// </summary>
public enum EnumProductionLineType
{
/// <summary>
/// 空枚举
/// </summary>
[Display(Name = "空")]
None = 0,
}

5
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs

@ -379,14 +379,15 @@ public class BomManager : DomainService, IBomManager
/// </summary>
/// <param name="productCode"></param>
/// <returns></returns>
public virtual async Task<List<Bom>> GetAllItemByCode(string productCode)
public virtual async Task<List<Bom>> GetAllItemByCode(string productCode,Guid id)
{
List<Bom> boms = new List<Bom>();
var lst = await _repository.GetListAsync(p => p.Product == productCode).ConfigureAwait(false);
foreach (var bom in lst)
{
bom.Remark = id.ToString();
boms.Add(bom);
var results= await GetAllItemByCode(bom.Component).ConfigureAwait(false);
var results= await GetAllItemByCode(bom.Component,bom.Id).ConfigureAwait(false);
boms.AddRange(results);
}
return boms;

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/IBomManager.cs

@ -42,7 +42,7 @@ public interface IBomManager : IDomainService, IBulkImportService<Bom>
/// <param name="productNum">总成数量</param>
/// <returns></returns>
Task<List<Bom>> GetMaterialTotalQtyAsync(string productCode, int productNum);
Task<List<Bom>> GetAllItemByCode(string productCode);
Task<List<BomComponent>> GetSubcomponentsRecursiveList(List<BomComponent> p_lst, EnumBomSelectedType p_type);
Task<List<Bom>> GetAllItemByCode(string productCode, Guid id);
}

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ProductionLines/ProductionLine.cs

@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Domain;
@ -35,4 +36,10 @@ public class ProductionLine : SfsBaseDataAggregateRootBase, IHasCode, IHasName
/// </summary>
[Display(Name = "描述")]
public string Description { get; set; }
/// <summary>
/// 生产线类型
/// </summary>
[Display(Name = "生产线类型")]
public EnumProductionLineType ProductionLineType { get; set; }
}

5
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumLocationType.cs

@ -78,4 +78,9 @@ public enum EnumLocationType
/// 三方库
/// </summary>
[Display(Name = "三方库")] THIRDPARTY = 14,
/// <summary>
/// Kitting线边
/// </summary>
[Display(Name = "Kitting线边")] KittingWip = 15,
}

23
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumProductionLineType.cs

@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Shared.Domain.Shared;
public enum EnumProductionLineType
{
None = 0,
/// <summary>
/// 注塑
/// </summary>
[Display(Name = "注塑")] Injection = 1,
/// <summary>
/// 喷涂
/// </summary>
[Display(Name = "喷涂")] Coating = 2,
/// <summary>
/// 装配
/// </summary>
[Display(Name = "装配")] Assemble = 3
}

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/KittingPackagingNotes/DTOs/KittingPackagingNoteDTO.cs

@ -17,7 +17,12 @@ public class KittingPackagingNoteDTO : SfsStoreDTOBase<KittingPackagingNoteDetai
public string KittingCode { get; set; }
/// <summary>
/// 明细(记录每次扫的位置
/// 明细(记录Kitting打包中的子物品明细
/// </summary>
public List<KittingPackagingNoteChassisDetail> DepDetails { get; set; } = new();
public override List<KittingPackagingNoteDetailDTO> Details { get; set; } = new();
/// <summary>
/// 明细(记录底盘相关的信息)
/// </summary>
public List<KittingPackagingNoteChassisDetailDTO> DepDetails { get; set; } = new();
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/KittingPackagingNotes/Inputs/KittingPackagingNoteChassisDetailInput.cs

@ -5,7 +5,7 @@ using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class KittingPackagingNoteChassisDetailInput : SfsDetailInputBase
public class KittingPackagingNoteChassisDetailInput : SfsStoreDetailInputBase
{
/// <summary>
/// 底盘号
@ -24,4 +24,9 @@ public class KittingPackagingNoteChassisDetailInput : SfsDetailInputBase
/// </summary>
[Display(Name = "底盘号排序序列")]
public long ChassisSortNumber { get; set; }
/// <summary>
///
/// </summary>
public string ItemCode { get; set; }
}

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/KittingPackagingNotes/Inputs/KittingPackagingNoteEditInput.cs

@ -15,12 +15,12 @@ public class KittingPackagingNoteEditInput : SfsStoreCreateOrUpdateInputBase
public string KittingCode { get; set; }
/// <summary>
/// 明细(记录打包的明细)
/// 明细(记录Kitting打包子物品明细)
/// </summary>
public List<KittingPackagingNoteDetailInput> Details { get; set; } = new();
/// <summary>
/// 明细(记录每次扫的位置
/// 明细(记录底盘相关的信息
/// </summary>
public List<KittingPackagingNoteChassisDetailInput> DepDetails { get; set; } = new();
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Chassis/ChassisAppService.cs

@ -78,6 +78,7 @@ public class ChassisAppService
/// 平板或手持使用 按照底盘返回排序大于参数中20个的
/// </summary>
/// <returns></returns>
[HttpPost("get-list-with-next-count")]
public async Task<PagedResultDto<ChassisDTO>> GetListWithNextCountAsync(long sortNumber,int count,
CancellationToken cancellationToken = default)
{

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ChassisOperationSequence/ChassisOperationSequenceAppService.cs

@ -46,10 +46,21 @@ public class ChassisOperationSequenceAppService
var chassisOperationSequence =
await _repository.FindAsync(p => p.KittingCode == kittingCode).ConfigureAwait(false);
if (chassisOperationSequence == null)
{
var input= new ChassisOperationSequenceEditInput();
input.KittingCode=kittingCode;
input.ChassisNumber = string.Empty;
input.ChassisSortNumber = newChassisSortNumber;
await CreateAsync(input).ConfigureAwait(false);
}
else
{
chassisOperationSequence.ChassisSortNumber = newChassisSortNumber;
await _repository.UpdateAsync(chassisOperationSequence).ConfigureAwait(false);
}
}
#region 无用

56
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/KittingPackagingNotes/KittingPackagingNoteAppService.cs

@ -1,7 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Boms.DTOs;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -25,19 +33,63 @@ public class KittingPackagingNoteAppService
KittingPackagingNoteImportInput>, IKittingPackagingNoteAppService
{
private readonly IChassisOperationSequenceAppService _chassisOperationSequenceAppService;
private readonly IBomAppService _bomAppService;
private readonly IKittingAppService _kittingAppService;
public KittingPackagingNoteAppService(
IKittingPackagingNoteRepository repository, IChassisOperationSequenceAppService chassisOperationSequenceAppService) : base(repository)
IKittingPackagingNoteRepository repository, IChassisOperationSequenceAppService chassisOperationSequenceAppService, IBomAppService bomAppService, IKittingAppService kittingAppService) : base(repository)
{
_chassisOperationSequenceAppService = chassisOperationSequenceAppService;
_bomAppService = bomAppService;
_kittingAppService = kittingAppService;
}
[HttpPost("")]
public override async Task<KittingPackagingNoteDTO> CreateAsync(KittingPackagingNoteEditInput input)
{
var sortNumber=input.DepDetails.Max(p => p.ChassisSortNumber);
await _chassisOperationSequenceAppService.UpdateChassisSortNumberByKittingCodeAsync(input.KittingCode,sortNumber).ConfigureAwait(false);
//所有底盘转换为总成的零件号
var chassisItemCode = new List<string>();
var listItemCode=input.DepDetails.Select(p => p.ItemCode);
foreach (var itemCode in listItemCode)
{
var bomDtos=await _bomAppService.GetBomTreeByCodeAsync(itemCode).ConfigureAwait(false);
if (bomDtos == null|| bomDtos.Count<1)
{
throw new UserFriendlyException($"物品代码【{itemCode}】没有Bom信息");
}
var bomItemCodeList = bomDtos.Select(p => p.Component);
chassisItemCode.AddRange(bomItemCodeList);
}
chassisItemCode=chassisItemCode.Distinct().ToList();
//获取kitting中维护的零件号
var kittingDto=await _kittingAppService.GetByCodeAsync(input.KittingCode).ConfigureAwait(false);
var kittingItemCodeList= kittingDto.Details.Select(p => p.ItemCode);
//取出交集得到KittingCode中的零件
var hasItemCode= kittingItemCodeList.Intersect(chassisItemCode).ToList();
if (hasItemCode == null || hasItemCode.Count < 1)
{
throw new UserFriendlyException($"请检查Bom和Kitting代码【{input.KittingCode}】中的Kitting物品关系是否一致");
}
foreach (var itemCode in hasItemCode)
{
var detailInput = new KittingPackagingNoteDetailInput();
var itemBase=kittingDto.Details.First(p => p.ItemCode == itemCode);
detailInput.KittingCode = input.KittingCode;
detailInput.ItemCode = itemCode;
detailInput.ItemDesc1 = itemBase.ItemDesc1;
detailInput.ItemDesc2= itemBase.ItemDesc2;
detailInput.ItemName = itemBase.ItemName;
detailInput.Qty= itemBase.Qty;
input.Details.Add(detailInput);
}
input.DepDetails.ForEach(p=>p.KittingCode=input.KittingCode);
return await base.CreateAsync(input).ConfigureAwait(false);
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/CountJobs/CountJob.cs

@ -96,7 +96,7 @@ public class CountJob : SfsJobAggregateRootBase<CountJobDetail>
detail.ExpireDate = expireDate;
detail.LocationCode = locationCode;
detail.CountQty = detail.CountQty+qty;
detail.CountQty = qty;
detail.CountTime = time;
detail.CountOperator = oper;
detail.CountDescription = desc;

31
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/CountJobs/CountJobManager.cs

@ -119,21 +119,31 @@ public class CountJobManager : SfsJobManagerBase<CountJob, CountJobDetail>, ICou
private async Task SetDetailsAsync(CountJob input, CountJob entity)
{
foreach (var depDetail in input.DepDetails)
//将任务里所有可盘数量置为0
input.Details.ForEach(r =>
{
var inputDetail = input.Details.FirstOrDefault(r => r.ItemCode == depDetail.ItemCode && r.PackingCode == depDetail.PackingCode);
if (inputDetail != null)
r.CountQty = 0;
});
//清除之前的扫描明细
entity.DepDetails.RemoveAll(r=>r.InventoryStage==entity.InventoryStage);
//遍历扫描明细
foreach (var depDetail in input.DepDetails.Where(r=>r.InventoryStage==entity.InventoryStage))
{
inputDetail.CountQty += depDetail.CountQty;
}
else
var inputDetail = input.Details.FirstOrDefault(r => r.ItemCode == depDetail.ItemCode && r.PackingCode == depDetail.PackingCode&&r.LocationCode == depDetail.LocationCode&&r.InventoryStage == entity.InventoryStage);
if (inputDetail == null)
{
var jobDetail = ObjectMapper.Map<CountJobDependentDetail, CountJobDetail>(depDetail);
jobDetail.InventoryQty = 0;
var detailNumber = await GetNumber().ConfigureAwait(false);
jobDetail.SetIdAndNumber(GuidGenerator, entity.Id, detailNumber);
jobDetail.CountLabel = GuidGenerator.Create().ToString();
input.Details.Add(jobDetail);
}
else
{
inputDetail.CountQty += depDetail.CountQty;
}
var jobDepDetail = ObjectMapper.Map<CountJobDependentDetail, CountJobDependentDetail>(depDetail);
var number = entity.Number;
@ -141,7 +151,7 @@ public class CountJobManager : SfsJobManagerBase<CountJob, CountJobDetail>, ICou
jobDepDetail.CountLabel = GuidGenerator.Create().ToString();
entity.DepDetails.Add(jobDepDetail);
}
foreach (var detail in input.Details)
foreach (var detail in input.Details.Where(r => r.InventoryStage == entity.InventoryStage))
{
var entityDetail = entity.Details.FirstOrDefault(p => p.Id == detail.Id);
@ -150,11 +160,6 @@ public class CountJobManager : SfsJobManagerBase<CountJob, CountJobDetail>, ICou
{
var jobDetail = ObjectMapper.Map<CountJobDetail, CountJobDetail>(detail);
//var number =await GetNumber();
//jobDetail.SetIdAndNumber(GuidGenerator,entity.Id, number);
//jobDetail.CountLabel = GuidGenerator.Create().ToString();
//CountJobDetail jobDetail = new CountJobDetail() { };
entity.AddDetail(jobDetail);
}
else
@ -163,6 +168,8 @@ public class CountJobManager : SfsJobManagerBase<CountJob, CountJobDetail>, ICou
.ConfigureAwait(false);
}
}
//移除原有明细里没有,并且第二次扫描以处的项目
entity.Details.RemoveAll(r => r.InventoryQty == 0 && r.CountQty == 0&& r.InventoryStage == entity.InventoryStage);
}
public override void CheckDetails(CountJob entity, AbpValidationResult result)

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/KittingPackagingNotes/KittingPackagingNote.cs

@ -16,12 +16,12 @@ public class KittingPackagingNote : SfsStoreAggregateRootBase<KittingPackagingNo
public string KittingCode { get; set; }
/// <summary>
/// 明细(记录打包的明细)
/// 明细(记录Kitting打包子物品明细)
/// </summary>
public override List<KittingPackagingNoteDetail> Details { get; set; } = new();
public List<KittingPackagingNoteDetail> Details { get; set; } = new();
/// <summary>
/// 明细(记录每次扫的位置
/// 明细(记录底盘相关的信息
/// </summary>
public List<KittingPackagingNoteChassisDetail> DepDetails { get; set; } = new();
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/KittingPackagingNotes/KittingPackagingNoteChassisDetail.cs

@ -3,7 +3,7 @@ using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Domain;
public class KittingPackagingNoteChassisDetail : SfsDetailEntityBase
public class KittingPackagingNoteChassisDetail : SfsStoreDetailEntityBase
{
/// <summary>
/// 底盘号

32133
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240423013517_Update_KittingPackagingNoteV3.Designer.cs

File diff suppressed because it is too large

91
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240423013517_Update_KittingPackagingNoteV3.cs

@ -0,0 +1,91 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Win_in.Sfs.Wms.Store.Migrations
{
public partial class Update_KittingPackagingNoteV3 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "KittingNumber",
table: "Store_ChassisOperationSequence");
migrationBuilder.RenameColumn(
name: "ChassisSortNumber",
table: "Store_KittingPackagingNoteChassisDetail",
newName: "ChassisNumber");
migrationBuilder.AddColumn<string>(
name: "ItemCode",
table: "Store_KittingPackagingNoteChassisDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "ItemDesc1",
table: "Store_KittingPackagingNoteChassisDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ItemDesc2",
table: "Store_KittingPackagingNoteChassisDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ItemName",
table: "Store_KittingPackagingNoteChassisDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<long>(
name: "ChassisSortNumber",
table: "Store_ChassisOperationSequence",
type: "bigint",
nullable: false,
defaultValue: 0L);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ItemCode",
table: "Store_KittingPackagingNoteChassisDetail");
migrationBuilder.DropColumn(
name: "ItemDesc1",
table: "Store_KittingPackagingNoteChassisDetail");
migrationBuilder.DropColumn(
name: "ItemDesc2",
table: "Store_KittingPackagingNoteChassisDetail");
migrationBuilder.DropColumn(
name: "ItemName",
table: "Store_KittingPackagingNoteChassisDetail");
migrationBuilder.DropColumn(
name: "ChassisSortNumber",
table: "Store_ChassisOperationSequence");
migrationBuilder.RenameColumn(
name: "ChassisNumber",
table: "Store_KittingPackagingNoteChassisDetail",
newName: "ChassisSortNumber");
migrationBuilder.AddColumn<string>(
name: "KittingNumber",
table: "Store_ChassisOperationSequence",
type: "nvarchar(max)",
nullable: true);
}
}
}

29
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/StoreDbContextModelSnapshot.cs

@ -1569,6 +1569,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.Property<string>("ChassisNumber")
.HasColumnType("nvarchar(max)");
b.Property<long>("ChassisSortNumber")
.HasColumnType("bigint");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
@ -1590,9 +1593,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.Property<string>("KittingCode")
.HasColumnType("nvarchar(max)");
b.Property<string>("KittingNumber")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -14511,7 +14511,7 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<long>("ChassisSortNumber")
b.Property<long>("ChassisNumber")
.HasColumnType("bigint");
b.Property<DateTime>("CreationTime")
@ -14522,6 +14522,27 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("ItemCode")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("ItemCode");
b.Property<string>("ItemDesc1")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("ItemDesc1");
b.Property<string>("ItemDesc2")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("ItemDesc2");
b.Property<string>("ItemName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("ItemName");
b.Property<string>("KittingCode")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CountPlanEventHandler.cs

@ -238,6 +238,7 @@ public class CountPlanEventHandler
foreach (var countPlanDetail in countPlanDetails)
{
var countJobDetail = ObjectMapper.Map<CountPlanDetail, CountJobDetailInput>(countPlanDetail);
countJobDetail.InventoryStage = countPlan.InventoryStage;
countJob.Details.Add(countJobDetail);
}

149
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/KittingPackagingNoteHandler.cs

@ -0,0 +1,149 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.EventBus;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Event.Transaction;
namespace Win_in.Sfs.Wms.Store.Event.Transactions;
public class KittingPackagingNoteEventHandler
: StoreInventoryEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<KittingPackagingNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<KittingPackagingNote>>>
{
private readonly IProductionLineAppService _productionLineAppService;
private readonly IProductionLineItemAppService _productionLineItemAppService;
private readonly ILocationAppService _locationAppService;
public KittingPackagingNoteEventHandler(
IProductionLineAppService productionLineAppService, ILocationAppService locationAppService, IProductionLineItemAppService productionLineItemAppService)
{
_productionLineAppService = productionLineAppService;
_locationAppService = locationAppService;
_productionLineItemAppService = productionLineItemAppService;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<KittingPackagingNote> eventData)
{
var entity = eventData.Entity;
var transferLogEditInputs = await BuildTransferLogsAsync(entity).ConfigureAwait(false);
await TransferLogAppService.AddManyAsync(transferLogEditInputs).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<KittingPackagingNote>> eventData)
{
var entities = eventData.Entity;
var transferLogCreateInputs = new List<TransferLogEditInput>();
foreach (var entitie in entities)
{
transferLogCreateInputs.AddRange(await BuildTransferLogsAsync(entitie).ConfigureAwait(false));
}
await TransferLogAppService.AddManyAsync(transferLogCreateInputs).ConfigureAwait(false);
}
/// <summary>
/// 构造库移DTO
/// </summary>
/// <param name="kittingPackagingNote"></param>
/// <returns></returns>
private async Task<List<TransferLogEditInput>> BuildTransferLogsAsync(KittingPackagingNote kittingPackagingNote)
{
var transferLogCreateInputs = new List<TransferLogEditInput>();
//获取生产线和 生产线零件关系 用来下面找装配的线边做查询
var productionLineList = await _productionLineAppService.GetByLocationCodeAsync(EnumProductionLineType.Assemble)
.ConfigureAwait(false);
var productionItemList = new List<ProductionLineItemDTO>();
foreach (var productionLineDto in productionLineList)
{
productionItemList.AddRange(await _productionLineItemAppService.GetByProductLineCodeAsync(productionLineDto.Code).ConfigureAwait(false));
}
//Kitting线边库位
var kittingLocation =
await LocationAclService.GetFirstByTypeAsync(EnumLocationType.KittingWip).ConfigureAwait(false);
foreach (var detail in kittingPackagingNote.Details.Where(detail => detail.Qty != 0))
{
var productionLineItemDtos= productionItemList.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
if (productionLineItemDtos == null)
{
var strProductionLine = string.Empty;
productionLineList.ForEach(dto => strProductionLine += " " + dto.Code);
throw new UserFriendlyException($"没有在 生产线代码列表中找到【{strProductionLine}】物料代码【{detail.ItemCode}】的配置");
}
var list = JsonSerializer.Deserialize<List<string>>(productionLineItemDtos.WipLocationCodeListJson);
if (list == null || list.Count < 1)
{
throw new UserFriendlyException($"没有在 生产线代码【{productionLineItemDtos.ProdLineCode}】物料代码【{detail.ItemCode}】中配置线边库位");
}
var assembleFirstLocationCode = list.First();
var assembleLocation =
await _locationAppService.GetByCodeAsync(assembleFirstLocationCode).ConfigureAwait(false);
var transferLogEditInput = transferLogCreateInputs.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
if (transferLogEditInput != null)
{
transferLogEditInput.Qty += detail.Qty;
}
else
{
var transferLog = new TransferLogEditInput();
transferLog.TransType = EnumTransType.Transfer;
var itemBasicDto = await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
transferLog.ItemCode = detail.ItemCode;
transferLog.ItemDesc1 = detail.ItemDesc1;
transferLog.ItemDesc2 = detail.ItemDesc2;
transferLog.ItemName = detail.ItemName;
transferLog.Qty = detail.Qty;
transferLog.ArriveDate = DateTime.Now;
transferLog.ExpireDate = DateTime.Now;
transferLog.ProduceDate = DateTime.Now;
transferLog.StdPackQty = itemBasicDto.StdPackQty;
transferLog.Uom = itemBasicDto.BasicUom;
transferLog.ToLocationCode = assembleLocation.Code;
transferLog.ToWarehouseCode = assembleLocation.WarehouseCode;
transferLog.ToLocationErpCode = assembleLocation.ErpLocationCode;
transferLog.ToLocationArea = assembleLocation.AreaCode;
transferLog.ToLocationGroup = assembleLocation.LocationGroupCode;
transferLog.ToContainerCode = string.Empty;
transferLog.ToPackingCode = string.Empty;
transferLog.ToLot = string.Empty;
transferLog.ToStatus = EnumInventoryStatus.OK;
transferLog.FromLocationCode = kittingLocation.Code;
transferLog.FromWarehouseCode = kittingLocation.WarehouseCode;
transferLog.FromLocationErpCode = kittingLocation.ErpLocationCode;
transferLog.FromLocationArea = kittingLocation.AreaCode;
transferLog.FromLocationGroup = kittingLocation.LocationGroupCode;
transferLog.FromContainerCode = string.Empty;
transferLog.FromPackingCode = string.Empty;
transferLog.FromLot = string.Empty;
transferLog.FromStatus = EnumInventoryStatus.OK;
transferLog.Worker = kittingPackagingNote.Worker;
transferLog.DocNumber = kittingPackagingNote.Number;
transferLogCreateInputs.Add(transferLog);
}
}
return transferLogCreateInputs;
}
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Win_in.Sfs.Wms.Store.Event.csproj

@ -16,6 +16,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Quartz" Version="3.3.3" />
<PackageReference Include="Volo.Abp.Core" Version="5.3.5" />
<PackageReference Include="Volo.Abp.EventBus" Version="5.3.5" />
<PackageReference Include="Volo.Abp.Autofac" Version="5.3.5" />

4
build/src/docker/publish/conf/settings/appsettings.Development.json

@ -117,8 +117,8 @@
//"BaseUrl": "http://localhost:59093/"
},
"BaseData": {
"BaseUrl": "http://dev.ccwin-in.com:60084/"
//"BaseUrl": "http://localhost:59094/"
//"BaseUrl": "http://dev.ccwin-in.com:60084/"
"BaseUrl": "http://localhost:59094/"
},
"Default": {
"BaseUrl": "http://dev.ccwin-in.com:60083/"

Loading…
Cancel
Save