297 changed files with 26772 additions and 1869 deletions
@ -0,0 +1,7 @@ |
|||
{ |
|||
"ExpandedNodes": [ |
|||
"" |
|||
], |
|||
"SelectedNode": "\\WZC2.sln", |
|||
"PreviewInSolutionExplorer": false |
|||
} |
Binary file not shown.
@ -1,7 +1,13 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using EFCore.BulkExtensions; |
|||
using Volo.Abp.Domain.Repositories; |
|||
|
|||
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.EOS; |
|||
|
|||
public interface IPlanRepository : IRepository<Plan, decimal> |
|||
{ |
|||
Task BulkUpdateAsync(IList<Plan> entities, BulkConfig bulkConfig = null, Action<decimal> progress = null, Type type = null, CancellationToken cancellationToken = default); |
|||
} |
|||
|
@ -0,0 +1,139 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text.Json; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.ObjectMapping; |
|||
using Win_in.Sfs.Auth.Application.Contracts; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.DataExchange.Domain; |
|||
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; |
|||
using Win_in.Sfs.Wms.DataExchange.Domain.Shared; |
|||
using Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing; |
|||
|
|||
public class ItemTransformNoteConverter : IOutgoingConverter |
|||
{ |
|||
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager; |
|||
private readonly IOutgoingToExternalManager _outgoingToExternalManager; |
|||
private readonly ISupplierAsnAppService _supplierAsnAppService; |
|||
private readonly IDepartmentAppService _departmentAppService; |
|||
private readonly IObjectMapper _objectMapper; |
|||
|
|||
public ItemTransformNoteConverter( |
|||
IOutgoingFromWmsManager outgoingFromWmsManager |
|||
, IOutgoingToExternalManager outgoingToExternalManager |
|||
, ISupplierAsnAppService supplierAsnAppService |
|||
, IDepartmentAppService departmentAppService |
|||
, IObjectMapper objectMapper |
|||
) |
|||
{ |
|||
_outgoingFromWmsManager = outgoingFromWmsManager; |
|||
_outgoingToExternalManager = outgoingToExternalManager; |
|||
_supplierAsnAppService = supplierAsnAppService; |
|||
_departmentAppService = departmentAppService; |
|||
_objectMapper = objectMapper; |
|||
} |
|||
|
|||
public virtual async Task<List<OutgoingToExternal>> ConvertAsync() |
|||
{ |
|||
var outgoingToExternalList = new List<OutgoingToExternal>(); |
|||
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.Item_Transform, EnumSystemType.ERP).ConfigureAwait(false); |
|||
foreach (var outgoingFromWms in outgoingFromWmsList) |
|||
{ |
|||
var wmsCountAdjust = JsonSerializer.Deserialize<ItemTransformNoteDTO>(outgoingFromWms.DataContent); |
|||
if (Enum.Parse<EnumTransSubType>(wmsCountAdjust.Type) == EnumTransSubType.Item_Transform) |
|||
{ |
|||
var department = await _departmentAppService.GetByUsernameAsync(wmsCountAdjust.Worker).ConfigureAwait(false); |
|||
var departmentCode = department == null ? "" : department.Code; |
|||
var details = wmsCountAdjust.Details.GroupBy(r => new { r.ItemCode, r.ToItemCode, r.LocationErpCode, r.ToLocationCode }).Select(p => new ItemTransformNoteDetailExchangeDto { ToQty = p.Sum(itm => itm.ToQty), FromQty = p.Sum(itm => itm.FromQty), ItemCode = p.Key.ItemCode, ToItemCode = p.Key.ToItemCode, LocationErpCode = p.Key.LocationErpCode, ReasonCode = String.Join("、", p.Select(x => x.ReasonCode).ToArray()) }); |
|||
foreach (var detail in details) |
|||
{ |
|||
List<ItemTransformNoteDetailExchangeDto> ItemTransform = new List<ItemTransformNoteDetailExchangeDto>(); |
|||
ItemTransformNoteDetailExchangeDto ItemTrans = new ItemTransformNoteDetailExchangeDto(); |
|||
ItemTrans.ItemCode = detail.ItemCode; |
|||
ItemTrans.LocationErpCode = detail.LocationErpCode; |
|||
ItemTrans.FromQty = detail.FromQty - detail.FromQty - detail.FromQty; |
|||
ItemTrans.ReasonCode = detail.ReasonCode; |
|||
ItemTransform.Add(ItemTrans); |
|||
ItemTransformNoteDetailExchangeDto ItemTranss = new ItemTransformNoteDetailExchangeDto(); |
|||
ItemTranss.ItemCode = detail.ToItemCode; |
|||
ItemTranss.LocationErpCode = detail.LocationErpCode; |
|||
ItemTranss.FromQty = detail.ToQty; |
|||
ItemTranss.ReasonCode = detail.ReasonCode; |
|||
ItemTransform.Add(ItemTranss); |
|||
foreach (var Item in ItemTransform) |
|||
{ |
|||
var outgoingToExternal = new OutgoingToExternal() |
|||
{ |
|||
DataType = outgoingFromWms.DataType, |
|||
DataAction = outgoingFromWms.DataAction, |
|||
SourceSystem = EnumSystemType.WMS.ToString(), |
|||
SourceDataId = wmsCountAdjust.Number, |
|||
SourceDataGroupCode = wmsCountAdjust.Number, |
|||
SourceDataDetailCode = Item.ItemCode, |
|||
Writer = nameof(TyrpOutgoingBackgroundWorker), |
|||
DestinationSystem = EnumSystemType.ERP.ToString(), |
|||
DestinationDataId = "", |
|||
}; |
|||
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); |
|||
var exchangeIssue = await BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, Item).ConfigureAwait(false); |
|||
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue); |
|||
var arrive = BuildIssue(exchangeIssue, departmentCode); |
|||
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive); |
|||
|
|||
outgoingToExternalList.Add(outgoingToExternal); |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false); ; |
|||
//将outgoingFromWms数据归档
|
|||
await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false); ; |
|||
return outgoingToExternalList; |
|||
//插入到中间表OutgoingToExternal
|
|||
} |
|||
|
|||
private CountAdjust BuildIssue(ItemTransformNoteExchangeDto exchangeCountAdjust, string departmentCode) |
|||
{ |
|||
var detail = exchangeCountAdjust.Detail; |
|||
string asdtype = ""; |
|||
if (Enum.Parse<EnumTransSubType>(exchangeCountAdjust.Type) == EnumTransSubType.Item_Transform) |
|||
{ |
|||
asdtype = "4003"; |
|||
} |
|||
var counta = new CountAdjust() |
|||
{ |
|||
mesout_asd_refc = departmentCode, |
|||
mesout_asd_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"), |
|||
mesout_asd_type = asdtype, |
|||
mesout_asd_part = detail.ItemCode, |
|||
mesout_asd_date = exchangeCountAdjust.ActiveDate.ToString("yyyyMMdd"), |
|||
mesout_asd_loc = detail.LocationErpCode, |
|||
mesout_asd_code = detail.ReasonCode, |
|||
mesout_asd_qty = detail.FromQty, |
|||
mesout_asd_user = exchangeCountAdjust.Worker, |
|||
mesout_asd_k = string.Empty, |
|||
mesout_asd_stat = "Y" |
|||
|
|||
}; |
|||
|
|||
|
|||
return counta; |
|||
|
|||
} |
|||
|
|||
private async Task<ItemTransformNoteExchangeDto> BuildPurchaseReceiptExchangeDtoAsync( |
|||
ItemTransformNoteDTO wmsCountAdjust, ItemTransformNoteDetailExchangeDto wmsCountAdjustDetail) |
|||
{ |
|||
|
|||
var exchangeCountAdjust = _objectMapper.Map<ItemTransformNoteDTO, ItemTransformNoteExchangeDto>(wmsCountAdjust); |
|||
|
|||
exchangeCountAdjust.Detail = wmsCountAdjustDetail; |
|||
return exchangeCountAdjust; |
|||
} |
|||
} |
|||
|
@ -1,7 +1,8 @@ |
|||
using System; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.DataExchange.Domain; |
|||
|
|||
public interface IArchivedIncomingFromExternalRepository : ISfsRepositoryBase<ArchivedIncomingFromExternal> |
|||
public interface IArchivedIncomingFromExternalRepository : ISfsRepositoryBase<ArchivedIncomingFromExternal>, ISfsBulkRepositoryBase<ArchivedIncomingFromExternal> |
|||
{ |
|||
} |
|||
|
@ -1,174 +1,194 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Serilog; |
|||
using Volo.Abp.AspNetCore.Mvc; |
|||
using Win_in.Sfs.Basedata.Application.Contracts; |
|||
using Win_in.Sfs.Wms.Dashboard.Host.Models; |
|||
using System; |
|||
using System.Linq; |
|||
using Win_in.Sfs.Basedata.Application.Contracts; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; |
|||
|
|||
[ApiController] |
|||
[Route($"{PdaHostConst.ROOT_ROUTE}plan-and-actual")] |
|||
|
|||
public class PlanAndActualController : AbpController |
|||
namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers |
|||
{ |
|||
private readonly ISupplierAsnAppService _supplierAsnApp; |
|||
private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteApp; |
|||
private readonly IPutawayNoteAppService _putawayNoteApp; |
|||
private readonly ISupplierAppService _supplierApp; |
|||
private readonly IItemSafetyStockAppService _itemSafetyStockApp; |
|||
|
|||
public PlanAndActualController(ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteApp, IPutawayNoteAppService putawayNoteApp, ISupplierAppService supplierApp, IItemSafetyStockAppService itemSafetyStockApp) |
|||
{ |
|||
_supplierAsnApp = supplierAsnApp; |
|||
_purchaseReceiptNoteApp = purchaseReceiptNoteApp; |
|||
_putawayNoteApp = putawayNoteApp; |
|||
_supplierApp = supplierApp; |
|||
_itemSafetyStockApp = itemSafetyStockApp; |
|||
} |
|||
[ApiController] |
|||
[Route($"{PdaHostConst.ROOT_ROUTE}plan-and-actual")] |
|||
|
|||
[HttpGet("plan-actual-list")] |
|||
public virtual async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualListAsync() |
|||
public class PlanAndActualController : AbpController |
|||
{ |
|||
return await GetPlanAndActualDashboardsAsync().ConfigureAwait(false); |
|||
} |
|||
private readonly ISupplierAsnAppService _supplierAsnApp; |
|||
private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteApp; |
|||
private readonly IPutawayNoteAppService _putawayNoteApp; |
|||
private readonly ISupplierAppService _supplierApp; |
|||
private readonly IItemSafetyStockAppService _itemSafetyStockApp; |
|||
private readonly IPurchaseOrderAppService _purchaseOrderApp; |
|||
private readonly IPurchaseReceiptJobAppService _purchaseReceiptJobApp; |
|||
|
|||
public PlanAndActualController(ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteApp, IPutawayNoteAppService putawayNoteApp, ISupplierAppService supplierApp, IItemSafetyStockAppService itemSafetyStockApp, IPurchaseOrderAppService purchaseOrderApp, IPurchaseReceiptJobAppService purchaseReceiptJobApp) |
|||
{ |
|||
_supplierAsnApp = supplierAsnApp; |
|||
_purchaseReceiptNoteApp = purchaseReceiptNoteApp; |
|||
_putawayNoteApp = putawayNoteApp; |
|||
_supplierApp = supplierApp; |
|||
_itemSafetyStockApp = itemSafetyStockApp; |
|||
_purchaseOrderApp = purchaseOrderApp; |
|||
_purchaseReceiptJobApp = purchaseReceiptJobApp; |
|||
} |
|||
|
|||
private async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualDashboardsAsync() |
|||
{ |
|||
var supplierAsns = await GetSupplierAsnsAsync().ConfigureAwait(false); |
|||
|
|||
var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); |
|||
[HttpGet("plan-actual-list")] |
|||
public virtual async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualListAsync() |
|||
{ |
|||
return await GetPlanAndActualDashboardsAsync(); |
|||
} |
|||
|
|||
var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); |
|||
private async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualDashboardsAsync() |
|||
{ |
|||
var supplierAsns = await this.GetSupplierAsnsAsync(); |
|||
|
|||
var asnNumbers = supplierAsns.Select(t => t.Number); |
|||
var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); |
|||
|
|||
var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers).ConfigureAwait(false); |
|||
var suppliers = await GetSuppliersAsync(supplierCodes); |
|||
|
|||
var putawayNotes = await GetPutawayNotesAsync(asnNumbers).ConfigureAwait(false); |
|||
var asnNumbers = supplierAsns.Select(t => t.Number); |
|||
|
|||
var itemSafetyStorks = await GetItemSafetyStocksAsync(supplierAsns).ConfigureAwait(false); |
|||
var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers); |
|||
|
|||
return ConvertToPlanAndActualDashboards( |
|||
supplierAsns, |
|||
suppliers, |
|||
purchaseReceiptNotes, |
|||
putawayNotes, |
|||
itemSafetyStorks); |
|||
} |
|||
var putawayNotes = await this.GetPutawayNotesAsync(asnNumbers); |
|||
|
|||
private static List<PlanAndActualDashboardDto> ConvertToPlanAndActualDashboards(List<SupplierAsnDTO> supplierAsns, List<SupplierDTO> suppliers, List<PurchaseReceiptNoteDTO> purchaseReceiptNotes, List<PutawayNoteDTO> putawayNotes, List<ItemSafetyStockDTO> itemSafetyStorks) |
|||
{ |
|||
var dtos = new List<PlanAndActualDashboardDto>(); |
|||
var itemSafetyStorks = await this.GetItemSafetyStocksAsync(supplierAsns); |
|||
|
|||
return await this.ConvertToPlanAndActualDashboards( |
|||
supplierAsns, |
|||
suppliers, |
|||
purchaseReceiptNotes, |
|||
putawayNotes, |
|||
itemSafetyStorks); |
|||
} |
|||
|
|||
foreach (var supplierAsn in supplierAsns) |
|||
private async Task<List<PlanAndActualDashboardDto>> ConvertToPlanAndActualDashboards(List<SupplierAsnDTO> supplierAsns, List<SupplierDTO> suppliers, List<PurchaseReceiptNoteDTO> purchaseReceiptNotes, List<PutawayNoteDTO> putawayNotes, List<ItemSafetyStockDTO> itemSafetyStorks) |
|||
{ |
|||
var purchaseReceipts = purchaseReceiptNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); |
|||
var putaways = putawayNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); |
|||
var dtos = new List<PlanAndActualDashboardDto>(); |
|||
|
|||
var supplierShortName = string.Empty; |
|||
foreach (var supplierAsn in supplierAsns) |
|||
{ |
|||
var purchaseReceipts = purchaseReceiptNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); |
|||
var putaways = putawayNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); |
|||
|
|||
var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); |
|||
var supplierShortName = string.Empty; |
|||
|
|||
if (supplier == null) |
|||
{ |
|||
continue; |
|||
} |
|||
var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); |
|||
|
|||
supplierShortName = supplier.ShortName; |
|||
if (supplier == null) |
|||
continue; |
|||
|
|||
foreach (var detail in supplierAsn.Details) |
|||
{ |
|||
var dto = dtos.FirstOrDefault(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode); |
|||
supplierShortName = supplier.ShortName; |
|||
|
|||
if (dto == null) |
|||
foreach (var detail in supplierAsn.Details) |
|||
{ |
|||
dto = new PlanAndActualDashboardDto(); |
|||
var dto = dtos.FirstOrDefault(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode); |
|||
|
|||
dto.SupplierShortName = supplierShortName; |
|||
dto.ItemCode = detail.ItemCode; |
|||
dto.ItemDesc1 = detail.ItemDesc1; |
|||
dto.ItemName = detail.ItemName; |
|||
if (dto == null) |
|||
{ |
|||
dto = new PlanAndActualDashboardDto(); |
|||
|
|||
var itemSafetyStork = itemSafetyStorks.FirstOrDefault(t => t.ItemCode == detail.ItemCode); |
|||
dto.SupplierShortName = supplierShortName; |
|||
dto.ItemCode = detail.ItemCode; |
|||
dto.ItemDesc1 = detail.ItemDesc1; |
|||
dto.ItemName = detail.ItemName; |
|||
|
|||
if (itemSafetyStork != null) |
|||
{ |
|||
dto.MaxQty = itemSafetyStork.MaxStock; |
|||
dto.MinQty = itemSafetyStork.MinStock; |
|||
} |
|||
var itemSafetyStork = itemSafetyStorks.FirstOrDefault(t => t.ItemCode == detail.ItemCode); |
|||
|
|||
dto.ReceiptNoteCount = CountReceiptNoteCount(purchaseReceipts, detail.ItemCode, detail.Lot); |
|||
dto.ReceiptQty = CountReceiptQty(purchaseReceipts, detail.ItemCode, detail.Lot); |
|||
dto.PutawayQty = CountPutawayQty(putawayNotes, detail.ItemCode, detail.Lot); |
|||
if (itemSafetyStork != null) |
|||
{ |
|||
dto.MaxQty = itemSafetyStork.MaxStock; |
|||
dto.MinQty = itemSafetyStork.MinStock; |
|||
} |
|||
|
|||
dtos.Add(dto); |
|||
} |
|||
var purchaseOrderDtos = await _purchaseOrderApp.GetListBySupplierCodeAsync(supplierAsn.SupplierCode, detail.ItemCode); |
|||
var supllierAsn = await _supplierAsnApp.GetForTodayListAsync(); |
|||
var poNumberList = supllierAsn.Select(p => p.PoNumber).ToList(); |
|||
|
|||
dto.SupplierAsnCount += 1; |
|||
purchaseOrderDtos = purchaseOrderDtos.Where(p => poNumberList.Contains(p.Number)).ToList(); |
|||
|
|||
dto.PlanArriveQty += detail.Qty; |
|||
} |
|||
} |
|||
|
|||
return dtos.OrderBy(t => t.SupplierShortName).ToList(); |
|||
} |
|||
decimal allPutawayQty = 0; |
|||
decimal allReceiptQty = 0; |
|||
decimal allPlanArriveQty = 0; |
|||
|
|||
private static decimal CountPutawayQty(List<PutawayNoteDTO> putawayNotes, string itemCode, string lot) |
|||
{ |
|||
return putawayNotes.Sum(t => t.Details.Where(t => t.ItemCode == itemCode && t.ToLot == lot).Sum(t => t.Qty)); |
|||
} |
|||
foreach (var purchaseOrderDTO in purchaseOrderDtos) |
|||
{ |
|||
allPutawayQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.PutAwayQty); |
|||
allReceiptQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.ReceivedQty); |
|||
allPlanArriveQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.ShippedQty); |
|||
} |
|||
|
|||
private static decimal CountReceiptQty(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode, string lot) |
|||
{ |
|||
return purchaseReceipts.Sum(t => t.Details.Where(t => t.ItemCode == itemCode && t.HandledLot == lot).Sum(t => t.Qty)); |
|||
} |
|||
dto.PutawayQty = allPutawayQty; |
|||
dto.PlanArriveQty = allPlanArriveQty; |
|||
dto.ReceiptQty = allReceiptQty; |
|||
|
|||
private static int CountReceiptNoteCount(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode, string lot) |
|||
{ |
|||
return purchaseReceipts.Sum(t => t.Details.Count(t => t.ItemCode == itemCode && t.Lot == lot)); |
|||
} |
|||
dtos.Add(dto); |
|||
} |
|||
|
|||
private async Task<List<SupplierAsnDTO>> GetSupplierAsnsAsync() |
|||
{ |
|||
var startTime = DateTime.Today.AddHours(DashboardConst.AsnReceiptTimeLimitHour); |
|||
var purchaseReceiptJobDtos = await _purchaseReceiptJobApp.GetListBySupplierCodeOnTodayAsync(supplierAsn.SupplierCode); |
|||
|
|||
dto.ReceiptNoteCount = purchaseReceiptJobDtos.Count(p => p.JobStatus == EnumJobStatus.Done); |
|||
|
|||
var endTime = startTime.AddDays(1).AddSeconds(-1); |
|||
dto.SupplierAsnCount = purchaseReceiptJobDtos.Count(); |
|||
} |
|||
} |
|||
|
|||
return dtos.OrderBy(t => t.SupplierShortName).ToList(); |
|||
} |
|||
|
|||
if (DateTime.Now.Hour < DashboardConst.AsnReceiptTimeLimitHour) |
|||
private decimal CountReceiptQty(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode) |
|||
{ |
|||
startTime.AddDays(-1); |
|||
endTime.AddDays(-1); |
|||
return purchaseReceipts.Sum(t => t.Details.Where(t => t.ItemCode == itemCode).Sum(t => t.Qty)); |
|||
} |
|||
|
|||
return await _supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime).ConfigureAwait(false); |
|||
} |
|||
private int CountReceiptNoteCount(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode) |
|||
{ |
|||
return purchaseReceipts.Sum(t => t.Details.Count(t => t.ItemCode == itemCode)); |
|||
} |
|||
|
|||
private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes) |
|||
{ |
|||
return await _supplierApp.GetByCodesAsync(codes).ConfigureAwait(false); |
|||
} |
|||
private async Task<List<SupplierAsnDTO>> GetSupplierAsnsAsync() |
|||
{ |
|||
var startTime = DateTime.Today.AddHours(DashboardConst.AsnReceiptTimeLimitHour); |
|||
|
|||
private async Task<List<PurchaseReceiptNoteDTO>> GetPurchaseReceiptNotesAsync(IEnumerable<string> asnNumbers) |
|||
{ |
|||
return await _purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); |
|||
} |
|||
var endTime = startTime.AddDays(1).AddSeconds(-1); |
|||
|
|||
private async Task<List<PutawayNoteDTO>> GetPutawayNotesAsync(IEnumerable<string> asnNumbers) |
|||
{ |
|||
return await _putawayNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); |
|||
} |
|||
private async Task<List<ItemSafetyStockDTO>> GetItemSafetyStocksAsync(List<SupplierAsnDTO> supplierAsns) |
|||
{ |
|||
var itemCodes = new List<string>(); |
|||
if (DateTime.Now.Hour < DashboardConst.AsnReceiptTimeLimitHour) |
|||
{ |
|||
startTime.AddDays(-1); |
|||
endTime.AddDays(-1); |
|||
} |
|||
|
|||
supplierAsns.ForEach(t => { itemCodes.AddRange(t.Details.Select(t => t.ItemCode).ToList()); }); |
|||
return await this._supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime); |
|||
} |
|||
|
|||
var itemSafetyStorks = await _itemSafetyStockApp.GetByItemCodesAsync(itemCodes).ConfigureAwait(false); |
|||
return itemSafetyStorks; |
|||
private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes) |
|||
{ |
|||
return await this._supplierApp.GetByCodesAsync(codes); |
|||
} |
|||
|
|||
private async Task<List<PurchaseReceiptNoteDTO>> GetPurchaseReceiptNotesAsync(IEnumerable<string> asnNumbers) |
|||
{ |
|||
return await this._purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers); |
|||
} |
|||
|
|||
private async Task<List<PutawayNoteDTO>> GetPutawayNotesAsync(IEnumerable<string> asnNumbers) |
|||
{ |
|||
return await this._putawayNoteApp.GetListByAsnNumbers(asnNumbers); |
|||
} |
|||
private async Task<List<ItemSafetyStockDTO>> GetItemSafetyStocksAsync(List<SupplierAsnDTO> supplierAsns) |
|||
{ |
|||
var itemCodes = new List<string>(); |
|||
|
|||
supplierAsns.ForEach(t => { itemCodes.AddRange(t.Details.Select(t => t.ItemCode).ToList()); }); |
|||
|
|||
var itemSafetyStorks = await this._itemSafetyStockApp.GetByItemCodesAsync(itemCodes); |
|||
return itemSafetyStorks; |
|||
} |
|||
} |
|||
} |
|||
|
@ -0,0 +1,45 @@ |
|||
|
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote; |
|||
|
|||
public class ItemTransformNoteDetailExchangeDto |
|||
{ |
|||
/// <summary>
|
|||
/// 物品代码
|
|||
/// </summary>
|
|||
[Display(Name = "物品代码")] |
|||
public string ItemCode { get; set; } |
|||
/// <summary>
|
|||
/// ERP库位
|
|||
/// </summary>
|
|||
[Display(Name = "ERP库位")] |
|||
public string LocationErpCode { get; set; } |
|||
/// <summary>
|
|||
/// 原因代码
|
|||
/// </summary>
|
|||
[Display(Name = "原因代码")] |
|||
public string ReasonCode { get; set; } |
|||
/// <summary>
|
|||
/// 调整数量
|
|||
/// </summary>
|
|||
[Display(Name = "来源数量")] |
|||
public decimal FromQty { get; set; } |
|||
/// <summary>
|
|||
/// 目标数量
|
|||
/// </summary>
|
|||
[Display(Name = "目标数量")] |
|||
public decimal ToQty { get; set; } |
|||
/// <summary>
|
|||
/// 目标库位
|
|||
/// </summary>
|
|||
[Display(Name = "目标库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string ToLocationCode { get; set; } |
|||
/// <summary>
|
|||
/// 目标物品代码
|
|||
/// </summary>
|
|||
[Display(Name = "目标物品代码")] |
|||
public string ToItemCode { get; set; } |
|||
|
|||
} |
@ -0,0 +1,30 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
namespace Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote; |
|||
|
|||
public class ItemTransformNoteExchangeDto |
|||
{ |
|||
/// <summary>
|
|||
/// 单据号
|
|||
/// </summary>
|
|||
public string Number { get; set; } |
|||
/// <summary>
|
|||
/// 生效日期
|
|||
/// </summary>
|
|||
public DateTime ActiveDate { get; set; } = DateTime.Now.Date; |
|||
/// <summary>
|
|||
/// 操作员
|
|||
/// </summary>
|
|||
public string Worker { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 类型
|
|||
/// </summary>
|
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细
|
|||
/// </summary>
|
|||
[Display(Name = "明细")] |
|||
public ItemTransformNoteDetailExchangeDto Detail { get; set; } = new(); |
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue