Browse Source

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

dev_DY_CC
lvzb 1 year ago
parent
commit
b217d79fd8
  1. 33
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/ItemContainerController.cs
  2. 176
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs
  3. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs
  4. 125
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs
  5. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs
  6. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
  7. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs
  8. 2
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs
  9. 21
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs
  10. 34
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/DTOs/GaoTongResultDTO.cs
  11. 20
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/DTOs/GaoTongResultStatus.cs
  12. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/GaoTongPermissions.cs
  13. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/IGaoTongAppService.cs
  14. 37
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/Inputs/ZuPanEditInput.cs
  15. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/DTOs/KittingIssueJobDTO.cs
  16. 142
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAppService.cs
  17. 16
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAutoMapperProfile.cs
  18. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
  19. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs
  20. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/EnumExchangeDataType.cs
  21. 107
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/AssembleIssueNoteEventHandler.cs
  22. 107
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/CoatingIssueNoteEventHandler.cs
  23. 106
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/InjectionIssueNoteEventHandler.cs
  24. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ThirdLocationNoteEventHandler.cs
  25. 153
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/KittingIssueRequestEventHandler.cs

33
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/ItemContainerController.cs

@ -0,0 +1,33 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.BaseDatas;
/// <summary>
/// </summary>
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}item-container")]
public class ItemContainerController : AbpController
{
private readonly IItemContainerAppService _itemContainerAppService;
public ItemContainerController(IItemContainerAppService itemContainerAppService)
{
_itemContainerAppService = itemContainerAppService;
}
/// <summary>
/// 根据名称获取物品
/// </summary>
/// <param name="itemCode"></param>
/// <returns></returns>
[HttpGet("by-item")]
public virtual async Task<ItemContainerDTO> GetListByItemNameAsync(string itemCode)
{
var dto = await _itemContainerAppService.GetByItemCodeAsync(itemCode).ConfigureAwait(false);
return dto;
}
}

176
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs

@ -0,0 +1,176 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs.IssueJobs;
/// <summary>
/// </summary>
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}job/kitting-issue")]
public class KittingIssueJobsController : AbpController
{
private readonly IKittingIssueJobAppService _kittingIssueJobAppService;
private readonly IUserWorkGroupAppService _userWorkGroupAppService;
public KittingIssueJobsController(IKittingIssueJobAppService kittingIssueJobAppService, IUserWorkGroupAppService userWorkGroupAppService)
{
_kittingIssueJobAppService = kittingIssueJobAppService;
_userWorkGroupAppService = userWorkGroupAppService;
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<KittingIssueJobDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumJobStatus.Done);
}
else
{
status.Add((int)EnumJobStatus.Open);
status.Add((int)EnumJobStatus.Wait);
status.Add((int)EnumJobStatus.Doing);
status.Add((int)EnumJobStatus.Partial);
}
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
}
};
var list = await _kittingIssueJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
return list;
}
/// <summary>
/// 承接任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("take/{id}")]
public virtual async Task TakeAsync(Guid id)
{
await _kittingIssueJobAppService.AcceptAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 取消承接任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("cancel-take/{id}")]
public virtual async Task CancelTakeAsync(Guid id)
{
await _kittingIssueJobAppService.CancelAcceptAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 执行任务明细
/// </summary>
/// <returns></returns>
[HttpPost("ExecuteDetail/{masterId}")]
public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto)
{
await _kittingIssueJobAppService.ExecuteDetailAsync(masterId,detailId,issueJobDetailDto).ConfigureAwait(false);
}
/// <summary>
/// 获取任务数量
/// </summary>
/// <returns></returns>
[HttpGet("count")]
public virtual async Task<ActionResult<long>> CountAsync()
{
var status = new List<int>
{
(int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial, (int)EnumJobStatus.Wait
};
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
Sorting = $"{nameof(InspectJobDTO.Priority)} ASC",
Condition = new Condition
{
Filters = new List<Filter>
{
//new(nameof(InspectJobDTO.WorkGroupCode),jsonCodes,"In"),
new(nameof(InspectJobDTO.JobStatus), jsonStatus, "In")
}
}
};
var count = await _kittingIssueJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false);
return Ok(count);
}
/// <summary>
/// 获取任务详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public virtual async Task<ActionResult<KittingIssueJobDTO>> GetAsync(Guid id)
{
var result = await _kittingIssueJobAppService.GetAsync(id).ConfigureAwait(false);
return Ok(result);
}
/// <summary>
/// 根据Job Number 获取盘点任务列表
/// </summary>
/// <param name="jobNumber"></param>
/// <returns></returns>
[HttpGet("by-number/{jobNumber}")]
public virtual async Task<ActionResult<KittingIssueJobDTO>> GetByNumberAsync(string jobNumber)
{
var jobDto = await _kittingIssueJobAppService.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;
}
}

2
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs → be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs

