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

224 lines
9.3 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.Logging;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
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.Org;
using WMS.Web.Core.Dto.Erp.Purchase;
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;
namespace WMS.Web.Domain.Services.Public
{
/// <summary>
/// erp数据交互服务
/// </summary>
public class ErpService : IErpService
{
private IMapper _mapper;
private ErpOptions _erpOptions;
private ILogger<ErpService> _logger;
private ERPGWSoapClient _client;
private readonly IMemoryCache _memoryCache;
private readonly IInStockTaskRepositories _inStockTaskRepositories;
public readonly ITransactionRepositories _transactionRepositories;
public ErpService(
IMapper mapper,
IOptions<ErpOptions> erpOptions,
ILogger<ErpService> logger,
IMemoryCache memoryCache,
IInStockTaskRepositories inStockTaskRepositories,
ITransactionRepositories transactionRepositories)
{
this._erpOptions = erpOptions?.Value;
this._mapper = mapper;
this._logger = logger;
this._memoryCache = memoryCache;
this._inStockTaskRepositories = inStockTaskRepositories;
this._transactionRepositories = transactionRepositories;
}
/// <summary>
/// 初始化ERP登录到ERP
/// </summary>
/// <returns></returns>
public async Task<Result<string>> Init()
{
BasicHttpBinding binding = new BasicHttpBinding();
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);
}
}
/// <summary>
/// erp:单据查询-采购入库单
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpPurchaseInStockResultDto>> BillQueryForPurchaseInStock()
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpPurchaseInStockResultDto>.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,FModel,FMaterialName,FMaterialId,FSOSTOCKID,FQty,FEntryNote,FCreateDate,FCHUCHANGPRICE,FSOSTOCKID.FNumber,FDocumentStatus,FBillTypeID,FMRPCloseStatus,FBillTypeID.FName";
param.Limit = 10;
//查询条件:备注其中的条件值以金蝶的值为准!!!
//1.创建时间在两天前和当天时间之间
//2.审核状态:已审核
//3.单据类型:标准采购订单和标准委外订单
//4.明细关闭状态:正常
//5.仓库wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步
param.FilterString = "FCreateDate>='"+beginTime+"' and FCreateDate<='"+endTime+ "' and FDocumentStatus='C' and (FBillTypeID='83d822ca3e374b4ab01e5dd46a0062bd' or FBillTypeID='6d01d059713d42a28bb976c90a121142') and FMRPCloseStatus='A'";
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<ErpPurchaseInStockResultDto>();
foreach (var item in result)
{
var lis = new ErpPurchaseInStockResultDto();
lis.FBillNo = item[0];
lis.FSupplierId = Convert.ToInt32(item[1]);
lis.FPurchaseOrgId = Convert.ToInt32(item[2]);
lis.FModel = item[3];
lis.FMaterialName = item[4];
lis.FMaterialId = Convert.ToInt32(item[5]);
lis.FSOSTOCKID = Convert.ToInt32(item[6]);
lis.FQty = Convert.ToDecimal(item[7]);
lis.FEntryNote = item[8];
lis.FCreateDate =Convert.ToDateTime(item[9]);
lis.FCHUCHANGPRICE = Convert.ToDecimal(item[10]);
lis.StockFNumber = item[11];
lis.FDocumentStatus = item[12];
lis.FBillTypeID = item[13];
lis.FMRPCloseStatus = item[14];
lis.FBillTypeFName = item[15];
erp_list.Add(lis);
}
return ResultList<ErpPurchaseInStockResultDto>.ReSuccess(erp_list);
}
catch (Exception ex)
{
return ResultList<ErpPurchaseInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
/// <summary>
/// erp:单据查询-组织数据
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpOrgDto>> BillQueryForOrg()
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpOrgDto>.ReFailure(token_result);
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.ORG_Organizations.ToString());
param.FieldKeys = "FOrgID,FName";
param.FilterString = "FOrgID=100008";
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<ErpOrgDto>();
foreach (var item in result)
{
var lis = new ErpOrgDto();
lis.Id = int.Parse(item[0]);
lis.Name = item[1];
list.Add(lis);
}
return ResultList<ErpOrgDto>.ReSuccess(list);
}
catch (Exception)
{
return ResultList<ErpOrgDto>.ReFailure("错误", 10002);
}
}
/// <summary>
/// 获取使用组织
/// </summary>
/// <returns></returns>
public async Task<ResultList<ErpStockDto>> BillQueryForStock()
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList<ErpStockDto>.ReFailure(token_result);
var query = new ErpBillQueryDto(token_result.Data);
var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString());
param.FieldKeys = "FStockId,FName,FNumber,FUseOrgId";
param.FilterString = "";//FOrgID=100008
query.Data = JsonConvert.SerializeObject(param);
var json = JsonConvert.SerializeObject(query);
var result_json = await _client.ExecuteBillQueryAsync(json);
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
var list = new List<ErpStockDto>();
foreach (var item in result)
{
var lis = new ErpStockDto();
lis.Id = int.Parse(item[0]);
lis.Name = item[1];
lis.Code = item[2];
lis.OrgCode = item[3];
list.Add(lis);
}
return ResultList<ErpStockDto>.ReSuccess(list);
}
catch (Exception)
{
return ResultList<ErpStockDto>.ReFailure("错误", 10002);
}
}
}
}