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 12 months ago
parent
commit
d2b343a45c
  1. 94
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/test/TestAppService.cs
  2. 108
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs
  3. 154
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs
  4. 413
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/CoatingIssueJobToRestoClient.cs
  5. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationModule.cs
  6. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/ExchangeDatas/EnumExchangeDataType.cs
  7. 29
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs
  8. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs
  9. 107
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/KittingIssueNoteEventHandler.cs
  10. 23
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ThirdLocationNoteEventHandler.cs

94
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/test/TestAppService.cs

@ -36,36 +36,92 @@ public class TestService:ApplicationService
_options = options;
}
/// <summary>
/// 生命周期操作
/// </summary>
[HttpPost("GetMacStatic")]
public async Task<int> GetMacStatic()
///// <summary>
///// 生命周期操作
///// </summary>
//[HttpPost("GetMacStatic")]
//public async Task<int> GetMacStatic()
//{
// return 1;
//}
//[HttpPost("GetCargoStatic")]
///// <summary>
///// 异步开始生命周期操作不能堵塞
///// </summary>
//public async Task<List<ResponCargoItem>> GetCargoStatic(string p_AreaID)
//{
// List<ResponCargoItem> result = new List<ResponCargoItem>();
// result.Add(new ResponCargoItem() { AreaID = "1", CargoID = "PTXB1", PartCode = "TMDLYA0A071AB", Flag = 0 });
// result.Add(new ResponCargoItem() { AreaID = "1", CargoID = "PTXB2", PartCode = "TMDLYA0A061AB", Flag = 0 });
// result.Add(new ResponCargoItem() { AreaID = "2", CargoID = "ZSXB2", PartCode = "TMDLYD0ABM5A", Flag = 0 });
// result = result.Where(p => p.AreaID == p_AreaID).ToList();
// return result;
//}
[HttpPost("SyncCoatingJobStereo")]
public virtual async Task<ReusltObject> SyncCoatingJobStereoAsync(CoatingIssueJobToRestoDTO input)
{
return 1;
ReusltObject reuslt=new ReusltObject();
reuslt.Code = "0";
reuslt.Message = "操作成功";
reuslt.OperateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
return reuslt;
}
[HttpPost("GetCargoStatic")]
/// <summary>
/// 异步开始生命周期操作不能堵塞
/// </summary>
public async Task<List<ResponCargoItem>> GetCargoStatic(string p_AreaID)
{
List<ResponCargoItem> result = new List<ResponCargoItem>();
result.Add(new ResponCargoItem() { AreaID = "1", CargoID = "PTXB1", PartCode = "TMDLYA0A071AB", Flag = 0 });
result.Add(new ResponCargoItem() { AreaID = "1", CargoID = "PTXB2", PartCode = "TMDLYA0A061AB", Flag = 0 });
result.Add(new ResponCargoItem() { AreaID = "2", CargoID = "ZSXB2", PartCode = "TMDLYD0ABM5A", Flag = 0 });
result = result.Where(p => p.AreaID == p_AreaID).ToList();
return result;
}
/// <summary>
/// 发给立体库主表
/// </summary>
public class CoatingIssueJobToRestoDetailDTO
{
public string WorkNo { set; get; }
public string TaskNo { set; get; }
public string NeedSite { set; get; }
public string ProductNo { set; get; }
public decimal Count { set; get; }
}
/// <summary>
/// 发给立体库子表
/// </summary>
public class CoatingIssueJobToRestoDTO
{
public Guid UUID { set; get; }
public string OperatorName { set; get; }
public List<CoatingIssueJobToRestoDetailDTO> Details { set; get; }
}
/// <summary>
/// 返回结果
/// </summary>
public class ReusltObject
{
public string Code { set; get; }
public string Message { set; get; }
public string OperateTime { set; get; }
}

108
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs

@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
@ -38,3 +39,110 @@ public class CoatingIssueJobDTO : SfsJobDTOBase<CoatingIssueJobDetailDTO>
public bool UseOnTheWayLocation { get; set; }
}
/// <summary>
/// 喷涂主表
/// </summary>
public class CoatingIssueRequestFromRestoDTO
{
public string RequestNumber { set; get; }
public List<CoatingIssueJobFromRestoDTO> Jobs { set; get; }
}
/// <summary>
/// 立体库发给WMS明细
/// </summary>
public class CoatingIssueJobFromRestoDetailDTO
{
[Display(Name = "零件编号")]
public string ItemCode { set; get; }
[Display(Name = "目标库位")]
public string ToLocationCode { set; get; }
[Display(Name = "来源库位")]
public string FromLocationCode { set; get; }
[Display(Name = "数量")]
public decimal Qty { set; get; }
}
/// <summary>
/// 立体库发给立体库任务单号
/// </summary>
public class CoatingIssueJobFromRestoDTO
{
[Display(Name = "任务单号")]
public string JobNumber { set; get; }
[Display(Name = "明细")]
public List<CoatingIssueJobFromRestoDetailDTO> Details { set; get; }
}
/// <summary>
/// 发给立体库主表
/// </summary>
/// <summary>
/// 发给立体库子表
/// </summary>
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class CoatingIssueJobToRestoDTO
{
[System.Text.Json.Serialization.JsonPropertyName("uuid")]
public System.Guid Uuid { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("operatorName")]
public string OperatorName { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("details")]
public System.Collections.Generic.ICollection<CoatingIssueJobToRestoDetailDTO> Details { get; set; }
}
/// <summary>
/// 发给立体库主表
/// </summary>
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class CoatingIssueJobToRestoDetailDTO
{
[System.Text.Json.Serialization.JsonPropertyName("workNo")]
public string WorkNo { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("taskNo")]
public string TaskNo { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("needSite")]
public string NeedSite { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("productNo")]
public string ProductNo { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("count")]
public decimal Count { get; set; }
}
/// <summary>
/// 返回结果
/// </summary>
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class ReusltObject
{
[System.Text.Json.Serialization.JsonPropertyName("code")]
public string Code { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("message")]
public string Message { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("operateTime")]
public string OperateTime { get; set; }
}

154
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs

@ -3,13 +3,20 @@ using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using DocumentFormat.OpenXml.Spreadsheet;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using MyNamespace;
using Omu.ValueInjecter;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
@ -19,6 +26,7 @@ using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
using Win_in.Sfs.Wms.Store.Notes;
using Win_in.Sfs.Wms.Store.Options;
namespace Win_in.Sfs.Wms.Store.Application;
@ -32,14 +40,20 @@ public class CoatingIssueJobAppService
private readonly ICoatingIssueJobManager _coatingIssueJobManager;
private readonly ILocationAppService _locationAppService;
private readonly ITransferLibJobAppService _transferLibJobAppService;
private readonly IHttpClientFactory _httpClientFactory;
private readonly IOptions<RestoOptions> _options;
public CoatingIssueJobAppService(
ICoatingIssueJobRepository repository, ICoatingIssueJobManager coatingIssueJobManager,
ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService) : base(repository, coatingIssueJobManager)
ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService
, IHttpClientFactory httpClientFactory
, IOptions<RestoOptions> options
) : base(repository, coatingIssueJobManager)
{
_coatingIssueJobManager = coatingIssueJobManager;
_locationAppService = locationAppService;
_transferLibJobAppService = transferLibJobAppService;
_httpClientFactory = httpClientFactory;
_options=options;
}
[HttpPost("add-many")]
@ -185,10 +199,138 @@ public class CoatingIssueJobAppService
return;
}
[HttpPost("test")]
public virtual async Task Test()
[HttpPost("sync-coating-stereo")]
public virtual async Task<ReusltObject> SyncCoatingJobStereoAsync(List<CoatingIssueJobDTO> input)
{
Console.WriteLine("FuAZCZXVZXVXZVZ");
await Task.CompletedTask;
foreach (var itm in input)
{
}
ReusltObject ret=new ReusltObject();
ret.Code = "1";
ret.Message = "操作成功";
ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
List<CoatingIssueJobToRestoDetailDTO> coatingIssueJobToRestoDetailDTOs = new List<CoatingIssueJobToRestoDetailDTO>();
CoatingIssueJobToRestoDTO main=new CoatingIssueJobToRestoDTO();
main.OperatorName=CurrentUser.UserName;
foreach (var job in input)
{
foreach (var jobitem in job.Details)
{
coatingIssueJobToRestoDetailDTOs.Add(new CoatingIssueJobToRestoDetailDTO()
{
Count=jobitem.HandledToQty,
ProductNo=jobitem.ItemCode,
NeedSite=jobitem.HandledToLocationCode,
WorkNo=job.Number,
TaskNo=job.Number
});
}
}
main.Details=coatingIssueJobToRestoDetailDTOs;
#region
CoatingIssueJobToRestoClient client = new CoatingIssueJobToRestoClient(_options.Value.Address, _httpClientFactory.CreateClient());
ret = await client.SyncCoatingJobStereoAsync(main).ConfigureAwait(false);
#endregion
return ret;
}
[HttpPost("receive-coating-job-stereo")]
public virtual async Task<ReusltObject> SyncReciveCoatingJobStereoAsync(CoatingIssueRequestFromRestoDTO input)
{
List<string> errors = new List<string>();
var ret=new ReusltObject()
{
Code = "1",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = "操作成功"
};
try
{
if (input.Jobs.Count > 0)
{
var inputs = input.Jobs;
var numbers = inputs.Select(p => p.JobNumber);
var query = _repository.WithDetails()
.Where(p => numbers.Contains(p.Number));
var entities = query.ToList();
if (input.Jobs.Count == entities.Count) {
errors.Add("出库任务和WMS出库任务不符,请核对! \n");
}
var dtos = ObjectMapper.Map<List<CoatingIssueJob>, List<CoatingIssueJobDTO>>(entities);
foreach (var itm in dtos)
{
var first = inputs.FirstOrDefault<CoatingIssueJobFromRestoDTO>(p => p.JobNumber == itm.Number);
List<CoatingIssueJobDetailDTO> details = new List<CoatingIssueJobDetailDTO>();
foreach (var detail in first.Details)
{
CoatingIssueJobDetailDTO dto = new CoatingIssueJobDetailDTO();
dto.HandledFromLocationCode = detail.FromLocationCode;
dto.HandledToLocationCode = detail.ToLocationCode;
dto.ItemCode = detail.ItemCode;
dto.RecommendFromQty = detail.Qty;
dto.RecommendToQty = detail.Qty;
dto.HandledFromQty = detail.Qty;
dto.HandledToQty = detail.Qty;
details.Add(dto);
}
itm.Details = details;
}
}
else
{
errors.Add("立体库确认单据里无数据! \n");
}
}
catch (Exception ex)
{
ret=new ReusltObject()
{
Code = "2",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = ex.Message
};
return ret;
}
if (errors.Count > 0)
{
ret= new ReusltObject()
{
Code = "2",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = string.Join(",",errors.ToArray())
};
}
return ret;
}
}

413
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/CoatingIssueJobToRestoClient.cs