@ -31,7 +31,7 @@ public class TransferLibJobController : AbpController
}
/// <summary>
/// 获取盘点任务详情
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>

125
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs

@ -0,0 +1,125 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
/// <summary>
/// Kitting叫料请求
/// </summary>
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}store/kitting-request")]
public class KittingRequestController : AbpController
{
private readonly IKittingIssueRequestAppService _kittingIssueRequestAppService;
private readonly IUserWorkGroupAppService _userWorkGroupAppService;
/// <summary>
/// </summary>
/// <param name="kittingIssueRequestAppService"></param>
public KittingRequestController(IKittingIssueRequestAppService kittingIssueRequestAppService,
IUserWorkGroupAppService userWorkGroupAppService)
{
_kittingIssueRequestAppService = kittingIssueRequestAppService;
_userWorkGroupAppService = userWorkGroupAppService;
}
/// <summary>
/// Kitting叫料申请
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("")]
public virtual async Task CreateAsync(KittingIssueRequestEditInput input)
{
await _kittingIssueRequestAppService.CreateAndHandleAsync(input).ConfigureAwait(false);
}
/// <summary>
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<KittingIssueRequestDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumRequestStatus.Completed);
}
else
{
status.Add((int)EnumRequestStatus.Partial);
status.Add((int)EnumRequestStatus.Handling);
status.Add((int)EnumRequestStatus.New);
}
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsStoreRequestInputBase
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
}
};
var list = await _kittingIssueRequestAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
return list;
}
/// <summary>
/// </summary>
/// <param name="id"></param>
[HttpPost("handle/{id}")]
public virtual async Task HandleAsync(Guid id)
{
await _kittingIssueRequestAppService.HandleAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 根据Job Number 获取盘点任务列表
/// </summary>
/// <param name="jobNumber"></param>
/// <returns></returns>
[HttpGet("by-number/{requestNumber}")]
public virtual async Task<ActionResult<KittingIssueRequestDTO>> GetByNumberAsync(string requestNumber)
{
var jobDto = await _kittingIssueRequestAppService.GetByNumberAsync(requestNumber).ConfigureAwait(false);
if (jobDto == null)
{
throw new UserFriendlyException($"未找到编号为 {requestNumber} 的请求");
}
return jobDto;
}
/// <summary>
/// 获取任务详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public virtual async Task<ActionResult<KittingIssueRequestDTO>> GetAsync(Guid id)
{
var result = await _kittingIssueRequestAppService.GetAsync(id).ConfigureAwait(false);
return Ok(result);
}
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs

@ -8,4 +8,5 @@ public interface IItemContainerAppService : ISfsBaseDataAppServiceBase<ItemConta
{
Task<List<ItemContainerDTO>> GetListByItemCodeAsync(string itemCode);
Task UpsertAndItemBasicUomAsync(string itemCode,decimal stdPackQty);
Task<ItemContainerDTO> GetByItemCodeAsync(string itemCode);
}

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
@ -81,7 +82,6 @@ public class ItemContainerAppService
return dtos;
}
protected override async Task ValidateImportModelAsync(ItemContainerImportInput importInput, List<ValidationResult> validationRresult)
{
await base.CheckItemBasicPackUomAsync(importInput.ItemCode, importInput.BasicUom, validationRresult).ConfigureAwait(false);
@ -97,4 +97,11 @@ public class ItemContainerAppService
await _repository.UpsertAsync(entity).ConfigureAwait(false);
await ItemBasicAppService.UpsertStdPackQtyAsync(itemCode, stdPackQty).ConfigureAwait(false);
}
[HttpPut("get-by-item")]
public async Task<ItemContainerDTO> GetByItemCodeAsync(string itemCode)
{
var entity = await _repository.FindAsync(p => p.ItemCode == itemCode).ConfigureAwait(false);
return ObjectMapper.Map<ItemContainer, ItemContainerDTO>(entity);
}
}

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs

@ -28,4 +28,13 @@ public sealed class CommonHelper
return DateTime.Now;
}
}
public static string CurTimeStr
{
get
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}

2
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs

@ -45,4 +45,6 @@ public interface IExpectOutAppService
EnumInventoryStatus enumInventoryStatus,
string lot,
decimal qty);
Task RemoveByNumberAsync(string number);
}

21
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs

@ -64,15 +64,24 @@ public class ExpectOutAppService
if (expectOut != null)
{
expectOut.Qty -= qty;
if (expectOut.Qty == 0)
{
await _repository.DeleteAsync(expectOut).ConfigureAwait(false);
}
else
{
await _repository.UpdateAsync(expectOut).ConfigureAwait(false);
}
}
}
if (expectOut.Qty == 0)
{
await _repository.DeleteAsync(expectOut).ConfigureAwait(false);
}
else
[HttpPost("remove/job-number")]
public virtual async Task RemoveByNumberAsync(string number)
{
var expectOut = await _repository.GetListAsync(p => p.JobNumber == number).ConfigureAwait(false);
if (expectOut != null && expectOut.Any())
{
await _repository.UpdateAsync(expectOut).ConfigureAwait(false);
await _repository.DeleteManyAsync(expectOut).ConfigureAwait(false);
}
}

