增加 序列码对接供应链

This commit is contained in:
18942506660
2024-06-18 14:17:13 +08:00
parent d87ae2dbe1
commit 28cdd60c6d
11 changed files with 213 additions and 6 deletions

View File

@@ -18,6 +18,7 @@ using WMS.Web.Core.Dto.Erp.Supplier;
using WMS.Web.Core.Dto.SingleData; using WMS.Web.Core.Dto.SingleData;
using WMS.Web.Core.Internal.Results; using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService;
using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Options; using WMS.Web.Domain.Options;
using WMS.Web.Domain.Values; using WMS.Web.Domain.Values;
@@ -46,12 +47,14 @@ namespace WMS.Web.Api.Controllers
private readonly ILogger<SysConfigController> _logger; private readonly ILogger<SysConfigController> _logger;
private ErpOptions _erpOptions; private ErpOptions _erpOptions;
private readonly IMemoryCache _memoryCache; private readonly IMemoryCache _memoryCache;
private readonly ISerialNumberService _serialNumberService;
public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, IOptions<ErpOptions> erpOptions, public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, IOptions<ErpOptions> erpOptions,
IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService, IMemoryCache memoryCache, IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService, IMemoryCache memoryCache,
ISerialNumbersRepositories serialNumbersRepositories, IBoxInventoryRepositories boxInventoryRepositories, ISerialNumbersRepositories serialNumbersRepositories, IBoxInventoryRepositories boxInventoryRepositories,
IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService, IOutStockRepositories outStockRepositories, IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService, IOutStockRepositories outStockRepositories,
ILogger<SysConfigController> logger, IMoveBoxRecordRepositories moveBoxRecordRepositories) ILogger<SysConfigController> logger, IMoveBoxRecordRepositories moveBoxRecordRepositories,
ISerialNumberService serialNumberService)
{ {
this._erpOptions = erpOptions?.Value; this._erpOptions = erpOptions?.Value;
this._memoryCache = memoryCache; this._memoryCache = memoryCache;
@@ -67,6 +70,7 @@ namespace WMS.Web.Api.Controllers
_outStockRepositories = outStockRepositories; _outStockRepositories = outStockRepositories;
_logger = logger; _logger = logger;
_moveBoxRecordRepositories = moveBoxRecordRepositories; _moveBoxRecordRepositories = moveBoxRecordRepositories;
_serialNumberService = serialNumberService;
} }
/// <summary> /// <summary>
@@ -371,7 +375,7 @@ namespace WMS.Web.Api.Controllers
return Result<List<UcSubStockResponse>>.ReFailure(ResultCodes.Token_Invalid_Error); return Result<List<UcSubStockResponse>>.ReFailure(ResultCodes.Token_Invalid_Error);
var r = await _basicsRepositories.GetSubUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), dto.Name, loginInfo.UserInfo.CompanyId); var r = await _basicsRepositories.GetSubUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), dto.Name, loginInfo.UserInfo.CompanyId);
if (!string.IsNullOrEmpty(dto.StockCode)) 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<List<UcSubStockResponse>>.ReSuccess(r); return Result<List<UcSubStockResponse>>.ReSuccess(r);
} }
/// <summary> /// <summary>
@@ -526,7 +530,12 @@ namespace WMS.Web.Api.Controllers
_logger.LogInformation($"请求序列号信息:{serialNumber} 组织:{orgCode} 是否Ops:{IsOps} 查询状态 {serialStatus}"); _logger.LogInformation($"请求序列号信息:{serialNumber} 组织:{orgCode} 是否Ops:{IsOps} 查询状态 {serialStatus}");
var res = await _serialNumbersRepositories.GetSerialNumber(serialNumber, orgCode, IsOps, serialStatus ?? 0); var res = await _serialNumbersRepositories.GetSerialNumber(serialNumber, orgCode, IsOps, serialStatus ?? 0);
if (res == null) return Result<MaterialResponse>.ReFailure(ResultCodes.MateriaNoData); //if (res == null) return Result<MaterialResponse>.ReFailure(ResultCodes.MateriaNoData);
if (res == null)
{
//没有搜索到数据 则去同步供应链系统
return await _serialNumberService.GetBarCodeSerialNumber(serialNumber, orgCode, IsOps, serialStatus ?? 0);
}
/* /*
以下页面需要判断后提示:如果状态为非冻结的提示:序列号已上架入库 状态为冻结的扫描成功; 以下页面需要判断后提示:如果状态为非冻结的提示:序列号已上架入库 状态为冻结的扫描成功;
不存在的序列号提示:产品信息不存在 不存在的序列号提示:产品信息不存在

View File

@@ -5604,6 +5604,41 @@
收货客户 收货客户
</summary> </summary>
</member> </member>
<member name="T:WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsRequest">
<summary>
获取没有装过箱的序列码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsRequest.SerialNumber">
<summary>
序列号
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsResponse">
<summary>
wms系统请求序列码返回
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsResponse.SerialNumber">
<summary>
序列号
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsResponse.MaterialNumber">
<summary>
物料编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsResponse.Creator">
<summary>
创建人
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsResponse.CreateTime">
<summary>
生成时间
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.SingleData.IdRequest"> <member name="T:WMS.Web.Core.Dto.SingleData.IdRequest">
<summary> <summary>
ID请求对象 ID请求对象

View File

@@ -3772,6 +3772,16 @@
<param name="isTransaction"></param> <param name="isTransaction"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WMS.Web.Domain.IService.ISerialNumberService.GetBarCodeSerialNumber(System.String,System.String,System.Boolean,System.Int32)">
<summary>
获取供应链系统序列码
</summary>
<param name="serialNumber"></param>
<param name="orgCode"></param>
<param name="IsOps"></param>
<param name="serialStatus"></param>
<returns></returns>
</member>
<member name="T:WMS.Web.Domain.IService.ITakeStockService"> <member name="T:WMS.Web.Domain.IService.ITakeStockService">
<summary> <summary>
盘点单服务 盘点单服务
@@ -6121,6 +6131,14 @@
ops服务 ops服务
</summary> </summary>
</member> </member>
<member name="M:WMS.Web.Domain.Services.Public.OpsService.GetSerialNumbers(WMS.Web.Core.Dto.SerialNumbers.SerialNumbersWmsRequest)">
<summary>
获取序列码
</summary>
<param name="request"></param>
<returns></returns>
<exception cref="T:System.NotImplementedException"></exception>
</member>
<member name="M:WMS.Web.Domain.Services.Public.RedisClientService.SetStringKey(System.String,System.String,System.Nullable{System.TimeSpan})"> <member name="M:WMS.Web.Domain.Services.Public.RedisClientService.SetStringKey(System.String,System.String,System.Nullable{System.TimeSpan})">
<summary> <summary>
保存单个key value 保存单个key value
@@ -6437,6 +6455,17 @@
<param name="isTransaction"></param> <param name="isTransaction"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WMS.Web.Domain.Services.SerialNumberService.GetBarCodeSerialNumber(System.String,System.String,System.Boolean,System.Int32)">
<summary>
获取供应链系统序列码
</summary>
<param name="serialNumber"></param>
<param name="orgCode"></param>
<param name="IsOps"></param>
<param name="serialStatus"></param>
<returns></returns>
<exception cref="T:System.NotImplementedException"></exception>
</member>
<member name="T:WMS.Web.Domain.Services.TakeStockService"> <member name="T:WMS.Web.Domain.Services.TakeStockService">
<summary> <summary>
盘点单服务 盘点单服务

View File

@@ -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
{
/// <summary>
/// 获取没有装过箱的序列码
/// </summary>
public class SerialNumbersWmsRequest
{
/// <summary>
/// 序列号
/// </summary>
public string SerialNumber { get; set; } = string.Empty;
}
}

View File

@@ -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
{
/// <summary>
/// wms系统请求序列码返回
/// </summary>
public class SerialNumbersWmsResponse
{
/// <summary>
/// 序列号
/// </summary>
public string SerialNumber { get; set; } = string.Empty;
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; } = string.Empty;
/// <summary>
/// 创建人
/// </summary>
public string Creator { get; set; } = string.Empty;
/// <summary>
/// 生成时间
/// </summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
}
}

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using WMS.Web.Core.Dto;
using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.Login;
using WMS.Web.Core.Internal.Results; using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Entitys;
@@ -33,5 +34,14 @@ namespace WMS.Web.Domain.IService
/// <param name="isTransaction"></param> /// <param name="isTransaction"></param>
/// <returns></returns> /// <returns></returns>
Task<Result> SerialNumberOperate(List<SerialNumberOperate> list, bool isTransaction = true); Task<Result> SerialNumberOperate(List<SerialNumberOperate> list, bool isTransaction = true);
/// <summary>
/// 获取供应链系统序列码
/// </summary>
/// <param name="serialNumber"></param>
/// <param name="orgCode"></param>
/// <param name="IsOps"></param>
/// <param name="serialStatus"></param>
/// <returns></returns>
Task<Result<MaterialResponse>> GetBarCodeSerialNumber(string serialNumber, string orgCode, bool IsOps = false, int serialStatus = 0);
} }
} }

View File

@@ -1,13 +1,18 @@
using System; using MySqlX.XDevAPI.Common;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using WMS.Web.Core.Dto; 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 namespace WMS.Web.Domain.IService.Public
{ {
public interface IOpsService public interface IOpsService
{ {
Task<List<OpsBoxResponse>> GetBox(OpsBoxRequest request); Task<List<OpsBoxResponse>> GetBox(OpsBoxRequest request);
Task<Result<SerialNumbersWmsResponse>> GetSerialNumbers(SerialNumbersWmsRequest request);
} }
} }

View File

@@ -8,8 +8,11 @@ using System.ComponentModel;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using WMS.Web.Core.Dto; 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.IService.Public;
using WMS.Web.Domain.Options; using WMS.Web.Domain.Options;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.Services.Public namespace WMS.Web.Domain.Services.Public
{ {
@@ -51,6 +54,21 @@ namespace WMS.Web.Domain.Services.Public
var list = JsonConvert.DeserializeObject<List<OpsBoxResponse>>(res.data.date); var list = JsonConvert.DeserializeObject<List<OpsBoxResponse>>(res.data.date);
return list; return list;
} }
/// <summary>
/// 获取序列码
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<Result<SerialNumbersWmsResponse>> GetSerialNumbers(SerialNumbersWmsRequest request)
{
string endStr = "api/WmsBox/GetSerialNumber";
Dictionary<string, string> dicHeaders = new Dictionary<string, string>();
//dicHeaders.Add("Authorization", "Bearer " + token);
//_httpClientService.BuildHttpClient(contentHeaders);
var res = await _httpClientService.PostAsync<Result<SerialNumbersWmsResponse>>(_option.Url + endStr, JsonConvert.SerializeObject(request), dicHeaders);
return res;
}
private async Task<string> GetToken() private async Task<string> GetToken()
{ {

View File

@@ -1,10 +1,12 @@
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using WMS.Web.Core.Dto;
using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.Login;
using WMS.Web.Core.Internal.Results; using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Entitys;
@@ -28,10 +30,12 @@ namespace WMS.Web.Domain.Services
private readonly ISingleDataService _singleDataService; private readonly ISingleDataService _singleDataService;
private readonly IErpService _erpService; private readonly IErpService _erpService;
private readonly IBoxInventoryRepositories _boxInventoryRepositories; private readonly IBoxInventoryRepositories _boxInventoryRepositories;
private readonly IOpsService _opsService;
private readonly ILogger<SerialNumberService> _logger;
public SerialNumberService(ISerialNumberOperateRepositories serialNumberOperateRepositories, public SerialNumberService(ISerialNumberOperateRepositories serialNumberOperateRepositories,
ISerialNumbersRepositories serialNumbersRepositories, IBasicsRepositories transactionRepositories, ISerialNumbersRepositories serialNumbersRepositories, IBasicsRepositories transactionRepositories,
IBoxRepositories boxRepositories, ISingleDataService singleDataService, IErpService erpService, IBoxRepositories boxRepositories, ISingleDataService singleDataService, IErpService erpService,
IBoxInventoryRepositories boxInventoryRepositories) IBoxInventoryRepositories boxInventoryRepositories, IOpsService opsService, ILogger<SerialNumberService> logger)
{ {
_serialNumberOperateRepositories = serialNumberOperateRepositories; _serialNumberOperateRepositories = serialNumberOperateRepositories;
_serialNumbersRepositories = serialNumbersRepositories; _serialNumbersRepositories = serialNumbersRepositories;
@@ -40,6 +44,8 @@ namespace WMS.Web.Domain.Services
_singleDataService = singleDataService; _singleDataService = singleDataService;
_erpService = erpService; _erpService = erpService;
_boxInventoryRepositories = boxInventoryRepositories; _boxInventoryRepositories = boxInventoryRepositories;
_opsService = opsService;
_logger = logger;
} }
/// <summary> /// <summary>
/// 改箱 /// 改箱
@@ -564,5 +570,48 @@ namespace WMS.Web.Domain.Services
if (!res.Success) return Result.ReFailure(ResultCodes.DateWriteError); if (!res.Success) return Result.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess(); return Result.ReSuccess();
} }
/// <summary>
/// 获取供应链系统序列码
/// </summary>
/// <param name="serialNumber"></param>
/// <param name="orgCode"></param>
/// <param name="IsOps"></param>
/// <param name="serialStatus"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<Result<MaterialResponse>> GetBarCodeSerialNumber(string serialNumber, string orgCode, bool IsOps = false, int serialStatus = 0)
{
//外层方法没有调到数据是null 如果这里查询到序列码
var list = await _serialNumbersRepositories.GetEntityList(new List<string>() { serialNumber });
if (list.FirstOrDefault(f => f.SerialNumber.Equals(serialNumber)) != null)
return Result<MaterialResponse>.ReFailure(ResultCodes.MateriaNoData);
//进入供应链系统调数据
_logger.LogInformation($"拉取供应链系统条码->{serialNumber}");
var res = await _opsService.GetSerialNumbers(new Core.Dto.SerialNumbers.SerialNumbersWmsRequest() { SerialNumber = serialNumber });
if (!res.IsSuccess)
return Result<MaterialResponse>.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<SerialNumbers>() { entity });
if (!isSuccess) return Result<MaterialResponse>.ReFailure(ResultCodes.DateWriteError);
var res_s = await _serialNumbersRepositories.GetSerialNumber(serialNumber, orgCode, IsOps, serialStatus);
if (res_s == null) return Result<MaterialResponse>.ReFailure(ResultCodes.MateriaNoData);
/*
以下页面需要判断后提示:如果状态为非冻结的提示:序列号已上架入库 状态为冻结的扫描成功;
不存在的序列号提示:产品信息不存在
非采购上架 改箱 (非激活的或者(激活被冻结)) 1
出库回退上架 (激活被冻结) 2
*/
if (serialStatus == 1 || serialStatus == 2)
{
if (res_s.IsActivate == true && res_s.IsDelete != true)
return Result<MaterialResponse>.ReFailure(ResultCodes.SerialNumbersIsShelf);
}
return Result<MaterialResponse>.ReSuccess(res_s);
}
} }
} }

View File

@@ -95,5 +95,7 @@ namespace WMS.Web.Domain.Values
public static ValueTuple<int, string> TakeStockBoxIdError = (610007, "箱信息错误"); public static ValueTuple<int, string> TakeStockBoxIdError = (610007, "箱信息错误");
public static ValueTuple<int, string> SubscribeNotificationNoData = (700001, "订阅通知信息不存在"); public static ValueTuple<int, string> SubscribeNotificationNoData = (700001, "订阅通知信息不存在");
public static ValueTuple<int, string> GetBarCodeSerialNumberError = (800001, "获取序列码异常");
} }
} }