Browse Source

三方库

dev_DY_CC
郑勃旭 11 months ago
parent
commit
fc372a51b1
  1. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/MesOut/MesOut.cs
  2. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesOut/MesOutDbContextModelCreatingExtensions.cs
  3. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs
  4. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json
  5. 4
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json
  6. 15
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs
  7. 106
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  8. 4
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs
  9. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/ITransferNoteAppService.cs
  10. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferRequests/ITransferRequestAppService.cs
  11. 14
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs
  12. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs
  13. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/TransferRequests/TransferRequestAppService.cs
  14. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs
  15. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/TransferNotes/ITransferNoteManager.cs
  16. 28
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/TransferNotes/TransferNoteManager.cs
  17. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/TransferRequests/TransferRequestManager.cs
  18. 35
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/TransferNoteEventHandler.cs

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/MesOut/MesOut.cs

@ -13,7 +13,7 @@ public class MesOut : Entity
/// <summary>
/// 条码号(20240430添加)
/// </summary>
public string Mesout_barcode { get; set; }
// public string Mesout_barcode { get; set; }
/// <summary>
/// 调出储位
/// </summary>
@ -58,7 +58,7 @@ public class MesOut : Entity
/// 返线数量
/// </summary>
public decimal Mesout_bad { get; set; }
//public string Mes_Barcode { get; set; }
public string Mes_Barcode { get; set; }
public override object[] GetKeys()
{

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesOut/MesOutDbContextModelCreatingExtensions.cs

@ -17,7 +17,7 @@ public static class MesOutDbContextModelCreatingExtensions
//Properties
b.Property(q => q.Mesout_ref_nbr).HasMaxLength(36);
b.Property(q => q.Mesout_barcode).HasMaxLength(20);
//b.Property(q => q.Mesout_barcode).HasMaxLength(20);
b.Property(q => q.Mesout_id).HasMaxLength(1);
b.Property(q => q.Mesout_part).HasMaxLength(20);
b.Property(q => q.Mesout_quality).HasMaxLength(20);
@ -30,7 +30,7 @@ public static class MesOutDbContextModelCreatingExtensions
b.Property(q => q.refno).HasMaxLength(45);
b.Property(q => q.Mesout_bad).HasPrecision(18, 2);
b.Property(q => q.Yl1);
//b.Property(q => q.Mes_Barcode).HasMaxLength(50);
b.Property(q => q.Mes_Barcode).HasMaxLength(50);
});
}

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs

@ -167,7 +167,7 @@ public class MesOutReader : IReader
LocationErpCode = mesOut.Mesout_loc,
Remark = mesOut.memo,
ReturnQty = mesOut.Mesout_bad,
MesBarCode = mesOut.Mesout_barcode,
MesBarCode = mesOut.Mes_Barcode,
MesQuality = mesOut.Mesout_quality
};

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json

@ -2,7 +2,7 @@
"ConnectionStrings": {
"Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"MES": "Server=dev.ccwin-in.com,13319;Database=MES_SH;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false"
"MES": "Server=10.164.233.7;Database=MES_JY;uid=sa;pwd=Asdf1234$;TrustServerCertificate=True;Encrypt=false"
},
"AuthServer": {

4
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json

@ -26,10 +26,10 @@
"RemoteServices": {
"BaseData": {
"BaseUrl": "http://dev.ccwin-in.com:60084/"
"BaseUrl": "http://localhost:59094/"
},
"Store": {
"BaseUrl": "http://dev.ccwin-in.com:60085/"
"BaseUrl": "http://localhost:59095/"
},
"Label": {
"BaseUrl": "http://dev.ccwin-in.com:60082/"

15
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs

@ -108,14 +108,23 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase<Kitting, Kitt
[HttpPut]
[Route("{id}")]
public override Task<KittingDTO> UpdateAsync(Guid id, KittingEditInput input)
public override async Task<KittingDTO> UpdateAsync(Guid id, KittingEditInput input)
{
var detailquery = await _repository.WithDetailsAsync().ConfigureAwait(false);
var first = detailquery.FirstOrDefault(p => p.Code == input.Code);
if (first != null)
{
throw new UserFriendlyException($"已存在编码:{input.Code}的Kitting箱");
}
else
{
return await base.UpdateAsync(id, input).ConfigureAwait(false);
}
//var detailquery = _repository.WithDetails();
//var first = detailquery.FirstOrDefault(p => p.Id == id);
//var ids=input.Details.Select(p => p.Id);
//first.Details.Where(p =>ids.Contains(p.Id));
return base.UpdateAsync(id, input);
//var entity = ObjectMapper.Map<KittingEditInput, Kitting>(input);
////entity.SetId(id);

106
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs

@ -1026,6 +1026,112 @@ public class BalanceManager : DomainService, IBalanceManager
return usableBalances;
}
/// <summary>
/// 获取无箱码可用库存列表
/// </summary>
/// <param name="itemCode"></param>
/// <param name="validLocations"></param>
/// <param name="validStatuses"></param>
/// <param name="isRemovePackingCode"></param>
/// <returns></returns>
public virtual async Task<List<Balance>> GetNoPackCodeUsableListAsync(string itemCode,
List<string> validLocations,
List<EnumInventoryStatus> validStatuses, bool isRemovePackingCode)
{
var recommendBalances = new List<Balance>();//返回可使用的推荐库存余额
var item = await _itemBasicAclService.GetByCodeAsync(itemCode).ConfigureAwait(false);
if (item == null) //物品是否存在
{
// throw new UserFriendlyException($"未找到代码为 {itemCode} 的物料记录");
return recommendBalances;
}
//构造查询条件
Expression<Func<Balance, bool>> expression = p => p.ItemCode == itemCode;
expression = expression.And(p => validStatuses.Contains(p.Status));
expression = expression.And(p => p.IsActive);
//如果物品的有效期不是无限的, 要过滤掉过期库存
if (item.ValidityUnit != EnumValidityUnit.Infinite)
{
expression = expression.And(p => p.ExpireDate > DateTime.Now);
}
//排除有箱码库存
if (isRemovePackingCode)
{
expression = expression.And(p => string.IsNullOrEmpty(p.PackingCode));
}
var allBalances = await
(await _balanceRepository.GetDbSetAsync().ConfigureAwait(false))
.Where(expression)
.AsNoTracking()
.ToListAsync().ConfigureAwait(false);
var balanceLocationCodes = allBalances.Select(p => p.LocationCode).Distinct().ToList();
var locations = await _locationAclService.GetByCodesAsync(balanceLocationCodes).ConfigureAwait(false);
//筛选有效库位类型
if (validLocations.Any())
{
locations = locations.Where(p => validLocations.Contains(p.Code)).ToList();
}
var locationCodes = locations.Where(p => p.EnablePick).Select(p => p.Code).ToList();
if (!locationCodes.Any())
{
return recommendBalances;
}
//获取物品存储关系
var itemStoreRelationDict = await GetItemStoreRelationDictAsync(itemCode, locationCodes).ConfigureAwait(false);
//过滤掉无用的库位代码
locationCodes = itemStoreRelationDict.Keys.ToList();
locations = locations.Where(p => locationCodes.Contains(p.Code)).ToList();
var usableBalances = allBalances.Where(p => locationCodes.Contains(p.LocationCode)).ToList();
if (!usableBalances.Any())
{
return recommendBalances;
}
//读取该itemCode项目为空的预占用库存
var expectOuts = await
(await _expectOutRepository.GetDbSetAsync().ConfigureAwait(false))
.AsNoTracking()
.Where(p => p.ItemCode == itemCode
&& locationCodes.Contains(p.LocationCode) && string.IsNullOrEmpty(p.PackingCode)
&& validStatuses.Contains(p.Status))
.ToListAsync().ConfigureAwait(false);
var containerCodes = usableBalances
.Where(p => !string.IsNullOrEmpty(p.ContainerCode))
.Select(p => p.ContainerCode)
.ToList();
var expectOutContainerCodes = await
(await _expectOutRepository.GetDbSetAsync().ConfigureAwait(false))
.Where(p => containerCodes.Contains(p.ContainerCode))
.GroupBy(p => p.ContainerCode)
.Select(d => d.Key)
.ToListAsync().ConfigureAwait(false);
usableBalances
//扣减已占用库存
.DecreaseExpectOutQty(expectOuts, locations)
//去除不可拆箱 拆托的且有预占用的库存余额
.IgnoreExpectOutOfSameContainer(expectOutContainerCodes, itemStoreRelationDict, locations)
//过滤掉不允许拣料的库位
.FilterLocationEnablePickAsync(locations)
//排序库存余额 最终可用的余额集合
.SortByFifo();
usableBalances = usableBalances.Where(p => p.Qty != 0).ToList();
return usableBalances;
}
private decimal GetRecommendQty(Guid traceId, decimal requestQty, decimal remainingQty, Balance usableBalance, LocationDTO location, ItemStoreRelationDTO itemStoreRelation)
{
var balanceQty = usableBalance.Qty;

4
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs

@ -51,5 +51,9 @@ public interface IBalanceManager : IDomainService
Task<List<Balance>> GetUsableListAsync(string itemCode,
List<string> validLocations,
List<EnumInventoryStatus> validStatuses, bool isRemovePackingCode);
Task<List<Balance>> GetNoPackCodeUsableListAsync(string itemCode,
List<string> validLocations,
List<EnumInventoryStatus> validStatuses, bool isRemovePackingCode);
Task<List<Balance>> GetRecommendBalancesByLocationExpectOldBalancesAsync(Guid traceId, string itemCode, decimal requestQty, List<string> validLocations, List<EnumInventoryStatus> validStatuses, bool ispackingcode, List<Balance> oldBalances);
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/ITransferNoteAppService.cs

@ -90,4 +90,5 @@ public interface ITransferNoteAppService :
Task<PagedResultDto<TransferNoteDTO>> GetInjectionTransferListAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<PagedResultDto<TransferNoteDTO>> GetCoatingTransferListAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<PagedResultDto<TransferNoteDTO>> GetAssembleTransferListAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<TransferNoteDTO> CancelAsync(Guid id);
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferRequests/ITransferRequestAppService.cs

@ -16,5 +16,5 @@ public interface ITransferRequestAppService
Task<PagedResultDto<TransferRequestDTO>> GetListForCustomAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false,
CancellationToken cancellationToken = default);
Task CancelByRequestNumberAsync(string number);
}

14
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs

@ -407,6 +407,20 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase
return dto;
}
/// <summary>
/// 取消已确认记录(在途回来源库位)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("cancel/{id}")]
public virtual async Task<TransferNoteDTO> CancelAsync(Guid id)
{
var entity = await _transferNoteManager.CancelAsync(id).ConfigureAwait(false);
var dto = ObjectMapper.Map<TransferNote, TransferNoteDTO>(entity);
return dto;
}
/// <summary>
/// 插入拆箱记录表
/// </summary>

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs

@ -22,6 +22,7 @@ using Win_in.Sfs.Shared.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.Inventory.Domain;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -50,6 +51,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
private readonly IBalanceAppService _balanceAppService;
private readonly IThirdLocationJobAppService _thirdLocationJobAppService;
private readonly IThirdLocationJobRepository _thirdLocationJobRepository;
private readonly IBalanceManager _balanceManager;
public ThirdLocationRequestAppService(
IThirdLocationRequestRepository repository,
@ -65,6 +67,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
ITransactionTypeAppService transactionTypeAppService,
IExpectOutAppService expectOutAppService,
IBalanceAppService balanceAppService,
IBalanceManager balanceManager,
IInjectionIssueJobAppService issueJobAppService)
: base(repository, thirdLocationRequestManager)
{
@ -80,5 +83,6 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
_balanceAppService= balanceAppService;
_thirdLocationJobAppService= thirdLocationJobAppService;
_thirdLocationJobRepository= thirdLocationJobRepository;
_balanceManager= balanceManager;
}
}

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/TransferRequests/TransferRequestAppService.cs