34
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/DTOs/GaoTongResultDTO.cs

@ -0,0 +1,34 @@
using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Application.Dtos;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 库存转移记录-实体DTO //??TransferLib实体
/// </summary>
public class GaoTongResultDTO : EntityDto
{
/// <summary>
///
/// </summary>
[Display(Name = "")]
public string Code { get; set; }
/// <summary>
///
/// </summary>
[Display(Name = "")]
public string Message { get; set; }
/// <summary>
///
/// </summary>
[Display(Name = "")]
public string OperateTime { get; set; }
}
/*
{"code":"1","message":"接收成功",
"operateTime":"2020-01-0513:50:01"}
*/

20
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/DTOs/GaoTongResultStatus.cs

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public sealed class GaoTongResultStatus
{
/// <summary>
/// 成功
/// </summary>
public const string Success = "1";
/// <summary>
/// 失败
/// </summary>
public const string Failure = "-1";
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/GaoTongPermissions.cs

@ -0,0 +1,8 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class GaoTongPermissions
{
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/IGaoTongAppService.cs

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 立库接口
/// </summary>
public interface IGaoTongAppService : IApplicationService
{
/// <summary>
/// 组盘信息反馈到东阳WMS(喷涂完工转储)
/// </summary>
/// <param name="input">组盘接口输入参数</param>
/// <returns>立库接口通用输出参数</returns>
Task<GaoTongResultDTO> FeedbackZuPanAsync(ZuPanEditInput input);
}

37
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/Inputs/ZuPanEditInput.cs

@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Application.Dtos;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 新增和更新基础DTO //??TransferLib实体
/// </summary>
public class ZuPanEditInput : EntityDto
{
[Display(Name = "产品编号:映射ERP料号")]
public string ItemCode { get; set; }
[Display(Name = "器具号")]
public string ContainerCode { get; set; }
[Display(Name = "数量")]
public string Qty { get; set; }
[Display(Name = "固定值,在立库中配置。用于多立库时区分哪个立库")]
public string ToLocationCode { get; set; }
[Display(Name = "由1.2接口中获取富维东阳MES提供的来源位置")]
public string FromLocationCode { get; set; }
}
/*
{
"ItemCode": "ERPCODE0001",
"Qty": 122,
"ContainerCode": "C111123",
"ToLocationCode": "W1",
"FromLocationCode": "WIPT"
}
*/

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/DTOs/KittingIssueJobDTO.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;

142
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAppService.cs

@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Users;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 立库接口
/// </summary>
//[Authorize]
[AllowAnonymous]
[Route($"{StoreConsts.RootPath}gao-tong")]
public class GaoTongAppService : ApplicationService, IGaoTongAppService
{
private readonly IBalanceAppService _balanceAppService;
private readonly ITransferNoteAppService _transferNoteAppService;
private readonly CurrentUser _currentUser;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly ILocationAppService _locationAppService;
public GaoTongAppService(
IBalanceAppService balanceAppService
, ITransferNoteAppService transferNoteAppService
, CurrentUser currentUser
, IItemBasicAppService itemBasicAppService
,ILocationAppService locationAppService)
{
_balanceAppService = balanceAppService;
_transferNoteAppService = transferNoteAppService;
_currentUser = currentUser;
_itemBasicAppService = itemBasicAppService;
_locationAppService = locationAppService;
}
/// <summary>
/// 组盘信息反馈到东阳WMS
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("feedback-zu-pan")]
public async Task<GaoTongResultDTO> FeedbackZuPanAsync(ZuPanEditInput input)
{
GaoTongResultDTO ret = new GaoTongResultDTO();
try
{
ItemBasicDTO itemBasicObj = await _itemBasicAppService.GetByCodeAsync(input.ItemCode).ConfigureAwait(false);
if (itemBasicObj == null)
{
throw new UserFriendlyException($"{input.ItemCode}在Item表不存在!");
}
TransferNoteEditInput transferNoteEditInput = new TransferNoteEditInput();
transferNoteEditInput.TenantId = null;
transferNoteEditInput.Remark = String.Empty;
transferNoteEditInput.Worker = _currentUser.UserName;
transferNoteEditInput.ActiveDate = CommonHelper.CurTime;
transferNoteEditInput.Type = EnumTransSubType.Transfer_Coating.ToString(); //喷涂完工转储
transferNoteEditInput.UseOnTheWayLocation = false;
//transferNoteEditInput.number
//transferNoteEditInput.CallServerName
//transferNoteEditInput.Confirmed = true;
//transferNoteEditInput.ConfirmTime = CommonHelper.CurTime;
if (transferNoteEditInput.Details == null)
{
transferNoteEditInput.Details = new List<TransferNoteDetailInput>();
}
TransferNoteDetailInput detailObj = new TransferNoteDetailInput();
transferNoteEditInput.Details.Add(detailObj);
detailObj.Remark = "";
detailObj.ItemCode = input.ItemCode;
detailObj.ItemName = itemBasicObj.Name;
detailObj.ItemDesc1 = itemBasicObj.Desc1;
detailObj.ItemDesc2 = itemBasicObj.Desc2;
detailObj.Uom = itemBasicObj.BasicUom;
detailObj.Qty = input.Qty.TryToDecimalZero();
detailObj.StdPackQty = itemBasicObj.StdPackQty;
#region 去箱、去批、去托
detailObj.FromPackingCode = String.Empty;
detailObj.ToPackingCode = String.Empty;
detailObj.FromContainerCode = String.Empty;
detailObj.ToContainerCode = String.Empty;
detailObj.FromLot = String.Empty;
detailObj.ToLot = String.Empty;
#endregion
detailObj.SupplierBatch = String.Empty;
detailObj.ArriveDate = CommonHelper.CurTime;
detailObj.ProduceDate = CommonHelper.CurTime;
detailObj.ExpireDate = DateTime.MaxValue;
var fromLocationObj = await _locationAppService.GetByCodeAsync(input.FromLocationCode).ConfigureAwait(false);
if (fromLocationObj == null)
{
throw new UserFriendlyException($"{input.FromLocationCode}在Location表不存在!");
}
detailObj.FromLocationCode = input.FromLocationCode;
detailObj.FromLocationArea = fromLocationObj.AreaCode;
detailObj.FromLocationGroup = fromLocationObj.LocationGroupCode;
detailObj.FromLocationErpCode = fromLocationObj.ErpLocationCode;
detailObj.FromWarehouseCode = fromLocationObj.WarehouseCode;
var toLocationObj = await _locationAppService.GetByCodeAsync(input.ToLocationCode).ConfigureAwait(false);
if (toLocationObj == null)
{
throw new UserFriendlyException($"{input.ToLocationCode}在Location表不存在!");
}
detailObj.ToLocationCode = input.ToLocationCode;
detailObj.ToLocationArea = toLocationObj.AreaCode;
detailObj.ToLocationGroup = toLocationObj.LocationGroupCode;
detailObj.ToLocationErpCode = toLocationObj.ErpLocationCode;
detailObj.ToWarehouseCode = toLocationObj.WarehouseCode;
detailObj.FromStatus = EnumInventoryStatus.OK;
detailObj.ToStatus = EnumInventoryStatus.OK;
detailObj.OnTheWayLocationCode = String.Empty;
detailObj.Reason = "";
var temp = await _transferNoteAppService.CreateAsync(transferNoteEditInput).ConfigureAwait(false);
ret.Code = GaoTongResultStatus.Success;
ret.Message = "接收成功";
ret.OperateTime = CommonHelper.CurTimeStr;
return ret;
}
catch (Exception ex)
{
ret.Code = GaoTongResultStatus.Failure;
ret.Message = "FeedbackZuPanAsync执行失败:" + ex.Message;
ret.OperateTime = CommonHelper.CurTimeStr;
return ret;
}
}
}

16
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAutoMapperProfile.cs

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AutoMapper;
namespace Win_in.Sfs.Wms.Store.Application;
public partial class StoreApplicationAutoMapperProfile : Profile
{
private void GaoTongAutoMapperProfile()
{
}
}

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs

@ -209,7 +209,9 @@ public class KittingIssueJobAppService
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
{
input.JobStatus = EnumJobStatus.Wait;
}
else if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode == 1)
{
jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate;
jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode;
jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate;
@ -278,6 +280,8 @@ public class KittingIssueJobAppService
kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot,
kittingIssueJobDetailDto.HandledToQty).ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
await KittingIssueRequestAppService.UpdateStatusCompletedAsync(kittingIssueJob.KittingRequestNumber)
.ConfigureAwait(false);

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs

