Browse Source

修改 非生产

dev_DY_CC
郑勃旭 6 months ago
parent
commit
5b2bc0da92
  1. 41
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/ClickOnceProfile.pubxml
  2. 13
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/FolderProfile.pubxml
  3. 479
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs
  4. 108
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs
  5. 174
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs

41
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/ClickOnceProfile.pubxml

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<BootstrapperEnabled>True</BootstrapperEnabled>
<Configuration>Release</Configuration>
<CreateWebPageOnPublish>False</CreateWebPageOnPublish>
<GenerateManifests>true</GenerateManifests>
<Install>True</Install>
<InstallFrom>Disk</InstallFrom>
<IsRevisionIncremented>True</IsRevisionIncremented>
<IsWebBootstrapper>False</IsWebBootstrapper>
<MapFileExtensions>True</MapFileExtensions>
<OpenBrowserOnPublish>False</OpenBrowserOnPublish>
<Platform>Any CPU</Platform>
<PublishDir>bin\Release\net6.0\app.publish\</PublishDir>
<PublishUrl>bin\publish\</PublishUrl>
<PublishProtocol>ClickOnce</PublishProtocol>
<PublishReadyToRun>False</PublishReadyToRun>
<PublishSingleFile>False</PublishSingleFile>
<SelfContained>False</SelfContained>
<SignatureAlgorithm>(无)</SignatureAlgorithm>
<SignManifests>False</SignManifests>
<SkipPublishVerification>false</SkipPublishVerification>
<TargetFramework>net6.0</TargetFramework>
<UpdateEnabled>False</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateRequired>False</UpdateRequired>
<WebPageFileName>Publish.html</WebPageFileName>
</PropertyGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.NetCore.CoreRuntime.6.0.x64">
<Install>True</Install>
<ProductName>.NET 运行时 6.0.31 (x64)</ProductName>
</BootstrapperPackage>
</ItemGroup>
</Project>

13
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/FolderProfile.pubxml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Release\net6.0\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
</PropertyGroup>
</Project>

479
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs

@ -42,7 +42,8 @@ public class UnplannedIssueJobAppService
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager,
ILocationAppService locationAppService,
IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService,
IUnitOfWorkManager unitOfWorkManager, ILogger<UnplannedIssueJobAppService> logger, IItemBasicAppService itemBasicAppService) : base(repository, unplannedIssueJobManager)
IUnitOfWorkManager unitOfWorkManager, ILogger<UnplannedIssueJobAppService> logger,
IItemBasicAppService itemBasicAppService) : base(repository, unplannedIssueJobManager)
{
_unplannedIssueJobManager = unplannedIssueJobManager;
_locationAppService = locationAppService;
@ -84,41 +85,15 @@ public class UnplannedIssueJobAppService
{
List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>();
var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
//if (useBalancesOut.Count == 0)
//{
// throw new UserFriendlyException($"请求单号{requestDto.Number},无推荐库位请检查是否又库存!");
//}
foreach (var job in jobs)
{
job.SetIdAndNumberWithDetails(GuidGenerator, job.Number);
//await SendNotifyMessageAsync(job).ConfigureAwait(false);
}
//await PublishCreatedAsync(jobs).ConfigureAwait(false);
await Repository.InsertManyAsync(jobs).ConfigureAwait(false);
//await _unplannedIssueJobManager.AddManyAsync(jobs).ConfigureAwait(false);
//await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false);
var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
//foreach (var itm in outEditInputs)
//{
// itm.JobNumber = first.Number;
//}
await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
}
//public static string[] GetAllFields(Type type)
//{
// // 获取公共实例字段
// var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
// // 返回字段名称
// return fields.Select(f => f.Name).ToArray();
//}
private async Task<Tuple<List<BalanceDTO>, List<BalanceDTO>>> DeductInventory(List<BalanceDTO> inventory,
decimal quantityToDeduct, EnumLocationType enumLocationType)
{
@ -142,7 +117,7 @@ public class UnplannedIssueJobAppService
if (enumLocationType == EnumLocationType.RAW)
{
undto.InjectFrom(item);
undto.Qty = item.Qty;
unbalanceDTOs.Add(undto);
}
@ -161,7 +136,7 @@ public class UnplannedIssueJobAppService
}
}
var tuple = new Tuple<List<BalanceDTO>, List<BalanceDTO>>(balanceDTOs, unbalanceDTOs);//ITEM1整箱、
var tuple = new Tuple<List<BalanceDTO>, List<BalanceDTO>>(balanceDTOs, unbalanceDTOs); //ITEM1整箱、
// 返回实际扣减的库存数量
@ -173,120 +148,141 @@ public class UnplannedIssueJobAppService
List<BalanceDTO> useBalancesOut)
{
List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>();
var Errors = new List<string>();
foreach (var requestDtoDetail in requestDto.Details) //非计划领料明细
{
var locationCodes = await _locationAppService
.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode))
.ConfigureAwait(false); //获取存放库位
var locationDto = locationCodes.First();
if (locationCodes.Count == 0)
{
throw new UserFriendlyException("ERP库位没有对应WMS库位!");
}
var first = locationCodes.FirstOrDefault();
var locationDto = await _locationAppService.GetByCodeAsync(first.Code).ConfigureAwait(false);
var input = new RecommendBalanceRequestInput();
var job = new UnplannedIssueJob();
switch (locationDto.Type)
{
case EnumLocationType.SEMI:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.CUST:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.FG:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.RAW:
job.IsHasPackingCode = 1;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.THIRDPARTY:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.OUTSIDE:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.DimensionalStorehouse:
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
job.IsHasPackingCode = 0;
break;
case EnumLocationType.KittingWip:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.WIP:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
}
job.ItemCode = requestDtoDetail.ItemCode;
job.ItemName = requestDtoDetail.ItemName;
job.ItemDesc1 = requestDtoDetail.ItemDesc1;
job.ItemDesc2 = requestDtoDetail.ItemDesc2;
job.FromErpLocationCode = requestDtoDetail.LocationErpCode;
job.Qty = requestDtoDetail.Qty;
job.SetId(GuidGenerator.Create());
job.UnplannedIssueRequestNumber = requestDto.Number;
job.JobType = EnumJobType.UnplannedIssueJob;
job.JobStatus = EnumJobStatus.Open;
job.IsAutoComplete = false;
job.DeptCode = requestDto.DeptCode;
job.DeptName = requestDto.DeptName;
job.Worker = "未执行";
job.OANumber = requestDto.OANumber;
job.Number = await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true);
job.Details = new List<UnplannedIssueJobDetail>();
job.FacDetails = new List<UnplannedIssueJobFacDetail>();
job.WarehouseCode = locationDto.WarehouseCode;
job.BuildDate = DateTime.Now;
var input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList()
};
switch (locationDto.Type)
{
case EnumLocationType.RAW:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = true
};
input.IsPackingCode = true;
job.IsHasPackingCode = 1;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.FG:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.DimensionalStorehouse:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.CUST:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.KittingWip:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.OUTSIDE:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.SEMI:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.WIP:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.THIRDPARTY:
input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
input.IsPackingCode = false;
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
}
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); //获取推荐库存
usableList = usableList
.OrderBy(p => p.Lot)
.ThenBy(p => p.PutInTime)
@ -296,114 +292,17 @@ public class UnplannedIssueJobAppService
.ToList();
var usableList1 = usableList.Where(p => p.Qty > 0).ToList();
decimal qty = 0;
//实际要用库存
var useBalances = new List<BalanceDTO>();
var returnlist = await DeductInventory(usableList1, requestDtoDetail.Qty, locationDto.Type)
.ConfigureAwait(false);
useBalances.AddRange(returnlist.Item1);
//foreach (var balanceDto in usableList)
//{
// decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty);
// balanceDto.Qty -= availableToDeduct;
// qty += availableToDeduct;
// if (qty >= balanceDto.Qty)
// break;
// if (qty >= requestDtoDetail.Qty)
// {
// break;
// }
// if (qty + balanceDto.Qty > requestDtoDetail.Qty)
// {
// qty += requestDtoDetail.Qty - balanceDto.Qty;
// }
// else
// {
// qty += balanceDto.Qty;
// }
// if (qty > 0)
// {
// useBalances.Add(balanceDto);
// useBalancesOut.Add(balanceDto);
// }
//}
if (returnlist.Item1.Count == 0)
{
_logger.LogError(
$"{"" + requestDto.Number + ":" + requestDtoDetail.ItemCode + "" + requestDtoDetail.Qty}");
// Errors.Add($"{"非生产领料"+requestDto.Number+"零件号:"+requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty.ToString()}");
}
if (useBalances.Count > 0)
{
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationErpCode))
{
//var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false);
var job = new UnplannedIssueJob();
switch (locationDto.Type)
{
case EnumLocationType.CUST:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.FG:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.RAW:
job.IsHasPackingCode = 1;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.THIRDPARTY:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.OUTSIDE:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
//------------------
case EnumLocationType.KittingWip:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.WIP:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.SEMI:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.DimensionalStorehouse:
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
job.IsHasPackingCode = 0;
break;
}
job.ItemCode = requestDtoDetail.ItemCode;
job.ItemName = requestDtoDetail.ItemName;
job.ItemDesc1 = requestDtoDetail.ItemDesc1;
job.ItemDesc2 = requestDtoDetail.ItemDesc2;
job.FromErpLocationCode = requestDtoDetail.LocationErpCode;
job.Qty = requestDtoDetail.Qty;
job.SetId(GuidGenerator.Create());
job.UnplannedIssueRequestNumber = requestDto.Number;
job.JobType = EnumJobType.UnplannedIssueJob;
job.JobStatus = EnumJobStatus.Open;
job.IsAutoComplete = false;
job.DeptCode = requestDto.DeptCode;
job.DeptName = requestDto.DeptName;
job.Worker = "未执行";
job.OANumber = requestDto.OANumber;
job.Number = await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true);
job.Details = new List<UnplannedIssueJobDetail>();
job.FacDetails = new List<UnplannedIssueJobFacDetail>();
job.WarehouseCode = balanceDtoGroup.First().WarehouseCode;
@ -460,7 +359,6 @@ public class UnplannedIssueJobAppService
jobfacDetail.Status = balanceDto.Status;
jobfacDetail.HandledQty = balanceDto.Qty;
jobfacDetail.Uom = balanceDto.Uom;
//job.Details.Add(jobDetail);
job.FacDetails.Add(jobfacDetail);
}
@ -478,99 +376,33 @@ public class UnplannedIssueJobAppService
itm.Remark = job.Number;
useBalancesOut.Add(itm);
}
//useBalancesOut.AddRange(returnlist.Item2);
}
}
else
{
var job = new UnplannedIssueJob();
switch (locationDto.Type)
{
case EnumLocationType.SEMI:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.CUST:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.FG:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.RAW:
job.IsHasPackingCode = 1;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.THIRDPARTY:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.OUTSIDE:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
break;
case EnumLocationType.DimensionalStorehouse:
job.UnplannedIssueType = EnumUnplannedIssueType.Raw;
job.IsHasPackingCode = 0;
break;
case EnumLocationType.KittingWip:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
case EnumLocationType.WIP:
job.IsHasPackingCode = 0;
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
break;
}
var outEditInputs = await BuildExpectOutAsync(useBalances, job.Number).ConfigureAwait(false);
await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
job.ItemCode = requestDtoDetail.ItemCode;
job.ItemName = requestDtoDetail.ItemName;
job.ItemDesc1 = requestDtoDetail.ItemDesc1;
job.ItemDesc2 = requestDtoDetail.ItemDesc2;
job.FromErpLocationCode = requestDtoDetail.LocationErpCode;
job.Qty = requestDtoDetail.Qty;
job.SetId(GuidGenerator.Create());
job.UnplannedIssueRequestNumber = requestDto.Number;
job.JobType = EnumJobType.UnplannedIssueJob;
job.JobStatus = EnumJobStatus.Open;
job.IsAutoComplete = false;
job.DeptCode = requestDto.DeptCode;
job.DeptName = requestDto.DeptName;
job.Worker = requestDto.Worker;
job.OANumber = requestDto.OANumber;
job.Number = await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true);
job.Details = new List<UnplannedIssueJobDetail>();
job.FacDetails = new List<UnplannedIssueJobFacDetail>();
job.WarehouseCode = locationDto.WarehouseCode;
job.BuildDate = DateTime.Now;
jobs.Add(job);
}
jobs.Add(job);
}
//if (Errors.Count > 0)
//{
// foreach (var itm in Errors)
// {
// _logger.LogError(itm);
// }
//}
return jobs;
}
private async Task<List<ExpectOutEditInput>> BuildExpectOutAsync(List<BalanceDTO> balanceDtos)
private async Task<List<ExpectOutEditInput>> BuildExpectOutAsync(List<BalanceDTO> balanceDtos, string jobNumber)
{
var lst = ObjectMapper.Map<List<BalanceDTO>, List<ExpectOutEditInput>>(balanceDtos);
foreach (var itm in lst)
var list = ObjectMapper.Map<List<BalanceDTO>, List<ExpectOutEditInput>>(balanceDtos);
foreach (var outEditInput in list)
{
itm.JobNumber = itm.Remark;
outEditInput.JobNumber = jobNumber;
if (!string.IsNullOrEmpty(outEditInput.PackingCode))
{
var balanceDto = await _balanceAppService.GetByPackingCodeAsync(outEditInput.PackingCode)
.ConfigureAwait(false);
outEditInput.Qty = balanceDto.Qty;
}
}
return lst;
return list;
}
/// <summary>
@ -582,42 +414,6 @@ public class UnplannedIssueJobAppService
throw new NotImplementedException();
}
/// <summary>
/// 创建补料记录实体
/// </summary>
/// <param name="coatingIssueJobDto"></param>
/// <returns></returns>
private async Task<UnplannedIssueNoteEditInput> BuildUnplannedIssueNoteAsync(UnplannedIssueJob unplannedIssueJobDto)
{
if (!unplannedIssueJobDto.Details.Any())
{
return new UnplannedIssueNoteEditInput();
}
//var createInput =
// ObjectMapper.Map<UnplannedIssueJob, UnplannedIssueNoteEditInput>(unplannedIssueJobDto);
var issuenote = new UnplannedIssueNoteEditInput();
issuenote.DeptCode = unplannedIssueJobDto.DeptCode;
issuenote.DeptName = unplannedIssueJobDto.DeptName;
issuenote.BuildDate = unplannedIssueJobDto.BuildDate;
issuenote.UnplannedIssueRequestNumber = unplannedIssueJobDto.UnplannedIssueRequestNumber;
issuenote.JobNumber = unplannedIssueJobDto.Number;
issuenote.UnplannedIssueType = issuenote.UnplannedIssueType;
issuenote.OANumber = issuenote.OANumber;
issuenote.Details = new List<UnplannedIssueNoteDetailInput>();
foreach (var detail in unplannedIssueJobDto.FacDetails)
{
var entity = new UnplannedIssueNoteDetailInput();
entity.InjectFrom(detail);
entity.Qty = detail.HandledQty;
issuenote.Details.Add(entity);
}
await Task.CompletedTask.ConfigureAwait(false);
return issuenote;
}
/// <summary>
/// 根据申请单号判断下面的任务是否都是完成或取消
/// </summary>
@ -643,16 +439,13 @@ public class UnplannedIssueJobAppService
{
var job = await _repository.GetAsync(id).ConfigureAwait(false);
//var facQuery=job.FacDetails.GroupBy(p => new { p.ItemCode }).Select(p=>new {ItemCode= p.Key.ItemCode,Qty= p.Sum(itm=>itm.RecommendQty) });
if (dto.Details.Count > 0)
{
var query = dto.Details.GroupBy(p => new { p.ItemCode })
.Select(p => new { p.Key.ItemCode, Qty = p.Sum(itm => itm.HandledQty) });
.Select(p => new { p.Key.ItemCode, Qty = p.Sum(itm => itm.HandledQty) });
var sumQty = query.FirstOrDefault().Qty;
if (job.Qty < sumQty)
@ -661,14 +454,11 @@ public class UnplannedIssueJobAppService
}
if (dto.FacDetails.Count == 0)
{
var locationCodes = await _locationAppService
.GetListByErpLocationCodes(new StringList(job.FromErpLocationCode))
.ConfigureAwait(false); //获取存放库位
.GetListByErpLocationCodes(new StringList(job.FromErpLocationCode))
.ConfigureAwait(false); //获取存放库位
if (locationCodes.Count == 0)
{
@ -784,38 +574,22 @@ public class UnplannedIssueJobAppService
.ThenBy(p => p.PackingCode)
.ToList();
var avbQty= usableList.Sum(p => p.Qty);
var avbQty = usableList.Sum(p => p.Qty);
if (usableList.Count == 0)
{
throw new UserFriendlyException("库存数量不够!");
}
else
if (avbQty < sumQty)
{
if (avbQty < sumQty)
{
throw new UserFriendlyException("库存数量不够!");
}
throw new UserFriendlyException("库存数量不够!");
}
}
}
var handleDto = new UnplannedIssueJobDTO();
//using (var uow = _unitOfWorkManager.Begin())
//{
@ -830,9 +604,10 @@ public class UnplannedIssueJobAppService
var handleEntity = ObjectMapper.Map<UnplannedIssueJobDTO, UnplannedIssueJob>(dto);
foreach (var detail in dto.Details)
{
var itemBasicDto=await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
detail.Uom = itemBasicDto.BasicUom;
}
var handleResult =
await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false);
handleDto = ObjectMapper.Map<UnplannedIssueJob, UnplannedIssueJobDTO>(handleResult);

