862 lines
42 KiB
C#
862 lines
42 KiB
C#
using AutoMapper;
|
||
using ERP;
|
||
using Microsoft.EntityFrameworkCore.Storage;
|
||
using Microsoft.Extensions.Caching.Memory;
|
||
using Microsoft.Extensions.Logging;
|
||
using Microsoft.Extensions.Options;
|
||
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.ServiceModel;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using WMS.Web.Core.Dto.Erp;
|
||
using WMS.Web.Core.Dto.Erp.Org;
|
||
using WMS.Web.Core.Dto.Erp.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
|
||
{
|
||
/// <summary>
|
||
/// erp数据交互服务
|
||
/// </summary>
|
||
public class ErpService : IErpService
|
||
{
|
||
private IMapper _mapper;
|
||
private AppOptions _appOptions;
|
||
private ErpOptions _erpOptions;
|
||
private ILogger<ErpService> _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> erpOptions,
|
||
IOptions<AppOptions> appOptions,
|
||
ILogger<ErpService> 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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 初始化ERP:登录到ERP
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<Result<string>> 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<string>.ReFailure(ResultCodes.Erp_Login_Error);
|
||
return Result<string>.ReSuccess(result.AccessToken);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return Result<string>.ReFailure(ResultCodes.Erp_Login_Error);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// erp:单据查询-采购入库单
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpPurchaseInStockResultDto>> BillQueryForPurchaseInStock()
|
||
{
|
||
try
|
||
{
|
||
|
||
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
|
||
if (stocks.Count == 0)
|
||
return ResultList<ErpPurchaseInStockResultDto>.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<ErpPurchaseInStockResultDto>.ReFailure(token_result);
|
||
|
||
//2.时间条件:可能还有其它条件
|
||
var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00");
|
||
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
//3.获取金蝶采购订单:拼接参数和条件
|
||
var query = new ErpBillQueryDto(token_result.Data);
|
||
var param = new ErpBillQueryParamDto(FormIdParam.PUR_PurchaseOrder.ToString());
|
||
param.FieldKeys = "FBillNo,FSupplierId,FPurchaseOrgId,FModel,FMaterialName,FMaterialId,FSOSTOCKID,FQty,FEntryNote,FCreateDate,FCHUCHANGPRICE,FSOSTOCKID.FNumber,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<List<List<string>>>(result_json);
|
||
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpPurchaseInStockResultDto>();
|
||
foreach (var item in result)
|
||
{
|
||
var lis = new ErpPurchaseInStockResultDto();
|
||
lis.FBillNo = item[0];
|
||
lis.FSupplierId = Convert.ToInt32(item[1]);
|
||
lis.FPurchaseOrgId = Convert.ToInt32(item[2]);
|
||
lis.FModel = item[3];
|
||
lis.FMaterialName = item[4];
|
||
lis.FMaterialId = Convert.ToInt32(item[5]);
|
||
lis.FSOSTOCKID = Convert.ToInt32(item[6]);
|
||
lis.FQty = Convert.ToDecimal(item[7]);
|
||
lis.FEntryNote = item[8];
|
||
lis.FCreateDate = Convert.ToDateTime(item[9]);
|
||
lis.FCHUCHANGPRICE = Convert.ToDecimal(item[10]);
|
||
lis.StockFNumber = item[11];
|
||
lis.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<ErpPurchaseInStockResultDto>.ReSuccess(erp_list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return ResultList<ErpPurchaseInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// erp:单据查询-物料
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpMaterialDto>> BillQueryForMaterial()
|
||
{
|
||
//1.先登录金蝶-拿到token
|
||
var token_result = await this.Init();
|
||
if (!token_result.IsSuccess)
|
||
return ResultList<ErpMaterialDto>.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<List<List<string>>>(result_json);
|
||
|
||
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
_logger.LogInformation($"结束时间:{beginTime}");
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpMaterialDto>();
|
||
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<ErpMaterialDto>.ReSuccess(erp_list);
|
||
}
|
||
|
||
/// <summary>
|
||
/// erp:单据查询-组织数据
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpOrgDto>> BillQueryForOrg()
|
||
{
|
||
try
|
||
{
|
||
var token_result = await this.Init();
|
||
if (!token_result.IsSuccess)
|
||
return ResultList<ErpOrgDto>.ReFailure(token_result);
|
||
var query = new ErpBillQueryDto(token_result.Data);
|
||
var param = new ErpBillQueryParamDto(FormIdParam.ORG_Organizations.ToString());
|
||
param.FieldKeys = "FOrgID,FName";
|
||
param.FilterString = "FOrgID=100008";
|
||
query.Data = JsonConvert.SerializeObject(param);
|
||
var json = JsonConvert.SerializeObject(query);
|
||
|
||
var result_json = await _client.ExecuteBillQueryAsync(json);
|
||
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
|
||
|
||
var list = new List<ErpOrgDto>();
|
||
foreach (var item in result)
|
||
{
|
||
var lis = new ErpOrgDto();
|
||
lis.Id = int.Parse(item[0]);
|
||
lis.Name = item[1];
|
||
|
||
list.Add(lis);
|
||
|
||
}
|
||
return ResultList<ErpOrgDto>.ReSuccess(list);
|
||
|
||
}
|
||
catch (Exception)
|
||
{
|
||
return ResultList<ErpOrgDto>.ReFailure("错误", 10002);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 获取仓库
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpStockDto>> BillQueryForStock()
|
||
{
|
||
try
|
||
{
|
||
var token_result = await this.Init();
|
||
if (!token_result.IsSuccess)
|
||
return ResultList<ErpStockDto>.ReFailure(token_result);
|
||
var query = new ErpBillQueryDto(token_result.Data);
|
||
var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString());
|
||
param.FieldKeys = "FStockId,FName,FNumber,FUseOrgId";
|
||
param.FilterString = "";//FOrgID=100008
|
||
query.Data = JsonConvert.SerializeObject(param);
|
||
var json = JsonConvert.SerializeObject(query);
|
||
|
||
var result_json = await _client.ExecuteBillQueryAsync(json);
|
||
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
|
||
|
||
var list = new List<ErpStockDto>();
|
||
foreach (var item in result)
|
||
{
|
||
var lis = new ErpStockDto();
|
||
lis.Id = int.Parse(item[0]);
|
||
lis.Name = item[1];
|
||
lis.Code = item[2];
|
||
lis.OrgId = Convert.ToInt32(item[3]);
|
||
list.Add(lis);
|
||
|
||
}
|
||
return ResultList<ErpStockDto>.ReSuccess(list);
|
||
|
||
}
|
||
catch (Exception)
|
||
{
|
||
return ResultList<ErpStockDto>.ReFailure("错误", 10002);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 根据仓库编码获取仓位
|
||
/// </summary>
|
||
/// <param name="code"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpStockDto>> BillQueryForSubStock(string code = null)
|
||
{
|
||
try
|
||
{
|
||
var token_result = await this.Init();
|
||
if (!token_result.IsSuccess)
|
||
return ResultList<ErpStockDto>.ReFailure(token_result);
|
||
var query = new ErpBillQueryDto(token_result.Data);
|
||
var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString());
|
||
param.FieldKeys = "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<List<List<string>>>(result_json);
|
||
|
||
var list = new List<ErpStockDto>();
|
||
foreach (var item in result)
|
||
{
|
||
var lis = new ErpStockDto();
|
||
lis.Id = int.Parse(item[0]);
|
||
lis.Name = item[1];
|
||
lis.Code = item[2];
|
||
lis.OrgId = Convert.ToInt32(item[3]);
|
||
list.Add(lis);
|
||
|
||
}
|
||
return ResultList<ErpStockDto>.ReSuccess(list);
|
||
|
||
}
|
||
catch (Exception)
|
||
{
|
||
return ResultList<ErpStockDto>.ReFailure("错误", 10002);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 同步数据(保存提交审核)
|
||
/// </summary>
|
||
/// <param name="dto"></param>
|
||
/// <param name="formId"></param>
|
||
/// <returns></returns>
|
||
public async Task<Result> Sync<T>(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<T>(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);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 下推
|
||
/// </summary>
|
||
/// <param name="dto"></param>
|
||
/// <returns></returns>
|
||
public async Task<Result> 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<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForDeliveryNoticeOutStock(List<string> sourceBillNos = null)
|
||
{
|
||
try
|
||
{
|
||
|
||
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
|
||
if (stocks.Count == 0)
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.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<ErpDeliveryNoticeOutStockResultDto>.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<List<List<string>>>(result_json);
|
||
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
|
||
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<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 直接调拨出库
|
||
/// </summary>
|
||
/// <param name="sourceBillNos"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForTransferDirectOutStock(List<string> sourceBillNos = null)
|
||
{
|
||
try
|
||
{
|
||
|
||
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
|
||
if (stocks.Count == 0)
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.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<ErpDeliveryNoticeOutStockResultDto>.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<List<List<string>>>(result_json);
|
||
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
|
||
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<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 分布式调出
|
||
/// </summary>
|
||
/// <param name="sourceBillNos"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForTransferOutOutStock(List<string> sourceBillNos = null)
|
||
{
|
||
try
|
||
{
|
||
|
||
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
|
||
if (stocks.Count == 0)
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.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<ErpDeliveryNoticeOutStockResultDto>.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<List<List<string>>>(result_json);
|
||
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
|
||
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<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 组装拆卸单 (拆卸 主出)
|
||
/// </summary>
|
||
/// <param name="sourceBillNos"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForAssembledAppOutStock_Dassembly(List<string> sourceBillNos = null)
|
||
{
|
||
try
|
||
{
|
||
|
||
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
|
||
if (stocks.Count == 0)
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.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<ErpDeliveryNoticeOutStockResultDto>.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<List<List<string>>>(result_json);
|
||
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
|
||
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<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 其他出库
|
||
/// </summary>
|
||
/// <param name="sourceBillNos"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForMisDeliveryOutStock(List<string> sourceBillNos = null)
|
||
{
|
||
try
|
||
{
|
||
|
||
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
|
||
if (stocks.Count == 0)
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.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<ErpDeliveryNoticeOutStockResultDto>.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<List<List<string>>>(result_json);
|
||
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
|
||
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<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 组装拆卸单 (组装 子出)
|
||
/// </summary>
|
||
/// <param name="sourceBillNos"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultList<ErpDeliveryNoticeOutStockResultDto>> BillQueryForAssembledAppOutStock_Assembly(List<string> sourceBillNos = null)
|
||
{
|
||
try
|
||
{
|
||
|
||
var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId);
|
||
if (stocks.Count == 0)
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.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<ErpDeliveryNoticeOutStockResultDto>.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<List<List<string>>>(result_json);
|
||
|
||
//5.返回数据的组装
|
||
var erp_list = new List<ErpDeliveryNoticeOutStockResultDto>();
|
||
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<ErpDeliveryNoticeOutStockResultDto>.ReSuccess(erp_list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return ResultList<ErpDeliveryNoticeOutStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
}
|