@ -137,5 +137,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
ChassisOperationSequenceAutoMapperProfile();
KittingPackagingNoteAutoMapperProfile();
//高通WMS-立库接口
GaoTongAutoMapperProfile();
}
}

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/EnumExchangeDataType.cs

@ -32,5 +32,18 @@ public enum EnumExchangeDataType
//回收料调整
Item_Transform = 28,
//半成品上架
SemiPutaway = 29
SemiPutaway = 29,
/// <summary>
/// 注塑发料
/// </summary>
InjectionIssue=30,
/// <summary>
/// 涂装发料
/// </summary>
CoatingIssue=31,
/// <summary>
/// 装配发料
/// </summary>
AssembleIssue=32,
}

107
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/AssembleIssueNoteEventHandler.cs

@ -0,0 +1,107 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.EventBus;
using Volo.Abp.Uow;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Notes.IssueNotes;
namespace Win_in.Sfs.Wms.Store.Event.DataExchanges;
/// <summary>
/// 装配发料记录传给TYRP(线边仓领料单)
/// </summary>
public class AssembleIssueNoteEventHandler
: StoreDataExchangeEventHandlerBase<AssembleIssueNote>
, ILocalEventHandler<SfsCreatedEntityEventData<AssembleIssueNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<AssembleIssueNote>>>
{
private const EnumExchangeDataType ExchangeDataType = EnumExchangeDataType.AssembleIssue;
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<AssembleIssueNote> eventData)
{
var entity = eventData.Entity;
await AddExchangeDataAsync(entity).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<AssembleIssueNote>> eventData)
{
var entities = eventData.Entity;
await AddExchangeDataAsync(entities).ConfigureAwait(false);
}
protected override async Task AddExchangeDataAsync(List<AssembleIssueNote> entities)
{
var dtos = ObjectMapper.Map<List<AssembleIssueNote>, List<AssembleIssueNoteDTO>>(entities);
foreach (var detail in dtos.SelectMany(dto => dto.Details))
{
if (string.IsNullOrEmpty(detail.HandledFromLocationErpCode))
{
var location = await LocationAclService.GetByCodeAsync(detail.HandledFromLocationCode).ConfigureAwait(false);
if (location != null)
{
detail.HandledFromLocationErpCode = location.ErpLocationCode;
detail.HandledFromLocationGroup = location.LocationGroupCode;
detail.HandledFromLocationArea = location.AreaCode;
if (string.IsNullOrEmpty(detail.HandledFromWarehouseCode))
{
detail.HandledFromWarehouseCode = location.WarehouseCode;
}
}
}
if (string.IsNullOrEmpty(detail.HandledToLocationErpCode))
{
var location = await LocationAclService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false);
if (location != null)
{
detail.HandledToLocationErpCode = location.ErpLocationCode;
detail.HandledToLocationGroup = location.LocationGroupCode;
detail.HandledToLocationArea = location.AreaCode;
if (string.IsNullOrEmpty(detail.HandledToWarehouseCode))
{
detail.HandledToWarehouseCode = location.WarehouseCode;
}
}
}
}
var toErpDto = new List<AssembleIssueNoteDTO>();
foreach (var item in dtos)
{
if (item.Details != null && item.Details.Count != 0)
{
toErpDto.Add(item);
}
}
//2023-12-6要求同储位不传入接口 按历史规则
var result = new List<AssembleIssueNoteDTO>();
foreach (var assembleIssueNoteDto in toErpDto)
{
assembleIssueNoteDto.Details.RemoveAll(p => p.HandledFromLocationErpCode == p.HandledToLocationErpCode);
if (assembleIssueNoteDto.Details.Count > 0)
{
result.Add(assembleIssueNoteDto);
}
}
if (result.Count > 0)
{
var exchangeDataerp =
await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, ExchangeDataType, result)
.ConfigureAwait(false);
await AddManyAsync(exchangeDataerp).ConfigureAwait(false);
}
}
}

