Files
WMS-Api/src/WMS.Web.Domain/Services/Public/ErpService.cs

3242 lines
167 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using ERP;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto.Erp;
using WMS.Web.Core.Dto.Erp.Customer;
using WMS.Web.Core.Dto.Erp.Org;
using WMS.Web.Core.Dto.Erp.OutStock;
using WMS.Web.Core.Dto.Erp.Supplier;
using WMS.Web.Core.Dto.Erp.TakeStock;
using WMS.Web.Core.Help;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Options;
using WMS.Web.Domain.Values;
using WMS.Web.Domain.Values.Erp;
using WMS.Web.Domain.Values.Single;
namespace WMS.Web.Domain.Services.Public
{
/// <summary>
/// erp数据交互服务
/// </summary>
public class ErpService : IErpService
{
private readonly IOutStockTaskService _outStockTaskService;
private IMapper _mapper;
private AppOptions _appOptions;
private ErpOptions _erpOptions;
private ILogger<ErpService> _logger;
private ERPGWSoapClient _client;
private readonly IMemoryCache _memoryCache;
private readonly IBasicsRepositories _basicsRepositories;
private readonly IMaterialsRepositories _materialsRepositories;
private readonly IServiceProvider _serviceProvider;
public ErpService(
IMapper mapper,
IOptions<ErpOptions> erpOptions,
IOptions<AppOptions> appOptions, IServiceProvider serviceProvider,
ILogger<ErpService> logger, IMaterialsRepositories materialsRepositories,
IMemoryCache memoryCache, IBasicsRepositories basicsRepositories)
{
_serviceProvider = serviceProvider;
this._materialsRepositories = materialsRepositories;
this._basicsRepositories = basicsRepositories;
this._erpOptions = erpOptions?.Value;
this._appOptions = appOptions?.Value;
this._mapper = mapper;
this._logger = logger;
this._memoryCache = memoryCache;
}
/// <summary>
/// 初始化ERP登录到ERP
/// </summary>
/// <returns></returns>
public async Task<Result<string>> Init()
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;
binding.SendTimeout = new TimeSpan(int.MaxValue);
EndpointAddress address = new EndpointAddress(this._erpOptions.EndpointAddress);
this._client = new ERPGWSoapClient(binding, address);
try
{
var result = await this._client.ValidateSystemAsync(this._erpOptions.UserName, this._erpOptions.Password, this._erpOptions.ErpId, "");
if (result == null)
return Result<string>.ReFailure(ResultCodes.Erp_Login_Error);
return Result<string>.ReSuccess(result.AccessToken);
}
catch (Exception ex)
{
return Result<string>.ReFailure(ResultCodes.Erp_Login_Error);
}
}
public async Task<Result<string>> Init1()
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;
binding.SendTimeout = new TimeSpan(int.MaxValue);
EndpointAddress address = new EndpointAddress(this._erpOptions.EndpointAddress);
this._client = new ERPGWSoapClient(binding, address);
try
{
var result = await this._client.ValidateSystemAsync(this._erpOptions.UserName, this._erpOptions.Password, "Orico", "");
if (result == null)
return Result<string>.ReFailure(ResultCodes.Erp_Login_Error);
return Result<string>.ReSuccess(result.AccessToken);
}
catch (Exception ex)
{
return Result<string>.ReFailure(ResultCodes.Erp_Login_Error);
}
}
/// <summary>
/// 查单据类型的值
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpBaseDto>> BillQueryForBillType()
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init1();
if (!token_result.IsSuccess)
return ResultList<ErpBaseDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto("BOS_BillType");
param.FieldKeys = "FBILLTYPEID,FNumber,FName";
param.Limit = 10000;
param.FilterString = "";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpBaseDto>();
foreach (var item in result)
{
var lis = new ErpBaseDto();
lis.Id = item[0];
lis.Number = item[1];
lis.Name = item[2];
erp_list.Add(lis);
}
return ResultList<ErpBaseDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
return ResultList<ErpBaseDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-采购入库单
/// </summary>
/// <param name="billNo">模糊搜索</param>
/// <param name="sourceBillNos">单据编号集合精确查找</param>
/// <returns></returns>
public async Task<ResultList<ErpInStockResultDto>> BillQueryForPurchaseInStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
//var stocks_codes = stocks.Select(x => x.Code).ToList();
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInStockResultDto>.ReFailure(token_result);
////2.时间条件:可能还有其它条件
//var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
//var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.PUR_PurchaseOrder.ToString());
param.FieldKeys = "FBillNo,FSupplierId,FPurchaseOrgId,FMaterialId.FNumber,FSOSTOCKID,FQty,FEntryNote,FCreateDate,FCHUCHANGPRICE,FSOSTOCKID.FNumber,FStockInQty,FPurchaseOrgId.FNumber,FPOOrderEntry_FEntryID,FDEMANDBILLNO,F_client.FNumber";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准采购订单和标准委外订单
//4.明细关闭状态:正常
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//param.FilterString = " FDocumentStatus='C' and (FBillTypeID='83d822ca3e374b4ab01e5dd46a0062bd' or FBillTypeID='6d01d059713d42a28bb976c90a121142') and FMRPCloseStatus='A'";
param.FilterString = " FMRPCloseStatus='A'";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FSOSTOCKID.FNumber='{stocks[i].Code}' and FPurchaseOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FSOSTOCKID.FNumber='{stocks[i].Code}' and FPurchaseOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了
else
{
//2.时间条件:可能还有其它条件
var qidongshij = Convert.ToDateTime("2024-03-01 00:00:00");//正式环境 从3月1好开始
if (qidongshij <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
{
//var beginTime = DateTime.Now.AddHours(-8).ToString("yyyy-MM-dd HH:mm:ss");
var beginStr = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'";
param.FilterString = param.FilterString + " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endTime + "'";
}
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpInStockResultDto();
lis.BillNo = item[0];
lis.SupplierId = Convert.ToInt32(item[1]);
lis.OrgId = Convert.ToInt32(item[2]);
lis.MaterialNumber = item[3];
lis.StockId = Convert.ToInt32(item[4]);
lis.Qty = Convert.ToDecimal(item[5]);
lis.Remark = item[6];
lis.CreateTime = Convert.ToDateTime(item[7]);
lis.FactoryPrice = Convert.ToDecimal(item[8]);
lis.StockCode = item[9];
lis.DeliveredQty = Convert.ToDecimal(item[10]);
lis.OrgCode = item[11];
lis.ErpDetailId = Convert.ToInt32(item[12]);
lis.SaleBillNo = item[13];
lis.CustomerCode = item[14];
lis.Type = (int)InstockType.Purchase;
erp_list.Add(lis);
}
return ResultList<ErpInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForPurchaseInStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-其他入库单
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpInStockResultDto>> BillQueryForMiscellaneous(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
//var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
var beginStr = DateTime.Now.AddDays(-9).ToString("yyyy-MM-dd HH:mm:ss");//本是3alter by yzh
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶其他入库订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_MISCELLANEOUS.ToString());
param.FieldKeys = "FBillNo,FStockOrgId,FMATERIALID.FNumber,FSTOCKID,FSTOCKID.FNumber,FQty,FCreateDate,FEntryNote,FStockOrgId.FNumber,FEntity_FEntryID";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准其他入库单;这里要注意了-----------测试端的“单据类型ID”和线上的可能不一样上线的时候要核对下
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//param.FilterString = " FDocumentStatus='C' and FBillTypeID='d772ead981e748d69dda1caac7583f8c'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FSTOCKID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FSTOCKID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了
else
{
//param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'";
param.FilterString = param.FilterString + " and FAPPROVEDATE>='" + beginStr + "' and FAPPROVEDATE<='" + endTime + "'";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpInStockResultDto();
lis.BillNo = item[0];
lis.OrgId = Convert.ToInt32(item[1]);
lis.MaterialNumber = item[2];
lis.StockId = Convert.ToInt32(item[3]);
lis.StockCode = item[4];
lis.Qty = Convert.ToDecimal(item[5]);
lis.CreateTime = Convert.ToDateTime(item[6]);
lis.Remark = item[7];
lis.OrgCode = item[8];
lis.ErpDetailId = Convert.ToInt32(item[9]);
lis.Type = (int)InstockType.Miscellaneous;
erp_list.Add(lis);
}
return ResultList<ErpInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForMiscellaneous->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-直接调拨入库单
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpInStockResultDto>> BillQueryForTransferDirect(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
//var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
var beginStr = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶直接调拨入库订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_TransferDirect.ToString());
param.FieldKeys = "FBillNo,FStockOrgId,FMaterialId.FNumber,FDestStockId,FDestStockId.FNumber,FQty,FCreateDate,FNoteEntry,FStockOrgId.FNumber,FBillEntry_FEntryID";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准直接调拨单;这里要注意了-----------测试端的“单据类型ID”和线上的可能不一样上线的时候要核对下
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//当金蝶系统物料明细行调出仓库和调入仓库相同, 数据不需要拉取
//param.FilterString = " FDocumentStatus='C' and FBillTypeID='ce8f49055c5c4782b65463a3f863bb4a'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FSrcStockId!=FDestStockId";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FDestStockId.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FDestStockId.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了
else
{
//param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'";
param.FilterString = param.FilterString + " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endTime + "'";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpInStockResultDto();
lis.BillNo = item[0];
lis.OrgId = Convert.ToInt32(item[1]);
lis.MaterialNumber = item[2];
lis.StockId = Convert.ToInt32(item[3]);
lis.StockCode = item[4];
lis.Qty = Convert.ToDecimal(item[5]);
lis.CreateTime = Convert.ToDateTime(item[6]);
lis.Remark = item[7];
lis.OrgCode = item[8];
lis.ErpDetailId = Convert.ToInt32(item[9]);
lis.Type = (int)InstockType.Stkdirecttransfers;
erp_list.Add(lis);
}
return ResultList<ErpInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForTransferDirect->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-分步式调入单
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpInStockResultDto>> BillQueryForTransferin(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
//var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
var beginStr = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss");
// var beginStr = DateTime.Now.AddDays(-180).ToString("yyyy-MM-dd HH:mm:ss");
// var beginStr = DateTime.Now.AddDays(-180).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶分步式入库订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_TRANSFERIN.ToString());
param.FieldKeys = "FBillNo,FStockOrgID,FMaterialID.FNumber,FDestStockID,FDestStockID.FNumber,FQty,FCreateDate,FEntryNote,FStockOrgID.FNumber,FSTKTRSINENTRY_FEntryID";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准分步式调入单;这里要注意了-----------测试端的“单据类型ID”和线上的可能不一样上线的时候要核对下
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//当金蝶系统物料明细行调出仓库和调入仓库相同, 数据不需要拉取
//param.FilterString = " FDocumentStatus='C' and FBillTypeID='e65a4f29743a44b7b67dc8145e1f9c92'";
param.FilterString = " 1=1";
param.FilterString += " and FSrcBillType<>'STK_TRANSFERIN'";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FSrcStockId!=FDestStockId";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FDestStockID.FNumber='{stocks[i].Code}' and FStockOrgID.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FDestStockID.FNumber='{stocks[i].Code}' and FStockOrgID.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了
else
{
//param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'";
param.FilterString = param.FilterString + " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endTime + "'";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpInStockResultDto();
lis.BillNo = item[0];
lis.OrgId = Convert.ToInt32(item[1]);
lis.MaterialNumber = item[2];
lis.StockId = Convert.ToInt32(item[3]);
lis.StockCode = item[4];
lis.Qty = Convert.ToDecimal(item[5]);
lis.CreateTime = Convert.ToDateTime(item[6]);
lis.Remark = item[7];
lis.OrgCode = item[8];
lis.ErpDetailId = Convert.ToInt32(item[9]);
lis.Type = (int)InstockType.StktransferInst;
erp_list.Add(lis);
}
//_logger.LogInformation("分步式调入条数:" + erp_list.Count);
return ResultList<ErpInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForTransferin->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-生产入单,生产汇报单(已审核的)
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpInStockResultDto>> BillQueryForProduceSotckin(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
//var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
var beginStr = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶分步式入库订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.PRD_MORPT.ToString());
param.FieldKeys = "FBillNo,FReqBillNo,FPrdOrgId,FPrdOrgId.FNumber,FMATERIALID.FNumber,FSpecification,FMaterialName,FSTOCKID,FSTOCKID.FNumber,FQuaQty,FCreateDate,FDescriptionE,FEntity_FEntryID";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准分步式调入单;这里要注意了-----------测试端的“单据类型ID”和线上的可能不一样上线的时候要核对下
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//当金蝶系统物料明细行调出仓库和调入仓库相同, 数据不需要拉取
//param.FilterString = " FDocumentStatus='C' and FBillTypeID='e65a4f29743a44b7b67dc8145e1f9c92'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
//param.FilterString += " and FSrcStockId!=FDestStockId";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FSTOCKID.FNumber='{stocks[i].Code}' and FPrdOrgId.FNumber='{stocks[i].ErpOrgCode}')";
// param.FilterString += $"( FPrdOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FSTOCKID.FNumber='{stocks[i].Code}' and FPrdOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了
else
{
//param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'";
param.FilterString = param.FilterString + " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endTime + "'";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpInStockResultDto();
lis.BillNo = item[0];
lis.OrgId = Convert.ToInt32(item[2]);
lis.MaterialNumber = item[4];
lis.StockId = Convert.ToInt32(item[7]);
lis.StockCode = item[8];
lis.Qty = Convert.ToDecimal(item[9]);
lis.CreateTime = Convert.ToDateTime(item[10]);
lis.Remark = item[11];
lis.OrgCode = item[3];
lis.ErpDetailId = Convert.ToInt32(item[12]);
lis.Type = (int)InstockType.ProduceSotck;
lis.SaleBillNo = item[1];
erp_list.Add(lis);
}
//_logger.LogInformation("分步式调入条数:" + erp_list.Count);
return ResultList<ErpInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForTransferin->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-组装拆卸单-组装(成品入库)
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpInStockResultDto>> BillQueryForAssembledApp_Assembly(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
//var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
var beginStr = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶分步式入库订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_AssembledApp.ToString());
param.FieldKeys = "FBillNo,FOwnerIdHead,FMaterialID.FNumber,FStockID,FStockID.FNumber,FQty,FCreateDate,FDescription,FOwnerIdHead.FNumber,FEntity_FEntryID";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准组织拆卸单;备注:这里的单据类型只有一个,所以就不需要判断了
//4.事务类型1为组装2为拆卸
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FAffairType='Assembly'";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockID.FNumber='{stocks[i].Code}' and FOwnerIdHead.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockID.FNumber='{stocks[i].Code}' and FOwnerIdHead.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了
else
{
//param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'";
param.FilterString = param.FilterString + " and FAPPROVEDATE>='" + beginStr + "' and FAPPROVEDATE<='" + endTime + "'";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpInStockResultDto();
lis.BillNo = item[0];
lis.OrgId = Convert.ToInt32(item[1]);
lis.MaterialNumber = item[2];
lis.StockId = Convert.ToInt32(item[3]);
lis.StockCode = item[4];
lis.Qty = Convert.ToDecimal(item[5]);
lis.CreateTime = Convert.ToDateTime(item[6]);
lis.Remark = item[7];
lis.OrgCode = item[8];
lis.ErpDetailId = Convert.ToInt32(item[9]);
lis.Type = (int)InstockType.Assembled;
erp_list.Add(lis);
}
return ResultList<ErpInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForAssembledApp_Assembly->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-组装拆卸单-拆卸(子件入库)
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpInStockResultDto>> BillQueryForAssembledApp_Disassembly(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
//var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
var beginStr = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶分步式入库订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_AssembledApp.ToString());
param.FieldKeys = "FBillNo,FSubProOwnerIdH,FMaterialIDSETY.FNumber,FStockIDSETY,FStockIDSETY.FNumber,FQtySETY,FCreateDate,FDescriptionSETY,FSubProOwnerIdH.FNumber,FSubEntity_FDetailID";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准组织拆卸单;备注:这里的单据类型只有一个,所以就不需要判断了
//4.事务类型1为组装2为拆卸
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FAffairType='Dassembly'";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockIDSETY.FNumber='{stocks[i].Code}' and FSubProOwnerIdH.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockIDSETY.FNumber='{stocks[i].Code}' and FSubProOwnerIdH.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}//注意:当有单据编号的查询的时候,时间条件去掉;不然就查不到数据了
else
{
//param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'";
param.FilterString = param.FilterString + " and FAPPROVEDATE>='" + beginStr + "' and FAPPROVEDATE<='" + endTime + "'";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpInStockResultDto();
lis.BillNo = item[0];
lis.OrgId = Convert.ToInt32(item[1]);
lis.MaterialNumber = item[2];
lis.StockId = Convert.ToInt32(item[3]);
lis.StockCode = item[4];
lis.Qty = Convert.ToDecimal(item[5]);
lis.CreateTime = Convert.ToDateTime(item[6]);
lis.Remark = item[7];
lis.OrgCode = item[8];
lis.ErpDetailId = Convert.ToInt32(item[9]);
lis.Type = (int)InstockType.Assembled;
erp_list.Add(lis);
}
return ResultList<ErpInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForAssembledApp_Disassembly->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-物料集合
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpMaterialDto>> BillQueryForMaterial(bool isCache = true)
{
try
{
if (isCache)
{
//1.获取缓存中的物料数据;
var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
if (materials == null || materials.Count == 0)
{
var mats = await _materialsRepositories.GetEntityList();
if (mats == null || mats.Count == 0)
return await this.BillQueryForMaterialPagedList();
else
{
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"物料拉取-开始时间yzh{beginTime}");
//组装dto
var erp_materials_list = mats.Select(x => _mapper.Map<ErpMaterialDto>(x)).ToList();
_memoryCache.Set(_erpOptions.cache_materail_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"物料拉取-结束时间yzh{endTime}");
_logger.LogInformation($"物料拉取-本地数据库-总条数yzh{erp_materials_list.Count}");
return ResultList<ErpMaterialDto>.ReSuccess(erp_materials_list);
}
}
else
return ResultList<ErpMaterialDto>.ReSuccess(materials);
}
else
return await this.BillQueryForMaterialPagedList();
}
catch (Exception ex)
{
return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.ErpMaterialError);
}
}
/// <summary>
/// erp:基础数据-物料信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<Result<ErpMaterialDto>> BillQueryForMaterial(int id)
{
//1.获取缓存中的物料数据
var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
if (materials == null || materials.Count == 0)
return Result<ErpMaterialDto>.ReSuccess(null);
//2.通过ID取当前物料列表中的
var mater = materials.Where(x => x.MaterialId == id).FirstOrDefault();
if (mater == null)
{
//2.1没有的话:去金蝶取
mater = await this.BillQueryForMaterialById(id);
if (mater != null)
{
//把取到的数据放集合中并重新给缓存
materials.Add(mater);
_memoryCache.Set(_erpOptions.cache_materail_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
return Result<ErpMaterialDto>.ReSuccess(mater);
}
else
return Result<ErpMaterialDto>.ReSuccess(null);
}
return Result<ErpMaterialDto>.ReSuccess(mater);
}
/// <summary>
/// erp:基础数据-物料信息
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public async Task<Result<ErpMaterialDto>> BillQueryForMaterial(string number)
{
//1.获取缓存中的物料数据
var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
if (materials == null || materials.Count == 0)
return Result<ErpMaterialDto>.ReSuccess(null);
//2.通过ID取当前物料列表中的
var mater = materials.Where(x => x.MaterialNumber == number).FirstOrDefault();
if (mater == null)
{
//2.1没有的话:去金蝶取
mater = await this.BillQueryForMaterialByNumber(number);
if (mater != null)
{
//把取到的数据放集合中并重新给缓存
materials.Add(mater);
_memoryCache.Set(_erpOptions.cache_materail_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
return Result<ErpMaterialDto>.ReSuccess(mater);
}
else
return Result<ErpMaterialDto>.ReSuccess(null);
}
return Result<ErpMaterialDto>.ReSuccess(mater);
}
/// <summary>
/// erp:基础数据-物料-分页查询
/// </summary>
/// <returns></returns>
private async Task<ResultList<ErpMaterialDto>> BillQueryForMaterialPagedList()
{
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpMaterialDto>.ReFailure(token_result);
//3.获取金蝶物料:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString());
param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName,FBaseUnitId.FNumber,FBARCODE,FUseOrgId,FUseOrgId.FNumber,FIsBatchManage,FProductLines1,FProductCATs1,FMaterialGroup,F_Product,FModifyDate,FCreateDate,FProductLines1.FName,FProductCATs1.FName,FMaterialGroup.FName";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.审核状态:已审核
//2.禁用状态A否B是
//3.使用组织只查询“深圳市元创时代科技有限公司”这个组织组织ID=100008--固定值查询(测试端和正式是一样的)
param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and (FUseOrgId=19162897 or FUseOrgId=100008)";
//param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and FUseOrgId=100008";
param.OrderString = "FCreateDate ASC";
//4.循环拿金蝶数据
bool isHave = true;
var erp_materials_list = new List<ErpMaterialDto>();
int skip = 0;
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"物料拉取-开始时间yzh{beginTime}");
var error_josn = "";
try
{
while (isHave)
{
//4.1.页码页码按照金蝶的要求从0开始
param.StartRow = (Convert.ToInt32(skip) * param.Limit);
//4.2.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.3.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
error_josn = result_json;
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//4.4.判断数据是否全部拉取完成:并停止循环的条件
if (result == null || result.Count == 0)
isHave = false;
//4.5.拼装
foreach (var item in result)
{
var lis = new ErpMaterialDto();
lis.MaterialId = Convert.ToInt32(item[0]);
lis.MaterialName = item[1];
lis.MaterialNumber = item[2];
lis.Specifications = item[3];
lis.BaseUnitId = Convert.ToInt32(item[4]);
lis.BaseUnitName = item[5];
lis.BaseUnitNumber = item[6];
lis.BarCode = item[7];
lis.OrgId = Convert.ToInt32(item[8]);
lis.OrgCode = item[9];
lis.IsBatchManage = Convert.ToBoolean(item[10]);
lis.FProductLines1 =item[11];
lis.FProductCATs1 = item[12];
lis.FMaterialGroup = item[13];
lis.F_Product = item[14];
lis.FModifyDate =Convert.ToDateTime( item[15]);
lis.FCreateDate =Convert.ToDateTime( item[16]);
lis.F_Product = item[14];
lis.FProductLines1FName=item[17];
lis.FProductCATs1FName = item[18];
lis.FMaterialGroupFName = item[19];
erp_materials_list.Add(lis);
}
//4.6页面的叠加
skip++;
}
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"物料拉取-结束时间:{endTime}");
//5.物料集合进行缓存-当前缓存时间到当天晚上的0点后面a执行重新放入缓存
_memoryCache.Set(_erpOptions.cache_materail_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
_logger.LogInformation($"物料拉取-总条数:{erp_materials_list.Count}");
return ResultList<ErpMaterialDto>.ReSuccess(erp_materials_list);
}
catch (Exception ex)
{
_logger.LogInformation("物料拉取->失败:" + ex);
return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.ErpSynsError);
}
}
/// <summary>
/// 获取物料id32进制
/// </summary>
/// <param name="materialNumbers"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<ResultList<ErpMaterialDto>> BillQueryForMaterialByNumbers(List<string> materialNumbers)
{
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpMaterialDto>.ReFailure(token_result);
//3.获取金蝶物料:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString());
param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName,FBaseUnitId.FNumber,FBARCODE,FUseOrgId,FUseOrgId.FNumber,FIsBatchManage,FProductIDS";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.审核状态:已审核
//2.禁用状态A否B是
//3.使用组织只查询“深圳市元创时代科技有限公司”这个组织组织ID=100008--固定值查询(测试端和正式是一样的)
//param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and (FUseOrgId=19162897 or FUseOrgId=100008)";
param.OrderString = "FCreateDate ASC";
//4.循环拿金蝶数据
var erp_materials_list = new List<ErpMaterialDto>();
var error_josn = "";
decimal d_count = Convert.ToDecimal(materialNumbers.Count()) / Convert.ToDecimal(100);
int count = (int)Math.Ceiling(d_count);
try
{
for (int i = 1; i <= count; i++)
{
param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and FUseOrgId=100008";
var list = materialNumbers.Skip((i - 1) * 100).Take(100);
string numbers = JsonConvert.SerializeObject(list);
numbers = numbers.Replace("[", "").Replace("]", "").Replace("\"", "'");
param.FilterString += $" and FNumber in ({numbers}) and (FProductIDS<>'' or FProductIDS<>' ')";
//4.2.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.3.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
error_josn = result_json;
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//4.4.判断数据是否全部拉取完成:并停止循环的条件
if (result == null || result.Count == 0)
break;
//4.5.拼装
foreach (var item in result)
{
var lis = new ErpMaterialDto();
lis.MaterialId = Convert.ToInt32(item[0]);
lis.MaterialName = item[1];
lis.MaterialNumber = item[2];
lis.Specifications = item[3];
lis.BaseUnitId = Convert.ToInt32(item[4]);
lis.BaseUnitName = item[5];
lis.BaseUnitNumber = item[6];
lis.BarCode = item[7];
lis.OrgId = Convert.ToInt32(item[8]);
lis.OrgCode = item[9];
lis.IsBatchManage = Convert.ToBoolean(item[10]);
erp_materials_list.Add(lis);
}
}
return ResultList<ErpMaterialDto>.ReSuccess(erp_materials_list);
}
catch (Exception ex)
{
_logger.LogInformation("物料拉取->失败:" + ex.Message + " " + error_josn);
return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.ErpSynsError);
}
}
/// <summary>
/// erp:基础数据-物料-ids查询
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private async Task<ErpMaterialDto> BillQueryForMaterialById(int id)
{
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return null;
//3.获取金蝶物料:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString());
param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName,FBaseUnitId.FNumber,FBARCODE,FUseOrgId,FUseOrgId.FNumber,FIsBatchManage";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.审核状态:已审核
//2.禁用状态A否B是
//3.使用组织只查询“深圳市元创时代科技有限公司”这个组织组织ID=100008--固定值查询(测试端和正式是一样的)---按ID查询就不需要固定组织条件了
param.FilterString = "FDocumentStatus='C' and FForbidStatus='A'";
param.OrderString = "FCreateDate ASC";
//根据物料ID查询
param.FilterString = param.FilterString + $" and FMATERIALID={id}";
//4.循环拿金蝶数据
var erp_materials_list = new List<ErpMaterialDto>();
//4.2.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
var error_josn = "";
try
{
//4.3.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
error_josn = result_json;
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//4.5.拼装
foreach (var item in result)
{
var lis = new ErpMaterialDto();
lis.MaterialId = Convert.ToInt32(item[0]);
lis.MaterialName = item[1];
lis.MaterialNumber = item[2];
lis.Specifications = item[3];
lis.BaseUnitId = Convert.ToInt32(item[4]);
lis.BaseUnitName = item[5];
lis.BaseUnitNumber = item[6];
lis.BarCode = item[7];
lis.OrgId = Convert.ToInt32(item[8]);
lis.OrgCode = item[9];
lis.IsBatchManage = Convert.ToBoolean(item[10]);
erp_materials_list.Add(lis);
}
if (erp_materials_list.Count == 0)
return null;
else
return erp_materials_list.FirstOrDefault();
}
catch (Exception)
{
_logger.LogInformation("物料拉取按ID->错误的Json" + error_josn);
return null;
}
}
/// <summary>
/// erp:基础数据-物料-number查询
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public async Task<ErpMaterialDto> BillQueryForMaterialByNumber(string number)
{
if (string.IsNullOrEmpty(number)) return null;
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return null;
//3.获取金蝶物料:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString());
param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName,FBaseUnitId.FNumber,FBARCODE,FUseOrgId,FUseOrgId.FNumber,FIsBatchManage";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.审核状态:已审核
//2.禁用状态A否B是
//3.使用组织只查询“深圳市元创时代科技有限公司”这个组织组织ID=100008--固定值查询(测试端和正式是一样的)---按ID查询就不需要固定组织条件了
param.FilterString = "FDocumentStatus='C' and FForbidStatus='A'";
param.OrderString = "FCreateDate ASC";
//根据物料ID查询
param.FilterString = param.FilterString + $" and FNumber='{number}'";
//4.循环拿金蝶数据
var erp_materials_list = new List<ErpMaterialDto>();
//4.2.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
var error_josn = "";
try
{
//4.3.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
error_josn = result_json;
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//4.5.拼装
foreach (var item in result)
{
var lis = new ErpMaterialDto();
lis.MaterialId = Convert.ToInt32(item[0]);
lis.MaterialName = item[1];
lis.MaterialNumber = item[2];
lis.Specifications = item[3];
lis.BaseUnitId = Convert.ToInt32(item[4]);
lis.BaseUnitName = item[5];
lis.BaseUnitNumber = item[6];
lis.BarCode = item[7];
lis.OrgId = Convert.ToInt32(item[8]);
lis.OrgCode = item[9];
lis.IsBatchManage = Convert.ToBoolean(item[10]);
erp_materials_list.Add(lis);
}
if (erp_materials_list.Count == 0)
return null;
else
return erp_materials_list.FirstOrDefault();
}
catch (Exception)
{
_logger.LogInformation("物料拉取按Number->错误的Json" + error_josn + ";参数:" + json);
return null;
}
}
public async Task<ErpMaterialDto> BillQueryForMaterialByNumber(string number, string orgCode)
{
if (string.IsNullOrEmpty(number)) return null;
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return null;
//3.获取金蝶物料:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString());
param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName,FBaseUnitId.FNumber,FBARCODE,FUseOrgId,FUseOrgId.FNumber,FIsBatchManage";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.审核状态:已审核
//2.禁用状态A否B是
//3.使用组织只查询“深圳市元创时代科技有限公司”这个组织组织ID=100008--固定值查询(测试端和正式是一样的)---按ID查询就不需要固定组织条件了
param.FilterString = "FDocumentStatus='C' and FForbidStatus='A'";
param.OrderString = "FCreateDate ASC";
//根据物料ID查询
param.FilterString = param.FilterString + $" and FNumber='{number}' and FUseOrgId.FNumber='{orgCode}'";
//4.循环拿金蝶数据
var erp_materials_list = new List<ErpMaterialDto>();
//4.2.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
var error_josn = "";
try
{
//4.3.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
error_josn = result_json;
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//4.5.拼装
foreach (var item in result)
{
var lis = new ErpMaterialDto();
lis.MaterialId = Convert.ToInt32(item[0]);
lis.MaterialName = item[1];
lis.MaterialNumber = item[2];
lis.Specifications = item[3];
lis.BaseUnitId = Convert.ToInt32(item[4]);
lis.BaseUnitName = item[5];
lis.BaseUnitNumber = item[6];
lis.BarCode = item[7];
lis.OrgId = Convert.ToInt32(item[8]);
lis.OrgCode = item[9];
lis.IsBatchManage = Convert.ToBoolean(item[10]);
erp_materials_list.Add(lis);
}
if (erp_materials_list.Count == 0)
return null;
else
return erp_materials_list.FirstOrDefault();
}
catch (Exception)
{
_logger.LogInformation("物料拉取按Number->错误的Json" + error_josn + ";参数:" + json);
return null;
}
}
/// <summary>
/// erp:单据查询-组织数据
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpOrgDto>> BillQueryForOrg()
{
try
{
//1.获取缓存中的组织数据;
var orgs = _memoryCache.Get<List<ErpOrgDto>>(_erpOptions.cache_org_key);
if (orgs == null || orgs.Count == 0)
{
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpOrgDto>.ReFailure(token_result);
//3.获取金蝶组织:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.ORG_Organizations.ToString());
param.FieldKeys = "FOrgID,FNumber,FName";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
param.FilterString = "";
//备注因为组织数据不是很多就不能和获取物料一样循环获取组织这里就获取10000条数据就行了
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"组织拉取-开始时间yzh20250630{beginTime}");
//4.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//5.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"组织拉取-结束时间:{endTime}");
//6.拼装
var list = new List<ErpOrgDto>();
foreach (var item in result)
{
var lis = new ErpOrgDto();
lis.Id = int.Parse(item[0]);
lis.Number = item[1];
lis.Name = item[2];
list.Add(lis);
}
//5.组织集合进行缓存
_memoryCache.Set(_erpOptions.cache_org_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
_logger.LogInformation($"组织拉取-总条数:{list.Count}");
return ResultList<ErpOrgDto>.ReSuccess(list);
}
else
{
return ResultList<ErpOrgDto>.ReSuccess(orgs);
}
}
catch (Exception)
{
return ResultList<ErpOrgDto>.ReFailure(ResultCodes.ErpOrgError);
}
}
/// <summary>
/// erp:供应商
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpSupplierDto>> BillQueryForSupplier()
{
try
{
//1.获取缓存中的供应商数据;
var suppliers = _memoryCache.Get<List<ErpSupplierDto>>(_erpOptions.cache_supplier_key);
if (suppliers == null || suppliers.Count == 0)
{
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpSupplierDto>.ReFailure(token_result);
//3.获取金蝶供应商:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_Supplier.ToString());
param.FieldKeys = "FSupplierId,FNumber,FName";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//param.FilterString = "FUseOrgId=100008";
param.FilterString = "(FUseOrgId = 100008 or FUseOrgId = 19162897)";
//备注因为供应商数据不是很多就不能和获取物料一样循环获取组织这里就获取10000条数据就行了
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"供应商拉取-开始时间:{beginTime}");
//4.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//5.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"供应商拉取-结束时间:{endTime}");
//6.拼装
var list = new List<ErpSupplierDto>();
foreach (var item in result)
{
var lis = new ErpSupplierDto();
lis.Id = int.Parse(item[0]);
lis.Number = item[1];
lis.Name = item[2];
list.Add(lis);
}
//5.供应商集合进行缓存
_memoryCache.Set(_erpOptions.cache_supplier_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
_logger.LogInformation($"供应商拉取-总条数:{list.Count}");
return ResultList<ErpSupplierDto>.ReSuccess(list);
}
else
{
return ResultList<ErpSupplierDto>.ReSuccess(suppliers);
}
}
catch (Exception)
{
return ResultList<ErpSupplierDto>.ReFailure(ResultCodes.ErpSupplierError);
}
}
/// <summary>
/// 客户
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpCustomerDto>> BillQueryForCustomer()
{
try
{
//1.获取缓存中的供应商数据;
var customers = _memoryCache.Get<List<ErpCustomerDto>>(_erpOptions.cache_customer_key);
if (customers == null || customers.Count == 0)
{
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpCustomerDto>.ReFailure(token_result);
//3.获取金蝶供应商:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_Customer.ToString());
param.FieldKeys = "FCUSTID,FNumber,FName";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
param.FilterString = "";
var list = new List<ErpCustomerDto>();
//备注因为供应商数据不是很多就不能和获取物料一样循环获取组织这里就获取10000条数据就行了
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"客户拉取-开始时间:{beginTime}");
int skip = 0;
//4.参数json化
while (true)
{
//4.1.页码页码按照金蝶的要求从0开始
param.StartRow = (Convert.ToInt32(skip) * param.Limit);
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//5.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
if (result == null || result.Count == 0)
break;
//6.拼装
foreach (var item in result)
{
var lis = new ErpCustomerDto();
lis.Id = int.Parse(item[0]);
lis.Number = item[1];
lis.Name = item[2];
list.Add(lis);
}
//4.6页面的叠加
skip++;
}
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"客户拉取-结束时间:{endTime}");
//5.供应商集合进行缓存
_memoryCache.Set(_erpOptions.cache_customer_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
_logger.LogInformation($"客户拉取-总条数:{list.Count}");
return ResultList<ErpCustomerDto>.ReSuccess(list);
}
else
{
return ResultList<ErpCustomerDto>.ReSuccess(customers);
}
}
catch (Exception)
{
return ResultList<ErpCustomerDto>.ReFailure(ResultCodes.ErpSupplierError);
}
}
/// <summary>
/// erp:仓库
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpStockDto>> BillQueryForStock()
{
try
{
//1.获取缓存中的仓库数据;
var stocks = _memoryCache.Get<List<ErpStockDto>>(_erpOptions.cache_stock_key);
if (stocks == null || stocks.Count == 0)
{
//2.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpStockDto>.ReFailure(token_result);
//3.获取金蝶仓库:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString());
param.FieldKeys = "FStockId,FName,FNumber,FUseOrgId,FUseOrgId.FNumber";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
param.FilterString = "";
//备注因为供应商数据不是很多就不能和获取物料一样循环获取组织这里就获取10000条数据就行了
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
_logger.LogInformation($"仓库拉取-开始时间:{beginTime}");
//4.参数json化
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//5.请求查询接口并返回数据
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//6.拼装
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]);
lis.OrgCode = item[4];
list.Add(lis);
}
//5.供应商集合进行缓存
_memoryCache.Set(_erpOptions.cache_stock_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3)));
_logger.LogInformation($"仓库拉取-总条数:{list.Count}");
return ResultList<ErpStockDto>.ReSuccess(list);
}
else
{
return ResultList<ErpStockDto>.ReSuccess(stocks);
}
}
catch (Exception)
{
return ResultList<ErpStockDto>.ReFailure(ResultCodes.ErpStockError);
}
}
/// <summary>
/// 根据仓库编码获取仓位
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public async Task<ResultList<Erp_SubStockDto>> BillQueryForSubStock()
{
try
{
//1.获取缓存中的仓库数据;
var stocks = _memoryCache.Get<List<Erp_SubStockDto>>(_erpOptions.cache_substock_key);
if (stocks == null || stocks.Count == 0)
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<Erp_SubStockDto>.ReFailure(token_result);
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString());
param.FieldKeys = "FStockFlexDetail_FDetailID,FFlexEntryName,FFlexEntryId.FNumber,FUseOrgId.FNumber,FNumber";
param.Limit = 100000;
param.FilterString = $"FNumber='HD' or FNumber='GD'";//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<Erp_SubStockDto>();
foreach (var item in result)
{
var lis = new Erp_SubStockDto();
if (item[0] == "0") continue;
lis.Id = int.Parse(item[0]);
lis.Name = item[1];
lis.Code = item[2];
lis.OrgCode = item[3];
lis.StockCode = item[4];
list.Add(lis);
}
//5.供应商集合进行缓存 只有查询全部的时候才缓存
_memoryCache.Set(_erpOptions.cache_substock_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3)));
_logger.LogInformation($"子仓库拉取-总条数:{list.Count}");
return ResultList<Erp_SubStockDto>.ReSuccess(list);
}
else
{
return ResultList<Erp_SubStockDto>.ReSuccess(stocks);
}
}
catch (Exception)
{
return ResultList<Erp_SubStockDto>.ReFailure(ResultCodes.ErpSubStockError);
}
}
#region
/// <summary>
/// 同步数据(保存提交审核)
/// </summary>
/// <param name="dto"></param>
/// <param name="formId"></param>
/// <returns></returns>
public async Task<Result<string>> Save<T>(T dto, string formId)
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return Result<string>.ReFailure(token_result.Message, token_result.Status);
var query = new ErpBillQueryDto(token_result.Data, formId);
var param = new ErpSave<T>(formId, dto);
query.Data = JsonConvert.SerializeObject(param);
//保存
var result_json = await _client.SaveAsync(JsonConvert.SerializeObject(query));
_logger.LogInformation("入库单->开始同步金蝶yzh保存参数" + JsonConvert.SerializeObject(query) + " 结果->" + result_json);
JObject jobject = (JObject)JsonConvert.DeserializeObject(result_json);
if (jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower() == "true")
{
//保存成功后返回number 后续操作根据Id操作
string number = jobject["Result"]["ResponseStatus"]["SuccessEntitys"][0]["Number"].ToString();
return Result<string>.ReSuccess(number);
}
var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
return Result<string>.ReFailure(msg, 10002);
}
catch (Exception ex)
{
return Result<string>.ReFailure(ex.ToString(), 10002);
}
}
/// <summary>
/// 提交
/// </summary>
/// <param name="dto"></param>
/// <param name="formId"></param>
/// <returns></returns>
public async Task<Result> Submit(ErpOperateDto dto, string formId)
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return token_result;
var query = new ErpBillQueryDto(token_result.Data, formId);
//提交
query.Data = JsonConvert.SerializeObject(dto);
var result_json = await _client.SubmitAsync(JsonConvert.SerializeObject(query));
_logger.LogInformation("入库单->开始同步金蝶yzh提交参数" + JsonConvert.SerializeObject(query) + " 结果->" + result_json);
JObject jobject = (JObject)JsonConvert.DeserializeObject(result_json);
if (jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower() == "true")
return Result.ReSuccess();
var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
return Result.ReFailure(msg, 10002);
}
catch (Exception ex)
{
return Result.ReFailure(ex.ToString(), 10002);
}
}
/// <summary>
/// 审核
/// </summary>
/// <param name="dto"></param>
/// <param name="formId"></param>
/// <returns></returns>
public async Task<Result> Audit(ErpOperateDto dto, string formId)
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return token_result;
var query = new ErpBillQueryDto(token_result.Data, formId);
//提交
query.Data = JsonConvert.SerializeObject(dto);
var result_json = await _client.AuditAsync(JsonConvert.SerializeObject(query));
_logger.LogInformation("入库单->开始同步金蝶yzh审核参数" + JsonConvert.SerializeObject(query) + " 结果->" + result_json);
JObject jobject = (JObject)JsonConvert.DeserializeObject(result_json);
if (jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower() == "true")
return Result.ReSuccess();
var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
return Result.ReFailure(msg, 10002);
}
catch (Exception ex)
{
return Result.ReFailure(ex.ToString(), 10002);
}
}
/// <summary>
/// 反审核
/// </summary>
/// <param name="dto"></param>
/// <param name="formId"></param>
/// <returns></returns>
public async Task<Result> NoAudit(ErpOperateDto dto, string formId)
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return token_result;
var query = new ErpBillQueryDto(token_result.Data);
//提交
query.Data = JsonConvert.SerializeObject(dto);
var result_json = await _client.UnAuditAsync(JsonConvert.SerializeObject(query));
JObject jobject = (JObject)JsonConvert.DeserializeObject(result_json);
var isSuccess = jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower();
if (jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower() == "true")
return Result.ReSuccess();
var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
return Result.ReFailure(msg, 10002);
}
catch (Exception ex)
{
return Result.ReFailure(ex.ToString(), 10002);
}
}
/// <summary>
/// 删除
/// </summary>
/// <param name="dto"></param>
/// <param name="formId"></param>
/// <returns></returns>
public async Task<Result> Delete(ErpOperateDto dto, string formId)
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return token_result;
var query = new ErpBillQueryDto(token_result.Data);
//提交
query.Data = JsonConvert.SerializeObject(dto);
var result_json = await _client.DeleteAsync(JsonConvert.SerializeObject(query));
JObject jobject = (JObject)JsonConvert.DeserializeObject(result_json);
var isSuccess = jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower();
if (jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower() == "true")
return Result.ReSuccess();
var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
return Result.ReFailure(msg, 10002);
}
catch (Exception ex)
{
return Result.ReFailure(ex.ToString(), 10002);
}
}
/// <summary>
/// 下推
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<Result<string>> Push(ErpPushDto dto)
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return token_result;
var query = new ErpBillQueryDto(token_result.Data, dto.FormId);
query.Data = JsonConvert.SerializeObject(dto);
//下推
string json = JsonConvert.SerializeObject(query);
var result_json = await _client.PushAsync(json);
_logger.LogInformation("入库单->开始同步金蝶yzh下推参数" + json + " 结果->" + result_json);
JObject jobject = (JObject)JsonConvert.DeserializeObject(result_json);
var isSuccess = jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower();
if (jobject["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToLower() == "true")
{
//保存成功后返回Id 后续操作根据Id操作
string id = jobject["Result"]["ResponseStatus"]["SuccessEntitys"][0]["Id"].ToString();
return Result<string>.ReSuccess(id);
}
var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
return Result<string>.ReFailure(msg, 10002);
}
catch (Exception ex)
{
return Result<string>.ReFailure(ex.ToString(), 10002);
}
}
#endregion
#region
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForDeliveryNoticeOutStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
//var stocks_codes = string.Join(",",stocks.Select(x => x.Id));
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.SAL_DELIVERYNOTICE.ToString());
param.FieldKeys = "FBillNo,FOrderNo,FDeliveryOrgID,FCustomerID,FMaterialID.FNumber,FStockID.FNumber,FStockLocID,FQty,F_ENTRYREMARKS,FCreateDate,FEntity_FEntryID,FDeliveryOrgID.FNumber";//FEntryID
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.未出库数量>0
//4.日期>=系统上线之日
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//6.物料 物料属性=费用或资产或服务的排除 不拉取
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FRemainOutQty>=0";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
//param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FDeliveryOrgID.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockID.FNumber='{stocks[i].Code}' and FDeliveryOrgID.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockID.FNumber='{stocks[i].Code}' and FDeliveryOrgID.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FApproveDate
param.FilterString += " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.Sal;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForDeliveryNoticeOutStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// 领料出库单
/// </summary>
/// <param name="sourceBillNos"></param>
/// <param name="beginTime"></param>
/// <param name="isCheck"></param>
/// <returns></returns>
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForPickingOutStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
//var stocks_codes = string.Join(",",stocks.Select(x => x.Id));
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.PRD_PickMtrl.ToString());
param.FieldKeys = "FBillNo,FUnitID,FStockOrgId,FUnitID.FName,FMaterialID.FNumber,FStockID.FNumber,FStockLocID,FActualQty,FEntrtyMemo,FCreateDate,FEntity_FEntryID,FStockOrgId.FNumber";//FEntryID
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.未出库数量>0
//4.日期>=系统上线之日
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//6.物料 物料属性=费用或资产或服务的排除 不拉取
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FActualQty>=0";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
param.FilterString += "and FBillType='f4f46eb78a7149b1b7e4de98586acb67'";
//param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FDeliveryOrgID.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FApproveDate
param.FilterString += " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
//lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
//lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.PickingOut;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForDeliveryNoticeOutStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// 直接调拨出库
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForTransferDirectOutStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_TransferDirect.ToString());
param.FieldKeys = "FBillNo,'',FStockOutOrgId,FStockOrgId,FMaterialID.FNumber,FSrcStockId.FNumber,FSrcStockLocId,FQty,FNoteEntry,FCreateDate,FBillEntry_FEntryID,FStockOutOrgId.FNumber,FDestStockId.FName";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//6.物料 物料属性=费用或资产或服务的排除 不拉取
//7.V01.05.00: 当金蝶系统物料明细行调出仓库和调入仓库相同, 数据不需要拉取
//param.FilterString = "FDocumentStatus='C' and FBillTypeID='ce8f49055c5c4782b65463a3f863bb4a'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
param.FilterString += " and FSrcStockId!=FDestStockId";
//string srt = JsonConvert.SerializeObject(stocks_codes);
//param.FilterString += " and FSrcStockId.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FStockOutOrgId.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FSrcStockId.FNumber='{stocks[i].Code}' and FStockOutOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FSrcStockId.FNumber='{stocks[i].Code}' and FStockOutOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FApproveDate
param.FilterString += " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.Stkdirecttransfers;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
lis.InStockCode = item[12];
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForTransferDirectOutStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// 分布式调出
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForTransferOutOutStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_TRANSFEROUT.ToString());
param.FieldKeys = "FBillNo,'',FStockOrgID,FStockInOrgID,FMaterialID.FNumber,FSrcStockID.FNumber,FSrcStockLocId,FQty,FEntryNote,FCreateDate,FSTKTRSOUTENTRY_FEntryID,FStockOrgID.FNumber,FDestStockID.FName,FSrcBillTypeId";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准
//4.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//6.物料 物料属性=费用或资产或服务的排除 不拉取
//7.V01.05.00: 当金蝶系统物料明细行调出仓库和调入仓库相同, 数据不需要拉取
//param.FilterString = "FDocumentStatus='C' and FBillTypeID='de3bcacc98434ec68a358aa5abcd9183'";
param.FilterString = " 1=1";
param.FilterString += " and FSrcBillTypeId<>'STK_TransferDirect'";//add by yzh
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
param.FilterString += " and FSrcStockID!=FDestStockID";
// param.FilterString += " and FBillNo='FBDC112453'";
//string srt = JsonConvert.SerializeObject(stocks_codes);
//param.FilterString += " and FSrcStockID.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FStockOrgID.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FSrcStockID.FNumber='{stocks[i].Code}' and FStockOrgID.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FSrcStockID.FNumber='{stocks[i].Code}' and FStockOrgID.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FApproveDate
param.FilterString += " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.StktransferInst;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
lis.InStockCode = item[12];//v1.0.8 分步式调出单和直接调拨出库单 拉取调入仓库
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForTransferOutOutStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// 组装拆卸单 (拆卸 主出)
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForAssembledAppOutStock_Dassembly(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_AssembledApp.ToString());
param.FieldKeys = "FBillNo,'',FOwnerIdHead,FSubProOwnerIdH,FMaterialID.FNumber,FStockID.FNumber,FStockLocId,FQty,FDescription,FCreateDate,FEntity_FEntryID,FStockOrgId.FNumber";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准
//4.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID
//6.物料 物料属性=费用或资产或服务的排除 不拉取
//param.FilterString = "FDocumentStatus='C' and FAffairType='Dassembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FAffairType='Dassembly'";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
//string srt = JsonConvert.SerializeObject(stocks_codes);
//param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FStockOrgId.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FAPPROVEDATE
param.FilterString += " and FAPPROVEDATE>='" + beginStr + "' and FAPPROVEDATE<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.Assembled;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForAssembledAppOutStock_Dassembly->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// 其他出库
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForMisDeliveryOutStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_MisDelivery.ToString());
param.FieldKeys = "FBillNo,'',FStockOrgId,FPickOrgId,FMaterialId.FNumber,FStockId.FNumber,FStockLocId ,FQty,FEntryNote,FCreateDate,FEntity_FEntryID,FStockOrgId.FNumber";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准
//4.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//6.物料 物料属性=费用或资产或服务的排除 不拉取
//param.FilterString = "FDocumentStatus='C' and FBillTypeID='54533291F9A44D38809F70000499BEE9'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
//string srt = JsonConvert.SerializeObject(stocks_codes);
//param.FilterString += " and FStockId.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FStockOrgId.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockId.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockId.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FApproveDate
param.FilterString += " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.Miscellaneous;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForMisDeliveryOutStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// 组装拆卸单 (组装 子出)
/// </summary>
/// <param name="sourceBillNos"></param>
/// <returns></returns>
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForAssembledAppOutStock_Assembly(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_AssembledApp.ToString());
param.FieldKeys = "FBillNo,'',FSubProOwnerIdH,FOwnerIdHead,FMaterialIDSETY.FNumber,FStockIDSETY.FNumber,FStockLocIdSETY,FQtySETY,FDescriptionSETY,FCreateDate,FSubEntity_FDetailID,FStockOrgId.FNumber";
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准
//4.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID
//6.物料 物料属性=费用或资产或服务的排除 不拉取
//param.FilterString = "FDocumentStatus='C' and FAffairType='Assembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C'";
param.FilterString += " and FAffairType='Assembly'";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
//string srt = JsonConvert.SerializeObject(stocks_codes);
//param.FilterString += " and FStockIDSETY.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FStockOrgId.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockIDSETY.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockIDSETY.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FAPPROVEDATE
param.FilterString += " and FAPPROVEDATE>='" + beginStr + "' and FAPPROVEDATE<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.Assembled;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForAssembledAppOutStock_Assembly->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// 销售出库单
/// </summary>
/// <param name="sourceBillNos"></param>
/// <param name="beginTime"></param>
/// <returns></returns>
//public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForSalOutStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
//{
// string result_json = "";
// try
// {
// var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
// if (stocks.Count == 0)
// return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
// //var stocks_codes = string.Join(",",stocks.Select(x => x.Id));
// var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
// var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
// //1.先登录金蝶-拿到token
// var token_result = await this.Init();
// if (!token_result.IsSuccess)
// return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
// //2.时间条件:可能还有其它条件
// var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
// if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
// var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// //3.获取金蝶采购订单:拼接参数和条件
// var query = new ErpBillQueryDto(token_result.Data);
// var param = new ErpBillQueryParamDto(FormIdParam.SAL_OUTSTOCK.ToString());
// param.FieldKeys = "FBillNo,FSoorDerno,FStockOrgId,FCustomerID,FMaterialID.FNumber,FStockID.FNumber,FStockLocID,FSALUNITQTY,F_ENTRYREMARKS,FCreateDate,FEntity_FENTRYID,FStockOrgId.FNumber";//FEntryID
// param.Limit = 10000;
// //查询条件:备注其中的条件值以金蝶的值为准!!!
// //1.创建时间在两天前和当天时间之间
// //2.审核状态:已审核
// //4.日期>=系统上线之日
// //5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
// //6.物料 物料属性=费用或资产或服务的排除 不拉取
// //param.FilterString = "FDocumentStatus='C' and FBillTypeID='ad0779a4685a43a08f08d2e42d7bf3e9'";
// param.FilterString = " 1=1";
// if (isCheck) param.FilterString += " and FDocumentStatus='C' and FSrcType<>'SAL_SaleOrder'";
// param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
// param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")";
// param.FilterString += " and FDeliveryOrgID.FNumber in (" + stocks_orgs + ")";
// for (int i = 0; i < stocks.Count(); i++)
// {
// if (i == 0)
// {
// param.FilterString += " and (";
// param.FilterString += $"(FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
// }
// else
// param.FilterString += $" or (FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
// if (i == stocks.Count() - 1) param.FilterString += ")";
// }
// //根据原订单号查询
// if (sourceBillNos != null && sourceBillNos.Count() > 0)
// {
// var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
// param.FilterString += " and FBillNo in (" + srt_b + ")";
// }
// else//没有指定单号搜索 则带时间范围 FApproveDate
// param.FilterString += " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endStr + "'";
// query.Data = JsonConvert.SerializeObject(param);
// var json = JsonConvert.SerializeObject(query);
// //4.请求查询接口
// result_json = await _client.ExecuteBillQueryAsync(json);
// var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
// //5.返回数据的组装
// var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
// foreach (var item in result)
// {
// var lis = new ErpDeliveryNoticeOutStockResultDto();
// lis.SourceBillNo = item[0];
// lis.SaleBillNo = item[1];
// lis.DeliveryOrgId = Convert.ToInt32(item[2]);
// lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
// lis.MaterialNumber = item[4];
// lis.StockCode = item[5];
// lis.SubStockId = Convert.ToInt32(item[6]);
// lis.AccruedQty = Convert.ToDecimal(item[7]);
// lis.Remark = item[8];
// lis.CreateTime = Convert.ToDateTime(item[9]);
// lis.Type = (int)OutStockType.Sal;
// lis.Erp_DetailId = Convert.ToInt32(item[10]);
// lis.OrgCode = item[11];
// erp_list.Add(lis);
// }
// return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
// }
// catch (Exception ex)
// {
// _logger.LogError($"BillQueryForSalOutStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
// return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
// }
//}
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForSalOutStock(List<string> sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true)
{
string result_json = "";
try
{
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
if (stocks.Count == 0)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.ErpStockNoData);
//var stocks_codes = string.Join(",",stocks.Select(x => x.Id));
var stocks_codes = string.Join(",", stocks.Select(x => $"'{x.Code}'"));
var stocks_orgs = string.Join(",", stocks.Select(x => $"'{x.ErpOrgCode}'"));
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(token_result);
//2.时间条件:可能还有其它条件
var beginStr = DateTime.Now.AddYears(-30).ToString("yyyy-MM-dd HH:mm:ss");
if (beginTime != null) beginStr = beginTime?.ToString("yyyy-MM-dd HH:mm:ss");
var endStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.SAL_OUTSTOCK.ToString());
param.FieldKeys = "FBillNo,FSoorDerno,FStockOrgId,FCustomerID,FMaterialID.FNumber,FStockID.FNumber,FStockLocID,FSALUNITQTY,F_ENTRYREMARKS,FCreateDate,FEntity_FENTRYID,FStockOrgId.FNumber";//FEntryID
param.Limit = 10000;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//4.日期>=系统上线之日
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
//6.物料 物料属性=费用或资产或服务的排除 不拉取
//param.FilterString = "FDocumentStatus='C' and FBillTypeID='ad0779a4685a43a08f08d2e42d7bf3e9'";
param.FilterString = " 1=1";
if (isCheck) param.FilterString += " and FDocumentStatus='C' and FSrcType<>'SAL_SaleOrder'";
param.FilterString += " and FMaterialID.FERPCLSID not in (10,11,6)";
//param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")";
//param.FilterString += " and FDeliveryOrgID.FNumber in (" + stocks_orgs + ")";
for (int i = 0; i < stocks.Count(); i++)
{
if (i == 0)
{
param.FilterString += " and (";
param.FilterString += $"(FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
}
else
param.FilterString += $" or (FStockID.FNumber='{stocks[i].Code}' and FStockOrgId.FNumber='{stocks[i].ErpOrgCode}')";
if (i == stocks.Count() - 1) param.FilterString += ")";
}
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
var srt_b = string.Join(",", sourceBillNos.Select(x => $"'{x}'"));
param.FilterString += " and FBillNo in (" + srt_b + ")";
}
else//没有指定单号搜索 则带时间范围 FApproveDate
param.FilterString += " and FApproveDate>='" + beginStr + "' and FApproveDate<='" + endStr + "'";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
foreach (var item in result)
{
var lis = new ErpDeliveryNoticeOutStockResultDto();
lis.SourceBillNo = item[0];
lis.SaleBillNo = item[1];
lis.DeliveryOrgId = Convert.ToInt32(item[2]);
lis.ReceiptCustomerId = Convert.ToInt32(item[3]);
lis.MaterialNumber = item[4];
lis.StockCode = item[5];
lis.SubStockId = Convert.ToInt32(item[6]);
lis.AccruedQty = Convert.ToDecimal(item[7]);
lis.Remark = item[8];
lis.CreateTime = Convert.ToDateTime(item[9]);
lis.Type = (int)OutStockType.Sal;
lis.Erp_DetailId = Convert.ToInt32(item[10]);
lis.OrgCode = item[11];
erp_list.Add(lis);
}
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
_logger.LogError($"BillQueryForSalOutStock->拉取金蝶数据失败yzh:{ex.Message} 返回json:{result_json}");
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
public async Task<Result<ErpSalOutStockSaveDto>> BillQueryForSalOutStock(string id)
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return Result<ErpSalOutStockSaveDto>.ReFailure(token_result);
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.SAL_OUTSTOCK.ToString());
param.FieldKeys = "FID,FEntity_FENTRYID,FRealQty";
param.Limit = 10000;
param.FilterString = $"FID={id}";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new ErpSalOutStockSaveDto(id);
foreach (var item in result)
{
var lis = new ErpSalOutStockDetailsSaveDto();
lis.DetailId = item[1];
lis.Qty = Convert.ToDecimal(item[2]);
lis.DeliveryNoticeDetailId = "";
erp_list.Details.Add(lis);
}
return Result<ErpSalOutStockSaveDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
return Result<ErpSalOutStockSaveDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
public async Task<Result<ErpPurchaseInStockSaveDto>> BillQueryForPurchaseInStock(string id)
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return Result<ErpPurchaseInStockSaveDto>.ReFailure(token_result);
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_InStock.ToString());
param.FieldKeys = "FID,FInStockEntry_FEntryID,FRealQty";
param.Limit = 10000;
param.FilterString = $"FID={id}";
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new ErpPurchaseInStockSaveDto(id);
foreach (var item in result)
{
var lis = new ErpPurchaseInStockDetailsSaveDto();
lis.DetailId = item[1];
lis.Qty = Convert.ToDecimal(item[2]);
lis.PurchaseDetailId = "";
erp_list.Details.Add(lis);
}
return Result<ErpPurchaseInStockSaveDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
return Result<ErpPurchaseInStockSaveDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
public async Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForPurchaseInStockBy(string purchaseDetailId, List<string> sourceBillNos)
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return Result<List<ErpPurchaseInStockDetailsDto>>.ReFailure(token_result);
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_InStock.ToString());
param.FieldKeys = "FID,FInStockEntry_FEntryID,FRealQty,FPOOrderNo,FBillNo,FDocumentStatus";
param.Limit = 10000;
param.FilterString = $"FPOORDERENTRYID={purchaseDetailId}";
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo not in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpPurchaseInStockDetailsDto>();
foreach (var item in result)
{
var lis = new ErpPurchaseInStockDetailsDto();
lis.OrderId = item[0];
lis.DetailId = item[1];
lis.Qty = Convert.ToDecimal(item[2]);
lis.PurchaseBillNo = item[3];
lis.OrderBillNo = item[4];
lis.DocumentStatus = item[5];
lis.PurchaseDetailId = purchaseDetailId;
erp_list.Add(lis);
}
return Result<List<ErpPurchaseInStockDetailsDto>>.ReSuccess(erp_list);
}
catch (Exception ex)
{
return Result<List<ErpPurchaseInStockDetailsDto>>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
public async Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForProduceInStockBy(string purchaseDetailId, List<string> sourceBillNos)
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return Result<List<ErpPurchaseInStockDetailsDto>>.ReFailure(token_result);
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.PRD_INSTOCK.ToString());
param.FieldKeys = "FID,FInStockEntry_FEntryID,FRealQty,FMoBillNo,FBillNo,FDocumentStatus";
param.Limit = 10000;
param.FilterString = $"FMoEntryId={purchaseDetailId}";
//根据原订单号查询
if (sourceBillNos != null && sourceBillNos.Count() > 0)
{
param.FilterString = param.FilterString + " and FBillNo not in (";
var bill_str = "";
int bill_index = 0;
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
foreach (var bill in sourceBillNos)
{
bill_index++;
if (bill_index == sourceBillNos.Count)
bill_str = bill_str + $"'{bill}'";
else
bill_str = bill_str + $"'{bill}'" + ",";
}
param.FilterString = param.FilterString + bill_str + ")";
}
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//5.返回数据的组装
var erp_list = new List<ErpPurchaseInStockDetailsDto>();
foreach (var item in result)
{
var lis = new ErpPurchaseInStockDetailsDto();
lis.OrderId = item[0];
lis.DetailId = item[1];
lis.Qty = Convert.ToDecimal(item[2]);
lis.PurchaseBillNo = item[3];
lis.OrderBillNo = item[4];
lis.DocumentStatus = item[5];
lis.PurchaseDetailId = purchaseDetailId;
erp_list.Add(lis);
}
return Result<List<ErpPurchaseInStockDetailsDto>>.ReSuccess(erp_list);
}
catch (Exception ex)
{
return Result<List<ErpPurchaseInStockDetailsDto>>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
public async Task<ResultList<ErpInventoryDto>> BillQueryForInventory(List<(string orgCode, string stockCode)> request)
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpInventoryDto>.ReFailure(token_result);
//3.获取金蝶采购订单:拼接参数和条件
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.STK_Inventory.ToString());
// ORICO_AD,FF100004 ORICO_GD,FF100005 ORICO_HD,FF100007 ORICO_JD,FF100008
param.FieldKeys = "FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber,FLot.FNumber,FBASEQTY,FSTOREURNOM,FSTOREURNUM,FSTOCKLOCID.FF100004.FName,FSTOCKLOCID.FF100005.FName,FSTOCKLOCID.FF100007.FName,FSTOCKLOCID.FF100008.FName";
param.Limit = 10000;
//param.FilterString = $" FMATERIALID.FNumber='G01-11-572474' and FSTOCKID.FNumber='AD' and FBASEQTY>0";
//param.FilterString = $" FBASEQTY>0";
for (int i = 0; i < request.Count(); i++)
{
if (i == 0)
{
param.FilterString += $" and ((FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}' )";
if (request.Count() == 1) param.FilterString += ")";
}
else
{
param.FilterString += $" or (FSTOCKORGID.FNumber='{request[i].orgCode}' and FSTOCKID.FNumber='{request[i].stockCode}' ))";
}
}
bool isHave = true;
var erp_list = new List<ErpInventoryDto>();
int skip = 0;
while (isHave)
{
//4.1.页码页码按照金蝶的要求从0开始
param.StartRow = (Convert.ToInt32(skip) * param.Limit);
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
//4.请求查询接口
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
//4.4.判断数据是否全部拉取完成:并停止循环的条件
if (result == null || result.Count == 0)
isHave = false;
foreach (var item in result)
{
string name = GetName(item[7], item[8], item[9], item[10]);
var lis = erp_list.FirstOrDefault(f => f.MaterialNumber.Equals(item[0])
&& f.OrgCode.Equals(item[1])
&& f.StockCode.Equals(item[2]) && f.Erp_SubStockName.Equals(name));
if (lis == null)
{
lis = new ErpInventoryDto();
lis.MaterialNumber = item[0];
lis.OrgCode = item[1];
lis.StockCode = item[2];
lis.Batch = item[3];
//查询库存单位数量FQTYFMaterialid.FSTOREURNOM,FMaterialid.FSTOREURNUM
//查出结果后用(FBASEQTY*FSTOREURNOM/FSTOREURNUM)计算得到库存单位数量。
lis.BeforeQty = Convert.ToDecimal(item[4]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6]);
//lis.Qty= Convert.ToDecimal(item[10]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6]);
lis.Erp_SubStockName = name;
erp_list.Add(lis);
}
else
{
lis.BeforeQty = lis.BeforeQty + (Convert.ToDecimal(item[4]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6]));
//lis.Qty = lis.Qty + Convert.ToDecimal(item[5]);
}
}
//4.6页面的叠加
skip++;
}
var list = erp_list.Where(w => w.BeforeQty > 0 || w.Qty > 0).ToList();
return ResultList<ErpInventoryDto>.ReSuccess(list);
}
catch (Exception ex)
{
_logger.LogError($"获取金蝶即时库存出错yzh:{ex.ToString()}");
return ResultList<ErpInventoryDto>.ReFailure(ResultCodes.Erp_Inventory_Error);
}
}
public string GetName(string name1,string name2,string name3,string name4)
{
if (!string.IsNullOrEmpty(name1)) return name1;
if (!string.IsNullOrEmpty(name2)) return name2;
if (!string.IsNullOrEmpty(name3)) return name3;
if (!string.IsNullOrEmpty(name4)) return name4;
return "";
}
#endregion
}
}