Browse Source

采购上架bug修改

dev_DY_CC
lvzb 12 months ago
parent
commit
01aa3e231e
  1. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemReader.cs
  2. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs
  3. 1
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs
  4. 31
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs
  5. 1
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Statuses/EnumOrderStatus.cs
  6. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs
  7. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs
  8. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs
  9. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Balance/BalanceAclService.cs
  10. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Balance/IBalanceAclService.cs
  11. 23
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Plans/CountPlans/CountPlanManager.cs
  12. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/CountJobEventHandler.cs
  13. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CountAdjustRequestEventHandler.cs
  14. 47
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CountPlanEventHandler.cs

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemReader.cs

@ -43,7 +43,7 @@ public class ErpLocationItemReader : IReader
var toBeProcessedIssue = await _ilocdoutManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedIssue.Any())
{
_logger.LogInformation("未读到EOS开账数据");
_logger.LogInformation("未读到Tyrp开账数据");
return new List<IncomingFromExternal>();
}
//locdout逐一转换为locdout

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs

@ -48,6 +48,7 @@ public class PurchasePriceSheetAppService : SfsBaseDataAppServiceBase<PurchasePr
[HttpPost("check-purprice")]
public virtual async Task<bool> CheckPurPriceAsync( string supplierCode, string itemCode)
{
var aaaa= await _repository.GetListAsync().ConfigureAwait(false);
bool result = false;
var entitys = await _repository.GetListAsync(p => p.SupplierCode == supplierCode && p.ItemCode == itemCode).ConfigureAwait(false);
if (entitys.Count == 0) result = true;

1
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs

@ -176,4 +176,5 @@ public interface IBalanceAppService
Task<BalanceDTO> GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync(string packingCode,
string itemCode, string locationCode, EnumInventoryStatus status,string lot);
Task<List<BalanceDTO>> GetRecommendBalancesByLocationsExpectOldBalancesAsync(RecommendBalanceRequestInput input);
Task CountPlanActiveAsync(string packingCode, string itemCode, string lot, string locationCode, EnumInventoryStatus status, DateTime datetime, string countPlanNumber);
}

31
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs

@ -301,7 +301,36 @@ public class BalanceAppService
await _repository.UpdateAsync(entity).ConfigureAwait(false);
}
}
/// <summary>
/// 设置为可用 根据 库位 零件 箱码 批次 状态
/// </summary>
/// <param name="packingCode"></param>
/// <param name="itemCode"></param>
/// <param name="lot"></param>
/// <param name="locationCode"></param>
/// <param name="status"></param>
/// <returns></returns>
[HttpPost("countplan-active")]
public virtual async Task CountPlanActiveAsync(string packingCode,
string itemCode,
string lot,
string locationCode,
EnumInventoryStatus status,DateTime datetime,string countPlanNumber)
{
var entity = await _repository.FirstOrDefaultAsync(p =>
p.ItemCode == itemCode
&& p.Lot == lot
&& p.LocationCode == locationCode
&& p.PackingCode == packingCode
&& p.Status == status
&& p.LastCountTime==datetime
&& p.LastCountPlanNumber== countPlanNumber).ConfigureAwait(false);
if (entity != null)
{
await entity.ActiveAsync().ConfigureAwait(false);
await _repository.UpdateAsync(entity).ConfigureAwait(false);
}
}
#endregion Update
#region Get

1
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Statuses/EnumOrderStatus.cs

@ -13,5 +13,6 @@ public enum EnumOrderStatus
/// <summary>
/// 开放
/// </summary>
[Display(Name = "开放")]
Open = 1,
}

17
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs

@ -31,6 +31,7 @@ public class PutawayNoteAppService :
public readonly IInspectJobAppService _inspectJobAppService;
public readonly IPurchaseOrderManager _purchaseOrderManager;
public readonly IPurchasePriceSheetAppService _purchasePriceSheetAppService;
public readonly IErpLocationItemAppService _erpLocationItemAppService;
public PutawayNoteAppService(
IPutawayNoteRepository repository,
@ -38,13 +39,15 @@ public class PutawayNoteAppService :
IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService,
IInspectJobAppService inspectJobAppService,
IPurchaseOrderManager purchaseOrderManager,
IPurchasePriceSheetAppService purchasePriceSheetAppService ) : base(repository)
IPurchasePriceSheetAppService purchasePriceSheetAppService,
IErpLocationItemAppService erpLocationItemAppService) : base(repository)
{
_putawayNoteManager = putawayNoteManager;
_purchaseReceiptNoteAppService = purchaseReceiptNoteAppService;
_inspectJobAppService = inspectJobAppService;
_purchaseOrderManager = purchaseOrderManager;
_purchasePriceSheetAppService = purchasePriceSheetAppService;
_erpLocationItemAppService= erpLocationItemAppService;
}
/// <summary>
@ -58,8 +61,6 @@ public class PutawayNoteAppService :
{
foreach (var detail in input.Details)
{
try
{
var isClosed = await _purchaseOrderManager.CheckIsCloseAsync(input.Number,input.SupplierCode, detail.ItemCode).ConfigureAwait(false);
if (isClosed)
{
@ -70,6 +71,12 @@ public class PutawayNoteAppService :
{
throw new UserFriendlyException($"供应商【{input.SupplierCode}】零件名称【{detail.ItemCode}】无采购价格无法执行采购上架!");
}
var erpLocationItem = await _erpLocationItemAppService.CheckItemErpLocationIsAvailable(detail.ItemCode, detail.ToLocationErpCode).ConfigureAwait(false);
if (erpLocationItem == null)
{
throw new UserFriendlyException($"未找到零件【{detail.ItemCode}】与ERP储位【{detail.ToLocationErpCode}】的开账信息");
}
var purchasereDetail = await _purchaseReceiptNoteAppService
.GetDetailByItemAndPackingAsync(detail.ItemCode, detail.ToPackingCode).ConfigureAwait(false);
if (purchasereDetail != null)
@ -81,10 +88,6 @@ public class PutawayNoteAppService :
throw new UserFriendlyException($"包含【{detail.ToPackingCode}】箱码的报检单,尚未完成质检");
}
}
}
catch (Exception ex)
{
}
}
var entity = ObjectMapper.Map<PutawayNoteEditInput, PutawayNote>(input);

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs

@ -95,9 +95,13 @@ public class PurchaseOrderAppService :
purchaseOrder.SupplierCode = supplierDto.Code;
purchaseOrder.SupplierAddress = supplierDto.Address;
purchaseOrder.SupplierName = supplierDto.Name;
if (purchaseOrder.OrderStatus == EnumOrderStatus.Close)
{
throw new UserFriendlyException($"不允许导入关闭订单状态的订单");
}
foreach (var detail in purchaseOrder.Details)
{
detail.LineStatus = EnumOrderStatus.Open;
var itemBasicDto = itemBasicDtos.First(p => p.Code == detail.ItemCode);
detail.ItemName = itemBasicDto.Name;

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs

@ -50,7 +50,6 @@ public class CountPlanAppService :
base.CreatePolicyName = CountPlanPermissions.Create;
base.UpdatePolicyName = CountPlanPermissions.Update;
base.DeletePolicyName = CountPlanPermissions.Delete;
}
/// <summary>

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Balance/BalanceAclService.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Shared;
@ -32,7 +33,11 @@ public class BalanceAclService
{
await _appService.ActiveAsync(packingCode, itemCode, lot, locationCode, status).ConfigureAwait(false);
}
public virtual async Task CountPlanActiveAsync(string packingCode, string itemCode, string lot, string locationCode,
EnumInventoryStatus status, DateTime dateTime, string countPlanNumber)
{
await _appService.CountPlanActiveAsync(packingCode, itemCode, lot, locationCode, status, dateTime,countPlanNumber).ConfigureAwait(false);
}
public virtual async Task InactiveAsync(string packingCode, string itemCode, string lot, string locationCode,
EnumInventoryStatus status)
{

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Balance/IBalanceAclService.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@ -16,5 +17,6 @@ namespace Win_in.Sfs.Wms.Store.Domain.Acl.Balance
Task<BalanceDTO> GetByItemLocationAndPackingAsync(string packingCode, string itemCode, string locationCode);
Task<BalanceDTO> GetByPackingCodeAsync(string packingCode);
Task<List<BalanceDTO>> GetListByPackingCodesAsync(List<string> packingCodes);
Task CountPlanActiveAsync(string packingCode, string itemCode, string lot, string locationCode, EnumInventoryStatus status,DateTime dateTime,string countPlanNumber);
}
}

