金蝶物料数据-可以使用了

This commit is contained in:
tongfei
2023-11-08 10:46:00 +08:00
19 changed files with 325 additions and 9 deletions

View File

@@ -12,6 +12,7 @@ using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Values;
using WMS.Web.Domain.Values.Single;
namespace WMS.Web.Api.Controllers
{
@@ -25,12 +26,16 @@ namespace WMS.Web.Api.Controllers
private readonly ILoginService _loginService;
private readonly IBasicsRepositories _basicsRepositories;
private readonly IBoxRepositories _boxRepositories;
private readonly IErpService _erpService;
private readonly ISingleDataService _singleDataService;
public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories,
IBoxRepositories boxRepositories)
IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService)
{
_loginService = loginService;
_basicsRepositories = basicsRepositories;
_boxRepositories = boxRepositories;
_erpService = erpService;
_singleDataService = singleDataService;
}
/// <summary>
@@ -111,6 +116,37 @@ namespace WMS.Web.Api.Controllers
var r = await _basicsRepositories.GetSubUcStockAsync(id);
return Result<List<UcStockResponse>>.ReSuccess(r);
}
/// <summary>
/// 根据仓库获取金蝶子仓库
/// </summary>
/// <param name="id">仓库id</param>
/// <returns></returns>
[HttpGet]
[Route("GetErp_SubUcStock/{id}")]
public async Task<Result<List<UcStockResponse>>> GetErp_SubUcStock([FromRoute] int id)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result<List<UcStockResponse>>.ReFailure(ResultCodes.Token_Invalid_Error);
List<UcStockResponse> list = new List<UcStockResponse>();
var code = _singleDataService.GetSingleDataCode(SingleAction.Stocks, loginInfo.UserInfo.CompanyId, id);
if (code.Substring(0, 2).Equals("HD") || code.Substring(0, 2).Equals("GD"))
{
var subs = await _erpService.BillQueryForSubStock(code);
foreach (var s in subs.Data)
{
list.Add(new UcStockResponse()
{
Id = s.Id,
Code = s.Code,
Name = s.Name,
Disable = false
});
}
}
return Result<List<UcStockResponse>>.ReSuccess(list);
}
/// <summary>
/// 获取仓位:模糊名称

View File

