Browse Source

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

dev_DY_CC
郑勃旭 1 year ago
parent
commit
f136a3e784
  1. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs
  2. 34
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/DTOs/GaoTongResultDTO.cs
  3. 20
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/DTOs/GaoTongResultStatus.cs
  4. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/GaoTongPermissions.cs
  5. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/IGaoTongAppService.cs
  6. 37
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/Inputs/ZuPanEditInput.cs
  7. 138
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAppService.cs
  8. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs
  9. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/EnumExchangeDataType.cs
  10. 107
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/AssembleIssueNoteEventHandler.cs
  11. 10
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/CoatingIssueNoteEventHandler.cs
  12. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/InjectionIssueNoteEventHandler.cs

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");
}
}
}

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"
}
*/

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

@ -1,10 +1,142 @@
using System;
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.GaoTongs;
internal class GaoTongAppService
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;
}
}
}

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();
}
}

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

@ -41,5 +41,9 @@ public enum EnumExchangeDataType
/// 涂装发料
/// </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);
}
}
}

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

@ -12,7 +12,7 @@ using Win_in.Sfs.Wms.Store.Notes.IssueNotes;
namespace Win_in.Sfs.Wms.Store.Event.DataExchanges;
/// <summary>
/// 涂装发料记录传给TYRP(线边领料单)
/// 涂装发料记录传给TYRP(线边领料单)
/// </summary>
public class CoatingIssueNoteEventHandler
: StoreDataExchangeEventHandlerBase<CoatingIssueNote>
@ -86,12 +86,12 @@ public class CoatingIssueNoteEventHandler
//2023-12-6要求同储位不传入接口 按历史规则
var result = new List<CoatingIssueNoteDTO>();
foreach (var injectionIssueNoteDto in toErpDto)
foreach (var coatingIssueNoteDto in toErpDto)
{
injectionIssueNoteDto.Details.RemoveAll(p => p.HandledFromLocationErpCode == p.HandledToLocationErpCode);
if (injectionIssueNoteDto.Details.Count > 0)
coatingIssueNoteDto.Details.RemoveAll(p => p.HandledFromLocationErpCode == p.HandledToLocationErpCode);
if (coatingIssueNoteDto.Details.Count > 0)
{
result.Add(injectionIssueNoteDto);
result.Add(coatingIssueNoteDto);
}
}

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

@ -11,7 +11,7 @@ using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Event.DataExchanges;
/// <summary>
/// 注塑发料记录传给TYRP(线边领料单)
/// 注塑发料记录传给TYRP(线边领料单)
/// </summary>
public class InjectionIssueNoteEventHandler
: StoreDataExchangeEventHandlerBase<InjectionIssueNote>

Loading…
Cancel
Save