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
f18d95d4ce
  1. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs
  2. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Dicts/DTOs/DictDTO.cs
  3. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Dicts/Inputs/DictEditInput.cs
  4. 119
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Dicts/DictAppService.cs
  5. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Dicts/DictAutoMapperProfile.cs
  6. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAppService.cs
  7. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Dicts/Dict.cs
  8. 8
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SplitPackings/SplitPackingRecManager.cs
  9. 6
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/TransactionExtensions.cs
  10. 55
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs
  11. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs
  12. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs
  13. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs
  14. 108
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs
  15. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs
  16. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs
  17. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs
  18. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs
  19. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/PurchaseReceiptJobEventHandler.cs
  20. 18
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/DeliverNoteEventHandler.cs

2
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs

@ -149,7 +149,7 @@ public class AgentModule : AbpModule
public override void OnApplicationInitialization( public override void OnApplicationInitialization(
ApplicationInitializationContext context) ApplicationInitializationContext context)
{ {
//context.AddBackgroundWorkerAsync<IncomingToWmsWorker>(); context.AddBackgroundWorkerAsync<IncomingToWmsWorker>();
// context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>(); // context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>();
} }
} }

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Dicts/DTOs/DictDTO.cs

@ -30,5 +30,5 @@ public class DictDTO : SfsBaseDataDTOBase, IHasCode, IHasName
/// 字典项列表 /// 字典项列表
/// </summary> /// </summary>
[Display(Name = "字典项列表")] [Display(Name = "字典项列表")]
public virtual ICollection<DictItemDTO> Items { get; set; } = new List<DictItemDTO>(); public List<DictItemDTO> Items { get; set; } = new List<DictItemDTO>();
} }

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Dicts/Inputs/DictEditInput.cs

@ -24,7 +24,7 @@ public class DictEditInput : SfsBaseDataCreateOrUpdateInputBase
/// 字典项列表 /// 字典项列表
/// </summary> /// </summary>
[Display(Name = "字典项列表")] [Display(Name = "字典项列表")]
public virtual ICollection<DictItemInput> Items { get; set; } = new List<DictItemInput>(); public List<DictItemInput> Items { get; set; } = new List<DictItemInput>();
#endregion #endregion
#region Create #region Create

119
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Dicts/DictAppService.cs

