获取金蝶-定时任务
This commit is contained in:
@@ -1308,6 +1308,18 @@
|
|||||||
<param name="isTransaction"></param>
|
<param name="isTransaction"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:WMS.Web.Domain.IService.IInStockTaskService">
|
||||||
|
<summary>
|
||||||
|
入库任务单-服务接口
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:WMS.Web.Domain.IService.IInStockTaskService.SsynPurchaseInStock(System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
同步:采购入库类型单据
|
||||||
|
</summary>
|
||||||
|
<param name="isTransaction"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:WMS.Web.Domain.IService.IOutStockService">
|
<member name="T:WMS.Web.Domain.IService.IOutStockService">
|
||||||
<summary>
|
<summary>
|
||||||
出库服务
|
出库服务
|
||||||
@@ -1876,6 +1888,18 @@
|
|||||||
<param name="isTransaction"></param>
|
<param name="isTransaction"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:WMS.Web.Domain.Services.InStockTaskService">
|
||||||
|
<summary>
|
||||||
|
入库任务单-服务
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:WMS.Web.Domain.Services.InStockTaskService.SsynPurchaseInStock(System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
同步:采购入库类型单据
|
||||||
|
</summary>
|
||||||
|
<param name="isTransaction"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:WMS.Web.Domain.Services.OutStockService">
|
<member name="T:WMS.Web.Domain.Services.OutStockService">
|
||||||
<summary>
|
<summary>
|
||||||
出库服务
|
出库服务
|
||||||
|
|||||||
21
src/WMS.Web.Domain/IService/IInStockTaskService.cs
Normal file
21
src/WMS.Web.Domain/IService/IInStockTaskService.cs
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using WMS.Web.Core.Internal.Results;
|
||||||
|
|
||||||
|
namespace WMS.Web.Domain.IService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 入库任务单-服务接口
|
||||||
|
/// </summary>
|
||||||
|
public interface IInStockTaskService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 同步:采购入库类型单据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="isTransaction"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<Result> SsynPurchaseInStock(bool isTransaction);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Quartz;
|
using Quartz;
|
||||||
@@ -7,6 +8,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using WMS.Web.Domain.Infrastructure;
|
using WMS.Web.Domain.Infrastructure;
|
||||||
|
using WMS.Web.Domain.IService;
|
||||||
using WMS.Web.Domain.IService.Public;
|
using WMS.Web.Domain.IService.Public;
|
||||||
using WMS.Web.Domain.Options;
|
using WMS.Web.Domain.Options;
|
||||||
|
|
||||||
@@ -20,20 +22,20 @@ namespace WMS.Web.Domain.QuartzJob
|
|||||||
private readonly ILogger<InStockOrderQuartzJob> _logger;
|
private readonly ILogger<InStockOrderQuartzJob> _logger;
|
||||||
private readonly IServiceScopeFactory _serviceScopeFactory;
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
||||||
private readonly AppOptions _options;
|
private readonly AppOptions _options;
|
||||||
private readonly IInStockTaskRepositories _inStockTaskRepositories;
|
private readonly IInStockTaskService _inStockTaskService;
|
||||||
private readonly IErpService _erpService;
|
private readonly ITransactionRepositories _transactionRepositories;
|
||||||
|
|
||||||
public InStockOrderQuartzJob(ILogger<InStockOrderQuartzJob> logger,
|
public InStockOrderQuartzJob(ILogger<InStockOrderQuartzJob> logger,
|
||||||
IServiceScopeFactory serviceScopeFactory,
|
IServiceScopeFactory serviceScopeFactory,
|
||||||
IOptions<AppOptions> options,
|
IOptions<AppOptions> options,
|
||||||
IInStockTaskRepositories inStockTaskRepositories,
|
IInStockTaskService inStockTaskService,
|
||||||
IErpService erpService)
|
ITransactionRepositories transactionRepositories)
|
||||||
{
|
{
|
||||||
this._erpService = erpService;
|
|
||||||
this._logger = logger;
|
this._logger = logger;
|
||||||
_serviceScopeFactory = serviceScopeFactory;
|
_serviceScopeFactory = serviceScopeFactory;
|
||||||
this._options = options?.Value;
|
this._options = options?.Value;
|
||||||
_inStockTaskRepositories = inStockTaskRepositories;
|
_inStockTaskService = inStockTaskService;
|
||||||
|
_transactionRepositories = transactionRepositories;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -45,27 +47,28 @@ namespace WMS.Web.Domain.QuartzJob
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
//1.事务
|
||||||
|
IDbContextTransaction _transaction = _transactionRepositories.GetTransaction();
|
||||||
|
bool isRollback = false;
|
||||||
|
bool isTransaction = false;
|
||||||
|
//2.记录:开始时间
|
||||||
var begindatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
var begindatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||||
|
_logger.LogInformation($"同步金蝶入库单数据:执行开始时间->{begindatetime}");
|
||||||
|
//3.同步数据
|
||||||
|
var result = await _inStockTaskService.SsynPurchaseInStock(isTransaction);
|
||||||
|
if (!result.IsSuccess) isRollback = true;
|
||||||
|
|
||||||
|
//4.提交事务
|
||||||
var purchaseInStockOrder = await _erpService.BillQueryForPurchaseInStock();
|
var isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
|
||||||
|
|
||||||
|
//5.记录:结束时间
|
||||||
|
|
||||||
var enddatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
var enddatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||||
//_logger.LogInformation($"《获取金蝶数据》->执行开始时间:{begindatetime},\r\n" +
|
_logger.LogInformation($"同步金蝶入库单数据:执行结束时间->{begindatetime}");
|
||||||
//$"执行条数:{result.Data?.ExecuteCount}条,\r\n" +
|
|
||||||
//$"新增数:{result.Data?.ExecuteCreateCount}条,\r\n" +
|
|
||||||
//$"更新数:{result.Data?.ExecuteUpdateCount}条,\r\n" +
|
|
||||||
//$"执行结果:{result.Data?.Message},\r\n" +
|
|
||||||
//$"执行结束时间:{enddatetime}");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"首页库存金额统计:定时任务执行失败->{ex.Message}");
|
_logger.LogInformation($"同步金蝶入库单数据:定时任务执行失败->{ex.Message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
107
src/WMS.Web.Domain/Services/InStockTaskService.cs
Normal file
107
src/WMS.Web.Domain/Services/InStockTaskService.cs
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using WMS.Web.Core.Dto.Erp.Purchase;
|
||||||
|
using WMS.Web.Core.Internal.Results;
|
||||||
|
using WMS.Web.Domain.Entitys;
|
||||||
|
using WMS.Web.Domain.Infrastructure;
|
||||||
|
using WMS.Web.Domain.IService;
|
||||||
|
using WMS.Web.Domain.IService.Public;
|
||||||
|
using WMS.Web.Domain.Values;
|
||||||
|
|
||||||
|
namespace WMS.Web.Domain.Services
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 入库任务单-服务
|
||||||
|
/// </summary>
|
||||||
|
public class InStockTaskService: IInStockTaskService
|
||||||
|
{
|
||||||
|
private readonly IMapper _mapper;
|
||||||
|
private readonly IErpService _erpService;
|
||||||
|
private readonly ILoginService _loginService;
|
||||||
|
private readonly ITransactionRepositories _transactionRepositories;
|
||||||
|
private readonly IInStockRepositories _inStockRepositories;
|
||||||
|
private readonly IInStockTaskRepositories _inStockTaskRepositories;
|
||||||
|
public InStockTaskService(IMapper mapper, IErpService erpService, ILoginService loginService,
|
||||||
|
ITransactionRepositories transactionRepositories,
|
||||||
|
IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories)
|
||||||
|
{
|
||||||
|
_mapper = mapper;
|
||||||
|
_erpService = erpService;
|
||||||
|
_loginService = loginService;
|
||||||
|
_transactionRepositories = transactionRepositories;
|
||||||
|
_inStockRepositories = inStockRepositories;
|
||||||
|
_inStockTaskRepositories = inStockTaskRepositories;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步:采购入库类型单据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="isTransaction"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<Result> SsynPurchaseInStock(bool isTransaction)
|
||||||
|
{
|
||||||
|
//1.获取金蝶数据:采购订单数据
|
||||||
|
var erp_result= await _erpService.BillQueryForPurchaseInStock();
|
||||||
|
if (!erp_result.IsSuccess)
|
||||||
|
return Result.ReFailure(erp_result.Message,erp_result.Status);
|
||||||
|
var erp_list = erp_result.Data;
|
||||||
|
|
||||||
|
//2.通过单据编号找到wms系统现有的任务单;并修改
|
||||||
|
var erp_removeList = new List<ErpPurchaseInStockResultDto>();
|
||||||
|
var SourceBillNo_list = erp_list.GroupBy(x => x.FBillNo).Select(x => x.Key).ToList();
|
||||||
|
var data_list = await _inStockTaskRepositories.GetListBy(SourceBillNo_list);
|
||||||
|
if (data_list.Count != 0)
|
||||||
|
{
|
||||||
|
//2.1提取出wms任务单明细信息
|
||||||
|
var data_list_details = data_list.SelectMany(x => x.Details).ToList();
|
||||||
|
foreach (var item in data_list_details)
|
||||||
|
{
|
||||||
|
//2.1.1对比erp的物料信息
|
||||||
|
var erp_data = erp_list.Where(x => x.FMaterialId == item.MaterialId).FirstOrDefault();
|
||||||
|
if (erp_data != null)
|
||||||
|
{
|
||||||
|
//2.1.2修改数量
|
||||||
|
item.AccruedQty = erp_data.FQty;
|
||||||
|
erp_removeList.Add(erp_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//2.2.提交修改
|
||||||
|
var isSuccess = await _inStockTaskRepositories.UpdateRange(data_list, isTransaction);
|
||||||
|
if (!isSuccess)
|
||||||
|
return ResultList<ErpPurchaseInStockResultDto>.ReFailure(ResultCodes.DateWriteError);
|
||||||
|
|
||||||
|
//2.3剔除:已修改的单据
|
||||||
|
foreach (var item in erp_removeList)
|
||||||
|
{
|
||||||
|
erp_list.Remove(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//3.wms任务单的来源单据编号不存在于erp中,那么就新增
|
||||||
|
if (SourceBillNo_list.Count != 0)
|
||||||
|
{
|
||||||
|
var add_entitys = new List<InStockTask>();
|
||||||
|
foreach (var sourceBillNo in SourceBillNo_list)
|
||||||
|
{
|
||||||
|
var dto = new InStockTask();
|
||||||
|
dto.SourceBillNo = sourceBillNo;
|
||||||
|
dto.Create(InstockType.Purchase);
|
||||||
|
dto.Details = _mapper.Map<List<InStockTaskDetails>>(erp_list);
|
||||||
|
add_entitys.Add(dto);
|
||||||
|
}
|
||||||
|
//3.1提交新增
|
||||||
|
var isSuccess = await _inStockTaskRepositories.AddRange(add_entitys, isTransaction);
|
||||||
|
if (!isSuccess)
|
||||||
|
return ResultList<ErpPurchaseInStockResultDto>.ReFailure(ResultCodes.DateWriteError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.ReSuccess();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using ERP;
|
using ERP;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
@@ -34,18 +35,21 @@ namespace WMS.Web.Domain.Services.Public
|
|||||||
private ERPGWSoapClient _client;
|
private ERPGWSoapClient _client;
|
||||||
private readonly IMemoryCache _memoryCache;
|
private readonly IMemoryCache _memoryCache;
|
||||||
private readonly IInStockTaskRepositories _inStockTaskRepositories;
|
private readonly IInStockTaskRepositories _inStockTaskRepositories;
|
||||||
|
public readonly ITransactionRepositories _transactionRepositories;
|
||||||
public ErpService(
|
public ErpService(
|
||||||
IMapper mapper,
|
IMapper mapper,
|
||||||
IOptions<ErpOptions> erpOptions,
|
IOptions<ErpOptions> erpOptions,
|
||||||
ILogger<ErpService> logger,
|
ILogger<ErpService> logger,
|
||||||
IMemoryCache memoryCache,
|
IMemoryCache memoryCache,
|
||||||
IInStockTaskRepositories inStockTaskRepositories)
|
IInStockTaskRepositories inStockTaskRepositories,
|
||||||
|
ITransactionRepositories transactionRepositories)
|
||||||
{
|
{
|
||||||
this._erpOptions = erpOptions?.Value;
|
this._erpOptions = erpOptions?.Value;
|
||||||
this._mapper = mapper;
|
this._mapper = mapper;
|
||||||
this._logger = logger;
|
this._logger = logger;
|
||||||
this._memoryCache = memoryCache;
|
this._memoryCache = memoryCache;
|
||||||
this._inStockTaskRepositories = inStockTaskRepositories;
|
this._inStockTaskRepositories = inStockTaskRepositories;
|
||||||
|
this._transactionRepositories = transactionRepositories;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -100,7 +104,7 @@ namespace WMS.Web.Domain.Services.Public
|
|||||||
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
|
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
|
||||||
|
|
||||||
//5.返回数据的组装
|
//5.返回数据的组装
|
||||||
var list = new List<ErpPurchaseInStockResultDto>();
|
var erp_list = new List<ErpPurchaseInStockResultDto>();
|
||||||
foreach (var item in result)
|
foreach (var item in result)
|
||||||
{
|
{
|
||||||
var lis = new ErpPurchaseInStockResultDto();
|
var lis = new ErpPurchaseInStockResultDto();
|
||||||
@@ -115,33 +119,13 @@ namespace WMS.Web.Domain.Services.Public
|
|||||||
lis.FEntryNote = item[8];
|
lis.FEntryNote = item[8];
|
||||||
lis.FCreateDate =Convert.ToDateTime(item[9]);
|
lis.FCreateDate =Convert.ToDateTime(item[9]);
|
||||||
//list.FCHUCHANGPRICE=[10]FCHUCHANGPRICE;//这个是出厂价,但是金蝶测试没有这个字段,正式有的
|
//list.FCHUCHANGPRICE=[10]FCHUCHANGPRICE;//这个是出厂价,但是金蝶测试没有这个字段,正式有的
|
||||||
list.Add(lis);
|
erp_list.Add(lis);
|
||||||
}
|
}
|
||||||
|
return ResultList<ErpPurchaseInStockResultDto>.ReSuccess(erp_list);
|
||||||
//6.
|
|
||||||
var SourceBillNo_list = list.GroupBy(x=>x.FBillNo).Select(x => x.Key).ToList();
|
|
||||||
var data_list= await _inStockTaskRepositories.GetListBy(SourceBillNo_list);
|
|
||||||
if (data_list.Count != 0)
|
|
||||||
{
|
|
||||||
var data_details_list= data_list.SelectMany(x => x.Details).ToList();
|
|
||||||
foreach (var item in data_details_list)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var dto = new InStockTask();
|
|
||||||
dto.Create(InstockType.Purchase);
|
|
||||||
dto.Details = _mapper.Map<List<InStockTaskDetails>>(list);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ResultList<ErpPurchaseInStockResultDto>.ReSuccess(list);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
return ResultList<ErpPurchaseInStockResultDto>.ReFailure("错误", 10001);
|
return ResultList<ErpPurchaseInStockResultDto>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ namespace WMS.Web.Domain.Values
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class ResultCodes
|
public partial class ResultCodes
|
||||||
{
|
{
|
||||||
public static ValueTuple<int, string> Erp_Login_Error = (1001, "Erp登录返回错误");
|
public static ValueTuple<int, string> Erp_Login_Error = (1001, "同步金蝶登录错误,请稍候再试");
|
||||||
|
|
||||||
public static ValueTuple<int, string> Erp_BillQuery_Error = (1002, "Erp单据查询返回错误");
|
public static ValueTuple<int, string> Erp_BillQuery_Error = (1002, "同步金蝶数据出错,请稍等再试");
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 无效
|
/// 无效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ namespace WMS.Web.Repositories.DependencyInjection
|
|||||||
Services.AddTransient<ITakeStockService, TakeStockService>();
|
Services.AddTransient<ITakeStockService, TakeStockService>();
|
||||||
Services.AddTransient<IOutStockService, OutStockService>();
|
Services.AddTransient<IOutStockService, OutStockService>();
|
||||||
Services.AddTransient<IInStockService, InStockService>();
|
Services.AddTransient<IInStockService, InStockService>();
|
||||||
|
Services.AddTransient<IInStockTaskService, InStockTaskService>();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user