107
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/CoatingIssueNoteEventHandler.cs

@ -0,0 +1,107 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.EventBus;
using Volo.Abp.Uow;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Notes.IssueNotes;
namespace Win_in.Sfs.Wms.Store.Event.DataExchanges;
/// <summary>
/// 涂装发料记录传给TYRP(线边仓领料单)
/// </summary>
public class CoatingIssueNoteEventHandler
: StoreDataExchangeEventHandlerBase<CoatingIssueNote>
, ILocalEventHandler<SfsCreatedEntityEventData<CoatingIssueNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<CoatingIssueNote>>>
{
private const EnumExchangeDataType ExchangeDataType = EnumExchangeDataType.CoatingIssue;
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<CoatingIssueNote> eventData)
{
var entity = eventData.Entity;
await AddExchangeDataAsync(entity).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<CoatingIssueNote>> eventData)
{
var entities = eventData.Entity;
await AddExchangeDataAsync(entities).ConfigureAwait(false);
}
protected override async Task AddExchangeDataAsync(List<CoatingIssueNote> entities)
{
var dtos = ObjectMapper.Map<List<CoatingIssueNote>, List<CoatingIssueNoteDTO>>(entities);
foreach (var detail in dtos.SelectMany(dto => dto.Details))
{
if (string.IsNullOrEmpty(detail.HandledFromLocationErpCode))
{
var location = await LocationAclService.GetByCodeAsync(detail.HandledFromLocationCode).ConfigureAwait(false);
if (location != null)
{
detail.HandledFromLocationErpCode = location.ErpLocationCode;
detail.HandledFromLocationGroup = location.LocationGroupCode;
detail.HandledFromLocationArea = location.AreaCode;
if (string.IsNullOrEmpty(detail.HandledFromWarehouseCode))
{
detail.HandledFromWarehouseCode = location.WarehouseCode;
}
}
}
if (string.IsNullOrEmpty(detail.HandledToLocationErpCode))
{
var location = await LocationAclService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false);
if (location != null)
{
detail.HandledToLocationErpCode = location.ErpLocationCode;
detail.HandledToLocationGroup = location.LocationGroupCode;
detail.HandledToLocationArea = location.AreaCode;
if (string.IsNullOrEmpty(detail.HandledToWarehouseCode))
{
detail.HandledToWarehouseCode = location.WarehouseCode;
}
}
}
}
var toErpDto = new List<CoatingIssueNoteDTO>();
foreach (var item in dtos)
{
if (item.Details != null && item.Details.Count != 0)
{
toErpDto.Add(item);
}
}
//2023-12-6要求同储位不传入接口 按历史规则
var result = new List<CoatingIssueNoteDTO>();
foreach (var coatingIssueNoteDto in toErpDto)
{
coatingIssueNoteDto.Details.RemoveAll(p => p.HandledFromLocationErpCode == p.HandledToLocationErpCode);
if (coatingIssueNoteDto.Details.Count > 0)
{
result.Add(coatingIssueNoteDto);
}
}
if (result.Count > 0)
{
var exchangeDataerp =
await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, ExchangeDataType, result)
.ConfigureAwait(false);
await AddManyAsync(exchangeDataerp).ConfigureAwait(false);
}
}
}