@ -0,0 +1,413 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain v14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
// </auto-generated>
//----------------------
#pragma warning disable 108 // Disable "CS0108 '{derivedDto}.ToJson()' hides inherited member '{dtoBase}.ToJson()'. Use the new keyword if hiding was intended."
#pragma warning disable 114 // Disable "CS0114 '{derivedDto}.RaisePropertyChanged(String)' hides inherited member 'dtoBase.RaisePropertyChanged(String)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword."
#pragma warning disable 472 // Disable "CS0472 The result of the expression is always 'false' since a value of type 'Int32' is never equal to 'null' of type 'Int32?'
#pragma warning disable 612 // Disable "CS0612 '...' is obsolete"
#pragma warning disable 1573 // Disable "CS1573 Parameter '...' has no matching param tag in the XML comment for ...
#pragma warning disable 1591 // Disable "CS1591 Missing XML comment for publicly visible type or member ..."
#pragma warning disable 8073 // Disable "CS8073 The result of the expression is always 'false' since a value of type 'T' is never equal to 'null' of type 'T?'"
#pragma warning disable 3016 // Disable "CS3016 Arrays as attribute arguments is not CLS-compliant"
#pragma warning disable 8603 // Disable "CS8603 Possible null reference return"
#pragma warning disable 8604 // Disable "CS8604 Possible null reference argument for parameter"
#pragma warning disable 8625 // Disable "CS8625 Cannot convert null literal to non-nullable reference type"
#pragma warning disable CS8765 // Nullability of type of parameter doesn't match overridden member (possibly because of nullability attributes).
namespace MyNamespace
{
using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
using System = global::System;
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class CoatingIssueJobToRestoClient
{
#pragma warning disable 8618
private string _baseUrl;
#pragma warning restore 8618
private System.Net.Http.HttpClient _httpClient;
private static System.Lazy<System.Text.Json.JsonSerializerOptions> _settings = new System.Lazy<System.Text.Json.JsonSerializerOptions>(CreateSerializerSettings, true);
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
public CoatingIssueJobToRestoClient(string baseUrl, System.Net.Http.HttpClient httpClient)
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
{
BaseUrl = baseUrl;
_httpClient = httpClient;
}
private static System.Text.Json.JsonSerializerOptions CreateSerializerSettings()
{
var settings = new System.Text.Json.JsonSerializerOptions();
UpdateJsonSerializerSettings(settings);
return settings;
}
public string BaseUrl
{
get { return _baseUrl; }
set
{
_baseUrl = value;
if (!string.IsNullOrEmpty(_baseUrl) && !_baseUrl.EndsWith("/"))
_baseUrl += '/';
}
}
protected System.Text.Json.JsonSerializerOptions JsonSerializerSettings { get { return _settings.Value; } }
static partial void UpdateJsonSerializerSettings(System.Text.Json.JsonSerializerOptions settings);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder);
partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response);
/// <returns>Success</returns>
/// <exception cref="ApiException">A server side error occurred.</exception>
public virtual System.Threading.Tasks.Task<ReusltObject> SyncCoatingJobStereoAsync(CoatingIssueJobToRestoDTO body)
{
return SyncCoatingJobStereoAsync(body, System.Threading.CancellationToken.None);
}
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <returns>Success</returns>
/// <exception cref="ApiException">A server side error occurred.</exception>
public virtual async System.Threading.Tasks.Task<ReusltObject> SyncCoatingJobStereoAsync(CoatingIssueJobToRestoDTO body, System.Threading.CancellationToken cancellationToken)
{
var client_ = _httpClient;
var disposeClient_ = false;
try
{
using (var request_ = new System.Net.Http.HttpRequestMessage())
{
var json_ = System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(body, _settings.Value);
var content_ = new System.Net.Http.ByteArrayContent(json_);
content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
request_.Content = content_;
request_.Method = new System.Net.Http.HttpMethod("POST");
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("text/plain"));
var urlBuilder_ = new System.Text.StringBuilder();
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
// Operation Path: "CargoState/SyncCoatingJobStereo"
urlBuilder_.Append("CargoState/SyncCoatingJobStereo");
PrepareRequest(client_, request_, urlBuilder_);
var url_ = urlBuilder_.ToString();
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
PrepareRequest(client_, request_, url_);
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
var disposeResponse_ = true;
try
{
var headers_ = new System.Collections.Generic.Dictionary<string, System.Collections.Generic.IEnumerable<string>>();
foreach (var item_ in response_.Headers)
headers_[item_.Key] = item_.Value;
if (response_.Content != null && response_.Content.Headers != null)
{
foreach (var item_ in response_.Content.Headers)
headers_[item_.Key] = item_.Value;
}
ProcessResponse(client_, response_);
var status_ = (int)response_.StatusCode;
if (status_ == 200)
{
var objectResponse_ = await ReadObjectResponseAsync<ReusltObject>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null)
{
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
}
return objectResponse_.Object;
}
else
if (status_ == 403)
{
var objectResponse_ = await ReadObjectResponseAsync<RemoteServiceErrorResponse>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null)
{
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
}
throw new ApiException<RemoteServiceErrorResponse>("Forbidden", status_, objectResponse_.Text, headers_, objectResponse_.Object, null);
}
else
if (status_ == 401)
{
var objectResponse_ = await ReadObjectResponseAsync<RemoteServiceErrorResponse>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null)
{
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
}
throw new ApiException<RemoteServiceErrorResponse>("Unauthorized", status_, objectResponse_.Text, headers_, objectResponse_.Object, null);
}
else
if (status_ == 400)
{
var objectResponse_ = await ReadObjectResponseAsync<RemoteServiceErrorResponse>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null)
{
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
}
throw new ApiException<RemoteServiceErrorResponse>("Bad Request", status_, objectResponse_.Text, headers_, objectResponse_.Object, null);
}
else
if (status_ == 404)
{
var objectResponse_ = await ReadObjectResponseAsync<RemoteServiceErrorResponse>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null)
{
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
}
throw new ApiException<RemoteServiceErrorResponse>("Not Found", status_, objectResponse_.Text, headers_, objectResponse_.Object, null);
}
else
if (status_ == 501)
{
var objectResponse_ = await ReadObjectResponseAsync<RemoteServiceErrorResponse>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null)
{
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
}
throw new ApiException<RemoteServiceErrorResponse>("Server Error", status_, objectResponse_.Text, headers_, objectResponse_.Object, null);
}
else
if (status_ == 500)
{
var objectResponse_ = await ReadObjectResponseAsync<RemoteServiceErrorResponse>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null)
{
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
}
throw new ApiException<RemoteServiceErrorResponse>("Server Error", status_, objectResponse_.Text, headers_, objectResponse_.Object, null);
}
else
{
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
}
}
finally
{
if (disposeResponse_)
response_.Dispose();
}
}
}
finally
{
if (disposeClient_)
client_.Dispose();
}
}
protected struct ObjectResponseResult<T>
{
public ObjectResponseResult(T responseObject, string responseText)
{
this.Object = responseObject;
this.Text = responseText;
}
public T Object { get; }
public string Text { get; }
}
public bool ReadResponseAsString { get; set; }
protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, System.Threading.CancellationToken cancellationToken)
{
if (response == null || response.Content == null)
{
return new ObjectResponseResult<T>(default(T), string.Empty);
}
if (ReadResponseAsString)
{
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
try
{
var typedBody = System.Text.Json.JsonSerializer.Deserialize<T>(responseText, JsonSerializerSettings);
return new ObjectResponseResult<T>(typedBody, responseText);
}
catch (System.Text.Json.JsonException exception)
{
var message = "Could not deserialize the response body string as " + typeof(T).FullName + ".";
throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception);
}
}
else
{
try
{
using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
{
var typedBody = await System.Text.Json.JsonSerializer.DeserializeAsync<T>(responseStream, JsonSerializerSettings, cancellationToken).ConfigureAwait(false);
return new ObjectResponseResult<T>(typedBody, string.Empty);
}
}
catch (System.Text.Json.JsonException exception)
{
var message = "Could not deserialize the response body stream as " + typeof(T).FullName + ".";
throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception);
}
}
}
private string ConvertToString(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value == null)
{
return "";
}
if (value is System.Enum)
{
var name = System.Enum.GetName(value.GetType(), value);
if (name != null)
{
var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name);
if (field != null)
{
var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute))
as System.Runtime.Serialization.EnumMemberAttribute;
if (attribute != null)
{
return attribute.Value != null ? attribute.Value : name;
}
}
var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo));
return converted == null ? string.Empty : converted;
}
}
else if (value is bool)
{
return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant();
}
else if (value is byte[])
{
return System.Convert.ToBase64String((byte[])value);
}
else if (value is string[])
{
return string.Join(",", (string[])value);
}
else if (value.GetType().IsArray)
{
var valueArray = (System.Array)value;
var valueTextArray = new string[valueArray.Length];
for (var i = 0; i < valueArray.Length; i++)
{
valueTextArray[i] = ConvertToString(valueArray.GetValue(i), cultureInfo);
}
return string.Join(",", valueTextArray);
}
var result = System.Convert.ToString(value, cultureInfo);
return result == null ? "" : result;
}
}
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class RemoteServiceErrorInfo
{
[System.Text.Json.Serialization.JsonPropertyName("code")]
public string Code { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("message")]
public string Message { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("details")]
public string Details { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("data")]
public System.Collections.Generic.IDictionary<string, object> Data { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("validationErrors")]
public System.Collections.Generic.ICollection<RemoteServiceValidationErrorInfo> ValidationErrors { get; set; }
}
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class RemoteServiceErrorResponse
{
[System.Text.Json.Serialization.JsonPropertyName("error")]
public RemoteServiceErrorInfo Error { get; set; }
}
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class RemoteServiceValidationErrorInfo
{
[System.Text.Json.Serialization.JsonPropertyName("message")]
public string Message { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("members")]
public System.Collections.Generic.ICollection<string> Members { get; set; }
}
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class ApiException : System.Exception
{
public int StatusCode { get; private set; }
public string Response { get; private set; }
public System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> Headers { get; private set; }
public ApiException(string message, int statusCode, string response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, System.Exception innerException)
: base(message + "\n\nStatus: " + statusCode + "\nResponse: \n" + ((response == null) ? "(null)" : response.Substring(0, response.Length >= 512 ? 512 : response.Length)), innerException)
{
StatusCode = statusCode;
Response = response;
Headers = headers;
}
public override string ToString()
{
return string.Format("HTTP Response: \n\n{0}\n\n{1}", Response, base.ToString());
}
}
[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class ApiException<TResult> : ApiException
{
public TResult Result { get; private set; }
public ApiException(string message, int statusCode, string response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, TResult result, System.Exception innerException)
: base(message, statusCode, response, headers, innerException)
{
Result = result;
}
}
}
#pragma warning restore 108
#pragma warning restore 114
#pragma warning restore 472
#pragma warning restore 612
#pragma warning restore 1573
#pragma warning restore 1591
#pragma warning restore 8073
#pragma warning restore 3016
#pragma warning restore 8603
#pragma warning restore 8604
#pragma warning restore 8625

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationModule.cs

