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 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 { /// /// erp数据交互服务 /// public class ErpService : IErpService { private IMapper _mapper; private AppOptions _appOptions; private ErpOptions _erpOptions; private ILogger _logger; private ERPGWSoapClient _client; private readonly IMemoryCache _memoryCache; private readonly IBasicsRepositories _basicsRepositories; public ErpService( IMapper mapper, IOptions erpOptions, IOptions appOptions, ILogger logger, IMemoryCache memoryCache, IBasicsRepositories basicsRepositories) { this._basicsRepositories = basicsRepositories; this._erpOptions = erpOptions?.Value; this._appOptions = appOptions?.Value; this._mapper = mapper; this._logger = logger; this._memoryCache = memoryCache; } /// /// 初始化ERP:登录到ERP /// /// public async Task> 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.ReFailure(ResultCodes.Erp_Login_Error); return Result.ReSuccess(result.AccessToken); } catch (Exception ex) { return Result.ReFailure(ResultCodes.Erp_Login_Error); } } public async Task> 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.ReFailure(ResultCodes.Erp_Login_Error); return Result.ReSuccess(result.AccessToken); } catch (Exception ex) { return Result.ReFailure(ResultCodes.Erp_Login_Error); } } /// /// 查单据类型的值 /// /// public async Task> BillQueryForBillType() { try { //1.先登录金蝶-拿到token var token_result = await this.Init1(); 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("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>>(result_json); //5.返回数据的组装 var erp_list = new List(); 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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-采购入库单 /// /// 模糊搜索 /// 单据编号集合精确查找 /// public async Task> BillQueryForPurchaseInStock(List sourceBillNos = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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,FSOSTOCKID,FQty,FEntryNote,FCreateDate,FCHUCHANGPRICE,FSOSTOCKID.FNumber,FStockInQty,FPurchaseOrgId.FNumber,FPOOrderEntry_FEntryID"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准采购订单和标准委外订单 //4.明细关闭状态:正常 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = " FDocumentStatus='C' and (FBillTypeID='83d822ca3e374b4ab01e5dd46a0062bd' or FBillTypeID='6d01d059713d42a28bb976c90a121142') and FMRPCloseStatus='A'"; 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 { param.FilterString = param.FilterString + " and FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "'"; } 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 ErpInStockResultDto(); lis.BillNo = item[0]; lis.SupplierId = Convert.ToInt32(item[1]); lis.OrgId = Convert.ToInt32(item[2]); lis.MaterialId = Convert.ToInt32(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.Type = (int)InstockType.Purchase; erp_list.Add(lis); } return ResultList.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-其他入库单 /// /// /// public async Task> BillQueryForMiscellaneous(List sourceBillNos = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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.STK_MISCELLANEOUS.ToString()); param.FieldKeys = "FBillNo,FStockOrgId,FMATERIALID,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'"; 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 + "'"; } 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 ErpInStockResultDto(); lis.BillNo = item[0]; lis.OrgId = Convert.ToInt32(item[1]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-直接调拨入库单 /// /// /// public async Task> BillQueryForTransferDirect(List sourceBillNos = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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.STK_TransferDirect.ToString()); param.FieldKeys = "FBillNo,FStockOrgId,FMaterialId,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'"; 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 + "'"; } 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 ErpInStockResultDto(); lis.BillNo = item[0]; lis.OrgId = Convert.ToInt32(item[1]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-分步式调入单 /// /// /// public async Task> BillQueryForTransferin(List sourceBillNos = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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.STK_TRANSFERIN.ToString()); param.FieldKeys = "FBillNo,FStockOrgID,FMaterialID,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'"; 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 + "'"; } 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 ErpInStockResultDto(); lis.BillNo = item[0]; lis.OrgId = Convert.ToInt32(item[1]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-组装拆卸单-组装(成品入库) /// /// /// public async Task> BillQueryForAssembledApp_Assembly(List sourceBillNos = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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.STK_AssembledApp.ToString()); param.FieldKeys = "FBillNo,FOwnerIdHead,FMaterialID,FStockID,FStockID.FNumber,FQty,FCreateDate,FDescription,FOwnerIdHead.FNumber,FEntity_FEntryID"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准组织拆卸单;备注:这里的单据类型只有一个,所以就不需要判断了 //4.事务类型:1为组装,2为拆卸 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = " FDocumentStatus='C' 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 + "'"; } 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 ErpInStockResultDto(); lis.BillNo = item[0]; lis.OrgId = Convert.ToInt32(item[1]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-组装拆卸单-拆卸(子件入库) /// /// /// public async Task> BillQueryForAssembledApp_Disassembly(List sourceBillNos = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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.STK_AssembledApp.ToString()); param.FieldKeys = "FBillNo,FSubProOwnerIdH,FMaterialIDSETY,FStockIDSETY,FStockIDSETY.FNumber,FQtySETY,FCreateDate,FDescriptionSETY,FSubProOwnerIdH.FNumber,FSubEntity_FDetailID"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准组织拆卸单;备注:这里的单据类型只有一个,所以就不需要判断了 //4.事务类型:1为组装,2为拆卸 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = " FDocumentStatus='C' 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 + "'"; } 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 ErpInStockResultDto(); lis.BillNo = item[0]; lis.OrgId = Convert.ToInt32(item[1]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-物料集合 /// /// public async Task> BillQueryForMaterial() { try { //1.获取缓存中的物料数据; var materials = _memoryCache.Get>(_erpOptions.cache_materail_key); if (materials == null || materials.Count == 0) { return await this.BillQueryForMaterialPagedList(); } else { return ResultList.ReSuccess(materials); } } catch (Exception) { return ResultList.ReFailure(ResultCodes.ErpMaterialError); } } /// /// erp:基础数据-物料信息 /// /// /// public async Task> BillQueryForMaterial(int id) { //1.获取缓存中的物料数据 var materials = _memoryCache.Get>(_erpOptions.cache_materail_key); if (materials == null || materials.Count == 0) return Result.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.ReSuccess(mater); } else return Result.ReSuccess(null); } return Result.ReSuccess(mater); } /// /// erp:基础数据-物料-分页查询 /// /// private async Task> BillQueryForMaterialPagedList() { //2.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return ResultList.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"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.审核状态:已审核 //2.禁用状态:A否,B是 //3.使用组织:只查询“深圳市元创时代科技有限公司”这个组织;组织ID=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(); int skip = 0; var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.LogInformation($"物料拉取-开始时间:{beginTime}"); 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); var result = JsonConvert.DeserializeObject>>(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]; 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点,后面定时任务执行重新放入缓存 _memoryCache.Set(_erpOptions.cache_materail_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); _logger.LogInformation($"物料拉取-总条数:{erp_materials_list.Count}"); return ResultList.ReSuccess(erp_materials_list); } /// /// erp:基础数据-物料-ids查询 /// /// /// private async Task 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"; 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(); //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>>(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]; 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; } } /// /// erp:单据查询-组织数据 /// /// public async Task> BillQueryForOrg() { try { //1.获取缓存中的组织数据; var orgs = _memoryCache.Get>(_erpOptions.cache_org_key); if (orgs == null || orgs.Count == 0) { //2.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return ResultList.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($"组织拉取-开始时间:{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>>(result_json); var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.LogInformation($"组织拉取-结束时间:{endTime}"); //6.拼装 var list = new List(); 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.ReSuccess(list); } else { return ResultList.ReSuccess(orgs); } } catch (Exception) { return ResultList.ReFailure(ResultCodes.ErpOrgError); } } /// /// erp:供应商 /// /// public async Task> BillQueryForSupplier() { try { //1.获取缓存中的供应商数据; var suppliers = _memoryCache.Get>(_erpOptions.cache_supplier_key); if (suppliers == null || suppliers.Count == 0) { //2.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return ResultList.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"; //备注:因为供应商数据不是很多,就不能和获取物料一样循环获取;组织这里就获取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>>(result_json); var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.LogInformation($"供应商拉取-结束时间:{endTime}"); //6.拼装 var list = new List(); 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.ReSuccess(list); } else { return ResultList.ReSuccess(suppliers); } } catch (Exception) { return ResultList.ReFailure(ResultCodes.ErpSupplierError); } } /// /// 客户 /// /// public async Task> BillQueryForCustomer() { try { //1.获取缓存中的供应商数据; var customers = _memoryCache.Get>(_erpOptions.cache_customer_key); if (customers == null || customers.Count == 0) { //2.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return ResultList.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(); //备注:因为供应商数据不是很多,就不能和获取物料一样循环获取;组织这里就获取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>>(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.ReSuccess(list); } else { return ResultList.ReSuccess(customers); } } catch (Exception) { return ResultList.ReFailure(ResultCodes.ErpSupplierError); } } /// /// erp:仓库 /// /// public async Task> BillQueryForStock() { try { //1.获取缓存中的仓库数据; var stocks = _memoryCache.Get>(_erpOptions.cache_stock_key); if (stocks == null || stocks.Count == 0) { //2.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return ResultList.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>>(result_json); //6.拼装 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.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.ReSuccess(list); } else { return ResultList.ReSuccess(stocks); } } catch (Exception) { return ResultList.ReFailure(ResultCodes.ErpStockError); } } /// /// 根据仓库编码获取仓位 /// /// /// public async Task> BillQueryForSubStock() { try { //1.获取缓存中的仓库数据; var stocks = _memoryCache.Get>(_erpOptions.cache_substock_key); if (stocks == null || stocks.Count == 0) { 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 = "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>>(result_json); var list = new List(); 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.ReSuccess(list); } else { return ResultList.ReSuccess(stocks); } } catch (Exception) { return ResultList.ReFailure(ResultCodes.ErpSubStockError); } } #region 金蝶操作交互 /// /// 同步数据(保存提交审核) /// /// /// /// public async Task> Save(T dto, string formId) { try { var token_result = await this.Init(); if (!token_result.IsSuccess) return Result.ReFailure(token_result.Message, token_result.Status); var query = new ErpBillQueryDto(token_result.Data, formId); var param = new ErpSave(formId, dto); query.Data = JsonConvert.SerializeObject(param); //保存 var result_json = await _client.SaveAsync(JsonConvert.SerializeObject(query)); 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.ReSuccess(number); } var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString(); return Result.ReFailure(msg, 10002); } catch (Exception ex) { return Result.ReFailure(ex.ToString(), 10002); } } /// /// 提交 /// /// /// /// public async Task 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)); 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); } } /// /// 审核 /// /// /// /// public async Task 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)); 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); } } /// /// 反审核 /// /// /// /// public async Task 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); } } /// /// 删除 /// /// /// /// public async Task 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); } } /// /// 下推 /// /// /// public async Task> 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); 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.ReSuccess(id); } var msg = jobject["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString(); return Result.ReFailure(msg, 10002); } catch (Exception ex) { return Result.ReFailure(ex.ToString(), 10002); } } #endregion #region 出库 public async Task> BillQueryForDeliveryNoticeOutStock(List sourceBillNos = null, DateTime? beginTime = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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,FStockID.FNumber,FStockLocID,FQty,F_ENTRYREMARKS,FCreateDate,FEntity_FEntryID,FDeliveryOrgID.FNumber";//FEntryID param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FDocumentStatus='C' and FRemainOutQty>=0"; //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//没有指定单号搜索 则带时间范围 param.FilterString += " and FCreateDate>='" + beginStr + "' and FCreateDate<='" + endStr + "'"; 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 ErpDeliveryNoticeOutStockResultDto(); lis.SourceBillNo = item[0]; lis.SaleBillNo = item[1]; lis.DeliveryOrgId = Convert.ToInt32(item[2]); lis.ReceiptCustomerId = Convert.ToInt32(item[3]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// 直接调拨出库 /// /// /// public async Task> BillQueryForTransferDirectOutStock(List sourceBillNos = null, DateTime? beginTime = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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,FSrcStockId.FNumber,FSrcStockLocId,FQty,FNoteEntry,FCreateDate,FBillEntry_FEntryID,FStockOutOrgId.FNumber"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FDocumentStatus='C' and FBillTypeID='ce8f49055c5c4782b65463a3f863bb4a'"; //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//没有指定单号搜索 则带时间范围 param.FilterString += " and FCreateDate>='" + beginStr + "' and FCreateDate<='" + endStr + "'"; 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 ErpDeliveryNoticeOutStockResultDto(); lis.SourceBillNo = item[0]; lis.SaleBillNo = item[1]; lis.DeliveryOrgId = Convert.ToInt32(item[2]); lis.ReceiptCustomerId = Convert.ToInt32(item[3]); lis.MaterialId = Convert.ToInt32(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]; erp_list.Add(lis); } return ResultList.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// 分布式调出 /// /// /// public async Task> BillQueryForTransferOutOutStock(List sourceBillNos = null, DateTime? beginTime = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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,FSrcStockID.FNumber,FSrcStockLocId,FQty,FEntryNote,FCreateDate,FSTKTRSOUTENTRY_FEntryID,FStockOrgID.FNumber"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FDocumentStatus='C' and FBillTypeID='de3bcacc98434ec68a358aa5abcd9183'"; //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//没有指定单号搜索 则带时间范围 param.FilterString += " and FCreateDate>='" + beginStr + "' and FCreateDate<='" + endStr + "'"; 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 ErpDeliveryNoticeOutStockResultDto(); lis.SourceBillNo = item[0]; lis.SaleBillNo = item[1]; lis.DeliveryOrgId = Convert.ToInt32(item[2]); lis.ReceiptCustomerId = Convert.ToInt32(item[3]); lis.MaterialId = Convert.ToInt32(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]; erp_list.Add(lis); } return ResultList.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// 组装拆卸单 (拆卸 主出) /// /// /// public async Task> BillQueryForAssembledAppOutStock_Dassembly(List sourceBillNos = null, DateTime? beginTime = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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,FStockID.FNumber,FStockLocId,FQty,FDescription,FCreateDate,FEntity_FEntryID,FStockOrgId.FNumber"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID param.FilterString = "FDocumentStatus='C' and FAffairType='Dassembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7'"; //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//没有指定单号搜索 则带时间范围 param.FilterString += " and FCreateDate>='" + beginStr + "' and FCreateDate<='" + endStr + "'"; 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 ErpDeliveryNoticeOutStockResultDto(); lis.SourceBillNo = item[0]; lis.SaleBillNo = item[1]; lis.DeliveryOrgId = Convert.ToInt32(item[2]); lis.ReceiptCustomerId = Convert.ToInt32(item[3]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// 其他出库 /// /// /// public async Task> BillQueryForMisDeliveryOutStock(List sourceBillNos = null, DateTime? beginTime = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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,FStockId.FNumber,FStockLocId ,FQty,FEntryNote,FCreateDate,FEntity_FEntryID,FStockOrgId.FNumber"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FDocumentStatus='C' and FBillTypeID='54533291F9A44D38809F70000499BEE9'"; //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//没有指定单号搜索 则带时间范围 param.FilterString += " and FCreateDate>='" + beginStr + "' and FCreateDate<='" + endStr + "'"; 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 ErpDeliveryNoticeOutStockResultDto(); lis.SourceBillNo = item[0]; lis.SaleBillNo = item[1]; lis.DeliveryOrgId = Convert.ToInt32(item[2]); lis.ReceiptCustomerId = Convert.ToInt32(item[3]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// 组装拆卸单 (组装 子出) /// /// /// public async Task> BillQueryForAssembledAppOutStock_Assembly(List sourceBillNos = null, DateTime? beginTime = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) return ResultList.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.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,FStockIDSETY.FNumber,FStockLocIdSETY,FQtySETY,FDescriptionSETY,FCreateDate,FSubEntity_FDetailID,FStockOrgId.FNumber"; param.Limit = 10000; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID param.FilterString = "FDocumentStatus='C' and FAffairType='Assembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7'"; //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//没有指定单号搜索 则带时间范围 param.FilterString += " and FCreateDate>='" + beginStr + "' and FCreateDate<='" + endStr + "'"; 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 ErpDeliveryNoticeOutStockResultDto(); lis.SourceBillNo = item[0]; lis.SaleBillNo = item[1]; lis.DeliveryOrgId = Convert.ToInt32(item[2]); lis.ReceiptCustomerId = Convert.ToInt32(item[3]); lis.MaterialId = Convert.ToInt32(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.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } public async Task> BillQueryForSalOutStock(string id) { try { //1.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return Result.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>>(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.ReSuccess(erp_list); } catch (Exception ex) { return Result.ReFailure(ResultCodes.Erp_BillQuery_Error); } } public async Task> BillQueryForPurchaseInStock(string id) { try { //1.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return Result.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>>(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.ReSuccess(erp_list); } catch (Exception ex) { return Result.ReFailure(ResultCodes.Erp_BillQuery_Error); } } public async Task> BillQueryForInventory(List<(string materialNumber, string orgCode, string stockCode, int subStockId)> request) { try { //1.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) return ResultList.ReFailure(token_result); //3.获取金蝶采购订单:拼接参数和条件 var query = new ErpBillQueryDto(token_result.Data); var param = new ErpBillQueryParamDto(FormIdParam.STK_Inventory.ToString()); param.FieldKeys = "FBASEQTY,FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber,FSTOCKLOCID"; param.Limit = 100; //param.FilterString = $"FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}'"; //param.FilterString = $""; for (int i = 0; i < request.Count(); i++) { if (i == 0) { param.FilterString = $"(FMATERIALID.FNumber='{request[0].materialNumber}' and FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}' and FSTOCKLOCID={request[0].subStockId})"; } else { param.FilterString += $" or (FMATERIALID.FNumber='{request[i].materialNumber}' and FSTOCKORGID.FNumber='{request[i].orgCode}' and FSTOCKID.FNumber='{request[i].stockCode}' and FSTOCKLOCID={request[i].subStockId})"; } } query.Data = JsonConvert.SerializeObject(param); var json = JsonConvert.SerializeObject(query); //4.请求查询接口 var result_json = await _client.ExecuteBillQueryAsync(json); var result = JsonConvert.DeserializeObject>>(result_json); var erp_list = new List(); foreach (var item in result) { var lis = erp_list.FirstOrDefault(f => f.MaterialNumber.Equals(item[1]) && f.OrgCode.Equals(item[2]) && f.StockCode.Equals(item[3])); if (lis == null) { lis = new ErpInventoryDto(); lis.Qty = Convert.ToDecimal(item[0]); lis.MaterialNumber = item[1]; lis.OrgCode = item[2]; lis.StockCode = item[3]; lis.Erp_SubStockId = Convert.ToInt32(item[4]); erp_list.Add(lis); } else lis.Qty = lis.Qty + Convert.ToDecimal(item[0]); } return ResultList.ReSuccess(erp_list); } catch (Exception ex) { _logger.LogError($"获取金蝶即时库存出错:{ex.ToString()}"); return ResultList.ReFailure(ResultCodes.Erp_Inventory_Error); } } #endregion } }