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.OutStock; using WMS.Web.Core.Dto.Erp.Purchase; using WMS.Web.Core.Dto.Erp.TakeStock; 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 IInStockTaskRepositories _inStockTaskRepositories; private readonly ISingleDataService _singleDataService; private readonly ILoginRepositories _loginRepositories; private readonly IBasicsRepositories _basicsRepositories; public ErpService( IMapper mapper, IOptions erpOptions, IOptions appOptions, ILogger logger, IMemoryCache memoryCache, IInStockTaskRepositories inStockTaskRepositories, ISingleDataService singleDataService, ILoginRepositories loginRepositories, IBasicsRepositories basicsRepositories) { this._basicsRepositories = basicsRepositories; this._erpOptions = erpOptions?.Value; this._appOptions = appOptions?.Value; this._mapper = mapper; this._logger = logger; this._memoryCache = memoryCache; this._inStockTaskRepositories = inStockTaskRepositories; this._singleDataService = singleDataService; this._loginRepositories = loginRepositories; } /// /// 初始化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); } } /// /// erp:单据查询-采购入库单 /// /// public async Task> BillQueryForPurchaseInStock() { 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(); //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,FStockInQty,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'"; param.FilterString = param.FilterString + " and FSOSTOCKID.FNumber in ("; var str = ""; int index = 0; foreach (var scode in stocks_codes) { index++; if (index == stocks_codes.Count) str = str + $"'{scode}'"; else str = str + $"'{scode}'" + ","; } param.FilterString = param.FilterString + str + ")"; 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.FStockInQty = Convert.ToDecimal(item[12]); lis.FDocumentStatus = item[13]; lis.FBillTypeID = item[14]; lis.FMRPCloseStatus = item[15]; lis.FBillTypeFName = item[16]; erp_list.Add(lis); } return ResultList.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } /// /// erp:单据查询-物料 /// /// public async Task> BillQueryForMaterial() { //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.BD_MATERIAL.ToString()); param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FForbidStatus,FUseOrgId"; param.Limit = 10000; Console.Write("请输入第几行:"); var row = Console.ReadLine(); param.StartRow = (Convert.ToInt32(row) * param.Limit); //查询条件:备注其中的条件值以金蝶的值为准!!! //1.审核状态:已审核 //2.禁用状态:A否,B是 //3.使用组织:只查询“深圳市元创时代科技有限公司”这个组织;组织ID=100008--固定值查询(测试端和正式是一样的) param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and FUseOrgId=100008"; param.OrderString = "FCreateDate ASC"; query.Data = JsonConvert.SerializeObject(param); var json = JsonConvert.SerializeObject(query); var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); _logger.LogInformation($"开始时间:{beginTime}"); //4.请求查询接口 var result_json = await _client.ExecuteBillQueryAsync(json); var result = JsonConvert.DeserializeObject>>(result_json); var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); _logger.LogInformation($"结束时间:{beginTime}"); //5.返回数据的组装 var erp_list = new List(); 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.Status = item[4]; lis.UseOrgId = item[5]; erp_list.Add(lis); } _logger.LogInformation($"获取总条数:{erp_list.Count}"); return ResultList.ReSuccess(erp_list); } /// /// 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.OrgId = Convert.ToInt32(item[3]); list.Add(lis); } return ResultList.ReSuccess(list); } catch (Exception) { return ResultList.ReFailure("错误", 10002); } } /// /// 根据仓库编码获取仓位 /// /// /// public async Task> BillQueryForSubStock(string code = null) { 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 = "FStockFlexDetail_FDetailID,FFlexEntryName,FFlexEntryId,'0'"; param.Limit = 100000; if (!string.IsNullOrEmpty(code)) param.FilterString = "FNumber='" + code + "'";//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 ErpStockDto(); lis.Id = int.Parse(item[0]); lis.Name = item[1]; lis.Code = item[2]; lis.OrgId = Convert.ToInt32(item[3]); list.Add(lis); } return ResultList.ReSuccess(list); } catch (Exception) { return ResultList.ReFailure("错误", 10002); } } /// /// 同步数据(保存提交审核) /// /// /// /// public async Task Sync(T dto, string formId) { try { var token_result = await this.Init(); if (!token_result.IsSuccess) return token_result; var query = new ErpBillQueryDto(token_result.Data); var param = new ErpSave(formId, dto); query.Data = JsonConvert.SerializeObject(param); //保存 var result_json = await _client.SaveAsync(JsonConvert.SerializeObject(query)); //提交 var sparam = new ErpSubmitDto(formId, ""); query.Data = JsonConvert.SerializeObject(sparam); result_json = await _client.SubmitAsync(JsonConvert.SerializeObject(query)); //审核 result_json = await _client.AuditAsync(JsonConvert.SerializeObject(query)); return Result.ReSuccess(); } catch (Exception) { return Result.ReFailure("错误", 10002); } } /// /// 下推 /// /// /// public async Task Push(ErpPushDto dto) { 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.PushAsync(JsonConvert.SerializeObject(query)); return Result.ReSuccess(); } #region 出库 public async Task> BillQueryForDeliveryNoticeOutStock(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.Id).ToList(); //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.SAL_DELIVERYNOTICE.ToString()); param.FieldKeys = "FBillNo,FOrderNo,FDeliveryOrgID,FCustomerID,FMaterialID,FStockID,FStockLocID,FQty,FNoteEntry,FCreateDate"; param.Limit = 10; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C' and FRemainOutQty>=0"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString = param.FilterString + " and FStockID in (" + srt.Substring(1, srt.Length - 2) + ")"; //根据原订单号查询 if (sourceBillNos != null && sourceBillNos.Count() > 0) { var srt_b = JsonConvert.SerializeObject(sourceBillNos); param.FilterString = param.FilterString + " and FBillNo in (" + srt_b.Substring(1, srt_b.Length - 2) + ")"; } 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.StockId = Convert.ToInt32(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; 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) { 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.Id).ToList(); //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,'',FStockOutOrgId,FStockOrgId,FMaterialID,FSrcStockId,FSrcStockLocId,FQty,FNoteEntry,FCreateDate"; param.Limit = 10; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C'"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString = param.FilterString + " and FSrcStockId in (" + srt.Substring(1, srt.Length - 2) + ")"; //根据原订单号查询 if (sourceBillNos != null && sourceBillNos.Count() > 0) { var srt_b = JsonConvert.SerializeObject(sourceBillNos); param.FilterString = param.FilterString + " and FBillNo in (" + srt_b.Substring(1, srt_b.Length - 2) + ")"; } 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.StockId = Convert.ToInt32(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; 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) { 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.Id).ToList(); //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_TRANSFEROUT.ToString()); param.FieldKeys = "FBillNo,'',FStockOrgID,FStockInOrgID,FMaterialID,FSrcStockID,FSrcStockLocId,FQty,FEntryNote,FCreateDate"; param.Limit = 10; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C'"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString = param.FilterString + " and FSrcStockID in (" + srt.Substring(1, srt.Length - 2) + ")"; //根据原订单号查询 if (sourceBillNos != null && sourceBillNos.Count() > 0) { var srt_b = JsonConvert.SerializeObject(sourceBillNos); param.FilterString = param.FilterString + " and FBillNo in (" + srt_b.Substring(1, srt_b.Length - 2) + ")"; } 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.StockId = Convert.ToInt32(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; 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) { 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.Id).ToList(); //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,'','0','0',FMaterialID,FStockID,FStockLocId,FQty,FDescription,FCreateDate"; param.Limit = 10; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C' and FAffairType='Dassembly'"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString = param.FilterString + " and FSrcStockID in (" + srt.Substring(1, srt.Length - 2) + ")"; //根据原订单号查询 if (sourceBillNos != null && sourceBillNos.Count() > 0) { var srt_b = JsonConvert.SerializeObject(sourceBillNos); param.FilterString = param.FilterString + " and FBillNo in (" + srt_b.Substring(1, srt_b.Length - 2) + ")"; } 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.StockId = Convert.ToInt32(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; 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) { 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.Id).ToList(); //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_MisDelivery.ToString()); param.FieldKeys = "FBillNo,'',FStockOrgId,FPickOrgId,FMaterialId,FStockId,FStockLocId ,FQty,FEntryNote,FCreateDate"; param.Limit = 10; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C'"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString = param.FilterString + " and FSrcStockID in (" + srt.Substring(1, srt.Length - 2) + ")"; //根据原订单号查询 if (sourceBillNos != null && sourceBillNos.Count() > 0) { var srt_b = JsonConvert.SerializeObject(sourceBillNos); param.FilterString = param.FilterString + " and FBillNo in (" + srt_b.Substring(1, srt_b.Length - 2) + ")"; } 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.StockId = Convert.ToInt32(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; 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) { 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.Id).ToList(); //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,FOwnerIdHead,FMaterialIDSETY,FStockIDSETY,FStockLocIdSETY,FQtySETY,FDescriptionSETY,FCreateDate"; param.Limit = 10; //查询条件:备注其中的条件值以金蝶的值为准!!! //1.创建时间在两天前和当天时间之间 //2.审核状态:已审核 //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C' and FAffairType='Assembly'"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString = param.FilterString + " and FSrcStockID in (" + srt.Substring(1, srt.Length - 2) + ")"; //根据原订单号查询 if (sourceBillNos != null && sourceBillNos.Count() > 0) { var srt_b = JsonConvert.SerializeObject(sourceBillNos); param.FilterString = param.FilterString + " and FBillNo in (" + srt_b.Substring(1, srt_b.Length - 2) + ")"; } 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.StockId = Convert.ToInt32(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; erp_list.Add(lis); } return ResultList.ReSuccess(erp_list); } catch (Exception ex) { return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } #endregion } }