@ -6,6 +6,7 @@ using Volo.Abp.Modularity;
using Volo.Abp.Settings;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Options;
namespace Win_in.Sfs.Wms.Store.Application;
@ -19,12 +20,16 @@ public class StoreApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
context.Services.AddAutoMapperObjectMapper<StoreApplicationModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<StoreApplicationModule>();
});
Configure<RestoOptions>(configuration.GetSection("RestoOptions"));
context.Services.Replace(ServiceDescriptor.Transient<IUnplannedIssueRequestAppService, UnplannedIssueRequestForDongyangAppService>());
context.Services.Replace(ServiceDescriptor.Transient<IUnplannedReceiptRequestAppService, UnplannedReceiptRequestForDongyangAppService>());
context.Services.Replace(ServiceDescriptor.Transient<ICountAdjustRequestAppService, CountAdjustRequestForDongyangAppService>());

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

@ -45,5 +45,9 @@ public enum EnumExchangeDataType
/// 装配发料
/// </summary>
AssembleIssue=32,
/// <summary>
/// 三方库
/// </summary>
ThirdLocation = 33,
}

29
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/SfsJobManagerBase.cs

@ -96,6 +96,35 @@ public abstract class SfsJobManagerBase<TEntity, TDetailEntity>
return entities;
}
/// <summary>
///
/// </summary>
/// <param name="entities"></param>
/// <returns></returns>
public virtual async Task<List<TEntity>> AddManyNoPublishAsync(List<TEntity> entities)
{
foreach (var job in entities)
{
job.SetIdAndNumberWithDetails(GuidGenerator, await GetNumber().ConfigureAwait(false));
await SendNotifyMessageAsync(job).ConfigureAwait(false);
}
//await PublishCreatedAsync(entities).ConfigureAwait(false);
await Repository.InsertManyAsync(entities).ConfigureAwait(false);
return entities;
}
public virtual async Task OpenAsync(TEntity entity)
{

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Options;
public class RestoOptions
{
// IP 地址
public string Address { set; get; }
// 用户名
public string UserName { set; get; }
// 密码
public string Password { set; get; }
// 令牌
public string Token { set; get; }
}

107
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/KittingIssueNoteEventHandler.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>
/// Kitting区=>装配线边库移记录传给TYRP(线边仓领料单)
/// </summary>
public class KittingIssueNoteEventHandler
: StoreDataExchangeEventHandlerBase<KittingIssueNote>
, ILocalEventHandler<SfsCreatedEntityEventData<KittingIssueNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<KittingIssueNote>>>
{
private const EnumExchangeDataType ExchangeDataType = EnumExchangeDataType.Issue;
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<KittingIssueNote> eventData)
{
var entity = eventData.Entity;
await AddExchangeDataAsync(entity).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<KittingIssueNote>> eventData)
{
var entities = eventData.Entity;
await AddExchangeDataAsync(entities).ConfigureAwait(false);
}
protected override async Task AddExchangeDataAsync(List<KittingIssueNote> entities)
{
var dtos = ObjectMapper.Map<List<KittingIssueNote>, List<KittingIssueNoteDTO>>(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<KittingIssueNoteDTO>();
foreach (var item in dtos)
{
if (item.Details != null && item.Details.Count != 0)
{
toErpDto.Add(item);
}
}
//2023-12-6要求同储位不传入接口 按历史规则
var result = new List<KittingIssueNoteDTO>();
foreach (var kittingIssueNoteDto in toErpDto)
{
kittingIssueNoteDto.Details.RemoveAll(p => p.HandledFromLocationErpCode == p.HandledToLocationErpCode);
if (kittingIssueNoteDto.Details.Count > 0)
{
result.Add(kittingIssueNoteDto);
}
}
if (result.Count > 0)
{
var exchangeDataerp =
await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, ExchangeDataType, result)
.ConfigureAwait(false);
await AddManyAsync(exchangeDataerp).ConfigureAwait(false);
}
}
}

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

