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
{
///
/// erp数据交互服务
///
public class ErpService : IErpService
{
private IMapper _mapper;
private ErpOptions _erpOptions;
private ILogger _logger;
private ERPGWSoapClient _client;
private readonly IMemoryCache _memoryCache;
private readonly IInStockTaskRepositories _inStockTaskRepositories;
public readonly ITransactionRepositories _transactionRepositories;
public ErpService(
IMapper mapper,
IOptions erpOptions,
ILogger 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;
}
///
/// 初始化ERP:登录到ERP
///
///
public async Task> 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.ReFailure(ResultCodes.Erp_Login_Error);
return Result.ReSuccess(result.AccessToken);
}
catch (Exception ex)
{
return Result.ReFailure(ResultCodes.Erp_Login_Error);
}
}
///
/// erp:单据查询-采购入库单
///
///
public async Task> BillQueryForPurchaseInStock()
{
try
{
//1.先登录金蝶-拿到token
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList.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>>(result_json);
//5.返回数据的组装
var erp_list = new List();
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.ReSuccess(erp_list);
}
catch (Exception ex)
{
return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
///
/// erp:单据查询-组织数据
///
///
public async Task> BillQueryForOrg()
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList.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>>(result_json);
var list = new List();
foreach (var item in result)
{
var lis = new ErpOrgDto();
lis.Id = int.Parse(item[0]);
lis.Name = item[1];
list.Add(lis);
}
return ResultList.ReSuccess(list);
}
catch (Exception)
{
return ResultList.ReFailure("错误", 10002);
}
}
///
/// 获取使用组织
///
///
public async Task> BillQueryForStock()
{
try
{
var token_result = await this.Init();
if (!token_result.IsSuccess)
return ResultList.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>>(result_json);
var list = new List();
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.ReSuccess(list);
}
catch (Exception)
{
return ResultList.ReFailure("错误", 10002);
}
}
}
}