Browse Source

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

dev_DY_CC
郑勃旭 11 months 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. 9
      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. 2
      be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs
  11. 55
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs
  12. 27
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs
  13. 49
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs
  14. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs
  15. 108
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs
  16. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs
  17. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs
  18. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs
  19. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs
  20. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/PurchaseReceiptJobEventHandler.cs
  21. 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(
ApplicationInitializationContext context)
{
//context.AddBackgroundWorkerAsync<IncomingToWmsWorker>();
context.AddBackgroundWorkerAsync<IncomingToWmsWorker>();
// 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>
[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>
[Display(Name = "字典项列表")]
public virtual ICollection<DictItemInput> Items { get; set; } = new List<DictItemInput>();
public List<DictItemInput> Items { get; set; } = new List<DictItemInput>();
#endregion
#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;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Shared;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
[Authorize]
[Route($"{BasedataConsts.RootPath}dict")]
@ -81,4 +88,114 @@ public class DictAppService : SfsBaseDataWithCodeAppServiceBase<Dict, DictDTO, S
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)
};
}
}
}
}

9
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);
CreateMap<DictItemInput, DictItem>()
.IgnoreAuditedObjectProperties()
;
.IgnoreAuditedObjectProperties();
CreateMap<DictEditInput, Dict>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.ConcurrencyStamp)
.Ignore(x => x.Id);
.IgnoreAuditedObjectProperties()
.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);
ret = ObjectMapper.Map<List<SplitPackingRec>, List<SplitPackingRecDTO>>(lst);
ret = ret.OrderByDescending(itm => itm.CreationTime).ToList();
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>
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())
{
item.ToTopPackingCode = item.ToPackingCode;
item.ToTopPackingCode = item.FromPackingCode;// ToPackingCode;
}
}
#endregion
@ -57,7 +57,7 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
{
//设置顶级箱码
item.FromTopPackingCode = GetTopPackingCode(query, item.FromPackingCode);
item.ToTopPackingCode = GetTopPackingCode(query, item.ToPackingCode);
item.ToTopPackingCode = GetTopPackingCode(query, item.FromPackingCode); //ToPackingCode
if (item.FromTopPackingCode.IsNullOrEmpty())
{
item.FromTopPackingCode = item.FromPackingCode;
@ -77,8 +77,8 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
SplitPackingRec newObj = CommonHelper.CloneObj(item);
newObj.SetId(GuidGenerator.Create());
newObj.OprType = OprTypeEnum.Other;
newObj.FromPackingCode = newObj.ToPackingCode;
newObj.FromTopPackingCode = newObj.ToTopPackingCode;
newObj.FromPackingCode = newObj.ToPackingCode; //克隆赋值
newObj.FromTopPackingCode = newObj.ToTopPackingCode; //克隆赋值
newObj.FromStdPackQty = newObj.ToStdPackQty;
newObj.FromUom = newObj.ToUom;
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 (existQty != 0)
{
existQty = -transaction.Qty+ existQty;
}
throw new UserFriendlyException($"{location.Code} 库位不允许负库存。{Environment.NewLine}" +
$"箱码: {transaction.PackingCode}{Environment.NewLine}" +
$"ERP料号: {transaction.ItemCode}{Environment.NewLine}" +
$"批次: {transaction.Lot}{Environment.NewLine}" +
$"状态: {transaction.Status}{Environment.NewLine}" +
$"出库数量 {transaction.Qty}{Environment.NewLine}" +
$"出库数量 {-transaction.Qty}{Environment.NewLine}" +
$"库存余额数量 {existQty}");
}

2
be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs

@ -739,7 +739,7 @@ public abstract class SfsCrudWithDetailsAppServiceBase<TEntity, TEntityDto, TReq
/// <param name="model"></param>
/// <param name="entity"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
/// <returns></returns>
protected virtual async Task ValidateImportEntityAsync(TImportInput model, TEntity entity, List<ValidationResult> validationRresult)
{
await Task.CompletedTask.ConfigureAwait(false);

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

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

@ -43,7 +43,7 @@ public class InspectJobAppService
var result = await _inspectJobManager.AddAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<InspectJob, InspectJobDTO>(result);
return dto;
}
@ -55,18 +55,27 @@ public class InspectJobAppService
public virtual async Task<InspectJobSummaryDetailDTO> CompleteSummaryDetailStatusAsync(Guid id,
Guid summaryDetailId, InspectJobCompleteSummaryDetailInput input)
{
if (input.FilesList != null && input.FilesList.Any())
try
{
var dict = await _fileAppService.CreateManyHasDictAsync(input.FilesList).ConfigureAwait(false);
input.InspectReport = JsonSerializer.Serialize(dict);
}
if (input.FilesList != null && input.FilesList.Any())
{
var dict = await _fileAppService.CreateManyHasDictAsync(input.FilesList).ConfigureAwait(false);
input.InspectReport = JsonSerializer.Serialize(dict);
}
var summaryDetail = ObjectMapper.Map<InspectJobCompleteSummaryDetailInput, InspectJobSummaryDetail>(input);
var summaryDetail = ObjectMapper.Map<InspectJobCompleteSummaryDetailInput, InspectJobSummaryDetail>(input);
var entity = await _inspectJobManager
.CompleteSummaryDetailStatusAsync(id, summaryDetailId, summaryDetail, CurrentUser).ConfigureAwait(false);
var entity = await _inspectJobManager
.CompleteSummaryDetailStatusAsync(id, summaryDetailId, summaryDetail, CurrentUser).ConfigureAwait(false);
return ObjectMapper.Map<InspectJobSummaryDetail, InspectJobSummaryDetailDTO>(entity);
}
catch (Exception ex)
{
throw new UserFriendlyException($"{ex.Message}");
}
return ObjectMapper.Map<InspectJobSummaryDetail, InspectJobSummaryDetailDTO>(entity);
}
/// <summary>