108
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs

@ -98,113 +98,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity);
return dto;
}
/// <summary>
/// 自定义导入接口
/// </summary>
/// <param name="requestInput"></param>
/// <param name="file"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
//[HttpPost("import-dongyang")]
//public async Task<IActionResult> ImportDYAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file)
//{
// try
// {
// using var ms = new MemoryStream();
// await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false);
// var inputFileBytes = ms.GetAllBytes();
// var importList = _excelService.Import<UnplannedIssueRequestImportDto>(inputFileBytes).ToList();
// await CreateByDYOAsync(importList).ConfigureAwait(false);
// List<UnplannedIssueRequestImportDto> errorsList = new List<UnplannedIssueRequestImportDto>();
// foreach (var itm in importList)
// {
// if (string.IsNullOrEmpty(itm.CaseCode)
// || string.IsNullOrEmpty(itm.ItemCode)
// || itm.Qty == 0
// || string.IsNullOrEmpty(itm.ProjCapacityCode)
// || string.IsNullOrEmpty(itm.FromLocationErpCode)
// )
// {
// itm.Explain = "此项错误";
// errorsList.Add(itm);
// }
// }
// if (errorsList.Count > 0)
// {
// var fileContent = _excelService.Export(errorsList);
// return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName = fileContent.FileDownloadName };
// }
// var fileContent1 = _excelService.Export(importList);
// return new JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName });
// }
// catch (Exception e)
// {
// throw new UserFriendlyException(e.Message);
// }
//}
//[HttpPost("import")]
//[Consumes("multipart/form-data")]
////[UnitOfWork]
//public override async Task<IActionResult> ImportAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file)
//{
// try
// {
// using var ms = new MemoryStream();
// await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false);
// var inputFileBytes = ms.GetAllBytes();
// var importList = _excelService.Import<UnplannedIssueRequestImportInput>(inputFileBytes).ToList();
// await CreateByDYOAsync(importList).ConfigureAwait(false);
// List<UnplannedIssueRequestImportInput> errorsList = new List<UnplannedIssueRequestImportInput>();
// foreach (var itm in importList)
// {
// if (string.IsNullOrEmpty(itm.CaseCode)
// || string.IsNullOrEmpty(itm.ItemCode)
// || itm.Qty == 0
// || string.IsNullOrEmpty(itm.ProjCapacityCode)
// || string.IsNullOrEmpty(itm.FromErpLocationCode)
// )
// {
// itm.Explain = "此项错误";
// errorsList.Add(itm);
// }
// }
// if (errorsList.Count > 0)
// {
// var fileContent = _excelService.Export(errorsList);
// return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName = fileContent.FileDownloadName };
// }
// var fileContent1 = _excelService.Export(importList);
// return new JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName });
// }
// catch (Exception e)
// {
// throw new UserFriendlyException(e.Message);
// }
//}
private async Task SetEntityPropertiesAsync(UnplannedIssueRequest entity)
{
var userName = CurrentUser.GetUserName_New();

174
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs

@ -1,15 +1,8 @@
using System.Collections.Generic;
using System.Text.Json.Nodes;
using System.Threading.Tasks;
using Omu.ValueInjecter;
using Volo.Abp.Domain.Entities;
using Volo.Abp.EventBus;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Inventory.Domain;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Event.Inventories;
@ -46,14 +39,6 @@ public class UnplannedIssueRequestEventHandler
public async Task HandleEventAsync(SfsCreatedEntityEventData<UnplannedIssueRequest> eventData)
{
var entity = eventData.Entity;
//if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw)
//{
// await AddExpectOutsAsync(entity).ConfigureAwait(false);
//}
//if (entity.AutoSubmit)
//{
// await _unplannedIssueRequestManager.SubmitAsync(entity).ConfigureAwait(false);
//}
}
/// <summary>
@ -68,186 +53,47 @@ public class UnplannedIssueRequestEventHandler
if (entity.AutoSubmit)
{
await _unplannedIssueRequestManager.SubmitAsync(entity).ConfigureAwait(false);
if(entity.UnplannedIssueType== EnumUnplannedIssueType.Raw)
{
await AddExpectOutsAsync(entity).ConfigureAwait(false);
}
}
}
}
/// <summary>
/// 执行后
/// 执行后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
public virtual async Task HandleEventAsync(SfsHandledEntityEventData<UnplannedIssueRequest> eventData)
{
var entity = eventData.Entity;
//if (entity.UnplannedIssueType == Shared.Domain.Shared.Enums.Store.EnumUnplannedIssueType.Wip&&!string.IsNullOrEmpty(entity.OANumber))
//{
// entity.RequestStatus = EnumRequestStatus.Completed;
//}
//if (entity.DirectCreateNote)
//{
// var note = await BuildUnplannedIssueNoteCreateInputAsync(entity).ConfigureAwait(false);
// await _unplannedIssueNoteAppService.CreateAsync(note).ConfigureAwait(false);
//}
//else
//{
//if (entity.UnplannedIssueType == EnumUnplannedIssueType.OA || entity.UnplannedIssueType == EnumUnplannedIssueType.IMPORT)
//{
//var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false);
var request= new UnplannedIssueRequest();
request.InjectFrom(entity);
var request = new UnplannedIssueRequest();
request.InjectFrom(entity);
await _unplannedIssueJobApp.CreateByRecommendAsync(request).ConfigureAwait(false);
//}
//else
//{
// var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false);
// await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false);
//}
//}
await _unplannedIssueJobApp.CreateByRecommendAsync(request).ConfigureAwait(false);
}
public virtual async Task HandleEventAsync(SfsRefusedEntityEventData<UnplannedIssueRequest> eventData)
{
var entity = eventData.Entity;
if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw)
{
await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false);
}
}
/// <summary>
/// 中止订阅
/// 中止订阅
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
public virtual async Task HandleEventAsync(SfsAbortedEntityEventData<UnplannedIssueRequest> eventData)
{
var entity = eventData.Entity;
// if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw)
// {
await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false);
// }
if (!entity.DirectCreateNote)//作废任务
if (!entity.DirectCreateNote) //作废任务
{
await _unplannedIssueJobApp.CancelByRequestNumberAsync(entity.Number).ConfigureAwait(false);
}
}
public virtual async Task HandleEventAsync(SfsCancelledEntityEventData<UnplannedIssueRequest> eventData)
{
var entity = eventData.Entity;
if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw)
{
await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false);
}
}
#region 私有
private async Task AddExpectOutsAsync(UnplannedIssueRequest entitie)
{
var expectOuts = new List<ExpectOutEditInput>();
var entityExpectOuts = BuildExpectOutInventoryAsync(entitie);
expectOuts.AddRange(entityExpectOuts);
await ExpectOutAppService.AddManyAsync(expectOuts).ConfigureAwait(false);
}
private List<ExpectOutEditInput> BuildExpectOutInventoryAsync(UnplannedIssueRequest request)
{
var inputs = ObjectMapper.Map<List<UnplannedIssueRequestDetail>, List<ExpectOutEditInput>>(request.Details);
foreach (var input in inputs)
{
input.JobNumber = request.Number;
input.Worker = request.Worker;
}
return inputs;
}
private async Task<UnplannedIssueNoteEditInput> BuildUnplannedIssueNoteCreateInputAsync(
UnplannedIssueRequest entity)
{
await Task.CompletedTask.ConfigureAwait(false);
var createInput = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueNoteEditInput>(entity);
createInput.UnplannedIssueRequestNumber = entity.Number;
createInput.JobNumber = "";
createInput.ActiveDate = Clock.Now;
return createInput;
}
#endregion
private async Task<UnplannedIssueJobEditInput> BuildUnplannedIssueJobCreateInputAsync(UnplannedIssueRequest entity)
{
await Task.CompletedTask.ConfigureAwait(false);
var createInput = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueJobEditInput>(entity);
createInput.UnplannedIssueRequestNumber = entity.Number;
createInput.JobType = EnumJobType.UnplannedIssueJob;
createInput.JobStatus = EnumJobStatus.Open;
createInput.IsAutoComplete = entity.AutoCompleteJob;
createInput.Worker = string.IsNullOrEmpty(createInput.Worker)?"导入":createInput.Worker;
createInput.Details = new List<UnplannedIssueJobDetailInput>();
foreach (var inputDetail in entity.Details)
{
var detail = ObjectMapper.Map<UnplannedIssueRequestDetail, UnplannedIssueJobDetailInput>(inputDetail);
detail.ExtraProperties = inputDetail.ExtraProperties;
detail.HandledLot = string.IsNullOrEmpty(detail.HandledLot) ? "导入" : detail.HandledLot;
detail.RecommendLot = string.IsNullOrEmpty(detail.RecommendLot) ? "导入" : detail.RecommendLot;
createInput.Details.Add(detail);
}
createInput.WarehouseCode = createInput.Details[0].RecommendFromWarehouseCode;
return createInput;
}
/* AutoMapper实现
private void SetUnplannedIssueJobDetails(UnplannedIssueJobCreateInput createInput, List<UnplannedIssueRequestDetail> details)
{
createInput.Details = new List<UnplannedIssueJobDetailInput>();
foreach (var detail in details)
{
var detailInput = new UnplannedIssueJobDetailInput();
detailInput.WarehouseCode = detail.WarehouseCode;
detailInput.ItemId = detail.Item.Id;
detailInput.ItemName = detail.Name;
detailInput.ItemDesc1 = detail.Item.Desc1;
detailInput.ItemDesc2 = detail.Item.Desc2;
detailInput.ItemCode = detail.ItemCode;
detailInput.StdPackUom = detail.StdPack.PackUom;
detailInput.StdPackQty = detail.StdPack.PackQty;
detailInput.Status = detail.Status;
detailInput.RecommendContainerCode = detail.ContainerCode;
detailInput.RecommendPackingCode = detail.PackingCode;
detailInput.RecommendSupplierBatch = detail.Batch.SupplierBatch;
detailInput.RecommendArriveDate = detail.Batch.ArriveDate;
detailInput.RecommendProduceDate = detail.Batch.ProduceDate;
detailInput.RecommendExpireDate = detail.Batch.ExpireDate;
detailInput.RecommendLot = detail.Lot;
detailInput.RecommendLocationCode = detail.LocationCode;
detailInput.RecommendAreaCode = detail.Location.Area;
detailInput.RecommendLocationGroup = detail.Location.Group;
detailInput.RecommendErpLocationCode = detail.Location.ErpCode;
detailInput.Uom = detail.Qty.Uom;
detailInput.RecommendQty = detail.Qty;
createInput.Details.Add(detailInput);
}
}
*/
}

Loading…
Cancel
Save