224 lines
9.3 KiB
C#
224 lines
9.3 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|
||
}
|