@ -10,11 +10,18 @@ using Win_in.Sfs.Basedata.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application; namespace Win_in.Sfs.Basedata.Application;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Text;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Shared; using Win_in.Sfs.Shared;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
[Authorize] [Authorize]
[Route($"{BasedataConsts.RootPath}dict")] [Route($"{BasedataConsts.RootPath}dict")]
@ -81,4 +88,114 @@ public class DictAppService : SfsBaseDataWithCodeAppServiceBase<Dict, DictDTO, S
return ObjectMapper.Map<Dict, DictDTO>(entity); return ObjectMapper.Map<Dict, DictDTO>(entity);
} }
/// <summary>
/// 导入数据具体实现,可重写
/// </summary>
protected override async Task<SfsImportResult> ImportInternalAsync(SfsImportRequestInput requestInput, byte[] inputFileBytes)
{
IList<DictImportInput> modelList = null;
var modelDict = new Dictionary<DictImportInput, List<ValidationResult>>();
var entityDict = new Dictionary<Dict, EntityState>();
try
{
var hasDetails = typeof(Dict).GetInterfaces().Any(o => o.IsGenericType && o.GetGenericTypeDefinition() == typeof(IMasterEntity<>));
modelDict = ExportImportService.ImportHaveValidationResult<DictImportInput>(inputFileBytes);
foreach (var modelDictItem in modelDict)
{
// DataAnnotations 静态验证
var validationRresults = modelDictItem.Value;
var model = modelDictItem.Key;
Validator.TryValidateObject(model, new ValidationContext(model, null, null), validationRresults);
}
modelList = modelDict.Keys.ToList();
// 如果没有验证错误或允许部分导入
if (!modelDict.SelectMany(o => o.Value).Any() || requestInput.IsAllowPartImport)
{
var dictCodes = modelList.Select(p => p.Code).Distinct().ToList();
foreach (var detail in dictCodes)
{
var dictDetail = modelList.FirstOrDefault(p => p.Code == detail);
Dict dictItem = new Dict();
dictItem.SetId(GuidGenerator.Create());
dictItem.Code = dictDetail.Code;
dictItem.Name = dictDetail.Name;
dictItem.Description = dictDetail.Description;
foreach (var item in modelList.Where(p=>p.Code==detail))
{
DictItem dictItemDetail = new DictItem();
dictItemDetail.SetId(GuidGenerator.Create());
dictItemDetail.Code = item.Item_Code;
dictItemDetail.Name = item.Item_Name;
dictItemDetail.Value = item.Item_Value;
dictItemDetail.Description = item.Item_Description;
dictItemDetail.Enabled = true;
dictItemDetail.MasterId = dictItem.Id;
dictItem.Items.Add(dictItemDetail);
}
await _repository.InsertAsync(dictItem).ConfigureAwait(false);
}
}
// 创建导入报告
var reportFile = ExportImportService.GetImportReport(inputFileBytes, modelDict);
// 创建返回值
return new SfsImportResult
{
TotalNum = modelList.Count,
ErrorNum = modelDict.Count(o => o.Value.Any()),
FileName = reportFile.FileDownloadName,
FileContents = reportFile.FileContents
};
}
catch (Exception ex)
{
Console.WriteLine("---------------------------------");
Console.WriteLine($"####导入验证错误:");
Console.WriteLine($"{ex.Message}");
Console.WriteLine("---------------------------------");
Logger.LogException(ex);
if (modelList != null)
{
try
{
foreach (var item in modelDict)
{
var model = item.Key;
var validationRresults = item.Value;
validationRresults.Add(new ValidationResult($"无法添加,{ex.Message}", new string[] { "异常" }));
}
// 创建导入报告
var reportFile = ExportImportService.GetImportReport(inputFileBytes, modelDict);
return new SfsImportResult
{
TotalNum = modelList.Count,
ErrorNum = modelDict.Count(o => o.Value.Any()),
FileName = reportFile.FileDownloadName,
FileContents = reportFile.FileContents
};
}
catch (Exception)
{
return new SfsImportResult()
{
ExceptionMessage = ex.Message,
FileContents = Encoding.Default.GetBytes(ex.Message)
};
}
}
else
{
return new SfsImportResult()
{
ExceptionMessage = ex.Message,
FileContents = Encoding.Default.GetBytes(ex.Message)
};
}
}
}
} }

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Dicts/DictAutoMapperProfile.cs

@ -37,13 +37,12 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
.Ignore(x => x.Id); .Ignore(x => x.Id);
CreateMap<DictItemInput, DictItem>() CreateMap<DictItemInput, DictItem>()
.IgnoreAuditedObjectProperties() .IgnoreAuditedObjectProperties();
;
CreateMap<DictEditInput, Dict>() CreateMap<DictEditInput, Dict>()
.IgnoreAuditedObjectProperties() .IgnoreAuditedObjectProperties()
.Ignore(x => x.ConcurrencyStamp) .Ignore(x => x.Id)
.Ignore(x => x.Id); .Ignore(x => x.ConcurrencyStamp);
} }
} }

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAppService.cs

@ -124,6 +124,7 @@ public class SplitPackingRecAppService :
var lst = await Repository.GetListAsync(itm => itm.PurchaseInfo_PoNumber == entity.PurchaseInfo_PoNumber).ConfigureAwait(false); var lst = await Repository.GetListAsync(itm => itm.PurchaseInfo_PoNumber == entity.PurchaseInfo_PoNumber).ConfigureAwait(false);
ret = ObjectMapper.Map<List<SplitPackingRec>, List<SplitPackingRecDTO>>(lst); ret = ObjectMapper.Map<List<SplitPackingRec>, List<SplitPackingRecDTO>>(lst);
ret = ret.OrderByDescending(itm => itm.CreationTime).ToList();
return ret; return ret;
} }

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Dicts/Dict.cs

