diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs index 3842deec2..028ad78ac 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs @@ -1,72 +1,587 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Extensions.Options; -using StackExchange.Redis; -using Volo.Abp.Application.Services; -using Win_in.Sfs.Wms.DataExchange.Domain; -using Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent; -using static Volo.Abp.Identity.Settings.IdentitySettingNames; - -namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Client; -public class WebServiceAppService : IReader +//---------------------- +// +// Generated using the NSwag toolchain v14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) +// +//---------------------- + +#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 Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming { - private readonly IHttpClientFactory _httpClientFactory; - private readonly IOptions _options; + 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 Client + { +#pragma warning disable 8618 + private string _baseUrl; +#pragma warning restore 8618 + + private System.Net.Http.HttpClient _httpClient; + private static System.Lazy _settings = new System.Lazy(CreateSerializerSettings, true); + +#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. + public Client(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 Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + public string BaseUrl + { + get { return _baseUrl; } + set + { + _baseUrl = value; + if (!string.IsNullOrEmpty(_baseUrl) && !_baseUrl.EndsWith("/")) + _baseUrl += '/'; + } + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + static partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings 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); + + /// + /// 生命周期操作 + /// + /// Success + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetMacStaticAsync() + { + return GetMacStaticAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// 生命周期操作 + /// + /// Success + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetMacStaticAsync(System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Content = new System.Net.Http.StringContent(string.Empty, System.Text.Encoding.UTF8, "text/plain"); + 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/GetMacStatic" + urlBuilder_.Append("CargoState/GetMacStatic"); + + 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>(); + 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(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(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("Forbidden", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 401) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Unauthorized", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Bad Request", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 404) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Not Found", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 501) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Server Error", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 500) + { + var objectResponse_ = await ReadObjectResponseAsync(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("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(); + } + } + + /// Success + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetCargoStaticAsync(string p_AreaID) + { + return GetCargoStaticAsync(p_AreaID, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// Success + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetCargoStaticAsync(string p_AreaID, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Content = new System.Net.Http.StringContent(string.Empty, System.Text.Encoding.UTF8, "text/plain"); + 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/GetCargoStatic" + urlBuilder_.Append("CargoState/GetCargoStatic"); + urlBuilder_.Append('?'); + if (p_AreaID != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("p_AreaID")).Append('=').Append(System.Uri.EscapeDataString(ConvertToString(p_AreaID, System.Globalization.CultureInfo.InvariantCulture))).Append('&'); + } + urlBuilder_.Length--; + + 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>(); + 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>(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(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("Forbidden", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 401) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Unauthorized", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Bad Request", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 404) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Not Found", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 501) + { + var objectResponse_ = await ReadObjectResponseAsync(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("Server Error", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + if (status_ == 500) + { + var objectResponse_ = await ReadObjectResponseAsync(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("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 + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } - public WebServiceAppService(IHttpClientFactory httpClientFactory, IOptions options) + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T), string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody, responseText); + } + catch (Newtonsoft.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)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody, string.Empty); + } + } + catch (Newtonsoft.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 { - _httpClientFactory = httpClientFactory; - _options = options; + [Newtonsoft.Json.JsonProperty("code", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Code { get; set; } + + [Newtonsoft.Json.JsonProperty("message", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Message { get; set; } + + [Newtonsoft.Json.JsonProperty("details", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Details { get; set; } + + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.IDictionary Data { get; set; } + + [Newtonsoft.Json.JsonProperty("validationErrors", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection ValidationErrors { get; set; } + } - public Task> ReadAsync() + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class RemoteServiceErrorResponse { - throw new NotImplementedException(); + [Newtonsoft.Json.JsonProperty("error", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + 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 + { + [Newtonsoft.Json.JsonProperty("message", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Message { get; set; } + [Newtonsoft.Json.JsonProperty("members", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection Members { get; set; } + } - /// - /// - /// - /// - /// - public async Task WebApi(int p_type) + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ResponCargoItem { + /// + /// 区域ID + /// + [Newtonsoft.Json.JsonProperty("areaID", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string AreaID { get; set; } - //var client = _httpClientFactory.CreateClient(); - //// 设置用户名和密码 - //var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); - //client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); - //// 发送HTTP请求 - //var response = await client.GetAsync("https://example.com/api/data"); - //if (response.IsSuccessStatusCode) - //{ - // return await response.Content.ReadAsStringAsync(); - //} - // SoapClient - - - - - var address = _options.Value.AutoRemote.IpAddress; - var username = _options.Value.AutoRemote.UserName; - var password=_options.Value.AutoRemote.Password; - var token= _options.Value.AutoRemote.Token; - var client = _httpClientFactory.CreateClient(); - var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); - client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); - var response = await client.GetAsync("https://example.com/api/data").ConfigureAwait(false); - if (response.IsSuccessStatusCode) + /// + /// 货位号 + /// + [Newtonsoft.Json.JsonProperty("cargoID", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string CargoID { get; set; } + + /// + /// 零件号 + /// + [Newtonsoft.Json.JsonProperty("partCode", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string PartCode { get; set; } + + /// + /// 货位状态 + /// + [Newtonsoft.Json.JsonProperty("flag", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int Flag { 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> Headers { get; private set; } + + public ApiException(string message, int statusCode, string response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Exception innerException) + : base(message + "\n\nStatus: " + statusCode + "\nResponse: \n" + ((response == null) ? "(null)" : response.Substring(0, response.Length >= 512 ? 512 : response.Length)), innerException) { - return await response.Content.ReadAsStringAsync(); + StatusCode = statusCode; + Response = response; + Headers = headers; + } + + public override string ToString() + { + return string.Format("HTTP Response: \n\n{0}\n\n{1}", Response, base.ToString()); } - return "Error occurred"; } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ApiException : ApiException + { + public TResult Result { get; private set; } + + public ApiException(string message, int statusCode, string response, System.Collections.Generic.IReadOnlyDictionary> 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 diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs index 537f6ec81..a29d697f6 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs @@ -19,6 +19,7 @@ using Win_in.Sfs.Wms.Store.Application.Contracts; using System.Text.Json.Serialization; using System.IdentityModel.Tokens.Jwt; using Volo.Abp; +using System.Net.NetworkInformation; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming; public class InjectionMoldingRequestReader : IReader { @@ -60,69 +61,112 @@ public class InjectionMoldingRequestReader : IReader try { // 获取注塑叫料任务数量 - var count = await _injectionRequest.GetCountAsync().ConfigureAwait(false); - List joblist = new List(); - if (count == 0) - { + //var count = await _injectionRequest.GetCountAsync().ConfigureAwait(false); + //List joblist = new List(); + //if (count == 0) + //{ // 调用 ReaderCameraApi 方法获取摄像头信息 - string camera = await ReaderCameraApi().ConfigureAwait(false); - List cameraList = new List(); - if (camera == "Error occured") + + + Client client = new Client(_options.Value.AutoRemote.IpAddress, _httpClientFactory.CreateClient());//调用客户记录 + + var flag= await client.GetMacStaticAsync().ConfigureAwait(false); + if (flag!=1) { // 记录错误日志并返回空列表 - _logger.LogInformation($"没有读取到摄像头信息{DateTime.Now},请检查网络"); + _logger.LogInformation($"读取到摄像头信息为不可用{DateTime.Now},请检查摄像头"); + return new List(); + } + + if (string.IsNullOrEmpty(_options.Value.AutoRemote.AreaIDs)) + { + _logger.LogInformation($"没有设置指定区域AutoRemote->AreaIDs"); return new List(); } - //将摄像头信息转换为注塑叫料明细任务数据 - cameraList = System.Text.Json.JsonSerializer.Deserialize>(camera); - //测试数据 - //var cameraList = new List() - //{ - // new InjectionRequest() { ItemCode = "THILDD0A542AG", ToLocCode = "ZSXB2", Qty = 100 }, - // }; - InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput(); - input.Worker = "Vision"; - input.Type = "Vision"; - input.AutoSubmit = true; - input.ActiveDate = DateTime.Now; - input.UseOnTheWayLocation = false; - input.Remark = "视觉叫料"; - List injectionRequestDetails = new List(); - foreach (var job in cameraList) + + var ids=_options.Value.AutoRemote.AreaIDs.Split(","); + List camralist = new List(); + foreach (var itm in ids)//遍历区域查找所有货物 { - var detailInput = new InjectionIssueRequestDetailInput() - { - ItemCode = job.ItemCode, - ToLocationCode = job.ToLocCode, - Qty = job.Qty, - RecommendType = EnumRecommendType.W, - IssuedQty = 0, - ReceivedQty = 0, - Status = EnumStatus.Open, - RequestStatus = EnumRequestStatus.New, - }; - // 添加注塑叫料明细任务数据 - injectionRequestDetails.Add(detailInput); + var idsList= await client.GetCargoStaticAsync(itm).ConfigureAwait(false); + camralist.AddRange(idsList); } - input.Details.AddRange(injectionRequestDetails); - // 通过 BindAsync 方法对零件仓库进行赋值 - var errors = await BindAsync(input.Details).ConfigureAwait(false); - if (errors.Count > 0) + camralist = camralist.Where(p=>p.Flag==0).ToList(); + + + List inputdetail=new List(); + foreach (var item in camralist) + { + UnCompletedRequestDto jobrequestinput = new UnCompletedRequestDto(); + jobrequestinput.ItemCode = item.PartCode; + jobrequestinput.LocCode = item.AreaID.ToString(); + jobrequestinput.PositionCode = item.CargoID.ToString(); + inputdetail.Add(jobrequestinput); + } + + var uncompletelist= await _injectionRequest.GetUnCompletedRequestAsync(inputdetail).ConfigureAwait(false);//将所有库位零件信息查找未完成记录 + + var query = from itm in camralist + join itm1 in uncompletelist on new { locCode = itm.AreaID.ToString(), itmCode = itm.PartCode, PositionCode = itm.CargoID.ToString() } + equals new { locCode = itm1.LocCode, itmCode = itm1.ItemCode, PositionCode = itm1.PositionCode} into temp + from tm in temp.DefaultIfEmpty() + where tm == null + select itm; + var injectionList=query.ToList();//已经完成的记录 + + + foreach (var inject in injectionList) { - // 记录错误日志并返回空列表 - foreach (var error in errors) + List cameraList = new List(); + + InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput(); + input.Worker = "Vision"; + input.Type = "Vision"; + input.AutoSubmit = true; + input.ActiveDate = DateTime.Now; + input.UseOnTheWayLocation = false; + input.Remark = "视觉叫料"; + List injectionRequestDetails = new List(); + //foreach (var job in cameraList) + //{ + var detailInput = new InjectionIssueRequestDetailInput() + { + ItemCode = inject.PartCode, + ToLocationCode = inject.AreaID.ToString(), + PositionCode=inject.CargoID, + Qty = 1, + RecommendType = EnumRecommendType.W, + IssuedQty = 0, + ReceivedQty = 0, + Status = EnumStatus.Open, + RequestStatus = EnumRequestStatus.New, + BoxQty=1 + }; + // 添加注塑叫料明细任务数据 + injectionRequestDetails.Add(detailInput); + //} + input.Details.AddRange(injectionRequestDetails); + // 通过 BindAsync 方法对零件仓库进行赋值 + var errors = await BindAsync(input.Details).ConfigureAwait(false); + if (errors.Count > 0) { - _logger.LogInformation(error); + // 记录错误日志并返回空列表 + foreach (var error in errors) + { + _logger.LogInformation(error); + } + return new List(); } - return new List(); + // 创建新的注塑请求并将数据写入数据库 + await _injectionRequest.CreateAsync(input).ConfigureAwait(false); + } - // 创建新的注塑请求并将数据写入数据库 - await _injectionRequest.CreateAsync(input).ConfigureAwait(false); - } - else - { - _logger.LogInformation("注塑叫料任务已存在,无需读取"); - } + + //} + //else + //{ + // _logger.LogInformation("注塑叫料任务已存在,无需读取"); + //} } // 捕获特定异常并记录日志 @@ -162,6 +206,7 @@ public class InjectionMoldingRequestReader : IReader if (loc == null) { errors.Add($"编号:{request.ToLocationCode}库位表中没找到!"); } else { + // 更新请求中的库位相关信息 request.ToLocationCode = loc.Code; request.ToLocationGroup = loc.LocationGroupCode; @@ -174,55 +219,55 @@ public class InjectionMoldingRequestReader : IReader return errors; } - /// - /// 读取摄像头API - /// - /// - /// - public async Task ReaderCameraApi() - { + // /// + // /// 读取摄像头API + // /// + // /// + // /// + // public async Task ReaderCameraApi() + // { - try - { + // try + // { - // 从配置中获取远程摄像头的地址、用户名、密码和令牌 - var address = _options.Value.AutoRemote.IpAddress; - var username = _options.Value.AutoRemote.UserName; - var password = _options.Value.AutoRemote.Password; - var token = _options.Value.AutoRemote.Token; + // // 从配置中获取远程摄像头的地址、用户名、密码和令牌 + // var address = _options.Value.AutoRemote.IpAddress; + // var username = _options.Value.AutoRemote.UserName; + // var password = _options.Value.AutoRemote.Password; + // var token = _options.Value.AutoRemote.Token; - // 创建一个HttpClient实例 - var client = _httpClientFactory.CreateClient(); + // // 创建一个HttpClient实例 + // var client = _httpClientFactory.CreateClient(); - // 将用户名和密码转换为Base64编码的凭据,并设置请求的身份验证信息 - var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); - client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); + // // 将用户名和密码转换为Base64编码的凭据,并设置请求的身份验证信息 + // var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); + // client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); - // 发送GET请求到远程摄像头地址并等待响应 - var response = await client.GetAsync(address).ConfigureAwait(false); + // // 发送GET请求到远程摄像头地址并等待响应 + // var response = await client.PostAsync(address, new StringContent(token, Encoding.UTF8, "application/json")).ConfigureAwait(false); - // 如果请求成功,则返回响应内容,否则返回错误信息 - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadAsStringAsync().ConfigureAwait(false); - } - } - catch (HttpRequestException ex) - { - _logger.LogInformation("远程摄像头连接失败:" + ex.Message); - - } + // // 如果请求成功,则返回响应内容,否则返回错误信息 + // if (response.IsSuccessStatusCode) + // { + // return await response.Content.ReadAsStringAsync().ConfigureAwait(false); + // } + // } + // catch (HttpRequestException ex) + // { + // _logger.LogInformation("远程摄像头连接失败:" + ex.Message); - return "Error occurred"; - } + // } - private List Parse(string p_str) - { - List requests = new List(); + // return "Error occurred"; + // } - return System.Text.Json.JsonSerializer.Deserialize>(p_str); - } + // private List Parse(string p_str) + // { + // List requests = new List(); + + // return System.Text.Json.JsonSerializer.Deserialize>(p_str); + // } @@ -231,7 +276,7 @@ public class InjectionMoldingRequestReader : IReader -public class InjectionRequest + public class InjectionRequest { /// /// 零件M @@ -256,7 +301,7 @@ public class InjectionRequest } - + diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/InjectionMoldingTaskOptions.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/InjectionMoldingTaskOptions.cs index 24041d882..a4915d6d5 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/InjectionMoldingTaskOptions.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/InjectionMoldingTaskOptions.cs @@ -24,6 +24,9 @@ public class InjectionAutoRemote public string Password { set; get; } // 令牌 public string Token { set; get; } + + public string AreaIDs { set; get; } + } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/appsettings.json b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/appsettings.json index 5445fdc4f..8103c9102 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/appsettings.json +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/appsettings.json @@ -67,11 +67,11 @@ "InjectionMoldingTaskOptions": { "AutoRemote": { - "IpAddress": "http://10.164.113.31:60085/", + "IpAddress": "http://localhost:59094/", "UserName": "", "Password": "", - "Token": "" - + "Token": "", + "AreaIDs": "1" }, "IncomingOptions": { diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs index cfa860a62..ead0d67b6 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs @@ -20,17 +20,26 @@ public class KittingDetailDTO: AuditedEntityDto, IMultiTenant, IRemark /// 物料编码 /// [Display(Name = "物料编码")] - public string PartCode { set; get; } + public string ItemCode { set; get; } + + /// + /// 物品名称 + /// + [Display(Name = "物品名称")] + public string ItemName { get; set; } + + + /// /// 描述1 /// [Display(Name = "描述1")] - public string Desc1 { set; get; } + public string ItemDesc1 { set; get; } /// /// 描述2 /// [Display(Name = "描述2")] - public string Desc2 { set; get; } + public string ItemDesc2 { set; get; } /// /// 包装数量 /// diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs index 1b9e2a17b..6ee7c36bf 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs @@ -20,17 +20,27 @@ public class KittingDetailInput: EntityDto, IMultiTenant, IRemark /// 物料编码 /// [Display(Name = "物料编码")] - public string PartCode { set; get; } + public string ItemCode { set; get; } /// /// 描述1 /// [Display(Name = "描述1")] - public string Desc1 { set; get; } + public string ItemDesc1 { set; get; } /// /// 描述2 /// [Display(Name = "描述2")] - public string Desc2 { set; get; } + public string ItemDesc2 { set; get; } + + + + /// + /// 物品名称 + /// + [Display(Name = "物品名称")] + public string ItemName { get; set; } + + /// /// 包装数量 /// diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs index bf22aa106..7b48e3b61 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs @@ -8,32 +8,42 @@ public class KittingImportInput : SfsBaseDataImportInputBase /// /// Kitting编码 /// - [Display(Name = "Kitting编码")] - public string Code { get; set; } + /// + [Display(Name = "物料编码")] + public string ItemCode { set; get; } /// - /// Kitting名称 + /// 描述1 /// - [Display(Name = "Kitting名称")] - public string Name { get; set; } - + [Display(Name = "描述1")] + public string ItemDesc1 { set; get; } /// - /// 物料编码 + /// 描述2 /// - [Display(Name = "物料编码")] - public string PartCode { set; get; } + [Display(Name = "描述2")] + public string ItemDesc2 { set; get; } + /// - /// 描述1 + /// 物品名称 /// - [Display(Name = "物料描述1")] - public string Desc1 { set; get; } + [Display(Name = "物品名称")] + public string ItemName { get; set; } + + + + + + [Display(Name = "Kitting编码")] + public string Code { get; set; } /// - /// 描述2 + /// Kitting名称 /// - [Display(Name = "物料描述2")] - public string Desc2 { set; get; } + [Display(Name = "Kitting名称")] + public string Name { get; set; } + + /// /// 包装数量 diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/tests/Class1.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/tests/Class1.cs new file mode 100644 index 000000000..e2d9b7254 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/tests/Class1.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; + +namespace Win_in.Sfs.Basedata.tests; +[Serializable] + +//测试文件暂时不删除 +public class ResponseJson +{ + // 错误码: + public int Code { set; get; } = 0; + // 返回值 其具体含义由调用接口确定 + public string Value { set; get; } = ""; + // 错误消息 + public string Msg { set; get; } = ""; +} +[Serializable] +public class ResponCargoItem +{ + // 区域ID + [Display(Name = "区域ID")] + public string AreaID { set; get; } + // 货位号 + [Display(Name = "货位号")] + public string CargoID { set; get; } = ""; + // 零件号 + [Display(Name = "零件号")] + public string PartCode { set; get; } = ""; + //货位状态 1 – 货位占用 0 – 货位空闲 + [Display(Name = "货位状态")] + public int Flag { set; get; } = 0; +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs index 0ea409cf5..2455909e8 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs @@ -43,13 +43,6 @@ public class TaskItem - - - - - - - public class CycleOptions { /// @@ -76,32 +69,35 @@ public class CacheService:ISingletonDependency /// private async Task BomsCycle() { - - //Task.Run(async () => - //{ - var reassigner = new Reassigner(DateTime.Now, new TimeSpan(0, 0, _options.Value.BomsCycle == 0 ? 60 : _options.Value.BomsCycle)); - await reassigner.RunAsync(async () => - { - using var serviceScope = _serviceProvider.CreateScope(); - var repository = serviceScope.ServiceProvider.GetRequiredService(); - Cache.Boms.Clear(); - Cache.Boms = await repository.GetListAsync().ConfigureAwait(false); - - }).ConfigureAwait(false); - //}); - ; + var reassigner = new Reassigner(DateTime.Now, new TimeSpan(0, 0, _options.Value.BomsCycle == 0 ? 60 : _options.Value.BomsCycle)); + await reassigner.RunAsync(async () => + { + using (var serviceScope = _serviceProvider.CreateScope()) + { + var repository = serviceScope.ServiceProvider.GetRequiredService(); + Cache.Boms.Clear(); + Cache.Boms = await repository.GetListAsync().ConfigureAwait(false); + }; + }).ConfigureAwait(false); } + + + + + + + + /// /// 异步开始生命周期操作不能堵塞 /// public async Task StartAsync() { + BomsCycle();//异步处理不能堵塞主任务 } - - } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs index f2f376764..e3020c8bc 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs @@ -55,10 +55,9 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase p.Code == input.Code); - var codes = input.Details.Select(p => p.PartCode); + var codes = input.Details.Select(p => p.ItemCode); if (first != null) { - throw new UserFriendlyException($"已存在编码:{input.Code}的Kitting箱"); //var query = from itm in input.Details // join itm1 in first.Details on itm.PartCode equals itm1.PartCode @@ -86,7 +85,6 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase(entity); - } //first.Details.Where(p => codes.Contains(p.PartCode)); @@ -151,13 +149,11 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase(inputFileBytes).ToList(); - var checklist=importList.GroupBy(p => new { p.Code, p.PartCode }).Where(g => g.Count() > 1).Select(p => new { Code = p.Key.Code, PartCode = p.Key.PartCode });//导入重复报错 //检测是否导入重复 + var checklist=importList.GroupBy(p => new { p.Code, p.ItemCode }).Where(g => g.Count() > 1).Select(p => new { Code = p.Key.Code, PartCode = p.Key.ItemCode });//导入重复报错 //检测是否导入重复 List errors = new List(); if (checklist.Any()) { - foreach (var error in checklist) { - errors.Add(new KittingErrorDto() { Code=error.Code,PartCode=error.PartCode, Content="记录有重复!" }); } } @@ -183,7 +179,6 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase(newdetailList).ConfigureAwait(false); + #endregion } if (existCodeList.Any()) { var existKittingList = importList.Where(p => existCodeList.Contains(p.Code)).ToList();//新Kitting List existKittingInputList = new List(); - //List existKittingDetailList = new List(); - //List newKittingDetailList = new List(); foreach (var include in includeList) { var newDetail = existKittingList.Where(p => p.Code == include.Code).ToList(); var innerExist = from itm in newDetail - join itm1 in include.Details on itm.PartCode equals itm1.PartCode + join itm1 in include.Details on itm.ItemCode equals itm1.ItemCode select itm; if (innerExist.Any()) { var list = innerExist.ToList(); foreach (var itm in include.Details) { - var entity = list.FirstOrDefault(p => p.PartCode == itm.PartCode); - itm.Desc1 = entity.Desc1; - itm.Desc2 = entity.Desc2; + var entity = list.FirstOrDefault(p => p.ItemCode == itm.ItemCode); + itm.ItemDesc1 = entity.ItemDesc1; + itm.ItemDesc2 = entity.ItemDesc2; itm.Qty = entity.Qty; itm.Conf = entity.Conf; - //existKittingDetailList.Add(itm); } } var leftExist = from itm in newDetail - join itm1 in include.Details on itm.PartCode equals itm1.PartCode + join itm1 in include.Details on itm.ItemCode equals itm1.ItemCode into temp from tm in temp.DefaultIfEmpty() where tm == null diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs index 657c97e5a..0fb0566d9 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs @@ -30,9 +30,9 @@ public partial class BasedataApplicationAutoMapperProfile : Profile CreateMap() .IgnoreAuditedObjectProperties() //.ForMember(x => x., y => y.MapFrom(t => t.Code)) - .ForMember(x => x.PartCode, y => y.MapFrom(t => t.PartCode)) - .ForMember(x => x.Desc1, y => y.MapFrom(t => t.Desc1)) - .ForMember(x => x.Desc2, y => y.MapFrom(t => t.Desc2)) + .ForMember(x => x.ItemCode, y => y.MapFrom(t => t.ItemCode)) + .ForMember(x => x.ItemDesc1, y => y.MapFrom(t => t.ItemDesc1)) + .ForMember(x => x.ItemDesc2, y => y.MapFrom(t => t.ItemDesc2)) .Ignore(x => x.MasterId) .Ignore(x => x.TenantId) .Ignore(x => x.Remark) diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/test/TestAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/test/TestAppService.cs new file mode 100644 index 000000000..264c88719 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/test/TestAppService.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using DocumentFormat.OpenXml.Office2010.Drawing; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Basedata.Domain; +using Win_in.Sfs.Basedata.Domain.Caches; +using Win_in.Sfs.Basedata.Domain.Shared; +using Win_in.Sfs.Basedata.tests; + +namespace Win_in.Sfs.Basedata.Application; + + +/// +/// 接口模拟测试 +/// +[AllowAnonymous] +[Route($"CargoState")] +public class TestService:ApplicationService +{ + private readonly IServiceProvider _serviceProvider; + private readonly IOptions _options; + public TestService(IServiceProvider serviceProvider, IOptions options) + { + _serviceProvider = serviceProvider; + _options = options; + } + + /// + /// 生命周期操作 + /// + [HttpPost("GetMacStatic")] + public async Task GetMacStatic() + { + return 1; + } + + + + [HttpPost("GetCargoStatic")] + /// + /// 异步开始生命周期操作不能堵塞 + /// + public async Task> GetCargoStatic(string p_AreaID) + { + + List result = new List(); + + 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; + + } +} + + + diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs index bd83d5143..269b68211 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs @@ -249,7 +249,7 @@ public class BomManager : DomainService, IBomManager return list; } - + @@ -261,35 +261,39 @@ public class BomManager : DomainService, IBomManager /// /// /// - public async Task> GetSubcomponentsRecursive(BomComponent p_component, EnumBomSelectedType p_type - ) + public async Task> GetSubcomponentsRecursive(BomComponent p_component, EnumBomSelectedType p_type + ) { + // 创建用于存储最终结果、维度结果和树状结果的列表 List lastList = new List(); - List dimensionList=new List(); - var treeList=await GetSubcomponentsRecursive(p_component, 1, p_component.ComponentQty, p_component.Component, + List dimensionList = new List(); + + // 调用异步方法GetSubcomponentsRecursive以获取树状结果,并使用lambda表达式将结果添加到lastList和dimensionList + var treeList = await GetSubcomponentsRecursive(p_component, 1, p_component.ComponentQty, p_component.Component, (rs) => lastList.Add(rs) , - (rs1)=>{ + (rs1) => { dimensionList.Add(rs1); }).ConfigureAwait(false); - - List returnList=new List(); + // 根据用户指定的类型,返回相应的结果列表 + List returnList = new List(); switch (p_type) { case EnumBomSelectedType.Last: returnList = lastList; break; case EnumBomSelectedType.Tree: - returnList=treeList; + returnList = treeList; break; case EnumBomSelectedType.Dimension: - returnList=dimensionList; + returnList = dimensionList; break; } return returnList; } - + + /// @@ -303,55 +307,73 @@ public class BomManager : DomainService, IBomManager /// 树型转成一维表用 /// /// + private async Task> GetSubcomponentsRecursive(BomComponent p_component, int level, decimal sumQty, string root, Action p_actionLast, - Action p_actionDimension - /* ,List bomList =null*/ - ) + Action p_actionDimension + /* ,List bomList =null*/ + ) { + // 初始化子零件列表 List subComponents = new List(); // 假设 GetComponentsByProduct 方法可获取某个物料号下的所有子零件 - List directSubComponents =await GetComponentsByProduct(p_component.Component).ConfigureAwait(false); + List directSubComponents = await GetComponentsByProduct(p_component.Component).ConfigureAwait(false); - if (!directSubComponents.Any() && level != 1)//不是根元素 + // 如果没有直接子零件且不是根元素,则执行最后操作回调函数 + if (!directSubComponents.Any() && level != 1) { p_actionLast(p_component); } + // 遍历直接子零件列表 foreach (var component in directSubComponents) { + // 设置根元素和数量 component.Root = root; component.SumQty = sumQty * component.ComponentQty; component.ParentComponent = p_component.Component; component.Level = level; + // 设置拆解路径 component.Path = (p_component.Component != root) ? p_component.Path + $"->{component.Component}" : p_component.Component + $"->{component.Component}"; - component.SubComponents =await GetSubcomponentsRecursive(component, level + 1, sumQty * component.ComponentQty, component.Root, p_actionLast, p_actionDimension).ConfigureAwait(false); + // 递归获取子零件列表,并执行维度操作回调函数 + component.SubComponents = await GetSubcomponentsRecursive(component, level + 1, sumQty * component.ComponentQty, component.Root, p_actionLast, p_actionDimension).ConfigureAwait(false); p_actionDimension(component); + // 添加子零件到子零件列表 subComponents.Add(component); } + // 返回子零件列表 return subComponents; } + + + /// + /// 读取子节点 + /// + /// + /// private async Task> GetComponentsByProduct(string product) { - List list=new List(); + List list = new List(); if (Cache.Boms.Count == 0) { InitBomComponent(); } - list=Cache.Boms.Count > 0 ? Cache.Boms.Where(p => p.Product == product).ToList() : + // 如果缓存中有Bom列表,则从缓存中筛选符合条件的数据;否则从仓储中异步获取数据 + list = Cache.Boms.Count > 0 ? Cache.Boms.Where(p => p.Product == product).ToList() : await _repository.GetListAsync(p => p.Product == product).ConfigureAwait(false); - List components = new List(); + List components = new List(); foreach (var component in list) { BomComponent bomComponent = new BomComponent(); bomComponent.InjectFrom(component); - components.Add(bomComponent); + components.Add(bomComponent); } // 其他物料号的子零件信息类似添加 return components; } + /// /// 获取所有bomtree /// diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs index 37b5133a2..503d1d025 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs @@ -14,15 +14,27 @@ public class KittingDetail : AuditedEntity, IMultiTenant, IRemark /// /// 物料编码 /// - public string PartCode { set; get; } + [Display(Name = "物料编码")] + public string ItemCode { set; get; } /// /// 描述1 /// - public string Desc1 { set; get; } + [Display(Name = "描述1")] + public string ItemDesc1 { set; get; } /// /// 描述2 /// - public string Desc2 { set; get; } + [Display(Name = "描述2")] + public string ItemDesc2 { set; get; } + + + /// + /// 物品名称 + /// + [Display(Name = "物品名称")] + public string ItemName { get; set; } + + /// /// 包装数量 /// diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs index c595be6fc..213e9c60f 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs @@ -36,10 +36,10 @@ public static class KittingDbContextModelCreatingExtensions b.ConfigureByConvention(); //Configure Sfs base properties b.ConfigureSfsBase(); - - b.Property(p => p.Desc1).HasMaxLength(SfsPropertyConst.DescLength); + b.Property(p => p.ItemName).HasMaxLength(SfsPropertyConst.DescLength); + b.Property(p => p.ItemDesc1).HasMaxLength(SfsPropertyConst.DescLength); //Properties - b.Property(q => q.Desc2).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.ItemDesc2).HasMaxLength(SfsPropertyConst.CodeLength); //Relations b.Property(q => q.MasterId).IsRequired(); //Indexes diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs index a0ee5d92c..ad90d5900 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs @@ -33,14 +33,14 @@ public class KittingEfCoreRepository : SfsBaseDataEfCoreRepositoryBase update = new List(); foreach (var itm in inner.ToList()) { - var first = newData.Details.FirstOrDefault(p => p.PartCode == itm.PartCode); + var first = newData.Details.FirstOrDefault(p => p.ItemCode == itm.ItemCode); itm.Qty = first.Qty; - itm.Desc1 = first.Desc1; - itm.Desc2 = first.Desc2; + itm.ItemDesc1 = first.ItemDesc1; + itm.ItemDesc2 = first.ItemDesc2; + itm.ItemName=first.ItemName; update.Add(itm); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs index e853ee4cb..8cf9f0a46 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs @@ -29,7 +29,7 @@ public class MesNoteEditInput : SfsStoreCreateOrUpdateInputBase public string MesRequestNumber { get; set; } /// - /// Mes类型(40-冻结、41-解冻 ) + /// Mes类型(事务类型40-冻结、41-解冻 ) /// [Display(Name = "类型")] public string Type { get; set; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs index 13c1f6bc0..e4607976b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs @@ -53,3 +53,10 @@ public class InjectionIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase [Display(Name = "需求箱数量")] public decimal BoxQty { get; set; } } +public class UnCompletedRequestDto +{ + public string ItemCode { get; set; } + public string LocCode { get; set; } + public string PositionCode { get; set; } + +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs index 8eb902d1d..dca017df7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs @@ -23,4 +23,7 @@ public interface IInjectionIssueRequestAppService /// /// Task> GetItemCategoryListAsync(); + + + Task> GetUnCompletedRequestAsync(List p_list); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs index 3b7c91e39..ab918a9ec 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs @@ -66,7 +66,11 @@ public class MesNoteAppService : var itemBasicDto =await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); if (fromLocation == null) { - throw new UserFriendlyException($"库位为空"); + throw new UserFriendlyException($"来源库位为空"); + } + if (fromLocation == null) + { + throw new UserFriendlyException($"目标库位为空"); } detail.SetIdAndNumber(GuidGenerator, entity.Id, entity.Number); detail.FromLocationArea = fromLocation.AreaCode; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs index b998f6bbc..119c5d67f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs @@ -349,5 +349,35 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase + /// 获取已完成的叫料单数量 + /// + /// + [HttpPost("get-uncompleted-request")] + public async Task> GetUnCompletedRequestAsync(List p_list) + { + List returnList = new List(); + //枚举类型查不到改成SQL查询 + var list =await _repository.WithDetails().Where(p => p.RequestStatus != EnumRequestStatus.Completed && p.Type == nameof(EnumIssueType.Vision)).ToListAsync().ConfigureAwait(false); + foreach (var itm in list) + { + var query = from detail in itm.Details join citm in p_list on new { detail.ItemCode, locCode= detail.ToLocationCode,areaCode=detail.PositionCode } equals + new { citm.ItemCode, locCode= citm.LocCode,areaCode=citm.PositionCode } + select new UnCompletedRequestDto { ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode } ; + + returnList.AddRange(query.ToList()); + } + return returnList; + } + + + + + + + + + + #endregion }