23
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Plans/CountPlans/CountPlanManager.cs

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office2013.Word;
using Microsoft.Extensions.Logging;
using Volo.Abp;
using Win_in.Sfs.Basedata.Application.Contracts;
@ -15,13 +16,15 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class CountPlanManager : SfsStoreRequestManagerBase<CountPlan, CountPlanDetail>, ICountPlanManager
{
private readonly ICountPlanRepository _repository;
private readonly ICountJobRepository _jobRepository;
public CountPlanManager(
ICountPlanRepository repository
ICountPlanRepository repository,
ICountJobRepository jobRepository
)
: base(repository)
{
_repository = repository;
_jobRepository = jobRepository;
}
/// <summary>
@ -278,7 +281,16 @@ public class CountPlanManager : SfsStoreRequestManagerBase<CountPlan, CountPlanD
//}
public virtual async Task CompleteAsync(Guid id, EnumCountPlanCompleteType type)
{
var entity = await Repository.GetAsync(id).ConfigureAwait(false);
var jobs = await _jobRepository.GetListAsync(p=>p.JobStatus == EnumJobStatus.Doing && p.CountPlanNumber == entity.Number && p.InventoryStage == entity.InventoryStage, true).ConfigureAwait(false);
var josbdeatils = jobs.SelectMany(r => r.DepDetails);
var groups = josbdeatils.GroupBy(r => r.PackingCode).Where(g => g.Count() > 1&&!string.IsNullOrEmpty(g.Key)).Select(g => g.Key);
if (groups.Any())
{
var mesagge= groups.JoinAsString(",");
throw new UserFriendlyException($"盘点计划 中箱码存在重复请检查后完成重复箱码为【{mesagge}】!");
}
entity.EndTime = DateTime.Now;
Check.NotNull(entity, EntityClassName);
entity.SetDetails(type);
@ -296,6 +308,8 @@ public class CountPlanManager : SfsStoreRequestManagerBase<CountPlan, CountPlanD
entity.InventoryStage++;
entity.Details.ForEach(p=>
{
p.FirstCountQty = 0;
p.FinalCountQty = 0;
p.DetailStatus = EnumCountStatus.New;
});
}
@ -349,7 +363,10 @@ public class CountPlanManager : SfsStoreRequestManagerBase<CountPlan, CountPlanD
entity.AddDetail(entityDetail);
entityDetail.FinalCountQty = planDetail.FinalCountQty; //赋值终盘数量
entityDetail.DetailStatus = EnumCountStatus.Completed; //赋值明细状态已完成
if (entityDetail.FinalCountQty != 0)
{
entityDetail.DetailStatus = EnumCountStatus.Completed; //赋值明细状态已完成
}
}
await Repository.UpdateAsync(entity).ConfigureAwait(false);

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/CountJobEventHandler.cs

