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); } } } }