diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 157aa20e..d9f783a9 100644 Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs index 88087317..89fa332c 100644 --- a/src/WMS.Web.Api/Controllers/SysConfigController.cs +++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs @@ -18,6 +18,7 @@ using WMS.Web.Core.Dto.Erp.Supplier; using WMS.Web.Core.Dto.SingleData; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Options; using WMS.Web.Domain.Values; @@ -46,12 +47,14 @@ namespace WMS.Web.Api.Controllers private readonly ILogger _logger; private ErpOptions _erpOptions; private readonly IMemoryCache _memoryCache; + private readonly ISerialNumberService _serialNumberService; public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, IOptions erpOptions, IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService, IMemoryCache memoryCache, ISerialNumbersRepositories serialNumbersRepositories, IBoxInventoryRepositories boxInventoryRepositories, IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService, IOutStockRepositories outStockRepositories, - ILogger logger, IMoveBoxRecordRepositories moveBoxRecordRepositories) + ILogger logger, IMoveBoxRecordRepositories moveBoxRecordRepositories, + ISerialNumberService serialNumberService) { this._erpOptions = erpOptions?.Value; this._memoryCache = memoryCache; @@ -67,6 +70,7 @@ namespace WMS.Web.Api.Controllers _outStockRepositories = outStockRepositories; _logger = logger; _moveBoxRecordRepositories = moveBoxRecordRepositories; + _serialNumberService = serialNumberService; } /// @@ -371,7 +375,7 @@ namespace WMS.Web.Api.Controllers return Result>.ReFailure(ResultCodes.Token_Invalid_Error); var r = await _basicsRepositories.GetSubUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), dto.Name, loginInfo.UserInfo.CompanyId); if (!string.IsNullOrEmpty(dto.StockCode)) - r = r.Where(w => w.StockCode == dto.StockCode && w.ErpOrgCode==dto.OrgCode).ToList(); + r = r.Where(w => w.StockCode == dto.StockCode && w.ErpOrgCode == dto.OrgCode).ToList(); return Result>.ReSuccess(r); } /// @@ -526,7 +530,12 @@ namespace WMS.Web.Api.Controllers _logger.LogInformation($"请求序列号信息:{serialNumber} 组织:{orgCode} 是否Ops:{IsOps} 查询状态 {serialStatus}"); var res = await _serialNumbersRepositories.GetSerialNumber(serialNumber, orgCode, IsOps, serialStatus ?? 0); - if (res == null) return Result.ReFailure(ResultCodes.MateriaNoData); + //if (res == null) return Result.ReFailure(ResultCodes.MateriaNoData); + if (res == null) + { + //没有搜索到数据 则去同步供应链系统 + return await _serialNumberService.GetBarCodeSerialNumber(serialNumber, orgCode, IsOps, serialStatus ?? 0); + } /* 以下页面需要判断后提示:如果状态为非冻结的提示:序列号已上架入库 ; 状态为冻结的扫描成功; 不存在的序列号提示:产品信息不存在 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 0bd1c113..aa653232 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -5604,6 +5604,41 @@ 收货客户 + + + 获取没有装过箱的序列码 + + + + + 序列号 + + + + + wms系统请求序列码返回 + + + + + 序列号 + + + + + 物料编码 + + + + + 创建人 + + + + + 生成时间 + + ID请求对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index b22a842f..94644910 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3772,6 +3772,16 @@ + + + 获取供应链系统序列码 + + + + + + + 盘点单服务 @@ -6121,6 +6131,14 @@ ops服务 + + + 获取序列码 + + + + + 保存单个key value @@ -6437,6 +6455,17 @@ + + + 获取供应链系统序列码 + + + + + + + + 盘点单服务 diff --git a/src/WMS.Web.Core/Dto/SerialNumbers/SerialNumbersWmsRequest.cs b/src/WMS.Web.Core/Dto/SerialNumbers/SerialNumbersWmsRequest.cs new file mode 100644 index 00000000..9aca483d --- /dev/null +++ b/src/WMS.Web.Core/Dto/SerialNumbers/SerialNumbersWmsRequest.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WMS.Web.Core.Dto.SerialNumbers +{ + /// + /// 获取没有装过箱的序列码 + /// + public class SerialNumbersWmsRequest + { + /// + /// 序列号 + /// + public string SerialNumber { get; set; } = string.Empty; + } +} diff --git a/src/WMS.Web.Core/Dto/SerialNumbers/SerialNumbersWmsResponse.cs b/src/WMS.Web.Core/Dto/SerialNumbers/SerialNumbersWmsResponse.cs new file mode 100644 index 00000000..c8dafe87 --- /dev/null +++ b/src/WMS.Web.Core/Dto/SerialNumbers/SerialNumbersWmsResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WMS.Web.Core.Dto.SerialNumbers +{ + /// + /// wms系统请求序列码返回 + /// + public class SerialNumbersWmsResponse + { + /// + /// 序列号 + /// + public string SerialNumber { get; set; } = string.Empty; + /// + /// 物料编码 + /// + public string MaterialNumber { get; set; } = string.Empty; + /// + /// 创建人 + /// + public string Creator { get; set; } = string.Empty; + /// + /// 生成时间 + /// + public DateTime CreateTime { get; set; } = DateTime.Now; + } +} diff --git a/src/WMS.Web.Domain/IService/ISerialNumberService.cs b/src/WMS.Web.Domain/IService/ISerialNumberService.cs index 9831d63e..e4e71340 100644 --- a/src/WMS.Web.Domain/IService/ISerialNumberService.cs +++ b/src/WMS.Web.Domain/IService/ISerialNumberService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Entitys; @@ -33,5 +34,14 @@ namespace WMS.Web.Domain.IService /// /// Task SerialNumberOperate(List list, bool isTransaction = true); + /// + /// 获取供应链系统序列码 + /// + /// + /// + /// + /// + /// + Task> GetBarCodeSerialNumber(string serialNumber, string orgCode, bool IsOps = false, int serialStatus = 0); } } diff --git a/src/WMS.Web.Domain/IService/Public/IOpsService.cs b/src/WMS.Web.Domain/IService/Public/IOpsService.cs index 65fcb97d..aa5e45ac 100644 --- a/src/WMS.Web.Domain/IService/Public/IOpsService.cs +++ b/src/WMS.Web.Domain/IService/Public/IOpsService.cs @@ -1,13 +1,18 @@ -using System; +using MySqlX.XDevAPI.Common; +using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; +using WMS.Web.Core.Dto.SerialNumbers; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; namespace WMS.Web.Domain.IService.Public { public interface IOpsService { Task> GetBox(OpsBoxRequest request); + Task> GetSerialNumbers(SerialNumbersWmsRequest request); } } diff --git a/src/WMS.Web.Domain/Services/Public/OpsService.cs b/src/WMS.Web.Domain/Services/Public/OpsService.cs index 24b06377..663eeca0 100644 --- a/src/WMS.Web.Domain/Services/Public/OpsService.cs +++ b/src/WMS.Web.Domain/Services/Public/OpsService.cs @@ -8,8 +8,11 @@ using System.ComponentModel; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; +using WMS.Web.Core.Dto.SerialNumbers; +using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Options; +using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Services.Public { @@ -51,6 +54,21 @@ namespace WMS.Web.Domain.Services.Public var list = JsonConvert.DeserializeObject>(res.data.date); return list; } + /// + /// 获取序列码 + /// + /// + /// + /// + public async Task> GetSerialNumbers(SerialNumbersWmsRequest request) + { + string endStr = "api/WmsBox/GetSerialNumber"; + Dictionary dicHeaders = new Dictionary(); + //dicHeaders.Add("Authorization", "Bearer " + token); + //_httpClientService.BuildHttpClient(contentHeaders); + var res = await _httpClientService.PostAsync>(_option.Url + endStr, JsonConvert.SerializeObject(request), dicHeaders); + return res; + } private async Task GetToken() { diff --git a/src/WMS.Web.Domain/Services/SerialNumberService.cs b/src/WMS.Web.Domain/Services/SerialNumberService.cs index 4d84afc7..36137579 100644 --- a/src/WMS.Web.Domain/Services/SerialNumberService.cs +++ b/src/WMS.Web.Domain/Services/SerialNumberService.cs @@ -1,10 +1,12 @@ using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Entitys; @@ -28,10 +30,12 @@ namespace WMS.Web.Domain.Services private readonly ISingleDataService _singleDataService; private readonly IErpService _erpService; private readonly IBoxInventoryRepositories _boxInventoryRepositories; + private readonly IOpsService _opsService; + private readonly ILogger _logger; public SerialNumberService(ISerialNumberOperateRepositories serialNumberOperateRepositories, ISerialNumbersRepositories serialNumbersRepositories, IBasicsRepositories transactionRepositories, IBoxRepositories boxRepositories, ISingleDataService singleDataService, IErpService erpService, - IBoxInventoryRepositories boxInventoryRepositories) + IBoxInventoryRepositories boxInventoryRepositories, IOpsService opsService, ILogger logger) { _serialNumberOperateRepositories = serialNumberOperateRepositories; _serialNumbersRepositories = serialNumbersRepositories; @@ -40,6 +44,8 @@ namespace WMS.Web.Domain.Services _singleDataService = singleDataService; _erpService = erpService; _boxInventoryRepositories = boxInventoryRepositories; + _opsService = opsService; + _logger = logger; } /// /// 改箱 @@ -457,7 +463,7 @@ namespace WMS.Web.Domain.Services { var serialNumbers = takeStocks.SelectMany(s => s.Details).SelectMany(s => s.SerialNumbers).ToList(); var entityList = await _serialNumbersRepositories.GetEntityList(serialNumbers); - + var boxIds = takeStocks.SelectMany(s => s.Details).Select(s => s.BoxId).ToList(); var boxList = await _boxRepositories.GetEntityList(boxIds); @@ -564,5 +570,48 @@ namespace WMS.Web.Domain.Services if (!res.Success) return Result.ReFailure(ResultCodes.DateWriteError); return Result.ReSuccess(); } + /// + /// 获取供应链系统序列码 + /// + /// + /// + /// + /// + /// + /// + public async Task> GetBarCodeSerialNumber(string serialNumber, string orgCode, bool IsOps = false, int serialStatus = 0) + { + //外层方法没有调到数据是null 如果这里查询到序列码 + var list = await _serialNumbersRepositories.GetEntityList(new List() { serialNumber }); + if (list.FirstOrDefault(f => f.SerialNumber.Equals(serialNumber)) != null) + return Result.ReFailure(ResultCodes.MateriaNoData); + //进入供应链系统调数据 + _logger.LogInformation($"拉取供应链系统条码->{serialNumber}"); + var res = await _opsService.GetSerialNumbers(new Core.Dto.SerialNumbers.SerialNumbersWmsRequest() { SerialNumber = serialNumber }); + if (!res.IsSuccess) + return Result.ReFailure(ResultCodes.MateriaNoData); + + _logger.LogInformation($"拉取供应链系统条码结果:->{JsonConvert.SerializeObject(res)}"); + //插入序列码信息 + SerialNumbers entity = new SerialNumbers(res.Data.SerialNumber, res.Data.MaterialNumber + , 0, 0, res.Data.Creator, res.Data.CreateTime, null); + var isSuccess = await _serialNumbersRepositories.AddRange(new List() { entity }); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + + var res_s = await _serialNumbersRepositories.GetSerialNumber(serialNumber, orgCode, IsOps, serialStatus); + if (res_s == null) return Result.ReFailure(ResultCodes.MateriaNoData); + /* + 以下页面需要判断后提示:如果状态为非冻结的提示:序列号已上架入库 ; 状态为冻结的扫描成功; + 不存在的序列号提示:产品信息不存在 + 非采购上架 改箱 (非激活的或者(激活被冻结)) 1 + 出库回退上架 (激活被冻结) 2 + */ + if (serialStatus == 1 || serialStatus == 2) + { + if (res_s.IsActivate == true && res_s.IsDelete != true) + return Result.ReFailure(ResultCodes.SerialNumbersIsShelf); + } + return Result.ReSuccess(res_s); + } } } diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 90072abe..06a356cc 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -95,5 +95,7 @@ namespace WMS.Web.Domain.Values public static ValueTuple TakeStockBoxIdError = (610007, "箱信息错误"); public static ValueTuple SubscribeNotificationNoData = (700001, "订阅通知信息不存在"); + + public static ValueTuple GetBarCodeSerialNumberError = (800001, "获取序列码异常"); } }