@ -59,10 +59,10 @@ public class CountJobEventHandler :
foreach (var detail in countPlanUpdateInput.Details)
{
if (detail.FinalCountQty != 0)
{
detail.DetailStatus = EnumCountStatus.Completed;
}
//if (detail.FinalCountQty != 0)
//{
// detail.DetailStatus = EnumCountStatus.Completed;
//}
await TrySetDetailPropertiesAsync(detail).ConfigureAwait(false);
}

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CountAdjustRequestEventHandler.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.EventBus;
@ -81,7 +82,7 @@ public class CountAdjustRequestEventHandler
//解冻盘平库存
foreach (var detail in entity.Details)
{
await BalanceAclService.ActiveAsync(detail.PackingCode, detail.ItemCode, detail.Lot, detail.LocationCode, detail.Status).ConfigureAwait(false);
await BalanceAclService.CountPlanActiveAsync(detail.PackingCode, detail.ItemCode, detail.Lot, detail.LocationCode, detail.Status,DateTime.Now,entity.CountPlanNumber).ConfigureAwait(false);
}
}

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

@ -93,21 +93,27 @@ public class CountPlanEventHandler
var entity = eventData.Entity;
await ThawEqualBalancesAsync(entity).ConfigureAwait(false);
var jobs= await _countJobAppService.GetCountJobDependentDetailByPlanNumber(entity.Number,entity.InventoryStage).ConfigureAwait(false);
//var jobs= await _countJobAppService.GetCountJobDependentDetailByPlanNumber(entity.Number,entity.InventoryStage).ConfigureAwait(false);
//创建盘点记录
List<CountNote> notes = new List<CountNote>();
foreach (var job in jobs)
{
var countNote = ObjectMapper.Map<CountJob, CountNote>(job);
countNote.EndTime = DateTime.Now;
notes.Add(countNote);
}
if (notes.Count > 0)
//List<CountNote> notes = new List<CountNote>();
//foreach (var job in jobs)
//{
// var countNote = ObjectMapper.Map<CountJob, CountNote>(job);
// countNote.EndTime = DateTime.Now;
// notes.Add(countNote);
//}
//if (notes.Count > 0)
//{
// await _countNoteManager.CreateManyAsync(notes).ConfigureAwait(false);
//}
//创建盘点记录
var countNote = BuildCountNote(entity);
if (countNote.Details.Count > 0)
{
await _countNoteManager.CreateManyAsync(notes).ConfigureAwait(false);
await _countNoteManager.CreateAsync(countNote).ConfigureAwait(false);
}
await _countJobAppService.CloseByCountPlanAsync(entity.Number).ConfigureAwait(false);
}
@ -133,6 +139,23 @@ public class CountPlanEventHandler
countNote.DepDetails.AddRange(depDetails);
return countNote;
}
/// <summary>
/// 赋值盘点差异调整记录主表
/// </summary>
/// <param name="countPlan"></param>
/// <returns></returns>
private CountNote BuildCountNote(CountPlan countPlan)
{
var countNote = ObjectMapper.Map<CountPlan, CountNote>(countPlan);
countNote.Details = new List<CountNoteDetail>();
foreach (var countPlanDetail in countPlan.Details.Where(p => p.DetailStatus == EnumCountStatus.Completed))
{
var countNoteDetail = ObjectMapper.Map<CountPlanDetail, CountNoteDetail>(countPlanDetail);
countNote.Details.Add(countNoteDetail);
}
return countNote;
}
/// <summary>
/// 创建盘点任务
@ -239,7 +262,7 @@ public class CountPlanEventHandler
foreach (var detail in entity.Details.Where(p => p.FinalCountQty == p.InventoryQty
|| p.DetailStatus != EnumCountStatus.Completed))
{
await BalanceAclService.ActiveAsync(detail.PackingCode, detail.ItemCode, detail.Lot, detail.LocationCode, detail.Status).ConfigureAwait(false);
await BalanceAclService.CountPlanActiveAsync(detail.PackingCode, detail.ItemCode, detail.Lot, detail.LocationCode, detail.Status,DateTime.Now,entity.Number).ConfigureAwait(false);
}
}

Loading…
Cancel
Save