106
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/InjectionIssueNoteEventHandler.cs

@ -0,0 +1,106 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.EventBus;
using Volo.Abp.Uow;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Event.DataExchanges;
/// <summary>
/// 注塑发料记录传给TYRP(线边仓领料单)
/// </summary>
public class InjectionIssueNoteEventHandler
: StoreDataExchangeEventHandlerBase<InjectionIssueNote>
, ILocalEventHandler<SfsCreatedEntityEventData<InjectionIssueNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<InjectionIssueNote>>>
{
private const EnumExchangeDataType ExchangeDataType = EnumExchangeDataType.InjectionIssue;
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<InjectionIssueNote> eventData)
{
var entity = eventData.Entity;
await AddExchangeDataAsync(entity).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<InjectionIssueNote>> eventData)
{
var entities = eventData.Entity;
await AddExchangeDataAsync(entities).ConfigureAwait(false);
}
protected override async Task AddExchangeDataAsync(List<InjectionIssueNote> entities)
{
var dtos = ObjectMapper.Map<List<InjectionIssueNote>, List<InjectionIssueNoteDTO>>(entities);
foreach (var detail in dtos.SelectMany(dto => dto.Details))
{
if(string.IsNullOrEmpty(detail.HandledFromLocationErpCode))
{
var location = await LocationAclService.GetByCodeAsync(detail.HandledFromLocationCode).ConfigureAwait(false);
if (location != null)
{
detail.HandledFromLocationErpCode = location.ErpLocationCode;
detail.HandledFromLocationGroup = location.LocationGroupCode;
detail.HandledFromLocationArea = location.AreaCode;
if (string.IsNullOrEmpty(detail.HandledFromWarehouseCode))
{
detail.HandledFromWarehouseCode = location.WarehouseCode;
}
}
}
if(string.IsNullOrEmpty(detail.HandledToLocationErpCode))
{
var location = await LocationAclService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false);
if (location != null)
{
detail.HandledToLocationErpCode = location.ErpLocationCode;
detail.HandledToLocationGroup = location.LocationGroupCode;
detail.HandledToLocationArea = location.AreaCode;
if (string.IsNullOrEmpty(detail.HandledToWarehouseCode))
{
detail.HandledToWarehouseCode = location.WarehouseCode;
}
}
}
}
var toErpDto = new List<InjectionIssueNoteDTO>();
foreach (var item in dtos)
{
if (item.Details != null && item.Details.Count != 0)
{
toErpDto.Add(item);
}
}
//2023-12-6要求同储位不传入接口 按历史规则
var result = new List<InjectionIssueNoteDTO>();
foreach (var injectionIssueNoteDto in toErpDto)
{
injectionIssueNoteDto.Details.RemoveAll(p => p.HandledFromLocationErpCode == p.HandledToLocationErpCode);
if (injectionIssueNoteDto.Details.Count > 0)
{
result.Add(injectionIssueNoteDto);
}
}
if (result.Count > 0)
{
var exchangeDataerp =
await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, ExchangeDataType, result)
.ConfigureAwait(false);
await AddManyAsync(exchangeDataerp).ConfigureAwait(false);
}
}
}

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ThirdLocationNoteEventHandler.cs