@ -18,12 +18,8 @@ namespace Win_in.Sfs.Wms.Store.Event.DataExchanges
StoreDataExchangeEventHandlerBase<ThirdLocationNote>
, ILocalEventHandler<SfsCreatedEntityEventData<ThirdLocationNote>>
{
private readonly Domain.Acl.Location.ILocationAclService _locationAclService;
public ThirdLocationNoteEventHandler(ILocationAclService locationAclService)
{
_locationAclService = locationAclService;
}
private const EnumExchangeDataType ExchangeDataType = EnumExchangeDataType.ThirdLocation;
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<ThirdLocationNote> eventData)
@ -32,11 +28,22 @@ namespace Win_in.Sfs.Wms.Store.Event.DataExchanges
await AddExchangeDataAsync(entity).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<ThirdLocationNote>> eventData)
{
var entities = eventData.Entity;
await AddExchangeDataAsync(entities).ConfigureAwait(false);
}
protected override async Task AddExchangeDataAsync(List<ThirdLocationNote> entities)
{
var dtos = ObjectMapper.Map<List<ThirdLocationNote>, List<ThirdLocationNoteDTO>>(entities);
var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Transfer, dtos).ConfigureAwait(false);
foreach (var detail in dtos.SelectMany(dto => dto.Details))
{
await detail.TrySetLocationAsync(LocationAclService).ConfigureAwait(false);
}
var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, ExchangeDataType, dtos).ConfigureAwait(false);
await AddManyAsync(exchangeData).ConfigureAwait(false);
}

Loading…
Cancel
Save