@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Threading.Tasks;
using WMS.Web.Core.Dto;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService;
@@ -23,19 +24,28 @@ namespace WMS.Web.Api.Controllers
private readonly IErpService _erpService;
private IInStockTaskService _inStockTaskService;
private IBasicsRepositories _transactionRepositories;
private readonly IOpsService _opsService;
public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBasicsRepositories transactionRepositories)
public TestController(IErpService erpService, IInStockTaskService inStockTaskService,
IBasicsRepositories transactionRepositories, IOpsService opsService)
{
this._erpService = erpService;
this._inStockTaskService = inStockTaskService;
this._transactionRepositories = transactionRepositories;
_opsService = opsService;
}
[HttpGet]
[Route("hj")]
public async Task<string> TestHJ()
{
var res = await this._erpService.BillQueryForTransferDirectOutStock();
OpsBoxRequest request = new OpsBoxRequest()
{
StrartTime = DateTime.Now.AddYears(-1),
EndTime=DateTime.Now
};
await _opsService.GetBox(request);
//var res = await this._erpService.BillQueryForSubStock();
//var result= await this._erpService.BillQueryForPurchaseInStock();
//var result = await this._erpService.BillQueryForOrg();
var result = await this._erpService.BillQueryForMaterial();

View File

@@ -43,6 +43,11 @@
"ErpId": "ce20210909",
"PurchaseInstockFieldKeys": "FBillNo,FUOM,FSupplierId.FName,FPurchaseOrgId.FName,FMaterialName,FMaterialId.FNumber"
},
"OpsOptions": {
"Url": "http://39.108.150.2:8050/",
"UserName": "admin",
"PassWord": "888888"
},
"Qiniu": {
"AccessKey": "dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms",
"SecretKey": "KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q",

View File

@@ -283,6 +283,13 @@
<param name="id">仓库id</param>
<returns></returns>
</member>
<member name="M:WMS.Web.Api.Controllers.SysConfigController.GetErp_SubUcStock(System.Int32)">
<summary>
根据仓库获取金蝶子仓库
</summary>
<param name="id">仓库id</param>
<returns></returns>
</member>
<member name="M:WMS.Web.Api.Controllers.SysConfigController.GetSubUcStockByName(System.String)">
<summary>
获取仓位:模糊名称

View File

@@ -2280,6 +2280,16 @@
操作 Id集合
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.OpsBoxRequest">
<summary>
老ops箱信息请求
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.OpsBoxResponse">
<summary>
老ops箱信息
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.OutStockTask.GetOutStockTaskByNoResponse">
<summary>
根据单号搜索出库单任务信息

View File

@@ -993,6 +993,11 @@
仓位ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.TakeStock.Erp_SubStockId">
<summary>
子仓库(跟金蝶交互字段)
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.TakeStock.BeforeQty">
<summary>
盘点前数量wms系统数量
@@ -1598,6 +1603,12 @@
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.IService.Public.IErpService.BillQueryForSubStock(System.String)">
<summary>
获取仓位信息信息 根据仓库编码
</summary>
<returns></returns>
</member>
<member name="T:WMS.Web.Domain.IService.Public.ILoginService">
<summary>
登录服务接口
@@ -1924,6 +1935,11 @@
采购入库:字段
</summary>
</member>
<member name="T:WMS.Web.Domain.Options.OpsOptions">
<summary>
老ops对接
</summary>
</member>
<member name="T:WMS.Web.Domain.Options.QuartzJobOptions">
<summary>
Quartz定时任务-配置项
@@ -2373,6 +2389,13 @@
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Services.Public.ErpService.BillQueryForSubStock(System.String)">
<summary>
根据仓库编码获取仓位
</summary>
<param name="code"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Services.Public.ErpService.Sync``1(``0,System.String)">
<summary>
同步数据(保存提交审核)
@@ -2597,6 +2620,11 @@
<param name="sessionId"></param>
<returns></returns>
</member>
<member name="T:WMS.Web.Domain.Services.Public.OpsService">
<summary>
ops服务
</summary>
</member>
<member name="M:WMS.Web.Domain.Services.Public.RedisClientService.SetStringKey(System.String,System.String,System.Nullable{System.TimeSpan})">
<summary>
保存单个key value

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Web.Core.Dto
{
/// <summary>
/// 老ops箱信息请求
/// </summary>
public class OpsBoxRequest
{
public DateTime StrartTime { get; set; }
public DateTime EndTime { get; set; }
public string BoxBillNo { get; set; }
public int Page { get; set; } = 1;
public int Limit { get; set; } = 10000000;
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Web.Core.Dto
{
/// <summary>
/// 老ops箱信息
/// </summary>
public class OpsBoxResponse
{
}
}

View File

@@ -34,12 +34,16 @@ namespace WMS.Web.Domain.Entitys
/// <summary>
/// 供应商Id
/// </summary>
public int SupplierId { get; set; }
public int? SupplierId { get; set; }
/// <summary>
/// 组织Id
/// </summary>
public int? OrgId { get; set; }
/// <summary>
/// 创建时间对应老OPS的创建时间
/// </summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 明细
/// </summary>

View File

@@ -61,6 +61,11 @@ namespace WMS.Web.Domain.Entitys
[Column("SubStockId")]
public int SubStockId { get; set; }
/// <summary>
/// 子仓库(跟金蝶交互字段)
/// </summary>
[Column("Erp_SubStockId")]
public int Erp_SubStockId { get; set; } = 0;
/// <summary>
/// 盘点前数量wms系统数量
/// </summary>
[Column("BeforeQty")]

View File

@@ -65,6 +65,11 @@ namespace WMS.Web.Domain.IService.Public
/// </summary>
/// <returns></returns>
Task<ResultList<ErpStockDto>> BillQueryForStock();
/// <summary>
/// 获取仓位信息信息 根据仓库编码
/// </summary>
/// <returns></returns>
Task<ResultList<ErpStockDto>> BillQueryForSubStock(string code=null);
//同步数据(保存提交审核)
Task<Result> Sync<T>(T dto, string formId);
//下推

View File

@@ -8,6 +8,7 @@ namespace WMS.Web.Domain.IService.Public
{
public interface IHttpClientService
{
HttpClient BuildHttpClient(Dictionary<string, string> dicDefaultHeaders, int? timeoutSecond = 180);
Task<T> GetAsync<T>(string url, int timeoutSecond = 180);
Task<T> GetAsync<T>(string url, Dictionary<string, string> dicHeaders, int timeoutSecond = 180);
Task<T> PostAsync<T>(string url, string requestBody, int timeoutSecond = 180);

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto;
namespace WMS.Web.Domain.IService.Public
{
public interface IOpsService
{
Task GetBox(OpsBoxRequest request);
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Web.Domain.Options
{
/// <summary>
/// 老ops对接
/// </summary>
public class OpsOptions
{
public string Url { get; set; }
public string UserName { get; set; }
public string PassWord { get; set; }
}
}

View File

@@ -201,6 +201,21 @@ namespace WMS.Web.Domain.Services.Public
//3.使用组织只查询“深圳市元创时代科技有限公司”这个组织组织ID=100008--固定值查询(测试端和正式是一样的)
param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and FUseOrgId=100008";
param.OrderString = "FCreateDate ASC";
//3.获取金蝶物料:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString());
param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FForbidStatus,FUseOrgId";
param.Limit = 10000;
Console.Write("请输入第几行:");
var row = Console.ReadLine();
param.StartRow = (Convert.ToInt32(row) * param.Limit);
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.审核状态:已审核
//2.禁用状态A否B是
//3.使用组织只查询“深圳市元创时代科技有限公司”这个组织组织ID=100008--固定值查询(测试端和正式是一样的)
param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and FUseOrgId=100008";
param.OrderString = "FCreateDate ASC";
//4.循环拿金蝶数据
bool isHave = true;
@@ -331,6 +346,49 @@ namespace WMS.Web.Domain.Services.Public
}
}
/// <summary>
/// 根据仓库编码获取仓位
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public async Task<ResultList<ErpStockDto>> BillQueryForSubStock(string code = null)
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpStockDto>.ReFailure(token_result);
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString());
param.FieldKeys = "FStockFlexDetail_FDetailID,FFlexEntryName,FFlexEntryId,'0'";
param.Limit = 100000;
if (!string.IsNullOrEmpty(code))
param.FilterString = "FNumber='" + code + "'";//FNumber='C'
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
var list = new List<ErpStockDto>();
foreach (var item in result)
{
var lis = new ErpStockDto();
lis.Id = int.Parse(item[0]);
lis.Name = item[1];
lis.Code = item[2];
lis.OrgId = Convert.ToInt32(item[3]);
list.Add(lis);
}
return ResultList<ErpStockDto>.ReSuccess(list);
}
catch (Exception)
{
return ResultList<ErpStockDto>.ReFailure("错误", 10002);
}
}
/// <summary>
/// 同步数据(保存提交审核)
/// </summary>
/// <param name="dto"></param>
@@ -414,7 +472,7 @@ namespace WMS.Web.Domain.Services.Public
param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C' and FRemainOutQty>=0";
//string srt = JsonConvert.SerializeObject(stocks_codes);
//param.FilterString = param.FilterString + " and FStockID in (" + srt.Substring(1, srt.Length - 2) + ")";
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
@@ -833,6 +891,7 @@ namespace WMS.Web.Domain.Services.Public
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
#endregion
}
}