@ -306,8 +306,19 @@ public class TransferRequestAppService : SfsStoreRequestAppServiceBase
#endregion
#endregion
[HttpPost("cancel-by-request-number")]
public virtual async Task CancelByRequestNumberAsync(string number)
{
var requset=await _transferRequestManager.GetByNumberAsync(number).ConfigureAwait(false);
if (requset != null)
{
await base.CancelAsync(requset.Id).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"未找到申请无法取消!");
}
}
/// <summary>
/// 【创建】库移请求
/// </summary>

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs

@ -219,6 +219,7 @@ public abstract class SfsJobManagerBase<TEntity, TDetailEntity>
validStatuses = new List<EnumJobStatus>
{
EnumJobStatus.Open,
EnumJobStatus.Doing,
EnumJobStatus.Closed,
};
break;

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/TransferNotes/ITransferNoteManager.cs

@ -6,5 +6,6 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public interface ITransferNoteManager : ISfsStoreManager<TransferNote, TransferNoteDetail>, IBulkImportService<TransferNote>
{
Task<TransferNote> CancelAsync(Guid id);
Task<TransferNote> ConfirmAsync(Guid id);
}

28
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/TransferNotes/TransferNoteManager.cs

@ -29,7 +29,19 @@ public class TransferNoteManager : SfsStoreManagerBase<TransferNote, TransferNot
await PublishConfirmedAsync(entity).ConfigureAwait(false);
return await Repository.UpdateAsync(entity).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task<TransferNote> CancelAsync(Guid id)
{
var entity = await Repository.FindAsync(id).ConfigureAwait(false);
if (entity.Confirmed)
{
throw new UserFriendlyException($"已经确认无法取消!");
}
Check.NotNull(entity, EntityClassName);
await PublishCancelledAsync(entity).ConfigureAwait(false);
await Repository.DeleteAsync(entity).ConfigureAwait(false);
return entity;
}
private async Task PublishConfirmedAsync(TransferNote entity)
{
try
@ -43,7 +55,19 @@ public class TransferNoteManager : SfsStoreManagerBase<TransferNote, TransferNot
throw;
}
}
private async Task PublishCancelledAsync(TransferNote entity)
{
try
{
await LocalEventBus.PublishAsync(new SfsCancelledEntityEventData<TransferNote>(entity), false).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogDebug($"{nameof(TransferNote)} Cancelled Event:{ex.Message}", null);
Console.WriteLine(ex.Source);
throw;
}
}
/// <summary>
/// 执行导入
/// </summary>

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/TransferRequests/TransferRequestManager.cs