@ -32,10 +32,9 @@ namespace Win_in.Sfs.Wms.Store.Event.DataExchanges
await AddExchangeDataAsync(entity).ConfigureAwait(false);
}
protected override async Task AddExchangeDataAsync(List<ThirdLocationNote> entities)
{
var dtos = ObjectMapper.Map<List<ThirdLocationNote>, List<TransferNoteDTO>>(entities);
var dtos = ObjectMapper.Map<List<ThirdLocationNote>, List<ThirdLocationNoteDTO>>(entities);
var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Transfer, dtos).ConfigureAwait(false);
await AddManyAsync(exchangeData).ConfigureAwait(false);

153
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/KittingIssueRequestEventHandler.cs

@ -2,7 +2,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using AutoMapper.Internal;
using Castle.Components.DictionaryAdapter;
using Volo.Abp;
using Volo.Abp.EventBus;
@ -36,7 +35,7 @@ public class KittingIssueRequestEventHandler
ILocationAppService locationAppService,
IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService
//, IKittingIssueRequestManager kittingIssueRequestManager
)
)
{
_kittingIssueJobAppService = kittingIssueJobAppService;
_productionLineAppService = productionLineAppService;
@ -223,11 +222,11 @@ public class KittingIssueRequestEventHandler
detail.PositionCode = kittingIssueRequestDetail.PositionCode;
detail.RecommendType = kittingIssueRequestDetail.RecommendType;
detail.Uom = balance.Uom;
detail.ItemCode= balance.ItemCode;
detail.ItemDesc2= balance.ItemDesc2;
detail.ItemDesc1= balance.ItemDesc1;
detail.ItemName= balance.ItemName;
detail.ProdLine= kittingIssueRequestDetail.ProdLine;
detail.ItemCode = balance.ItemCode;
detail.ItemDesc2 = balance.ItemDesc2;
detail.ItemDesc1 = balance.ItemDesc1;
detail.ItemName = balance.ItemName;
detail.ProdLine = kittingIssueRequestDetail.ProdLine;
detail.RequestQty = balance.Qty;
detail.StdPackQty = kittingIssueRequestDetail.StdPackQty;
detail.Status = balance.Status;
@ -247,8 +246,8 @@ public class KittingIssueRequestEventHandler
detail.RecommendFromProduceDate = balance.ProduceDate;
detail.RecommendFromArriveDate = balance.ArriveDate;
detail.RecommendFromQty = balance.Qty;
detail.RecommendFromContainerCode= balance.ContainerCode;
detail.RecommendFromPackingCode= balance.PackingCode;
detail.RecommendFromContainerCode = balance.ContainerCode;
detail.RecommendFromPackingCode = balance.PackingCode;
detail.RecommendToPackingCode = balance.PackingCode;
detail.RecommendToContainerCode = balance.ContainerCode;
@ -283,7 +282,7 @@ public class KittingIssueRequestEventHandler
detail.TransferLibFromProduceDate = balance.ProduceDate;
detail.TransferLibFromArriveDate = balance.ArriveDate;
detail.TransferLibFromQty = balance.Qty;
detail.TransferLibFromContainerCode= balance.ContainerCode;
detail.TransferLibFromContainerCode = balance.ContainerCode;
detail.TransferLibFromPackingCode = balance.PackingCode;
detail.TransferLibToPackingCode = balance.PackingCode;
@ -343,7 +342,7 @@ public class KittingIssueRequestEventHandler
//当前零件的集合
var inputDetails = kittingIssueRequestDetailList;
//获取请求下 这个零件和这个库位一个需要多少箱
var sumBoxQty = inputDetails.Sum(p => p.BoxQty-p.IssuedQty);
var sumBoxQty = inputDetails.Sum(p => p.BoxQty - p.IssuedQty);
//获取生产线
var productionLineDto = await _productionLineAppService
.GetByLocationCodeAsync(inputDetails.First().ToLocationCode).ConfigureAwait(false);
@ -521,33 +520,32 @@ public class KittingIssueRequestEventHandler
{
var usableLocationCode =
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson);
if (!usableLocationCode.Any())
{
break;
}
//获取可用库存
var input = new RecommendBalanceRequestInput
if (usableLocationCode.Any())
{
ItemCode = kittingIssueRequestDetail.ItemCode,
Qty = decimal.MaxValue,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations =
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson),
IsPackingCode = true
};
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
//因为是按箱叫料 先把值赋值给箱数量上
kittingIssueRequestDetail.BoxQty = kittingIssueRequestDetail.Qty;
if (usableList.Any())
{
//因为是原料所以按箱叫料
kittingIssueJobEditInputs.AddRange(
await CreateKittingIssueJobWithBoxQtyTypeAsync(kittingIssueRequest,
new EditableList<KittingIssueRequestDetail> { kittingIssueRequestDetail }, usableList,
useBalanceList).ConfigureAwait(false));
//获取可用库存
var input = new RecommendBalanceRequestInput
{
ItemCode = kittingIssueRequestDetail.ItemCode,
Qty = decimal.MaxValue,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations =
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson),
IsPackingCode = true
};
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
//因为是按箱叫料 先把值赋值给箱数量上
kittingIssueRequestDetail.BoxQty = kittingIssueRequestDetail.Qty;
if (usableList.Any())
{
//因为是原料所以按箱叫料
kittingIssueJobEditInputs.AddRange(
await CreateKittingIssueJobWithBoxQtyTypeAsync(kittingIssueRequest,
new EditableList<KittingIssueRequestDetail> { kittingIssueRequestDetail },
usableList,
useBalanceList).ConfigureAwait(false));
}
}
}
@ -556,56 +554,57 @@ public class KittingIssueRequestEventHandler
{
var usableLocationCode =
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.ProductLocationCodeListJson);
if (!usableLocationCode.Any())
if (usableLocationCode.Any())
{
break;
}
//获取可用库存
var input = new RecommendBalanceRequestInput
{
ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode,
Qty = kittingIssueRequestDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations =
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.ProductLocationCodeListJson),
IsPackingCode = false
};
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
var temp = usableList.ToList();
foreach (var balanceDto in usableList) //计算已经用过的库存
{
var useBalanceDto = useBalanceList.Where(p =>
p.ItemCode == balanceDto.ItemCode && p.LocationCode == balanceDto.LocationCode &&
p.Lot == balanceDto.Lot && p.Status == balanceDto.Status &&
p.PackingCode == balanceDto.PackingCode);
if (useBalanceDto.Any()) //如果不为NULL,就是用过了的库存 需要减去使用量
//获取可用库存
var input = new RecommendBalanceRequestInput
{
ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode,
Qty = kittingIssueRequestDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations =
JsonSerializer.Deserialize<List<string>>(productionLineItemDto
.ProductLocationCodeListJson),
IsPackingCode = false
};
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
var temp = usableList.ToList();
foreach (var balanceDto in usableList) //计算已经用过的库存
{
balanceDto.Qty -= useBalanceDto.Sum(p => p.Qty);
if (balanceDto.Qty <= 0)
var useBalanceDto = useBalanceList.Where(p =>
p.ItemCode == balanceDto.ItemCode && p.LocationCode == balanceDto.LocationCode &&
p.Lot == balanceDto.Lot && p.Status == balanceDto.Status &&
p.PackingCode == balanceDto.PackingCode);
if (useBalanceDto.Any()) //如果不为NULL,就是用过了的库存 需要减去使用量
{
temp.Remove(balanceDto);
balanceDto.Qty -= useBalanceDto.Sum(p => p.Qty);
if (balanceDto.Qty <= 0)
{
temp.Remove(balanceDto);
}
}
}
}
usableList = temp;
usableList = temp;
kittingIssueJobEditInputs.AddRange(
await CreateKittingIssueJobWithQtyTypeAsync(kittingIssueRequest,
new List<KittingIssueRequestDetail> { kittingIssueRequestDetail }, temp,
useBalanceList).ConfigureAwait(false));
kittingIssueJobEditInputs.AddRange(
await CreateKittingIssueJobWithQtyTypeAsync(kittingIssueRequest,
new List<KittingIssueRequestDetail> { kittingIssueRequestDetail }, temp,
useBalanceList).ConfigureAwait(false));
}
}
}
}
if (kittingIssueJobEditInputs.Count > 0)//有库存 可以创建任务
if (kittingIssueJobEditInputs.Count > 0) //有库存 可以创建任务
{
//新增任务
var addKittingIssueJobDtos= await _kittingIssueJobAppService.CreateManyAsync(kittingIssueJobEditInputs).ConfigureAwait(false);
var addKittingIssueJobDtos = await _kittingIssueJobAppService.CreateManyAsync(kittingIssueJobEditInputs)
.ConfigureAwait(false);
await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest, addKittingIssueJobDtos).ConfigureAwait(false);
await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest, addKittingIssueJobDtos)
.ConfigureAwait(false);
return addKittingIssueJobDtos;
}
@ -614,15 +613,17 @@ public class KittingIssueRequestEventHandler
}
/// <summary>
/// 修改请求的 已发 已收数量
/// 修改请求的 已发 已收数量
/// </summary>
/// <param name="kittingIssueRequest"></param>
/// <param name="addKittingIssueJobDtos"></param>
/// <returns></returns>
private async Task UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest kittingIssueRequest, List<KittingIssueJobDTO> addKittingIssueJobDtos)
private async Task UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest kittingIssueRequest,
List<KittingIssueJobDTO> addKittingIssueJobDtos)
{
//原有任务
var existKittingIssueJobDtos = await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number)
var existKittingIssueJobDtos = await _kittingIssueJobAppService
.GetByRequestNumberAsync(kittingIssueRequest.Number)
.ConfigureAwait(false);
//新增的任务和已有的任务总和

Loading…
Cancel
Save