49
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 IPurchasePriceSheetAppService _purchasePriceSheetAppService;
public readonly IErpLocationItemAppService _erpLocationItemAppService;
public readonly IItemBasicAppService _itemBasicAppService;
public PutawayNoteAppService(
IPutawayNoteRepository repository,
@ -40,14 +41,16 @@ public class PutawayNoteAppService :
IInspectJobAppService inspectJobAppService,
IPurchaseOrderManager purchaseOrderManager,
IPurchasePriceSheetAppService purchasePriceSheetAppService,
IErpLocationItemAppService erpLocationItemAppService) : base(repository)
IErpLocationItemAppService erpLocationItemAppService,
IItemBasicAppService itemBasicAppService) : base(repository)
{
_putawayNoteManager = putawayNoteManager;
_purchaseReceiptNoteAppService = purchaseReceiptNoteAppService;
_inspectJobAppService = inspectJobAppService;
_purchaseOrderManager = purchaseOrderManager;
_purchasePriceSheetAppService = purchasePriceSheetAppService;
_erpLocationItemAppService= erpLocationItemAppService;
_erpLocationItemAppService = erpLocationItemAppService;
_itemBasicAppService = itemBasicAppService;
}
/// <summary>
@ -61,33 +64,37 @@ public class PutawayNoteAppService :
{
foreach (var detail in input.Details)
{
var isClosed = await _purchaseOrderManager.CheckIsCloseAsync(input.Number,input.SupplierCode, detail.ItemCode).ConfigureAwait(false);
if (isClosed)
{
throw new UserFriendlyException($"物品名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上架!");
}
var isClosed = await _purchaseOrderManager.CheckIsCloseAsync(input.Number, input.SupplierCode, detail.ItemCode).ConfigureAwait(false);
if (isClosed)
{
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);
if (isprice)
{
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)
{
throw new UserFriendlyException($"未找到物品【{detail.ItemCode}】与ERP储位【{detail.ToLocationErpCode}】的开账信息");
}
var purchasereDetail = await _purchaseReceiptNoteAppService
.GetDetailByItemAndPackingAsync(detail.ItemCode, detail.ToPackingCode).ConfigureAwait(false);
if (purchasereDetail != null)
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)
{
var inspectJobDto = await _inspectJobAppService
.GetInspectNoteDetailByPackingCodeAsync(detail.ToPackingCode).ConfigureAwait(false);
if (inspectJobDto.JobStatus != EnumJobStatus.Done)
{
var inspectJobDto = await _inspectJobAppService
.GetInspectNoteDetailByPackingCodeAsync(detail.ToPackingCode).ConfigureAwait(false);
if (inspectJobDto.JobStatus != EnumJobStatus.Done)
{
throw new UserFriendlyException($"包含【{detail.ToPackingCode}】箱码的报检单,尚未完成质检");
}
throw new UserFriendlyException($"包含【{detail.ToPackingCode}】箱码的报检单,尚未完成质检");
}
}
}
var entity = ObjectMapper.Map<PutawayNoteEditInput, PutawayNote>(input);

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

@ -78,7 +78,7 @@ public class ContainerRequestAppService :
/// <returns></returns>
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, "事务类型", "事务类型不存在");

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 Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
@ -34,18 +36,122 @@ public class DeliverRequestAppService :
private readonly IAreaAppService _areaApp;
private readonly ICustomerAppService _customerApp;
private readonly ICustomerAddressAppService _customerAddressApp;
private readonly IItemBasicAppService _itemBasicAppService;
public DeliverRequestAppService(
IDeliverRequestRepository repository
, IDeliverRequestManager deliverRequestManager
, IAreaAppService areaApp
, ICustomerAppService customerApp
, ICustomerAddressAppService customerAddressApp)
, ICustomerAddressAppService customerAddressApp,
IItemBasicAppService itemBasicAppService)
: base(repository, deliverRequestManager)
{
_deliverRequestManager = deliverRequestManager;
_areaApp = areaApp;
_customerApp = customerApp;
_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>
/// 处理请求

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>()
.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.DeliverPlanNumber)
.Ignore(x => x.ActiveDate)
@ -62,7 +62,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.Remark);
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.DeliverPlanNumber)
.Ignore(x => x.ActiveDate)
@ -96,7 +96,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.IdentityNo)
.Ignore(x => x.MesDeliveryNo)
.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))
;
}

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);
detail.SetProperty(nameof(input.FromVinCode), input.FromVinCode);
// detail.SetProperty(nameof(input.FromVinCode), input.FromVinCode);
//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
await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData<InspectJob>(CopyJob))
await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData<InspectJob>(CopyJob),false)
.ConfigureAwait(false);
return summaryDetailEntity;

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

@ -79,8 +79,7 @@ public partial class StoreEventAutoMapperProfile : Profile
.Ignore(x => x.PlannedSplitRule)
.Ignore(x => x.DeliveryQty)
.Ignore(x => x.Status)
.Ignore(x => x.RecommendContainerCode)
.Ignore(x => x.StdPackQty)
.Ignore(x => x.RecommendContainerCode)
.Ignore(x => x.RecommendPackingCode)
.Ignore(x => x.HandledContainerCode)
.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);
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.HandledToLocationErpCode = holdLocation.ErpLocationCode;
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
: StoreInventoryEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<DeliverNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<DeliverNote>>>
{
private const EnumTransType TransType = EnumTransType.Deliver;
private readonly IDeliverRequestAppService _deliverRequestApp;
@ -49,7 +50,24 @@ public class DeliverNoteEventHandler
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 私有
private async Task AddTransactionsAsync(DeliverNote deliverNote)

Loading…
Cancel
Save