View File

@@ -105,8 +105,8 @@ namespace WMS.Web.Domain.Services.Public
/// <returns></returns>
public async Task<T> PostAsync<T>(string url, string requestBody, Dictionary<string, string> dicHeaders, int timeoutSecond = 180)
{
var client = BuildHttpClient(null, timeoutSecond);
var requestContent = GenerateStringContent(requestBody, dicHeaders);
var client = BuildHttpClient(dicHeaders, timeoutSecond);
var requestContent = GenerateStringContent(requestBody, contentHeaders);
var response = await client.PostAsync(url, requestContent);
var responseContent = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
@@ -213,7 +213,7 @@ namespace WMS.Web.Domain.Services.Public
/// <param name="dicDefaultHeaders"></param>
/// <param name="timeoutSecond"></param>
/// <returns></returns>
private HttpClient BuildHttpClient(Dictionary<string, string> dicDefaultHeaders, int? timeoutSecond)
public HttpClient BuildHttpClient(Dictionary<string, string> dicDefaultHeaders, int? timeoutSecond=180)
{
var httpClient = _clientFactory.CreateClient("ops_client");
httpClient.DefaultRequestHeaders.Clear(); //为了使客户端不受最后一个请求的影响它需要清除DefaultRequestHeaders

View File

@@ -0,0 +1,81 @@
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Options;
namespace WMS.Web.Domain.Services.Public
{
/// <summary>
/// ops服务
/// </summary>
public class OpsService : IOpsService
{
private readonly IHttpClientService _httpClientService;
private readonly ILogger<OpsService> _logger;
private readonly IMemoryCache _memoryCache;
private int hours = 10;//过期时间 默认10小时
private readonly OpsOptions _option;
public OpsService(IHttpClientService httpClientService, ILogger<OpsService> logger,
IMemoryCache memoryCache, IOptions<OpsOptions> option)
{
this._memoryCache = memoryCache;
this._httpClientService = httpClientService;
this._logger = logger;
_option = option?.Value;
}
public async Task GetBox(OpsBoxRequest request)
{
var token = await GetToken();
Dictionary<string, string> dicHeaders = new Dictionary<string, string>();
dicHeaders.Add("Authorization", "Bearer " + token);
//_httpClientService.BuildHttpClient(contentHeaders);
var res= await _httpClientService.PostAsync<OpsReponse>(_option.Url + "BarCode/carton-box_api/carton-box", JsonConvert.SerializeObject(request), dicHeaders);
}
private async Task<string> GetToken()
{
OpsLogin login = new OpsLogin()
{
hAccount = _option.UserName,
hPassword = _option.PassWord
};
var res = await _httpClientService.PostAsync<OpsReponse>(_option.Url + "api/login", JsonConvert.SerializeObject(login));
var token = res.data?.token ?? "";
if (string.IsNullOrEmpty(token))
_logger.LogInformation("老Ops登录失败:" + res?.errors);
return token;
}
}
public class OpsLogin
{
public OpsLogin() { }
public string hAccount { get; set; } = "admin";
public string hPassword { get; set; } = "888888";
}
public class OpsInfo
{
public int code { get; set; }
public string message { get; set; }
public string date { get; set; }
public string token { get; set; }
}
public class OpsReponse
{
public int statusCode { get; set; }
public bool succeeded { get; set; }
public string errors { get; set; }
public string extras { get; set; }
public OpsInfo data { get; set; }
}
}

View File

@@ -174,6 +174,8 @@ namespace WMS.Web.Repositories.DependencyInjection
Services.Configure<HttpOptions>(Configuration.GetSection("HttpOptions"));
Services.AddOptions<ErpOptions>();
Services.Configure<ErpOptions>(Configuration.GetSection("ErpOptions"));
Services.AddOptions<OpsOptions>();
Services.Configure<OpsOptions>(Configuration.GetSection("OpsOptions"));
}
/// <summary>
@@ -234,6 +236,8 @@ namespace WMS.Web.Repositories.DependencyInjection
Services.AddTransient<ISingleDataService, SingleDataService>();
Services.AddTransient<IErpService, ErpService>();
Services.AddTransient<IBackRecordService, BackRecordService>();
Services.AddTransient<IOpsService, OpsService>();
Services.AddTransient<IErpBasicDataExtendService, ErpBasicDataExtendService>();