diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs index 45d3575ef..6c156c33b 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs @@ -47,7 +47,17 @@ public class OutgoingFromWmsWorker : AsyncPeriodicBackgroundWorkerBase //var exchangeDataList = await exchangeDataAppService.GetAllListByFilterAsync(input).ConfigureAwait(false); var exchangeDataList = await exchangeDataAppService.GetToBeProcessedListAsync(batchSize).ConfigureAwait(false); var outgoingFromWmsList = objectMapper.Map, List>(exchangeDataList); - await outgoingFromWmsManager.CreateManyAsync(outgoingFromWmsList).ConfigureAwait(false); + + try + { + await outgoingFromWmsManager.CreateManyAsync(outgoingFromWmsList).ConfigureAwait(false); + await exchangeDataAppService.UpdateManyAsync(exchangeDataList).ConfigureAwait(false); + } + catch (System.Exception ex) + { + + throw ex; + } } } diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs new file mode 100644 index 000000000..f86c7587d --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs @@ -0,0 +1,204 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Polly.Caching; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Auth.Application.Contracts; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Inventory.Application.Contracts; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs; + +/// +/// +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}job/third-location")] +public class ThirdLocationJobController : AbpController +{ + private readonly IThirdLocationJobAppService _thirdLocationJobAppService; + + private readonly IUserWorkGroupAppService _userWorkGroupAppService; + + private readonly IDictAppService _dictApp; + + /// + /// + /// + /// + /// + public ThirdLocationJobController( + IThirdLocationJobAppService thirdLocationJobAppService, + IDictAppService dictApp + , IUserWorkGroupAppService userWorkGroupAppService) + { + _userWorkGroupAppService = userWorkGroupAppService; + _thirdLocationJobAppService = thirdLocationJobAppService; + _dictApp = dictApp; + } + + /// + /// 获取任务详情 + /// + /// + /// + [HttpGet("{id}")] + + public virtual async Task> GetAsync(Guid id) + { + var result = await _thirdLocationJobAppService.GetAsync(id).ConfigureAwait(false); + return Ok(result); + } + + /// + /// 获取列表 筛选 + /// + /// + /// + [HttpPost("list")] + public virtual async Task> GetListAsync(SfsJobRequestInputBase sfsRequestDTO) + { + var list = await _thirdLocationJobAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false); + return list; + } + + /// + /// 获取列表 + /// + /// + /// + /// + [HttpGet("list")] + public virtual async Task> GetListAsync(int pageSize, int pageIndex, bool isFinished) + { + var dtos = await _dictApp.GetByCodeAsync("ContainerSpecificationsType").ConfigureAwait(false); + + var status = new List(); + if (isFinished == true) + { + status.Add((int)EnumJobStatus.Done); + } + else + { + status.Add((int)EnumJobStatus.Open); + } + var jsonStatus = JsonSerializer.Serialize(status); + + var request = new SfsJobRequestInputBase + { + MaxResultCount = pageSize, + SkipCount = (pageIndex - 1) * pageSize, + Sorting = $"{nameof(ThirdLocationJobDTO.CreationTime)} ASC", + Condition = new Condition + { + Filters = new List + { + new(nameof(ThirdLocationJobDTO.JobStatus),jsonStatus,"In") + } + } + }; + + var list = await _thirdLocationJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false); + + + return list; + } + + /// + /// 根据Job Number 获取任务列表 + /// + /// + /// + [HttpGet("by-number/{jobNumber}")] + public virtual async Task> GetByNumberAsync(string jobNumber) + { + var jobDto = await _thirdLocationJobAppService.GetByNumberAsync(jobNumber).ConfigureAwait(false); + if (jobDto == null) + { + throw new UserFriendlyException($"未找到编号为 {jobNumber} 的任务"); + } + var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false); + if (!wlgCodes.Contains(jobDto.WorkGroupCode)) + { + return new NotFoundObjectResult($"任务属于工作组 {jobDto.WorkGroupCode}"); + } + if (jobDto.JobStatus == EnumJobStatus.Doing && jobDto.AcceptUserId != CurrentUser.Id) + { + return new NotFoundObjectResult($"任务正在被 {jobDto.AcceptUserName} 处理"); + } + return jobDto; + } + + /// + /// 获取任务数量 + /// + /// + [HttpGet("count")] + public virtual async Task> CountAsync() + { + var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false); + var jsonCodes = JsonSerializer.Serialize(wlgCodes); + + var status = new List() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing }; + var jsonStatus = JsonSerializer.Serialize(status); + + var request = new SfsJobRequestInputBase + { + Sorting = $"{nameof(ThirdLocationJobDTO.Priority)} ASC", + Condition = new Condition + { + Filters = new List + { + new(nameof(ThirdLocationJobDTO.WorkGroupCode),jsonCodes,"In"), + new(nameof(ThirdLocationJobDTO.JobStatus),jsonStatus,"In") + } + } + }; + + var count = await _thirdLocationJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false); + + return Ok(count); + } + + /// + /// 承接任务 + /// + /// + /// + [HttpPost("take/{id}")] + public virtual async Task TakeAsync(Guid id) + { + await _thirdLocationJobAppService.AcceptAsync(id).ConfigureAwait(false); + } + + /// + /// 取消承接任务 + /// + /// + /// + [HttpPost("cancel-take/{id}")] + public virtual async Task CancelTakeAsync(Guid id) + { + await _thirdLocationJobAppService.CancelAcceptAsync(id).ConfigureAwait(false); + } + + /// + /// 执行任务 + /// + /// + /// + /// + [HttpPost("finish/{id}")] + public virtual async Task FinishAsync(Guid id, [FromBody] ThirdLocationJobDTO dto) + { + await _thirdLocationJobAppService.CompleteAsync(id, dto).ConfigureAwait(false); + } +} diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs new file mode 100644 index 000000000..9006c134d --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs @@ -0,0 +1,38 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.Pda.Controllers.Stores; + +/// +/// +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}store/third-location-note")] + +public class ThirdLocationNoteController : AbpController +{ + private readonly IThirdLocationNoteAppService _thirdLocationNoteAppService; + + /// + /// + /// + /// + public ThirdLocationNoteController(IThirdLocationNoteAppService thirdLocationNoteAppService) + { + _thirdLocationNoteAppService = thirdLocationNoteAppService; + } + + /// + /// 创建器具转移记录 + /// + /// CreateInput + /// + [HttpPost("")] + public virtual async Task CreateAsync(ThirdLocationNoteEditInput input) + { + await _thirdLocationNoteAppService.CreateAsync(input).ConfigureAwait(false); + } + +} diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs new file mode 100644 index 000000000..2ad863e8f --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs @@ -0,0 +1,51 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.Pda.Controllers.Stores; + +/// +///三方库库移请求 +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}store/third-location-request")] + +public class ThirdLocationRequestController : AbpController +{ + private readonly IThirdLocationRequestAppService _thirdLocationRequestAppService; + + /// + /// + /// + /// + public ThirdLocationRequestController(IThirdLocationRequestAppService ThirdLocationRequestAppService) + { + _thirdLocationRequestAppService = ThirdLocationRequestAppService; + } + + /// + /// 三方库库移申请 + /// + /// + /// + [HttpPost("")] + public virtual async Task CreateAsync(ThirdLocationRequestEditInput input) + { + _ = await _thirdLocationRequestAppService.CreateAsync(input).ConfigureAwait(false); + } + + /// + /// 根据number获取三方库库移申请详情 + /// + /// + /// + [HttpGet("{number}")] + + public virtual async Task> GetAsync(string number) + { + var result = await _thirdLocationRequestAppService.GetByNumberAsync(number).ConfigureAwait(false); + return Ok(result); + } + +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs index a46e86f0a..fdfb1d4cf 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs @@ -31,6 +31,5 @@ public interface ILocationAppService Task> GetListByManyCodes(List codes); Task> GetListByTypesAndErpCodeAsync(List types, string erpCode); Task> GetListByTypesAndErpCodeAsync(List types, string erpCode,string locCode); - - + Task> GetListByErpLocationCodes(List ErpLocationCodes); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs index 6dd5ec48e..b4939e6cb 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs @@ -5,6 +5,7 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public interface IPurchasePriceSheetAppService : ISfsBaseDataAppServiceBase { + Task CheckPurPriceAsync(string supplierCode, string itemCode); Task GetByItemCodeAsync(string itemCode,string supplierCode); Task UpsertAsyncByInterface(PurchasePriceSheetEditInput input); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs index 1f81f0138..1e34c1f8b 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs @@ -61,7 +61,7 @@ public class ErpLocationItemAppService if(entity != null) { - throw new UserFriendlyException($"物品{input.ItemCode}和储位{input.ErpLocationCode} 对应关系已存在"); + throw new UserFriendlyException($"物品 {input.ItemCode} 和储位 {input.ErpLocationCode} 对应关系已存在"); } return await base.CreateAsync(input).ConfigureAwait(false); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs index 61e0db700..1ad9ec748 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs @@ -202,7 +202,15 @@ public class LocationAppService return dtos; } + [HttpPost("get-list-by-erplocation-codes")] + public virtual async Task> GetListByErpLocationCodes(List ErpLocationCodes) + { + var entitys = await _repository.GetListAsync(p => ErpLocationCodes.Contains(p.ErpLocationCode)).ConfigureAwait(false); + + var dtos = ObjectMapper.Map, List>(entitys); + return dtos; + } [HttpGet("get-all")] //[Authorize(LocationPermissions.Default)] public virtual async Task> GetAllAsync() diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs index 8f75e08fe..2321d2a0c 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs @@ -41,4 +41,16 @@ public class PurchasePriceSheetAppService : SfsBaseDataAppServiceBase(input); await _repository.UpsertAsyncByInterface(entity).ConfigureAwait(false); } + /// + /// 判断是否有采购价格 + /// + /// + [HttpPost("check-purprice")] + public virtual async Task CheckPurPriceAsync( string supplierCode, string itemCode) + { + bool result = false; + var entitys = await _repository.GetListAsync(p => p.SupplierCode == supplierCode && p.ItemCode == itemCode && p.SupplierCode == supplierCode, true).ConfigureAwait(false); + if (entitys.Count != 0) result = true; + return result; + } } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs index 9b52bbfa7..045f69a74 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; using Win_in.Sfs.Basedata.Application.Contracts; namespace Win_in.Sfs.Wms.Inventory.Domain.Acl.ErpLocationItem; -public interface IErpLocationItemAclService +public interface IErpLocationItemAclService : ITransientDependency { Task GetFirstAsync(string itemCode, string locationCode); } diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransType.cs index 567d76ef7..7abb03119 100644 --- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransType.cs +++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransType.cs @@ -97,6 +97,7 @@ public enum EnumTransType [Display(Name = "新版库内转移")] TransferLib = 68, + /// /// 库间调拨 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/ExchangeDatas/IExchangeDataAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/ExchangeDatas/IExchangeDataAppService.cs index 922964398..b0be81c89 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/ExchangeDatas/IExchangeDataAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/ExchangeDatas/IExchangeDataAppService.cs @@ -14,4 +14,5 @@ public interface IExchangeDataAppService Task> GetToBeProcessedListPostAsync(int batchSize); Task> GetToBeProcessedListOnlyReadAsync(int batchSize); Task> UpdateStatusByIdListAsync(List list); + Task> UpdateManyAsync(List dtos); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs index 509727793..ee8aff47d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs @@ -9,10 +9,16 @@ public class ThirdLocationJobDetailDTO : SfsJobRecommendFromDetailDTOBase, IHasT { /// - /// 请求库位 + /// 来源库位 /// - [Display(Name = "请求库位")] - public string RequestLocationCode { get; set; } + [Display(Name = "来源库位")] + public string FromLocationCode { get; set; } + + /// + /// 来源库区 + /// + [Display(Name = "来源库区")] + public string FromLocationArea { get; set; } /// /// 到库位 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs index c41ae9bff..d57e227fd 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs @@ -9,12 +9,20 @@ public class ThirdLocationJobDetailInput : SfsJobRecommendFromDetailInputBase, I { /// - /// 请求库位 + /// 来源库位 /// - [Display(Name = "请求库位")] + [Display(Name = "来源库位")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string RequestLocationCode { get; set; } + public string FromLocationCode { get; set; } + + /// + /// 来源库区 + /// + [Display(Name = "来源库位")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string FromLocationArea { get; set; } /// /// 到库位 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteEditInput.cs index 57043a289..55b2ebbfa 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteEditInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteEditInput.cs @@ -35,7 +35,7 @@ public class CustomerProductionReturnNoteEditInput : SfsStoreCreateOrUpdateInput /// 退库记录单号 /// [Display(Name = "退库记录单号")] - [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string Number { get; set; } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDTO.cs index b5b062fae..6d2ed2559 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDTO.cs @@ -37,4 +37,9 @@ public class ThirdLocationRequestDTO : SfsStoreRequestDTOBase [Display(Name = "目标ERP储位")] public string ToLocationErpCode { get; set; } + + /// + /// 来源库区 + /// + public string FromLocationArea { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs index 913c639c2..b6294d8cd 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs @@ -14,6 +14,13 @@ public class ThirdLocationRequestDetailInput : SfsStoreDetailWithQtyInputBase [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public string ToLocationCode { get; set; } + /// + /// 来源库位 + /// + [Display(Name = "来源库位")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string FromLocationCode { get; set; } + /// /// 来源库区 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs index e4d261306..ab15491c1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs @@ -31,10 +31,17 @@ public class ThirdLocationRequestImportInput : SfsStoreImportInputBase [Required] public string ToLocationCode { get; set; } + /// + /// 来源库位 + /// + [Display(Name = "来源库位")] + [Required] + public string FromLocationCode { get; set; } + /// /// 来源库区 /// - [Display(Name = "调出库区")] + [Display(Name = "来源库区")] [Required] public string FromLocationArea { get; set; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreWithDetailsAppServiceBase.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreWithDetailsAppServiceBase.cs index 891dd4cc1..1d0708cfe 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreWithDetailsAppServiceBase.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreWithDetailsAppServiceBase.cs @@ -12,6 +12,7 @@ using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; using Win_in.Sfs.Wms.Store.Domain.Acl.DataExportTask; using Win_in.Sfs.Wms.Store.Domain.Acl.Dict; +using Win_in.Sfs.Wms.Store.Domain.Acl.ErpLocationItem; using Win_in.Sfs.Wms.Store.Domain.Acl.File; using Win_in.Sfs.Wms.Store.Domain.Acl.ItemBasic; using Win_in.Sfs.Wms.Store.Domain.Acl.Location; @@ -54,7 +55,8 @@ public abstract class SfsStoreWithDetailsAppServiceBase LazyServiceProvider.LazyGetRequiredService(); - + protected IErpLocationItemAclService ErpLocationItemAclService => + LazyServiceProvider.LazyGetRequiredService(); protected ILocationAclService LocationAclService => LazyServiceProvider.LazyGetRequiredService(); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ExchangeDatas/ExchangeDataAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ExchangeDatas/ExchangeDataAppService.cs index 2f3f76b7a..499737da7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ExchangeDatas/ExchangeDataAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ExchangeDatas/ExchangeDataAppService.cs @@ -142,4 +142,18 @@ public class ExchangeDataAppService var dtos = ObjectMapper.Map, List>(resultList); return dtos; } + + [HttpPost("update-many")] + public virtual async Task> UpdateManyAsync(List dtos) + { + var list = ObjectMapper.Map, List>(dtos); + list.ForEach(p => + { + p.Status = EnumExchangeDataStatus.Success; + p.ReadTime = Clock.Now; + p.Reader = "DataExchange.Agent"; + }); + await _repository.UpdateManyAsync(list).ConfigureAwait(false); + return dtos; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CustomerProductionReturnNotes/CustomerProductionReturnNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CustomerProductionReturnNotes/CustomerProductionReturnNoteAppService.cs index 241a8f532..18cd05414 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CustomerProductionReturnNotes/CustomerProductionReturnNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CustomerProductionReturnNotes/CustomerProductionReturnNoteAppService.cs @@ -43,8 +43,6 @@ public class CustomerProductionReturnNoteAppService : itm.FromLocationCode = "HOLD"; itm.FromStatus = EnumInventoryStatus.OK; itm.ToStatus=EnumInventoryStatus.OK; - - } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs index 96813e3c8..ff411e10a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs @@ -17,6 +17,7 @@ using Win_in.Sfs.Wms.Store.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Application; using System.Linq; +using Win_in.Sfs.Basedata.Application.Contracts; [Authorize] [Route($"{StoreConsts.RootPath}putaway-note")] @@ -29,18 +30,21 @@ public class PutawayNoteAppService : private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteAppService; public readonly IInspectJobAppService _inspectJobAppService; public readonly IPurchaseOrderManager _purchaseOrderManager; + public readonly IPurchasePriceSheetAppService _purchasePriceSheetAppService; public PutawayNoteAppService( IPutawayNoteRepository repository, IPutawayNoteManager putawayNoteManager, IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService, IInspectJobAppService inspectJobAppService, - IPurchaseOrderManager purchaseOrderManager) : base(repository) + IPurchaseOrderManager purchaseOrderManager, + IPurchasePriceSheetAppService purchasePriceSheetAppService ) : base(repository) { _putawayNoteManager = putawayNoteManager; _purchaseReceiptNoteAppService = purchaseReceiptNoteAppService; _inspectJobAppService = inspectJobAppService; _purchaseOrderManager = purchaseOrderManager; + _purchasePriceSheetAppService = purchasePriceSheetAppService; } /// @@ -59,7 +63,12 @@ public class PutawayNoteAppService : var isClosed = await _purchaseOrderManager.CheckIsCloseAsync(input.Number,input.SupplierCode, detail.ItemCode).ConfigureAwait(false); if (isClosed) { - throw new UserFriendlyException($"零件名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上价!"); + throw new UserFriendlyException($"零件名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上架!"); + } + var isprice = await _purchasePriceSheetAppService.CheckPurPriceAsync(input.SupplierCode, detail.ItemCode).ConfigureAwait(false); + if (isClosed) + { + throw new UserFriendlyException($"供应商【{input.SupplierCode}】零件名称【{detail.ItemCode}】无采购价格无法执行采购上架!"); } var purchasereDetail = await _purchaseReceiptNoteAppService .GetDetailByItemAndPackingAsync(detail.ItemCode, detail.ToPackingCode).ConfigureAwait(false); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs index a841c2f0f..47cfe36e0 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs @@ -28,17 +28,20 @@ public class PurchaseOrderAppService : private readonly IPurchaseOrderManager _purchaseOrderManager; private readonly ISupplierAppService _supplierAppService; private readonly IItemBasicAppService _itemBasicAppService; + private readonly ILocationAppService _locationAppService; public PurchaseOrderAppService( IPurchaseOrderRepository repository, IPurchaseOrderManager purchaseOrderManager, ISupplierAppService supplierAppService, - IItemBasicAppService itemBasicAppService) : base(repository) + IItemBasicAppService itemBasicAppService + , ILocationAppService locationAppService) : base(repository) { _repository = repository; _purchaseOrderManager = purchaseOrderManager; _supplierAppService = supplierAppService; _itemBasicAppService = itemBasicAppService; + _locationAppService = locationAppService; base.CreatePolicyName = PurchaseOrderPermissions.Create; base.UpdatePolicyName = PurchaseOrderPermissions.Update; base.DeletePolicyName = PurchaseOrderPermissions.Delete; @@ -56,6 +59,15 @@ public class PurchaseOrderAppService : { var ImportData = dictionary.Select(p => p.Key); + + #region 校验ERP库位是否存在 + var allTempErpLocationCode = ImportData.Select(p => p.Details.Select(p => p.LocationErpCode).ToList()).ToList(); + var allErpLocationCode = new List(); + allTempErpLocationCode.ForEach(p => { allErpLocationCode.AddRange(p); }); + var erpLocations = await CheckErpLocationCodeAsync(allErpLocationCode).ConfigureAwait(false); + + #endregion + var supplierDtos = new List(); #region 校验供应商 @@ -190,7 +202,21 @@ public class PurchaseOrderAppService : return result; } + private async Task> CheckErpLocationCodeAsync(List erpLocationCodes) + { + erpLocationCodes = erpLocationCodes.Distinct().ToList(); + var result = await _locationAppService.GetListByErpLocationCodes(erpLocationCodes).ConfigureAwait(false); + var resultcode = result.Select(r => r.ErpLocationCode).Distinct(); + foreach (var code in erpLocationCodes) + { + if (resultcode.All(p => p != code)) + { + throw new UserFriendlyException($"ERP储位代码【{code}】不存在"); + } + } + return result; + } #endregion diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs index 680938428..11983f745 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs @@ -86,7 +86,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase _cache; + + public ErpLocationItemAclService( + IErpLocationItemAppService appService + , IDistributedCache cache + ) + { + _appService = appService; + _cache = cache; + } + + public virtual async Task GetFirstAsync(string itemCode, string locationCode) + { + var dto = await _cache.GetOrAddItemAsync( + $"{itemCode}:{locationCode}", + async () => await GetFromAppServiceAsync(itemCode, locationCode).ConfigureAwait(false), + CacheMinutes).ConfigureAwait(false); + return dto; + } + + private async Task GetFromAppServiceAsync(string itemCode, string locationCode) + { + return await _appService.CheckItemErpLocationIsAvailable(itemCode, locationCode).ConfigureAwait(false); + } +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs new file mode 100644 index 000000000..550ef43de --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Win_in.Sfs.Basedata.Application.Contracts; + +namespace Win_in.Sfs.Wms.Store.Domain.Acl.ErpLocationItem; +public interface IErpLocationItemAclService : ITransientDependency +{ + Task GetFirstAsync(string itemCode, string locationCode); +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Win_in.Sfs.Wms.Store.Domain.Acl.csproj b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Win_in.Sfs.Wms.Store.Domain.Acl.csproj index dc2a4974a..ddd4e0cef 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Win_in.Sfs.Wms.Store.Domain.Acl.csproj +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain.Acl/Win_in.Sfs.Wms.Store.Domain.Acl.csproj @@ -18,5 +18,9 @@ + + + + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/ExchangeDataManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/ExchangeDataManager.cs index d7bf10578..425a6b09e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/ExchangeDataManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/ExchangeDataManager.cs @@ -43,14 +43,14 @@ public class ExchangeDataManager : DomainService, IExchangeDataManager .Take(batchSize) .ToListAsync().ConfigureAwait(false); - foreach (var entity in entities) - { + //foreach (var entity in entities) + //{ - entity.Status = EnumExchangeDataStatus.Success; - entity.ReadTime = Clock.Now; - entity.Reader = "DataExchange.Agent"; + // entity.Status = EnumExchangeDataStatus.Success; + // entity.ReadTime = Clock.Now; + // entity.Reader = "DataExchange.Agent"; - } + //} return entities; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs index 8c5528932..8c0958daa 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs @@ -21,6 +21,7 @@ using Win_in.Sfs.Message.Application.Contracts; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; +using Win_in.Sfs.Wms.Store.Domain.Acl.ErpLocationItem; using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; using Win_in.Sfs.Wms.Store.Domain.Acl.DocumentSettings; using Win_in.Sfs.Wms.Store.Domain.Acl.ItemBasic; @@ -52,6 +53,8 @@ public abstract class SfsJobManagerBase protected IItemBasicAclService ItemBasicAclService => LazyServiceProvider.LazyGetRequiredService(); + protected IErpLocationItemAclService ErpLocationItemAclService => LazyServiceProvider.LazyGetRequiredService(); + protected IBalanceAclService BalanceAclService => LazyServiceProvider.LazyGetRequiredService(); protected ITransactionTypeAclService TransactionTypeAclService => LazyServiceProvider.LazyGetRequiredService(); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs index 91ffb30db..ab2930675 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs @@ -7,9 +7,14 @@ namespace Win_in.Sfs.Wms.Store.Domain; public class ThirdLocationJobDetail : SfsJobRecommendFromDetailEntityBase, IHasToLocation { /// - /// 请求库位 + /// 来源库位 /// - public string RequestLocationCode { get; set; } + public string FromLocationCode { get; set; } + + /// + /// 来源库区 + /// + public string FromLocationArea { get; set; } /// /// 到库位 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteDetail.cs index c9b6a230e..46a632a09 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteDetail.cs @@ -7,7 +7,7 @@ public class ThirdLocationNoteDetail : SfsStoreRecommendFromDetailWithFromToEnti { /// - /// 发料时间 + /// 发出时间 /// public DateTime IssueTime { get; set; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs index e2f3f79ec..c8e5b798b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs @@ -35,10 +35,17 @@ public class ThirdLocationRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasT /// public string ToWarehouseCode { get; set; } + /// + /// 来源库位 + /// + public string FromLocationCode { get; set; } + /// /// 来源库区 /// public string FromLocationArea { get; set; } + + // /// // /// 在途库库位 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs index 492ecff82..387906be4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs @@ -48,7 +48,8 @@ public static class ThirdLocationJobDbContextModelCreatingExtensions b.Property(q => q.ToWarehouseCode).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToLocationArea).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToLocationGroup).HasMaxLength(SfsPropertyConst.CodeLength); - b.Property(q => q.RequestLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.FromLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.FromLocationArea).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.WorkStation).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.Operation).HasMaxLength(SfsPropertyConst.CodeLength); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs index 8884bf84b..087829cc1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs @@ -46,6 +46,8 @@ public static class ThirdLocationRequestDbContextModelCreatingExtensions b.Property(q => q.ToWarehouseCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToLocationArea).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.FromLocationCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.FromLocationArea).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ExpiredTime).IsRequired(); b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.WorkStation).HasMaxLength(SfsPropertyConst.CodeLength); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs index 46358c324..b336d5613 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs @@ -35,7 +35,7 @@ public partial class StoreEventAutoMapperProfile : Profile ; CreateMap() - .ForMember(x => x.RequestLocationCode, y => y.MapFrom(d => d.ToLocationCode)) + .ForMember(x => x.FromLocationCode, y => y.MapFrom(d => d.FromLocationCode)) .Ignore(x => x.RecommendFromLocationArea) .Ignore(x => x.RecommendFromLocationGroup) .Ignore(x => x.HandledFromLocationArea) @@ -99,7 +99,7 @@ public partial class StoreEventAutoMapperProfile : Profile .Ignore(x => x.ToLocationArea) .Ignore(x => x.ToLocationGroup) .Ignore(x => x.HandledFromWarehouseCode) - .Ignore(x => x.RequestLocationCode) + .Ignore(x => x.FromLocationCode) .Ignore(x => x.ToLocationCode) .Ignore(x => x.ProdLine) .Ignore(x => x.WorkStation) @@ -123,12 +123,13 @@ public partial class StoreEventAutoMapperProfile : Profile .Ignore(x => x.PlanBeginTime) .Ignore(x => x.PlannedSplitRule) .Ignore(x => x.DeliveryQty) - .Ignore(x => x.RequestLocationCode) + .Ignore(x => x.FromLocationCode) .Ignore(x => x.ToLocationCode) .Ignore(x => x.ProdLine) .Ignore(x => x.WorkStation) .Ignore(x => x.PositionCode) .Ignore(x => x.RecommendType) + .Ignore(x => x.FromLocationArea) .IgnoreIHasRecommendAndHandledFrom(); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Bases/StoreEventHandlerBase.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Bases/StoreEventHandlerBase.cs index a0a433e43..4f549a3fa 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Bases/StoreEventHandlerBase.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Bases/StoreEventHandlerBase.cs @@ -10,6 +10,7 @@ using Volo.Abp.Timing; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; +using Win_in.Sfs.Wms.Store.Domain.Acl.ErpLocationItem; using Win_in.Sfs.Wms.Store.Domain.Acl.ItemBasic; using Win_in.Sfs.Wms.Store.Domain.Acl.Location; using Win_in.Sfs.Wms.Store.Domain.Acl.TransactionType; @@ -40,5 +41,7 @@ public abstract class StoreEventHandlerBase : ITransientDependency protected IItemBasicAclService ItemBasicAclService => LazyServiceProvider.LazyGetRequiredService(); + protected IErpLocationItemAclService ErpLocationItemAclService => LazyServiceProvider.LazyGetRequiredService(); + protected IDatabase RedisDB; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs index dece75486..ca4800d8d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs @@ -120,7 +120,7 @@ public class ThirdLocationRequestEventHandler { var jobs = new List(); - var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);//库存事务 + var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.TransferLib, EnumTransSubType.Transfer_Warehouse).ConfigureAwait(false);//库存事务 var toLocationCodes = thirdLocationRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合 var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合 @@ -245,7 +245,7 @@ public class ThirdLocationRequestEventHandler //ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false); var detail = ObjectMapper.Map(balance); - detail.RequestLocationCode = thirdLocationRequestDetail.ToLocationCode; + detail.FromLocationCode = thirdLocationRequestDetail.FromLocationCode; detail.WorkStation = thirdLocationRequestDetail.WorkStation; detail.ExpiredTime = thirdLocationRequestDetail.ExpiredTime; detail.PositionCode = thirdLocationRequestDetail.PositionCode; @@ -271,6 +271,7 @@ public class ThirdLocationRequestEventHandler detail.ToLocationErpCode = thirdLocationRequestDetail.ToLocationErpCode; detail.ToLocationArea = thirdLocationRequestDetail.ToLocationArea; detail.ToWarehouseCode = thirdLocationRequestDetail.ToWarehouseCode; + detail.FromLocationArea = thirdLocationRequestDetail.FromLocationArea; //detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code; detail.ProdLine = toLocationGroupCode; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CustomerProductionReturnNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CustomerProductionReturnNoteEventHandler.cs index 81bea4400..f1e5fdb7b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CustomerProductionReturnNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CustomerProductionReturnNoteEventHandler.cs @@ -1,8 +1,11 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Office2010.Excel; +using IdentityServer4.Models; using Volo.Abp.EventBus; using Volo.Abp.Uow; +using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; @@ -79,9 +82,16 @@ public class CustomerProductionReturnNoteEventHandler { var transaction = ObjectMapper.Map(detail); + transaction.PackingCode = (!string.IsNullOrEmpty(transaction.PackingCode) )? transaction.PackingCode :"NONE" ; + transaction.ContainerCode = (!string.IsNullOrEmpty(transaction.ContainerCode) )? transaction.ContainerCode :"NONE" ; + transaction.Lot = (!string.IsNullOrEmpty(transaction.Lot) )? transaction.Lot :"NONE" ; + transaction.LocationArea = (!string.IsNullOrEmpty(transaction.LocationArea) )? transaction.LocationArea :"NONE" ; + transaction.LocationGroup = (!string.IsNullOrEmpty(transaction.LocationGroup) )? transaction.LocationGroup :"NONE" ; + transaction.LocationErpCode = (!string.IsNullOrEmpty(transaction.LocationErpCode))? transaction.LocationErpCode :"NONE" ; + transaction.WarehouseCode = (!string.IsNullOrEmpty(transaction.WarehouseCode)) ? transaction.WarehouseCode : "NONE"; + transaction.LocationErpCode = (!string.IsNullOrEmpty(transaction.LocationErpCode)) ? transaction.LocationErpCode : "NONE"; transaction.TransType = TransType; - transaction.TransInOut = TransInOut; - + transaction.TransInOut = TransInOut; transaction.Worker = CustomerProductionReturnNote.Worker; transaction.DocNumber = CustomerProductionReturnNote.Number; transaction.JobNumber = CustomerProductionReturnNote.JobNumber; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/MesNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/MesNoteEventHandler.cs index d8b70a01f..52ef2f6a6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/MesNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/MesNoteEventHandler.cs @@ -51,6 +51,11 @@ public class MesNoteEventHandler //} //else //{ + + + + + var transferLogs = new List(); foreach (var MesNote in MesNotes) {