diff --git a/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Dy_ExchangeApplicationModule.cs b/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Dy_ExchangeApplicationModule.cs index c61073b2e..13e9e1e7b 100644 --- a/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Dy_ExchangeApplicationModule.cs +++ b/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Dy_ExchangeApplicationModule.cs @@ -1,4 +1,6 @@ -锘縰sing Volo.Abp.Account; +锘縰sing Dy_Exchange.Z_Business; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Account; using Volo.Abp.AutoMapper; using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; @@ -23,9 +25,12 @@ public class Dy_ExchangeApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { + var configuration = context.Services.GetConfiguration(); Configure(options => { options.AddMaps(); }); + Configure(configuration.GetSection("DataExchangeInterfaceOptions")); + } } diff --git a/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Z_Business/DataExchangeInterfaceConfigAppService.cs b/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Z_Business/DataExchangeInterfaceConfigAppService.cs index 5f50aad79..ea9fd6197 100644 --- a/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Z_Business/DataExchangeInterfaceConfigAppService.cs +++ b/InterFaceContorl/Dy_Exchange/src/Dy_Exchange.Application/Z_Business/DataExchangeInterfaceConfigAppService.cs @@ -6,6 +6,7 @@ using System.Net.Http; using System.Net.NetworkInformation; using System.Security.Policy; using System.Text; +using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Dy_Exchange.Enums; @@ -13,6 +14,8 @@ using Dy_Exchange.Permissions; using Dy_Exchange.Z_Business.Dtos; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using NPOI.SS.Formula.Functions; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; @@ -33,6 +36,7 @@ public class DataExchangeInterfaceConfigAppService : ZbxBase _options; + - public DataExchangeInterfaceConfigAppService(IDataExchangeInterfaceConfigRepository repository) : base(repository) + public DataExchangeInterfaceConfigAppService(IDataExchangeInterfaceConfigRepository repository, IOptions options) : base(repository) { _repository = repository; + _options = options; + + + + } [HttpPost("CheckWmsStatusAsync")] @@ -55,6 +66,7 @@ public class DataExchangeInterfaceConfigAppService : ZbxBase CloseWmsAsync() { var list=await _repository.GetListAsync().ConfigureAwait(false); - var removeWmsCodeList=list.Where(p => p.Code != wmsCode).ToList(); + var removeWmsCodeList=list.Where(p => p.Code != _options.Value.WmsCode).ToList(); if (removeWmsCodeList.Any(p => p.Status == EnumStatus.Running||p.Active==true)) { throw new UserFriendlyException($"有未关闭的接口程序{removeWmsCodeList.First().Code}无法关闭WMS"); @@ -131,15 +143,15 @@ public class DataExchangeInterfaceConfigAppService : ZbxBase p.Code == wmsCode).ConfigureAwait(false); + var wmsConfig=await _repository.FindAsync(p => p.Code == _options.Value.WmsCode).ConfigureAwait(false); if (wmsConfig == null) { throw new UserFriendlyException("未找到WMS配置项目"); } - var stop1= ExecuteBatFile(cmdClosePath1); + var stop1= ExecuteBatFile(_options.Value.CmdClosePath1); Thread.Sleep(2000); // 休眠2秒 - var stop2 = ExecuteBatFile(cmdClosePath2); + var stop2 = ExecuteBatFile(_options.Value.CmdClosePath2); return true; } @@ -157,9 +169,9 @@ public class DataExchangeInterfaceConfigAppService : ZbxBase UpdateAsync(Guid id, CreateUpdateDataExchangeInterfaceConfigDto input) { - if (input.Code != wmsCode&&input.Active==true) + if (input.Code != _options.Value.WmsCode&&input.Active==true) { - bool isPageLoaded = await IsPageLoadedSuccessfullyAsync(wmsUrl).ConfigureAwait(false); + bool isPageLoaded = await IsPageLoadedSuccessfullyAsync(_options.Value.WmsUrl).ConfigureAwait(false); if (!isPageLoaded) { throw new UserFriendlyException("WMS未启动成功,请稍后再启动接口"); @@ -167,12 +179,12 @@ public class DataExchangeInterfaceConfigAppService : ZbxBase validationRresult) + { + await base.ValidateImportModelAsync(importInput, validationRresult).ConfigureAwait(false); + await CheckLocationCodeAsync(importInput.LocationCode, validationRresult).ConfigureAwait(false); + await CheckSameItem(importInput.Code,importInput.LocationCode,validationRresult).ConfigureAwait(false); + //CheckProductionLineProdLineCodeJsonAsync(importInput.RawLocationCodeListJson, validationRresult); + //CheckProductionLineProdLineCodeJsonAsync(importInput.ProductLocationCodeListJson, validationRresult); + //CheckProductionLineProdLineCodeJsonAsync(importInput.WipLocationCodeListJson, validationRresult); + + } + + private async Task CheckLocationCodeAsync(string locationCode, List validationRresult) + { + var list = await _locationAppService.GetByCodeAsync(locationCode).ConfigureAwait(false); + if (list == null) + { + validationRresult.Add(new ValidationResult($"{locationCode}搴撲綅缂栫爜涓嶅瓨鍦,璇锋煡鐪嬪簱浣嶄俊鎭!")); + } + } + + private async Task CheckSameItem(string code, string locationCode, List validationRresult) + { + var item = await _repository.FirstOrDefaultAsync(r => r.Code == code && r.LocationCode == locationCode).ConfigureAwait(false); + if (item != null) + { + validationRresult.Add(new ValidationResult($"宸ヤ綔绔欑紪鐮亄code}搴撲綅缂栫爜{locationCode}宸插瓨鍦", new string[] { "宸ヤ綔绔欑紪鐮", "搴撲綅缂栫爜" })); + } + + } + + + + [HttpPost("get-or-add")] public virtual async Task GetOrAddAsync(PostionLocationEditInput input) { @@ -94,6 +130,7 @@ public class PostionLocationAppService var result = await _repository.FirstOrDefaultAsync(p => p.Code == input.Code).ConfigureAwait(false); if (result == null) { + var entity = ObjectMapper.Map(input); result = await _repository.InsertAsync(entity, true).ConfigureAwait(false); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAutoMapperProfile.cs index 702d7c9c9..2d732d18f 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAutoMapperProfile.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAutoMapperProfile.cs @@ -12,33 +12,45 @@ public partial class BasedataApplicationAutoMapperProfile : Profile CreateMap() .ReverseMap(); + CreateMap() .IgnoreAuditedObjectProperties() .Ignore(x => x.TenantId) .Ignore(x => x.ExtraProperties) .Ignore(x => x.ConcurrencyStamp) - //.Ignore(x => x.EnableMixItem) - //.Ignore(x => x.EnableMixLot) - //.Ignore(x => x.EnableMixStatus) - //.Ignore(x => x.EnableNegative) - //.Ignore(x => x.EnableKeepZero) - //.Ignore(x => x.EnableOpportunityCount) - //.Ignore(x => x.EnablePick) - //.Ignore(x => x.EnableOverPick) - //.Ignore(x => x.EnableWholeStore) - //.Ignore(x => x.EnableBreakStore) - //.Ignore(x => x.EnableShip) - //.Ignore(x => x.EnableReceive) - //.Ignore(x => x.EnableReturnToSupplier) - //.Ignore(x => x.EnableReturnFromCustomer) - //.Ignore(x => x.EnableSplitPallet) - //.Ignore(x => x.EnableSplitBox) - - ; + .Ignore(x => x.Id) + .Ignore(x => x.Remark); + //.Ignore(x => x.EnableMixItem) + //.Ignore(x => x.EnableMixLot) + //.Ignore(x => x.EnableMixStatus) + //.Ignore(x => x.EnableNegative) + //.Ignore(x => x.EnableKeepZero) + //.Ignore(x => x.EnableOpportunityCount) + //.Ignore(x => x.EnablePick) + //.Ignore(x => x.EnableOverPick) + //.Ignore(x => x.EnableWholeStore) + //.Ignore(x => x.EnableBreakStore) + //.Ignore(x => x.EnableShip) + //.Ignore(x => x.EnableReceive) + //.Ignore(x => x.EnableReturnToSupplier) + //.Ignore(x => x.EnableReturnFromCustomer) + //.Ignore(x => x.EnableSplitPallet) + //.Ignore(x => x.EnableSplitBox) + + ; CreateMap() - .Ignore(x => x.ReportStatus) + .Ignore(x => x.ReportStatus) .Ignore(x => x.ReportReason); + CreateMap() + .IgnoreAuditedObjectProperties() + .Ignore(x => x.TenantId) + .Ignore(x => x.ExtraProperties) + .Ignore(x => x.ConcurrencyStamp) + .Ignore(x => x.Id) + .Ignore(x => x.Remark); + + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs index 5bcc8eeda..927c12e56 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs @@ -106,7 +106,7 @@ public class ProductionLineItemAppService : } private void CheckProductionLineProdLineCodeJsonAsync(string locationCodeList, List validationRresult) { - if (!string.IsNullOrEmpty(locationCodeList)) + if (string.IsNullOrEmpty(locationCodeList)) { validationRresult.Add(new ValidationResult($"璇风淮鎶ょ敓浜х嚎鍜屽簱浣嶅叧绯")); } 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 index 60ee8ab81..c07f8a8ae 100644 --- 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 @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using DocumentFormat.OpenXml.Office2010.Drawing; @@ -25,7 +26,7 @@ namespace Win_in.Sfs.Basedata.Application; /// 鎺ュ彛妯℃嫙娴嬭瘯 /// [AllowAnonymous] -[Route($"CargoState")] + public class TestService:ApplicationService { private readonly IServiceProvider _serviceProvider; @@ -35,7 +36,7 @@ public class TestService:ApplicationService _serviceProvider = serviceProvider; _options = options; } - + /* /// /// 鐢熷懡鍛ㄦ湡鎿嶄綔 /// @@ -76,6 +77,7 @@ public class TestService:ApplicationService return t; } + */ //[HttpPost("SyncIssueJobStereo")] //public virtual async Task SyncIssueJobStereoAsync(IssueJobToRestoDTO input) @@ -92,21 +94,51 @@ public class TestService:ApplicationService //} - [HttpPost("GetCargoStatic1")] - /// - /// 寮傛寮濮嬬敓鍛藉懆鏈熸搷浣滀笉鑳藉牭濉 - /// - public async Task GetCargoStatic1(ResponCargos p_cas) + //[HttpPost("GetCargoStatic1")] + ///// + ///// 寮傛寮濮嬬敓鍛藉懆鏈熸搷浣滀笉鑳藉牭濉 + ///// + //public async Task GetCargoStatic1(ResponCargos p_cas) + //{ + + + + // return p_cas; + + //} + + [HttpPost("pushOutTask4FW")] + public async Task pushOutTask4FW(AgvRequest request) { + + AgvResultObject reusltObject = new AgvResultObject(); + reusltObject.Code = "0"; + reusltObject.Message = "OK"; + reusltObject.ReqCode = "T6000001970"; + return reusltObject; - return p_cas; - } + //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 == AreaID).ToList(); + + + //var t = new ResponCargos(); + //t.Code = 200; + //t.Msg = "Success"; + //t.Datalist = result; + //return t; + + } @@ -145,6 +177,90 @@ public class ReusltObject public string Message { set; get; } public string OperateTime { set; get; } } +public class AgvResultObject +{ + public string Code { set; get; } + public string Message { set; get; } + public string ReqCode { set; get; } +} +#region AGV +public class AgvRequestHK +{ + [Display(Name ="璇锋眰缂栧彿")] + public string ReqCode { set; get; } + [Display(Name ="鏄庣粏")] + public List Data { set; get; } + +} + +public class AgvRequestInputHK +{ + //[Display(Name = "璇锋眰缂栧彿")] + //public string ReqCode { set; get; } + [Display(Name = "鏄庣粏")] + public List Data { set; get; } + +} + + + + +public class AgvRequestHKDetail +{ + [Display(Name = "浠诲姟绫诲瀷")] + public string OrderType { set; get; } + [Display(Name = "浠诲姟缂栧彿")] + public string OrderNum { set; get; } + [Display(Name = "鐗╂枡缂栧彿")] + public string MatCode { set; get; } + [Display(Name = "鐗╂枡鏁伴噺")] + public decimal MatQty { set; get; } + [Display(Name = "璧峰鐐")] + public string BeginPosition { set; get; } + [Display(Name = "缁堢偣")] + public string EndPosition { set; get; } + [Display(Name = "鎵规灞炴07")] + public string BatchAttr07 { set; get; } + [Display(Name = "鎵规灞炴08")] + public string BatchAttr08 { set; get; } + [Display(Name = "鎵规灞炴09")] + public string BatchAttr09 { set; get; } + [Display(Name = "鎵规灞炴10")] + public string BatchAttr10 { set; get; } + [Display(Name = "鎵规灞炴11")] + public string BatchAttr11 { set; get; } + [Display(Name = "鎵规灞炴12")] + public string BatchAttr12 { set; get; } + [Display(Name = "鎵规灞炴13")] + public string BatchAttr13 { set; get; } + [Display(Name = "鎵规灞炴14")] + public string BatchAttr14 { set; get; } + [Display(Name = "鎵规灞炴15")] + public string BatchAttr15 { set; get; } + +} + + +/// +/// 闂昏崼璋冩捣搴峰叆鍙 +/// +public class AgvRequest +{ + [Display(Name = "浠诲姟绫诲瀷")] + public string OrderType { set; get; } + [Display(Name = "浠诲姟缂栧彿")] + public string OrderNum { set; get; } + [Display(Name = "鐗╂枡缂栧彿")] + public string MatCode { set; get; } + [Display(Name = "鐗╂枡鏁伴噺")] + public string MatQty { set; get; } + [Display(Name = "鐩爣宸ヤ綅")] + public string EndPosition { set; get; } + +} +#endregion + + diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs index b3d8b50a5..54cb6b6ef 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs @@ -73,6 +73,7 @@ public static class BasedataDbContextModelCreatingExtensions builder.ConfigureKitting(options); builder.ConfigureEquipmentLoc(options); builder.ConfigureEquipmentPartCode(options); + builder.ConfigurePostionLocation(options); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationDbContextModelCreatingExtensions.cs index 7f66e95b5..d53b69eb3 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationDbContextModelCreatingExtensions.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationDbContextModelCreatingExtensions.cs @@ -13,7 +13,7 @@ public static class PostionLocationDbContextModelCreatingExtensions builder.Entity(b => { //Configure table & schema name - b.ToTable(options.TablePrefix + nameof(Location), options.Schema); + b.ToTable(options.TablePrefix + nameof(PostionLocation), options.Schema); //Configure ABP properties b.ConfigureByConvention(); //Configure Sfs base properties diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/DTOS/AgvDto.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/DTOS/AgvDto.cs new file mode 100644 index 000000000..d57a87830 --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/DTOS/AgvDto.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.Store.Application.Contracts; +/// +/// 娴峰悍璋冮椈鑽叆鍙傛暟 +/// +public class AgvRequestHK +{ + [Display(Name = "璇锋眰缂栧彿")] + public string ReqCode { set; get; } + [Display(Name = "鏄庣粏")] + public List Data { set; get; } + +} +/// +/// 娴峰悍璋冮椈鑽叆鍙傛暟 +/// +public class AgvRequestOnlyJobHK +{ + //[Display(Name = "璇锋眰缂栧彿")] + //public string ReqCode { set; get; } + [Display(Name = "鏄庣粏")] + public List Data { set; get; } + +} + + + +/// +/// 娴峰悍璋冮椈鑽叆鍙傛槑缁 +/// +public class AgvRequestHKDetail +{ + [Display(Name = "浠诲姟绫诲瀷")] + public string OrderType { set; get; } + [Display(Name = "浠诲姟缂栧彿")] + public string OrderNum { set; get; } + [Display(Name = "鐗╂枡缂栧彿")] + public string MatCode { set; get; } + [Display(Name = "鐗╂枡鏁伴噺")] + public decimal MatQty { set; get; } + [Display(Name = "璧峰鐐")] + public string BeginPosition { set; get; } + [Display(Name = "缁堢偣")] + public string EndPosition { set; get; } + [Display(Name = "鎵规灞炴07")] + public string BatchAttr07 { set; get; } + [Display(Name = "鎵规灞炴08")] + public string BatchAttr08 { set; get; } + [Display(Name = "鎵规灞炴09")] + public string BatchAttr09 { set; get; } + [Display(Name = "鎵规灞炴10")] + public string BatchAttr10 { set; get; } + [Display(Name = "鎵规灞炴11")] + public string BatchAttr11 { set; get; } + [Display(Name = "鎵规灞炴12")] + public string BatchAttr12 { set; get; } + [Display(Name = "鎵规灞炴13")] + public string BatchAttr13 { set; get; } + [Display(Name = "鎵规灞炴14")] + public string BatchAttr14 { set; get; } + [Display(Name = "鎵规灞炴15")] + public string BatchAttr15 { set; get; } + +} +/// +/// 闂昏崼璋冩捣搴峰叆鍙 +/// +[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.2.0.0 (NJsonSchema v11.1.0.0 (Newtonsoft.Json v13.0.0.0))")] +public partial class AgvRequest +{ + /// + /// 浠诲姟绫诲瀷 + /// + + [System.Text.Json.Serialization.JsonPropertyName("orderType")] + public string OrderType { get; set; } + + /// + /// 浠诲姟缂栧彿 + /// + + [System.Text.Json.Serialization.JsonPropertyName("orderNum")] + public string OrderNum { get; set; } + + /// + /// 鐗╂枡缂栧彿 + /// + + [System.Text.Json.Serialization.JsonPropertyName("matCode")] + public string MatCode { get; set; } + + /// + /// 鐗╂枡鏁伴噺 + /// + + [System.Text.Json.Serialization.JsonPropertyName("matQty")] + public decimal MatQty { get; set; } + + /// + /// 鐩爣宸ヤ綅 + /// + + [System.Text.Json.Serialization.JsonPropertyName("endPosition")] + public string EndPosition { get; set; } + +} + +[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.2.0.0 (NJsonSchema v11.1.0.0 (Newtonsoft.Json v13.0.0.0))")] +public partial class AgvResultObject +{ + + [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("reqCode")] + public string ReqCode { get; set; } + +} + + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/IAgvJobAccountService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/IAgvJobAccountService.cs new file mode 100644 index 000000000..f1bbb2ead --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/IAgvJobAccountService.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Services; + +namespace Win_in.Sfs.Wms.Store.Application.Contracts; +public interface IAgvJobAccountService: IApplicationService +{ + + Task AccountOutOrderAsync(AgvRequestOnlyJobHK request); + + +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/IAgvJobOutputService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/IAgvJobOutputService.cs new file mode 100644 index 000000000..386784f8b --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AgvJobs/IAgvJobOutputService.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace Win_in.Sfs.Wms.Store.Application.Contracts; +public interface IAgvJobOutputService:IApplicationService +{ + Task OutPutTaskAsync(AgvRequest request); +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AgvJobs/AgvJobAccountService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AgvJobs/AgvJobAccountService.cs new file mode 100644 index 000000000..6b91fc539 --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AgvJobs/AgvJobAccountService.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Volo.Abp.Application.Services; +using Volo.Abp.Uow; +using Volo.Abp.Users; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Basedata.Domain; +using Win_in.Sfs.Basedata.Domain.Shared; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Inventory.Application.Contracts; +using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Wms.Store.Domain.Shared; + +namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs.AgvServices; + + +[AllowAnonymous] +[Route($"{StoreConsts.RootPath}agv-job-Account")] +public class AgvJobAccountService : ApplicationService, IAgvJobAccountService +{ + private IAssembleIssueJobAppService _assembleIssueJobAppService; + private ICoatingIssueJobAppService _coatingIssueJobAppService; + private IInjectionIssueJobAppService _injectionIssueJobAppService; + private IKittingIssueJobAppService _kittingIssueJobAppService; + private ISparePartIssueJobAppService _sparePartIssueJobAppService; + + public AgvJobAccountService( + + IAssembleIssueJobAppService assembleIssueJobAppService, + ICoatingIssueJobAppService coatingIssueJobAppService, + IInjectionIssueJobAppService injectionIssueJobAppService, + IKittingIssueJobAppService kittingIssueJobAppService, + ISparePartIssueJobAppService sparePartIssueJobAppService + + ) + { + _assembleIssueJobAppService = assembleIssueJobAppService; + _coatingIssueJobAppService= coatingIssueJobAppService; + _injectionIssueJobAppService= injectionIssueJobAppService; + _kittingIssueJobAppService = kittingIssueJobAppService; + _sparePartIssueJobAppService= sparePartIssueJobAppService; + } + + public async Task AccountOutOrderAsync(AgvRequestOnlyJobHK request) + { + var res=new AgvResultObject(); + res.Code = "0"; + + foreach (var itm in request.Data) + { + switch (itm.OrderType) + { + case "1": + + var assemblejob= new AssembleIssueJobDTO(); + + foreach (var detail in request.Data) + { + + } + + + + + var assemb=await _assembleIssueJobAppService.GetByNumberAsync(itm.OrderNum).ConfigureAwait(false); + await _assembleIssueJobAppService.CompleteAsync(assemb.Id).ConfigureAwait(false); + res.ReqCode = assemb.AssembleRequestNumber; + res.Message = "OK"; + break; + case "2": + var coating = await _coatingIssueJobAppService.GetByNumberAsync(itm.OrderNum).ConfigureAwait(false); + await _coatingIssueJobAppService.CompleteAsync(coating.Id).ConfigureAwait(false); + break; + case "3": + var injection = await _injectionIssueJobAppService.GetByNumberAsync(itm.OrderNum).ConfigureAwait(false); + await _injectionIssueJobAppService.CompleteAsync(injection.Id).ConfigureAwait(false); + break; + case "4": + var kitting = await _kittingIssueJobAppService.GetByNumberAsync(itm.OrderNum).ConfigureAwait(false); + await _kittingIssueJobAppService.CompleteAsync(kitting.Id).ConfigureAwait(false); + + break; + case "5": + var sparePart = await _sparePartIssueJobAppService.GetByNumberAsync(itm.OrderNum).ConfigureAwait(false); + await _sparePartIssueJobAppService.CompleteAsync(sparePart.Id).ConfigureAwait(false); + break; + + } + } + + } +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AgvJobs/AgvJobOutputService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AgvJobs/AgvJobOutputService.cs new file mode 100644 index 000000000..a4db72739 --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AgvJobs/AgvJobOutputService.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http.Headers; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using MyNamespace; +using Volo.Abp; +using Volo.Abp.Application.Services; +using Volo.Abp.Uow; +using Volo.Abp.Users; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Basedata.Domain; +using Win_in.Sfs.Basedata.Domain.Shared; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Inventory.Application.Contracts; +using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Wms.Store.Domain.Shared; +using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy; +using Microsoft.Extensions.Options; +using Win_in.Sfs.Wms.Store.Options; +using Microsoft.Extensions.Logging; +using Win_in.Sfs.Shared.Application.Contracts; + +namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs.AgvServices; +[AllowAnonymous] +[Route($"{StoreConsts.RootPath}agv-job-in")] +public class AgvJobOutputService : ApplicationService, IAgvJobOutputService +{ + private readonly UnitOfWorkManager _unitOfWorkManager; + private readonly IHttpClientFactory _httpClientFactory; + private readonly IOptions _options; + private readonly ILogger _logger; + + public AgvJobOutputService( + UnitOfWorkManager unitOfWorkManager, + IHttpClientFactory httpClientFactory, + IOptions options, + ILogger logger + + ) + { + _logger = logger; + _unitOfWorkManager = unitOfWorkManager; + _httpClientFactory = httpClientFactory; + _options = options; + } + + + //public async Task OutPutTaskAsync(T entity) where T : SfsJobDTOBase + // where TDetail : SfsDetailDTOBase + //{ + // if (entity is CoatingIssueJobDTO) + // { + // var coating = entity as CoatingIssueJobDTO; + // var first = coating.Details.FirstOrDefault(); + // var requst = new AgvRequest(); + // requst.MatCode = first.ItemCode; + // requst.MatQty = first.HandledToQty; + // requst.OrderNum = entity.Number; + // requst.OrderType = "1"; + // await OutPutTaskAsync(requst).ConfigureAwait(false); + // } + // else if (entity is AssembleIssueJobDTO) + // { + // var assemble = entity as AssembleIssueJobDTO; + // var first = assemble.Details.FirstOrDefault(); + // var requst = new AgvRequest(); + // requst.MatCode = first.ItemCode; + // requst.MatQty = first.HandledToQty; + // requst.OrderNum = entity.Number; + // requst.OrderType = "2"; + // return await OutPutTaskAsync(requst).ConfigureAwait(false); + // } + // else if (entity is InjectionIssueJobDTO) + // { + // var injection = entity as InjectionIssueJobDTO; + // var first = injection.Details.FirstOrDefault(); + // var requst = new AgvRequest(); + // requst.MatCode = first.ItemCode; + // requst.MatQty = first.HandledToQty; + // requst.OrderNum = entity.Number; + // requst.OrderType = "3"; + + // return await OutPutTaskAsync(requst).ConfigureAwait(false); + // } + // else if (entity is KittingIssueJobDTO) + // { + // var kitting = entity as KittingIssueJobDTO; + // var first = kitting.Details.FirstOrDefault(); + // var requst = new AgvRequest(); + // requst.MatCode = first.ItemCode; + // requst.MatQty = first.HandledToQty; + // requst.OrderNum = entity.Number; + // requst.OrderType = "4"; + + // return await OutPutTaskAsync(requst).ConfigureAwait(false); + // } + // else if (entity is SparePartIssueJobDTO) + // { + // var sparePart = entity as SparePartIssueJobDTO; + // var first = sparePart.Details.FirstOrDefault(); + // var requst = new AgvRequest(); + // requst.MatCode = first.ItemCode; + // requst.MatQty = first.HandledToQty; + // requst.OrderNum = entity.Number; + // requst.OrderType = "1"; + + // await OutPutTaskAsync(requst).ConfigureAwait(false); + // } + //} + [HttpPost("out-put-task")] + public async Task OutPutTaskAsync(AgvRequest request) + { + var httpclient = _httpClientFactory.CreateClient(); + _options.Value.Address = string.IsNullOrEmpty(_options.Value.Address) + ? "http://7e42682n64.goho.co:21171/" + : _options.Value.Address; //娴嬭瘯鍦板潃 + _options.Value.Token = + string.IsNullOrEmpty(_options.Value.Token) ? string.Empty : _options.Value.Token; //娴嬭瘯token + _options.Value.UserName = + string.IsNullOrEmpty(_options.Value.UserName) ? "" : _options.Value.UserName; //娴嬭瘯鐢ㄦ埛鍚 + _options.Value.Password = + string.IsNullOrEmpty(_options.Value.Password) ? "" : _options.Value.Password; //娴嬭瘯瀵嗙爜 + _options.Value.Path = string.IsNullOrEmpty(_options.Value.Path) + ? "zozocnApi/custom/receiveProductionPlan" + : _options.Value.Path; //娴嬭瘯瀵嗙爜 + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + // _logger.LogInformation($"鏍囧織{flag}寮濮嬭皟鐢ㄩ珮閫歐MS:浼犻掑納JsonSerializer.Serialize(main)}"); + if (!string.IsNullOrEmpty(_options.Value.Token)) + { + var token = _options.Value.Token; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); + } + + if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password)) + { + var username = _options.Value.UserName; + var password = _options.Value.Password; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); + } + + var client = new AgvJobClient(_options.Value.Address, httpclient, _options.Value.Path); + var ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); + + return ret; + + } + + +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs index 829fd4645..2a868787c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs @@ -14,6 +14,7 @@ using Microsoft.Extensions.Options; using MyNamespace; using Omu.ValueInjecter; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.Uow; using Volo.Abp.Users; using Win_in.Sfs.Basedata.Application.Contracts; @@ -50,15 +51,22 @@ public class AssembleIssueJobAppService private readonly ICurrentUser _currentUser; private readonly UnitOfWorkManager _unitOfWorkManager; + + private readonly IAgvJobOutputService _agvOutJob; + public AssembleIssueJobAppService( ILogger logger, + IAgvJobOutputService agvOutJob, IAssembleIssueJobRepository repository, IAssembleIssueJobManager assembleIssueJobManager, ILocationAppService locationAppService, IAssembleIssueNoteAppService assembleIssueNoteAppService, IExpectOutAppService expectOutAppService - , IHttpClientFactory httpClientFactory - , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, + ,IHttpClientFactory httpClientFactory + ,IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser, UnitOfWorkManager unitOfWorkManager) : base( - repository, assembleIssueJobManager) + repository, assembleIssueJobManager + + + ) { _assembleIssueJobManager = assembleIssueJobManager; _locationAppService = locationAppService; @@ -70,6 +78,8 @@ public class AssembleIssueJobAppService _currentUser = currentUser; _unitOfWorkManager = unitOfWorkManager; _logger = logger; + _agvOutJob = agvOutJob; + } [HttpPost("get-by-number-2")] @@ -136,6 +146,10 @@ public class AssembleIssueJobAppService return assembleIssueJobDto; } + + + + [HttpPost("invalid")] public override async Task CancelAsync(Guid id) @@ -961,6 +975,26 @@ public class AssembleIssueJobAppService assembleIssueJobDetailDto.Status, assembleIssueJobDetailDto.HandledToLot, handledToQty).ConfigureAwait(false); } + + + + /// + /// 璋冪敤AgvOutPut鍑哄簱 + /// + /// + /// + private async Task InvokeAgvOutput(AssembleIssueJobDTO job) + { + + var first = job.Details.FirstOrDefault(); + var requst = new AgvRequest(); + requst.MatCode = first.ItemCode; + requst.MatQty = first.HandledToQty; + requst.OrderNum = job.Number; + requst.OrderType = "2"; + return await _agvOutJob.OutPutTaskAsync(requst).ConfigureAwait(false); + } + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs index 544eb2826..bf671982a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs @@ -47,13 +47,14 @@ public class CoatingIssueJobAppService private readonly IOptions _options; private readonly ILogger _logger; private readonly ICurrentUser _currentUser; + private readonly IAgvJobOutputService _agvOutJob; protected ICoatingIssueRequestAppService CoatingIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); public CoatingIssueJobAppService( - - ILogger logger, + IAgvJobOutputService agvOutJob, + ILogger logger, ICoatingIssueJobRepository repository, ICoatingIssueJobManager coatingIssueJobManager, ILocationAppService locationAppService, ICoatingIssueNoteAppService coatingIssueNoteAppService, IExpectOutAppService expectOutAppService @@ -70,6 +71,7 @@ public class CoatingIssueJobAppService _transferLibRequestAppService = transferLibRequestAppService; _currentUser = currentUser; _logger = logger; + _agvOutJob = agvOutJob; } [HttpPost("get-by-number-2")] @@ -722,6 +724,25 @@ public class CoatingIssueJobAppService coatingIssueJobDetailDto.Status, coatingIssueJobDetailDto.HandledToLot, handledToQty).ConfigureAwait(false); } + /// + /// 璋冪敤AgvOutPut鍑哄簱 + /// + /// + /// + private async Task InvokeAgvOutput(CoatingIssueJob job) + { + + var first = job.Details.FirstOrDefault(); + var requst = new AgvRequest(); + requst.MatCode = first.ItemCode; + requst.MatQty = first.HandledToQty; + requst.OrderNum = job.Number; + requst.OrderType = "2"; + return await _agvOutJob.OutPutTaskAsync(requst).ConfigureAwait(false); + } + + + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs index 558a6b7d7..40aaaa7c4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs @@ -43,12 +43,14 @@ public class InjectionIssueJobAppService private readonly ITransferLibRequestAppService _transferLibRequestAppService; private readonly IOptions _options; private readonly ICurrentUser _currentUser; + private readonly IAgvJobOutputService _agvOutJob; protected IInjectionIssueRequestAppService InjectionIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); public InjectionIssueJobAppService( - IInjectionIssueJobRepository repository, IInjectionIssueJobManager injectionIssueJobManager, + IAgvJobOutputService agvOutJob, + IInjectionIssueJobRepository repository, IInjectionIssueJobManager injectionIssueJobManager, ILocationAppService locationAppService, IInjectionIssueNoteAppService injectionIssueNoteAppService, IExpectOutAppService expectOutAppService , IHttpClientFactory httpClientFactory @@ -63,6 +65,7 @@ public class InjectionIssueJobAppService _options = options; _transferLibRequestAppService = transferLibRequestAppService; _currentUser = currentUser; + _agvOutJob = agvOutJob; } [HttpPost("get-by-number-2")] public async Task GetByNumber2Async(string number) @@ -670,6 +673,22 @@ public class InjectionIssueJobAppService injectionIssueJobDetailDto.Status, injectionIssueJobDetailDto.HandledToLot, handledToQty).ConfigureAwait(false); } + /// + /// 璋冪敤AgvOutPut鍑哄簱 + /// + /// + /// + private async Task InvokeAgvOutput(InjectionIssueJob job) + { + + var first = job.Details.FirstOrDefault(); + var requst = new AgvRequest(); + requst.MatCode = first.ItemCode; + requst.MatQty = first.HandledToQty; + requst.OrderNum = job.Number; + requst.OrderType = "2"; + return await _agvOutJob.OutPutTaskAsync(requst).ConfigureAwait(false); + } #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs index 59cb8d340..7836c1c9f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs @@ -43,18 +43,21 @@ public class KittingIssueJobAppService private readonly ITransferLibRequestAppService _transferLibRequestAppService; private readonly IOptions _options; private readonly ICurrentUser _currentUser; + private readonly IAgvJobOutputService _agvOutJob; protected IKittingIssueRequestAppService KittingIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); public KittingIssueJobAppService( - IKittingIssueJobRepository repository, IKittingIssueJobManager kittingIssueJobManager, + IAgvJobOutputService agvOutJob, + IKittingIssueJobRepository repository, IKittingIssueJobManager kittingIssueJobManager, ILocationAppService locationAppService, IKittingIssueNoteAppService kittingIssueNoteAppService, IExpectOutAppService expectOutAppService , IHttpClientFactory httpClientFactory , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser) : base( repository, kittingIssueJobManager) { + _agvOutJob = agvOutJob; _kittingIssueJobManager = kittingIssueJobManager; _locationAppService = locationAppService; _kittingIssueNoteAppService = kittingIssueNoteAppService; @@ -63,6 +66,7 @@ public class KittingIssueJobAppService _options = options; _transferLibRequestAppService = transferLibRequestAppService; _currentUser = currentUser; + _agvOutJob = agvOutJob; } [HttpPost("get-by-number-2")] @@ -680,7 +684,23 @@ public class KittingIssueJobAppService kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot, handledToQty).ConfigureAwait(false); } - - + /// + /// 璋冪敤AgvOutPut鍑哄簱 + /// + /// + /// + private async Task InvokeAgvOutput(KittingIssueJobDTO job) + { + + var first = job.Details.FirstOrDefault(); + var requst = new AgvRequest(); + requst.MatCode = first.ItemCode; + requst.MatQty = first.HandledToQty; + requst.OrderNum = job.Number; + requst.OrderType = "2"; + return await _agvOutJob.OutPutTaskAsync(requst).ConfigureAwait(false); + } + + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs index f93a88714..755087890 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs @@ -43,12 +43,14 @@ public class SparePartIssueJobAppService private readonly ITransferLibRequestAppService _transferLibRequestAppService; private readonly IOptions _options; private readonly ICurrentUser _currentUser; + private readonly IAgvJobOutputService _agvOutJob; protected ISparePartIssueRequestAppService SparePartIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); public SparePartIssueJobAppService( - ISparePartIssueJobRepository repository, ISparePartIssueJobManager sparePartIssueJobManager, + IAgvJobOutputService agvOutJob, + ISparePartIssueJobRepository repository, ISparePartIssueJobManager sparePartIssueJobManager, ILocationAppService locationAppService, ISparePartIssueNoteAppService sparePartIssueNoteAppService, IExpectOutAppService expectOutAppService , IHttpClientFactory httpClientFactory @@ -63,6 +65,7 @@ public class SparePartIssueJobAppService _options = options; _transferLibRequestAppService = transferLibRequestAppService; _currentUser = currentUser; + _agvOutJob = agvOutJob; } [HttpPost("get-by-number-2")] @@ -662,5 +665,23 @@ public class SparePartIssueJobAppService handledToQty).ConfigureAwait(false); } + /// + /// 璋冪敤AgvOutPut鍑哄簱 + /// + /// + /// + private async Task InvokeAgvOutput(SparePartIssueJobDTO job) + { + + var first = job.Details.FirstOrDefault(); + var requst = new AgvRequest(); + requst.MatCode = first.ItemCode; + requst.MatQty = first.HandledToQty; + requst.OrderNum = job.Number; + requst.OrderType = "2"; + return await _agvOutJob.OutPutTaskAsync(requst).ConfigureAwait(false); + } + + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/AgvJobClient.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/AgvJobClient.cs new file mode 100644 index 000000000..7c23313c4 --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/AgvJobClient.cs @@ -0,0 +1,407 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy; + + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "14.2.0.0 (NJsonSchema v11.1.0.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class AgvJobClient + { +#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); + private System.Text.Json.JsonSerializerOptions _instanceSettings; + +#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. + public AgvJobClient(string baseUrl, System.Net.Http.HttpClient httpClient,string path) +#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. + { + BaseUrl = baseUrl; + _httpClient = httpClient; + _path = path; + + + Initialize(); + } + + 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 += '/'; + } + } + + private string _path; + public string Path + { + get { return _path; } + set + { + _path = value; + + } + } + + + protected System.Text.Json.JsonSerializerOptions JsonSerializerSettings { get { return _instanceSettings ?? _settings.Value; } } + + static partial void UpdateJsonSerializerSettings(System.Text.Json.JsonSerializerOptions settings); + + partial void Initialize(); + + 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 PushOutTask4FWAsync(AgvRequest body) + { + return PushOutTask4FWAsync(body, 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 PushOutTask4FWAsync(AgvRequest 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, JsonSerializerSettings); + 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: "pushOutTask4FW" + urlBuilder_.Append(_path); + + 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 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 = System.Text.Json.JsonSerializer.Deserialize(responseText, JsonSerializerSettings); + return new ObjectResponseResult(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(responseStream, JsonSerializerSettings, cancellationToken).ConfigureAwait(false); + return new ObjectResponseResult(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.2.0.0 (NJsonSchema v11.1.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 Data { get; set; } + + [System.Text.Json.Serialization.JsonPropertyName("validationErrors")] + public System.Collections.Generic.ICollection ValidationErrors { get; set; } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.2.0.0 (NJsonSchema v11.1.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.2.0.0 (NJsonSchema v11.1.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 Members { get; set; } + + } + + + + + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "14.2.0.0 (NJsonSchema v11.1.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) + { + 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.2.0.0 (NJsonSchema v11.1.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; + } + } + + + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationModule.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationModule.cs index 62a70b216..5c87cbb67 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationModule.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationModule.cs @@ -29,6 +29,7 @@ public class StoreApplicationModule : AbpModule Configure(configuration.GetSection("RestoOptions")); + Configure(configuration.GetSection("AgvOptions")); //context.Services.Replace(ServiceDescriptor.Transient()); //context.Services.Replace(ServiceDescriptor.Transient()); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs index e4fbb583f..13059560a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs @@ -27,3 +27,28 @@ public class RestoOptions } + +public class AgvOptions +{ + // IP 鍦板潃 + public string Address { set; get; } + // 鐢ㄦ埛鍚 + public string UserName { set; get; } + // 瀵嗙爜 + public string Password { set; get; } + // 浠ょ墝 + public string Token { set; get; } + // 璺緞 + public string Path { set; get; } + + //绔嬩綋搴撶敤鎴峰悕 + public string StereosUser { set; get; } + + //绔嬩綋搴撳瘑鐮 + public string StereosPassword { set; get; } + + + +} + + diff --git a/build/src/docker/publish/conf/settings/appsettings.Development.json b/build/src/docker/publish/conf/settings/appsettings.Development.json index c4eba03a8..a2081799d 100644 --- a/build/src/docker/publish/conf/settings/appsettings.Development.json +++ b/build/src/docker/publish/conf/settings/appsettings.Development.json @@ -1,18 +1,32 @@ { "AlwaysAllowAuthorization": "true", - "RestoOptions": - { + "RestoOptions": { + + "Address": "http://7e42682n64.goho.co:21171/", + // 鐢ㄦ埛鍚 + "UserName": "", + // 瀵嗙爜 + "Password": "", + // 浠ょ墝 + "Token": "", + "Path": "zozocnApi/custom/receiveProductionPlan" + + }, + + "AgvOptions": { + + "Address": "http://dev.ccwin-in.com:60084/", + // 鐢ㄦ埛鍚 + "UserName": "", + // 瀵嗙爜 + "Password": "", + // 浠ょ墝 + "Token": "", + "Path": "Cargostate/pushOutTask4FW" + + }, -"Address" :"http://7e42682n64.goho.co:21171/", - // 鐢ㄦ埛鍚 -"UserName" :"", - // 瀵嗙爜 -"Password" :"", - // 浠ょ墝 -"Token" :"", -"Path" :"zozocnApi/custom/receiveProductionPlan" -}, @@ -151,11 +165,11 @@ "BaseUrl": "http://localhost:59095/" }, "Label": { - "BaseUrl": "http://dev.ccwin-in.com:60082/" + "BaseUrl": "http://dev.ccwin-in.com:60082/" //"BaseUrl": "http://localhost:59092/" }, "Message": { - "BaseUrl": "http://dev.ccwin-in.com:60082/" + "BaseUrl": "http://dev.ccwin-in.com:60082/" //"BaseUrl": "http://localhost:59092/" }, "Store": {