@ -1,6 +1,8 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Uow;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -72,4 +74,13 @@ public class TransferRequestManager : SfsStoreRequestManagerBase<TransferRequest
detail.ToStatus = balance.Status;
}
}
[UnitOfWork]
public override async Task<TransferRequest> CancelAsync(TransferRequest entity)
{
entity.RequestStatus = EnumRequestStatus.Reviewing;
return await Repository.UpdateAsync(entity).ConfigureAwait(false);
}
}

35
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/TransferNoteEventHandler.cs

@ -17,16 +17,19 @@ public class TransferNoteEventHandler
: StoreInventoryEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<TransferNote>>
, ILocalEventHandler<SfsConfirmedEntityEventData<TransferNote>>
, ILocalEventHandler<SfsCancelledEntityEventData<TransferNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<TransferNote>>>
{
private const EnumTransType TransType = EnumTransType.Transfer;
private readonly ILocationAppService _locationAppService;
private readonly ITransferLogAppService _transferLogAppService;
private readonly ITransferRequestAppService _transferRequestAppService;
public TransferNoteEventHandler(ITransferRequestAppService transferRequestApp, ILocationAppService locationAppService, ITransferLogAppService transferLogAppService)
public TransferNoteEventHandler(ITransferRequestAppService transferRequestApp, ILocationAppService locationAppService, ITransferLogAppService transferLogAppService, ITransferRequestAppService transferRequestAppService)
{
_locationAppService = locationAppService;
_transferLogAppService = transferLogAppService;
_transferRequestAppService = transferRequestAppService;
}
/// <summary>
@ -79,7 +82,20 @@ public class TransferNoteEventHandler
var inputList = await BuildTransferLogsAsync(entity, EnumTransferRoute.OnTheWayToDestination).ConfigureAwait(false);
await AddTransferLogsAsync(inputList).ConfigureAwait(false);
}
/// <summary>
/// 取消后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCancelledEntityEventData<TransferNote> eventData)
{
var entity = eventData.Entity;
var inputList = await BuildTransferLogsAsync(entity, EnumTransferRoute.OnTheWayToSource).ConfigureAwait(false);
await AddTransferLogsAsync(inputList).ConfigureAwait(false);
await _transferRequestAppService.CancelByRequestNumberAsync(entity.RequestNumber).ConfigureAwait(false); ;
}
private async Task AddTransferLogsAsync(List<TransferLogEditInput> inputList)
{
var transferLogs = new List<TransferLogEditInput>();
@ -143,6 +159,17 @@ public class TransferNoteEventHandler
transferLog.ToLocationErpCode = toLocation.ErpLocationCode;
transferLog.ToLocationGroup = toLocation.LocationGroupCode;
break;;
case EnumTransferRoute.OnTheWayToSource:
transferLog.FromLocationCode = transferOnTheWay.Code;
transferLog.FromLocationArea = transferOnTheWay.AreaCode;
transferLog.FromLocationErpCode = transferOnTheWay.ErpLocationCode;
transferLog.FromLocationGroup = transferOnTheWay.LocationGroupCode;
transferLog.ToLocationCode = fromLocation.Code;
transferLog.ToLocationArea = fromLocation.AreaCode;
transferLog.ToLocationErpCode = fromLocation.ErpLocationCode;
transferLog.ToLocationGroup = fromLocation.LocationGroupCode;
break;
default:
throw new ArgumentOutOfRangeException(nameof(route), route, null);
}
@ -158,6 +185,7 @@ public class TransferNoteEventHandler
return transferLogs;
}
}
public enum EnumTransferRoute
@ -176,4 +204,9 @@ public enum EnumTransferRoute
/// 源>目标
/// </summary>
SourceToDestination = 3,
/// <summary>
/// 在途>源库位
/// </summary>
OnTheWayToSource = 4,
}

Loading…
Cancel
Save