@ -31,5 +31,5 @@ public class Dict : SfsBaseDataAggregateRootBase, IHasCode
/// <summary> /// <summary>
/// 字典项列表 /// 字典项列表
/// </summary> /// </summary>
public virtual ICollection<DictItem> Items { get; set; } = new List<DictItem>(); public List<DictItem> Items { get; set; } = new List<DictItem>();
} }

8
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SplitPackings/SplitPackingRecManager.cs

@ -48,7 +48,7 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
} }
if (item.ToTopPackingCode.IsNullOrEmpty()) if (item.ToTopPackingCode.IsNullOrEmpty())
{ {
item.ToTopPackingCode = item.ToPackingCode; item.ToTopPackingCode = item.FromPackingCode;// ToPackingCode;
} }
} }
#endregion #endregion
@ -57,7 +57,7 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
{ {
//设置顶级箱码 //设置顶级箱码
item.FromTopPackingCode = GetTopPackingCode(query, item.FromPackingCode); item.FromTopPackingCode = GetTopPackingCode(query, item.FromPackingCode);
item.ToTopPackingCode = GetTopPackingCode(query, item.ToPackingCode); item.ToTopPackingCode = GetTopPackingCode(query, item.FromPackingCode); //ToPackingCode
if (item.FromTopPackingCode.IsNullOrEmpty()) if (item.FromTopPackingCode.IsNullOrEmpty())
{ {
item.FromTopPackingCode = item.FromPackingCode; item.FromTopPackingCode = item.FromPackingCode;
@ -77,8 +77,8 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
SplitPackingRec newObj = CommonHelper.CloneObj(item); SplitPackingRec newObj = CommonHelper.CloneObj(item);
newObj.SetId(GuidGenerator.Create()); newObj.SetId(GuidGenerator.Create());
newObj.OprType = OprTypeEnum.Other; newObj.OprType = OprTypeEnum.Other;
newObj.FromPackingCode = newObj.ToPackingCode; newObj.FromPackingCode = newObj.ToPackingCode; //克隆赋值
newObj.FromTopPackingCode = newObj.ToTopPackingCode; newObj.FromTopPackingCode = newObj.ToTopPackingCode; //克隆赋值
newObj.FromStdPackQty = newObj.ToStdPackQty; newObj.FromStdPackQty = newObj.ToStdPackQty;
newObj.FromUom = newObj.ToUom; newObj.FromUom = newObj.ToUom;
newObj.FromQty = newObj.ToQty; newObj.FromQty = newObj.ToQty;

6
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/TransactionExtensions.cs

@ -30,12 +30,16 @@ public static class TransactionExtensions
{ {
if (!location.EnableNegative) if (!location.EnableNegative)
{ {
if (existQty != 0)
{
existQty = -transaction.Qty+ existQty;
}
throw new UserFriendlyException($"{location.Code} 库位不允许负库存。{Environment.NewLine}" + throw new UserFriendlyException($"{location.Code} 库位不允许负库存。{Environment.NewLine}" +
$"箱码: {transaction.PackingCode}{Environment.NewLine}" + $"箱码: {transaction.PackingCode}{Environment.NewLine}" +
$"ERP料号: {transaction.ItemCode}{Environment.NewLine}" + $"ERP料号: {transaction.ItemCode}{Environment.NewLine}" +
$"批次: {transaction.Lot}{Environment.NewLine}" + $"批次: {transaction.Lot}{Environment.NewLine}" +
$"状态: {transaction.Status}{Environment.NewLine}" + $"状态: {transaction.Status}{Environment.NewLine}" +
$"出库数量 {transaction.Qty}{Environment.NewLine}" + $"出库数量 {-transaction.Qty}{Environment.NewLine}" +
$"库存余额数量 {existQty}"); $"库存余额数量 {existQty}");
} }

55
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs

@ -1,16 +1,32 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
[Display(Name = "发货申请")] [Display(Name = "发货申请")]
public class DeliverRequestImportInput : SfsStoreImportInputBase public class DeliverRequestImportInput : SfsStoreImportInputBase
{ {
/// <summary>
/// 单据号
/// </summary>
[Display(Name = "单据号")]
[Required]
[Key]
public string Number { get; set; }
/// <summary>
/// 发货类型
/// </summary>
[Display(Name = "发货类型")]
[Required]
[Key]
public EnumDeliverRequestType DeliverRequestType { get; set; }
/// <summary> /// <summary>
/// 发货时间 /// 发货时间
/// </summary> /// </summary>
[Display(Name = "发货时间")] [Display(Name = "发货时间")]
[Required] [Required]
[Key]
public DateTime DeliverTime { get; set; } public DateTime DeliverTime { get; set; }
/// <summary> /// <summary>
@ -18,6 +34,7 @@ public class DeliverRequestImportInput : SfsStoreImportInputBase
/// </summary> /// </summary>
[Display(Name = "客户")] [Display(Name = "客户")]
[Required] [Required]
[Key]
public string CustomerCode { get; set; } public string CustomerCode { get; set; }
/// <summary> /// <summary>
@ -62,11 +79,11 @@ public class DeliverRequestImportInput : SfsStoreImportInputBase
public class DeliverRequestFisImportInput : SfsStoreImportInputBase public class DeliverRequestFisImportInput : SfsStoreImportInputBase
{ {
/// <summary> /// <summary>
/// 发货时间 /// 发货类型
/// </summary> /// </summary>
[Display(Name = "发货时间")] [Display(Name = "发货类型")]
[Required] [Required]
public DateTime DeliverTime { get; set; } public EnumDeliverRequestType DeliverRequestType { get; set; }
/// <summary> /// <summary>
/// 客户 /// 客户
@ -74,7 +91,12 @@ public class DeliverRequestFisImportInput : SfsStoreImportInputBase
[Display(Name = "客户")] [Display(Name = "客户")]
[Required] [Required]
public string CustomerCode { get; set; } public string CustomerCode { get; set; }
/// <summary>
/// 发货时间
/// </summary>
[Display(Name = "发货时间")]
[Required]
public DateTime DeliverTime { get; set; }
/// <summary> /// <summary>
/// ERP料号 /// ERP料号
/// </summary> /// </summary>
@ -95,18 +117,19 @@ public class DeliverRequestFisImportInput : SfsStoreImportInputBase
[Display(Name = "发货库区")] [Display(Name = "发货库区")]
[Required] [Required]
public string AreaCode { get; set; } public string AreaCode { get; set; }
/// <summary> /// <summary>
/// 起始底盘 /// Mes发货单
/// </summary> /// </summary>
[Display(Name = "订单号")] [Display(Name = "Mes发货单号")]
[Required] public string MesDeliveryNo { get; set; }
public string FromVinCode { get; set; } /// <summary>
/// Mes发货计划号
///// <summary> /// </summary>
///// 截止底盘号 [Display(Name = "Mes发货计划号")]
///// </summary> public string MesDeliveryPlan { get; set; }
//[Display(Name = "截止底盘号")] /// <summary>
//[Required] /// 底盘号
//public string ToVinCode { get; set; } /// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
} }

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs

@ -54,6 +54,8 @@ public class InspectJobAppService
[HttpPost("complete-summary-detail-status/{id}")] [HttpPost("complete-summary-detail-status/{id}")]
public virtual async Task<InspectJobSummaryDetailDTO> CompleteSummaryDetailStatusAsync(Guid id, public virtual async Task<InspectJobSummaryDetailDTO> CompleteSummaryDetailStatusAsync(Guid id,
Guid summaryDetailId, InspectJobCompleteSummaryDetailInput input) Guid summaryDetailId, InspectJobCompleteSummaryDetailInput input)
{
try
{ {
if (input.FilesList != null && input.FilesList.Any()) if (input.FilesList != null && input.FilesList.Any())
{ {
@ -68,6 +70,13 @@ public class InspectJobAppService
return ObjectMapper.Map<InspectJobSummaryDetail, InspectJobSummaryDetailDTO>(entity); return ObjectMapper.Map<InspectJobSummaryDetail, InspectJobSummaryDetailDTO>(entity);
} }
catch (Exception ex)
{
throw new UserFriendlyException($"{ex.Message}");
}
}
/// <summary> /// <summary>
/// 【设置】 详情为【合格】 /// 【设置】 详情为【合格】

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

@ -32,6 +32,7 @@ public class PutawayNoteAppService :
public readonly IPurchaseOrderManager _purchaseOrderManager; public readonly IPurchaseOrderManager _purchaseOrderManager;
public readonly IPurchasePriceSheetAppService _purchasePriceSheetAppService; public readonly IPurchasePriceSheetAppService _purchasePriceSheetAppService;
public readonly IErpLocationItemAppService _erpLocationItemAppService; public readonly IErpLocationItemAppService _erpLocationItemAppService;
public readonly IItemBasicAppService _itemBasicAppService;
public PutawayNoteAppService( public PutawayNoteAppService(
IPutawayNoteRepository repository, IPutawayNoteRepository repository,
@ -40,7 +41,8 @@ public class PutawayNoteAppService :
IInspectJobAppService inspectJobAppService, IInspectJobAppService inspectJobAppService,
IPurchaseOrderManager purchaseOrderManager, IPurchaseOrderManager purchaseOrderManager,
IPurchasePriceSheetAppService purchasePriceSheetAppService, IPurchasePriceSheetAppService purchasePriceSheetAppService,
IErpLocationItemAppService erpLocationItemAppService) : base(repository) IErpLocationItemAppService erpLocationItemAppService,
IItemBasicAppService itemBasicAppService) : base(repository)
{ {
_putawayNoteManager = putawayNoteManager; _putawayNoteManager = putawayNoteManager;
_purchaseReceiptNoteAppService = purchaseReceiptNoteAppService; _purchaseReceiptNoteAppService = purchaseReceiptNoteAppService;
@ -48,6 +50,7 @@ public class PutawayNoteAppService :
_purchaseOrderManager = purchaseOrderManager; _purchaseOrderManager = purchaseOrderManager;
_purchasePriceSheetAppService = purchasePriceSheetAppService; _purchasePriceSheetAppService = purchasePriceSheetAppService;
_erpLocationItemAppService = erpLocationItemAppService; _erpLocationItemAppService = erpLocationItemAppService;
_itemBasicAppService = itemBasicAppService;
} }
/// <summary> /// <summary>
@ -66,11 +69,15 @@ public class PutawayNoteAppService :
{ {
throw new UserFriendlyException($"物品名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上架!"); throw new UserFriendlyException($"物品名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上架!");
} }
var item = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
if (!item.CanMake)
{
var isprice = await _purchasePriceSheetAppService.CheckPurPriceAsync(input.SupplierCode, detail.ItemCode).ConfigureAwait(false); var isprice = await _purchasePriceSheetAppService.CheckPurPriceAsync(input.SupplierCode, detail.ItemCode).ConfigureAwait(false);
if (isprice) if (isprice)
{ {
throw new UserFriendlyException($"供应商【{input.SupplierCode}】物品名称【{detail.ItemCode}】无采购价格无法执行采购上架!"); throw new UserFriendlyException($"供应商【{input.SupplierCode}】物品名称【{detail.ItemCode}】无采购价格无法执行采购上架!");
} }
}
var erpLocationItem = await _erpLocationItemAppService.CheckItemErpLocationIsAvailable(detail.ItemCode, detail.ToLocationErpCode).ConfigureAwait(false); var erpLocationItem = await _erpLocationItemAppService.CheckItemErpLocationIsAvailable(detail.ItemCode, detail.ToLocationErpCode).ConfigureAwait(false);
if (erpLocationItem == null) if (erpLocationItem == null)

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs

@ -78,7 +78,7 @@ public class ContainerRequestAppService :
/// <returns></returns> /// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(ContainerRequestEditInput entity) private async Task SetRequestAutoPropertiesAsync(ContainerRequestEditInput entity)
{ {
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false); var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.TransferLib, EnumTransSubType.Transfer_Warehouse).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在"); Check.NotNull(tranType, "事务类型", "事务类型不存在");

108
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs

@ -10,8 +10,10 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.ObjectMapping; using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
@ -34,18 +36,122 @@ public class DeliverRequestAppService :
private readonly IAreaAppService _areaApp; private readonly IAreaAppService _areaApp;
private readonly ICustomerAppService _customerApp; private readonly ICustomerAppService _customerApp;
private readonly ICustomerAddressAppService _customerAddressApp; private readonly ICustomerAddressAppService _customerAddressApp;
private readonly IItemBasicAppService _itemBasicAppService;
public DeliverRequestAppService( public DeliverRequestAppService(
IDeliverRequestRepository repository IDeliverRequestRepository repository
, IDeliverRequestManager deliverRequestManager , IDeliverRequestManager deliverRequestManager
, IAreaAppService areaApp , IAreaAppService areaApp
, ICustomerAppService customerApp , ICustomerAppService customerApp
, ICustomerAddressAppService customerAddressApp) , ICustomerAddressAppService customerAddressApp,
IItemBasicAppService itemBasicAppService)
: base(repository, deliverRequestManager) : base(repository, deliverRequestManager)
{ {
_deliverRequestManager = deliverRequestManager; _deliverRequestManager = deliverRequestManager;
_areaApp = areaApp; _areaApp = areaApp;
_customerApp = customerApp; _customerApp = customerApp;
_customerAddressApp = customerAddressApp; _customerAddressApp = customerAddressApp;
_itemBasicAppService = itemBasicAppService;
}
protected override async Task<Dictionary<DeliverRequest, EntityState>> ImportProcessingEntityAsync(Dictionary<DeliverRequest, EntityState> dictionary)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var request in addList)
{
request.Worker = CurrentUser.GetUserName();
request.CreatorId = CurrentUser.Id;
request.Remark = "成品发运手动导入";
request.ActiveDate = DateTime.Now;
await SetRequestAutoPropertiesAsync(request).ConfigureAwait(false);
var detailGroupCount= request.Details.GroupBy(r => new { r.AreaCode, r.MesDeliveryNo, r.MesDeliveryPlan }).Count();
if (detailGroupCount != 1)
{
throw new UserFriendlyException($"同一发货类型、发货时间、客户的发货区域、Mes发货单号、Mes发货计划号必须相同!");
}
if (request.Details.Count != request.Details.Select(r => r.ItemCode).Distinct().Count())
{
throw new UserFriendlyException($"同一发货类型、发货时间、客户的存在相同零件号!");
}
foreach (var detail in request.Details)
{
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detail.ItemCode);
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
}
}
return dictionary;
}
protected override async Task SaveImportAsync(Dictionary<DeliverRequest, EntityState> dict)
{
var addList = dict.Where(p => p.Value == EntityState.Added).Select(p => p.Key).ToList();
foreach (var item in addList)
{
await SetRequestAutoPropertiesAsync(item).ConfigureAwait(false);
}
await _deliverRequestManager.CreateManyAsync(addList).ConfigureAwait(false);
}
private static void CheckItemBasic(ItemBasicDTO itemcBasicDto, string itemCode)
{
if (itemcBasicDto == null)
{
throw new UserFriendlyException($"ERP料号为【{itemCode}】不存在");
}
}
/// <summary>
/// 验证
/// </summary>
/// <param name="model"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
protected override async Task ValidateImportModelAsync(DeliverRequestImportInput model, List<ValidationResult> validationRresult)
{
if (model.DeliverRequestType == EnumDeliverRequestType.FIS)
{
if (string.IsNullOrEmpty(model.IdentityNo))
{
validationRresult.Add(new ValidationResult($"ERP料号{model.ItemCode}为FIS发货必须填写底盘号", new string[] { "底盘号" }));
}
if (string.IsNullOrEmpty(model.MesDeliveryNo))
{
validationRresult.Add(new ValidationResult($"ERP料号{model.ItemCode}为FIS发货必须填写MES发货单号", new string[] { "MES发货单号" }));
}
if (!string.IsNullOrEmpty(model.MesDeliveryPlan))
{
validationRresult.Add(new ValidationResult($"ERP料号{model.ItemCode}为FIS发货MES发货计划单号应该为空", new string[] { "MES发货计划单号" }));
}
}
if (model.DeliverRequestType == EnumDeliverRequestType.Normal )
{
if (string.IsNullOrEmpty(model.MesDeliveryPlan))
{
validationRresult.Add(new ValidationResult($"ERP料号{model.ItemCode}为看板发货必须填写MES发货计划单号", new string[] { "MES发货计划单号" }));
}
if(!string.IsNullOrEmpty(model.IdentityNo)|| !string.IsNullOrEmpty(model.MesDeliveryNo))
{
validationRresult.Add(new ValidationResult($"ERP料号{model.ItemCode}为看板发货底盘号和MES发货单号应该为空", new string[] { "底盘号" , "MES发货单号" }));
}
}
var area = await _areaApp.GetByCodeAsync(model.AreaCode).ConfigureAwait(false);
if (area != null)
{
if (!area.Name.Contains("成品"))//因为区域里没有类型,只能用名称判断
{
validationRresult.Add(new ValidationResult($"发货区域{model.AreaCode}不是成品储位", new string[] { "发货区域" }));
}
}
else
{
validationRresult.Add(new ValidationResult($"发货区域{model.AreaCode}不存在", new string[] { "发货区域" }));
}
await Task.CompletedTask.ConfigureAwait(false);
} }
/// <summary> /// <summary>
/// 处理请求 /// 处理请求

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs

@ -29,7 +29,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<DeliverRequestImportInput, DeliverRequest>() CreateMap<DeliverRequestImportInput, DeliverRequest>()
.ForMember(x => x.DeliverRequestType, y => y.MapFrom(t => EnumDeliverRequestType.Normal)) // .ForMember(x => x.DeliverRequestType, y => y.MapFrom(t => EnumDeliverRequestType.Normal))
.Ignore(x => x.CustomerAddressCode) .Ignore(x => x.CustomerAddressCode)
.Ignore(x => x.DeliverPlanNumber) .Ignore(x => x.DeliverPlanNumber)
.Ignore(x => x.ActiveDate) .Ignore(x => x.ActiveDate)
@ -62,7 +62,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.Remark); .Ignore(x => x.Remark);
CreateMap<DeliverRequestFisImportInput, DeliverRequest>() CreateMap<DeliverRequestFisImportInput, DeliverRequest>()
.ForMember(x => x.DeliverRequestType, y => y.MapFrom(t => EnumDeliverRequestType.FIS)) // .ForMember(x => x.DeliverRequestType, y => y.MapFrom(t => EnumDeliverRequestType.FIS))
.Ignore(x => x.CustomerAddressCode) .Ignore(x => x.CustomerAddressCode)
.Ignore(x => x.DeliverPlanNumber) .Ignore(x => x.DeliverPlanNumber)
.Ignore(x => x.ActiveDate) .Ignore(x => x.ActiveDate)
@ -96,7 +96,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.IdentityNo) .Ignore(x => x.IdentityNo)
.Ignore(x => x.MesDeliveryNo) .Ignore(x => x.MesDeliveryNo)
.Ignore(x => x.MesDeliveryPlan) .Ignore(x => x.MesDeliveryPlan)
.AfterMap((x, y) => y.SetProperty(nameof(x.FromVinCode), x.FromVinCode)) // .AfterMap((x, y) => y.SetProperty(nameof(x.FromVinCode), x.FromVinCode))
//.AfterMap((x, y) => y.SetProperty(nameof(x.ToVinCode), x.ToVinCode)) //.AfterMap((x, y) => y.SetProperty(nameof(x.ToVinCode), x.ToVinCode))
; ;
} }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs

@ -397,7 +397,7 @@ public class DeliverRequestFisAppService :
{ {
await Task.CompletedTask.ConfigureAwait(false); await Task.CompletedTask.ConfigureAwait(false);
detail.SetProperty(nameof(input.FromVinCode), input.FromVinCode); // detail.SetProperty(nameof(input.FromVinCode), input.FromVinCode);
//detail.SetProperty(nameof(input.ToVinCode), input.ToVinCode); //detail.SetProperty(nameof(input.ToVinCode), input.ToVinCode);
} }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs

@ -197,7 +197,7 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
#endregion #endregion
await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData<InspectJob>(CopyJob)) await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData<InspectJob>(CopyJob),false)
.ConfigureAwait(false); .ConfigureAwait(false);
return summaryDetailEntity; return summaryDetailEntity;

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

@ -80,7 +80,6 @@ public partial class StoreEventAutoMapperProfile : Profile
.Ignore(x => x.DeliveryQty) .Ignore(x => x.DeliveryQty)
.Ignore(x => x.Status) .Ignore(x => x.Status)
.Ignore(x => x.RecommendContainerCode) .Ignore(x => x.RecommendContainerCode)
.Ignore(x => x.StdPackQty)
.Ignore(x => x.RecommendPackingCode) .Ignore(x => x.RecommendPackingCode)
.Ignore(x => x.HandledContainerCode) .Ignore(x => x.HandledContainerCode)
.Ignore(x => x.HandledPackingCode) .Ignore(x => x.HandledPackingCode)

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/PurchaseReceiptJobEventHandler.cs

@ -68,6 +68,12 @@ public class PurchaseReceiptJobEventHandler :
createInput.Details.Where(p => p.PurchaseReceiptInspectStatus == EnumPurchaseReceiptInspect.NOK); createInput.Details.Where(p => p.PurchaseReceiptInspectStatus == EnumPurchaseReceiptInspect.NOK);
foreach (var detailInput in noOkNoteDetailInputs) foreach (var detailInput in noOkNoteDetailInputs)
{ {
detailInput.LocationCode = holdLocation.Code;
detailInput.LocationArea = holdLocation.AreaCode;
detailInput.LocationErpCode = holdLocation.ErpLocationCode;
detailInput.LocationGroup = holdLocation.LocationGroupCode;
detailInput.WarehouseCode = holdLocation.WarehouseCode;
detailInput.HandledToLocationCode = holdLocation.Code;
detailInput.HandledToLocationArea = holdLocation.AreaCode; detailInput.HandledToLocationArea = holdLocation.AreaCode;
detailInput.HandledToLocationErpCode = holdLocation.ErpLocationCode; detailInput.HandledToLocationErpCode = holdLocation.ErpLocationCode;
detailInput.HandledToLocationGroup = holdLocation.LocationGroupCode; detailInput.HandledToLocationGroup = holdLocation.LocationGroupCode;

18
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/DeliverNoteEventHandler.cs

@ -20,6 +20,7 @@ namespace Win_in.Sfs.Wms.Store.Event.Transactions;
public class DeliverNoteEventHandler public class DeliverNoteEventHandler
: StoreInventoryEventHandlerBase : StoreInventoryEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<DeliverNote>> , ILocalEventHandler<SfsCreatedEntityEventData<DeliverNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<DeliverNote>>>
{ {
private const EnumTransType TransType = EnumTransType.Deliver; private const EnumTransType TransType = EnumTransType.Deliver;
private readonly IDeliverRequestAppService _deliverRequestApp; private readonly IDeliverRequestAppService _deliverRequestApp;
@ -49,7 +50,24 @@ public class DeliverNoteEventHandler
await SetRequestStatusAsync(entity).ConfigureAwait(false); await SetRequestStatusAsync(entity).ConfigureAwait(false);
} }
/// <summary>
/// 创建后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<DeliverNote>> eventDatas)
{
var entitys = eventDatas.Entity;
var transferLogs = new List<TransferLogEditInput>();
foreach (var entity in entitys)
{
transferLogs.AddRange(BuildTransferLogs(entity));
await SetRequestStatusAsync(entity).ConfigureAwait(false);
}
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
}
#region 私有 #region 私有
private async Task AddTransactionsAsync(DeliverNote deliverNote) private async Task AddTransactionsAsync(DeliverNote deliverNote)

Loading…
Cancel
Save