Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2023-11-02 17:34:05 +08:00
32 changed files with 226 additions and 154 deletions

View File

@@ -59,6 +59,7 @@ namespace Tnb.WarehouseMgr
private IEventPublisher _eventPublisher;
protected IEventPublisher EventPublisher
{
set { _eventPublisher = value; }
@@ -107,6 +108,23 @@ namespace Tnb.WarehouseMgr
return Task.FromResult(curUser);
}
protected Task SetUserEntity(IUserManager userManager, ClaimsPrincipal principal)
=> Task.Run(() =>
{
FieldInfo fieldInfo = userManager.GetType().GetField("_user", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfo != null)
{
fieldInfo.SetValue(userManager, principal);
}
});
protected Task InvokeGenPretaskExcute()
{
var wareHouseSvc =App.GetRequiredService<IWareHouseService>();
return wareHouseSvc.GenTaskExecute();
}
/// <summary>
/// 判断最终目标库位是否可以放置当前载具
/// </summary>
@@ -368,7 +386,7 @@ namespace Tnb.WarehouseMgr
/// </summary>
/// <returns></returns>
[NonAction]
protected Task<Result> ToApiResult(HttpStatusCode statusCode, object data)
protected Task<Result> ToApiResult(HttpStatusCode statusCode, object data)
{
Result result = new()
{

View File

@@ -1,7 +1,12 @@
using JNPF.Common.Configuration;
using System.Reflection;
using System.Security.Claims;
using JNPF.Common.Configuration;
using JNPF.Common.Core.Manager;
using JNPF.DataEncryption;
using JNPF.DependencyInjection;
using JNPF.EventBus;
using JNPF.TaskScheduler.Entitys;
using NetTaste;
using SqlSugar;
using Tnb.Common.Core.EventBus.Constants;
using Tnb.Common.Core.EventBus.Sources;
@@ -19,12 +24,14 @@ public class TaskStatusChangeSubscriber : IEventSubscriber, ISingleton
/// </summary>
//private static SqlSugarScope? _sqlSugarClient;
private readonly IWareHouseService _wareHouseService;
private readonly IWmskittingOutService _wmskittingOutService;
/// <summary>
/// 构造函数.
/// </summary>
public TaskStatusChangeSubscriber(IWareHouseService wareHouseService)
public TaskStatusChangeSubscriber(IWareHouseService wareHouseService, IWmskittingOutService wmskittingOutService)
{
_wareHouseService = wareHouseService;
_wmskittingOutService = wmskittingOutService;
}
/// <summary>
@@ -35,13 +42,33 @@ public class TaskStatusChangeSubscriber : IEventSubscriber, ISingleton
[EventSubscribe(EventSubscribeEventConsts.TASKSTATUSCHANGE_EVENTID)]
public async Task Excute(EventHandlerExecutingContext context)
{
/*var claims = JWTEncryption.ReadJwtToken(UserManager.AsscessToken)?.Claims;
ClaimsIdentity toKen = new ClaimsIdentity();
foreach (Claim item in claims)
{
toKen.AddClaim(item);
}
var principal = new ClaimsPrincipal(toKen);
FieldInfo fieldInfo = _userManager.GetType().GetField("_user", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfo != null)
{
fieldInfo.SetValue(_userManager, principal);
}*/
var tscSource = (TaskStatusChangeSource)context.Source;
switch (tscSource.Payload)
{
case nameof(_wareHouseService.GenTaskExecute):
await _wareHouseService.GenTaskExecute();
break;
case nameof(_wmskittingOutService.KittingOutByAdd):
await _wmskittingOutService.KittingOutByAdd();
break;
case nameof(_wmskittingOutService.KittingOutByIsToBeShipped):
await _wmskittingOutService.KittingOutByIsToBeShipped();
break;
}
}
}
}

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.Extensions.DependencyInjection;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
public class WareHouseBasedControllerActivator : IControllerActivator
{
public object Create(ControllerContext context)
{
if(context == null) { throw new ArgumentNullException("context"); }
var controllerType = context.ActionDescriptor.ControllerTypeInfo.AsType();
//获取Controller实例
var controller =context.HttpContext.RequestServices.GetRequiredService(controllerType);
//判断是否继承了自定义Controller基类
//if(controller is BaseWareHouseService basedWhSvc)
//{
// basedWhSvc.WareHouseSrv = context.HttpContext.RequestServices.GetRequiredService<IWareHouseService>();
//}
return controller;
}
public void Release(ControllerContext context, object controller)
{
}
}
}

View File

@@ -47,17 +47,7 @@ namespace Tnb.WarehouseMgr
private IEventPublisher _eventPublisher = default!;
private ElevatorControlConfiguration _elevatorControlConfiguration = App.Configuration.Build<ElevatorControlConfiguration>();
private readonly IServiceProvider _serviceProvider;
private static Dictionary<string, Func<CancellationToken?, Task>> _timedFuncMap = new(StringComparer.OrdinalIgnoreCase);
static TimedTaskBackgroundService()
{
//Task.Run(() =>
//{
// _timedFuncMap = App.EffectiveTypes.AsParallel().Where(t => !t.Namespace.IsNullOrWhiteSpace() && t.Namespace.Equals("Tnb.WarehouseMgr", StringComparison.OrdinalIgnoreCase)).SelectMany(t => t.GetMethods())
// .Where(m => m.GetCustomAttribute<TimedAttribute>() != null)
// .ToDictionary(x => x.Name, x =>
// (Func<CancellationToken?, Task>)Delegate.CreateDelegate(typeof(Func<CancellationToken?, Task>), App.GetService(x.DeclaringType), x));
//});
}
//private static Dictionary<string, Func<CancellationToken?, Task>> _timedFuncMap = new(StringComparer.OrdinalIgnoreCase);
public TimedTaskBackgroundService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
@@ -66,30 +56,11 @@ namespace Tnb.WarehouseMgr
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
IsStarted = true;
//var queueTask = Task.Run(async () =>
// {
// var channelReader = _serviceProvider.GetRequiredService<ITaskMessageNotify>().Reader;
// CancellationTokenSource? cts = new();
// while (channelReader != null && await channelReader.WaitToReadAsync())
// {
// while (channelReader.TryRead(out var message))
// {
// if (_timedFuncMap.ContainsKey(message.TaskName))
// {
// await _timedFuncMap[message.TaskName].Invoke(stoppingToken);
// }
// }
// }
// }, stoppingToken);
var timedTask = Task.Run(() =>
{
_eventPublisher = App.GetRequiredService<IEventPublisher>();
var whSvc = App.GetRequiredService<IWareHouseService>();
TimedTask(token => whSvc.GenTaskExecute(), stoppingToken, 1);
//电梯Agv心跳检测
TimedTask(async token =>
{
@@ -130,6 +101,7 @@ namespace Tnb.WarehouseMgr
{
await action(ct).Catch(async ex =>
{
if (ex is TimedTaskException timedTaskEx and not null)
{
await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity

View File

@@ -63,7 +63,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = CarryMoveIn;
}
@@ -178,7 +178,7 @@ namespace Tnb.WarehouseMgr
finally
{
//向队列写入消息
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -56,7 +56,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = CarryMoveOut;
}
@@ -164,7 +164,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -54,7 +54,7 @@ namespace Tnb.WarehouseMgr
_runService = runService;
_billRullService = billRullService;
_userManager = userManager;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = Create;
}
@@ -224,7 +224,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(row);
}

View File

@@ -67,7 +67,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = Create;
}
/// <summary>
@@ -204,7 +204,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return await Task.FromResult(true);
}

View File

@@ -64,7 +64,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = WmsEmptyIn;
}
private async Task<dynamic> WmsEmptyIn(VisualDevModelDataCrInput input)
@@ -189,7 +189,7 @@ namespace Tnb.WarehouseMgr
finally
{
//向队列写入消息
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -62,7 +62,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = WmsEmptyOut;
}
@@ -220,7 +220,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -65,7 +65,7 @@ namespace Tnb.WarehouseMgr
_billRullService = billRullService;
_wareHouseService = wareHouseService;
_prdInstockService = prdInstockService;
EventPublisher = eventPublisher;
}
/// <summary>
/// 根据入库申请单ID获取申请单明细信息
@@ -482,7 +482,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return isSuccessFul;
}

View File

@@ -59,7 +59,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = KittingInStk;
}
@@ -220,7 +220,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}
@@ -248,11 +248,8 @@ namespace Tnb.WarehouseMgr
kittingOut.carry_id = kittingIn.carry_id;
kittingOut.carry_code = kittingIn.carry_code;
await _db.Updateable(kittingOut).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync();
//if (kittingOut.status == WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID)
//{
// await Publish(nameof(IWmskittingOutService.KittingOutByIsToBeShipped));
//}
await Publish(nameof(IWmskittingOutService.KittingOutByIsToBeShipped));
}
}
if (row < 1) throw Oops.Oh(ErrorCode.COM1001);

View File

@@ -59,7 +59,7 @@ namespace Tnb.WarehouseMgr
_userManager = userManager;
_billRullService = billRullService;
_wmsCarryService = wmsCarryService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = CarryOutBale;
}
@@ -166,7 +166,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -79,7 +79,7 @@ namespace Tnb.WarehouseMgr
_billRullService = billRullService;
_wmsCarryMoveInStockService = wmsCarryMoveInStockService;
_wareCarryService = wareCarryService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = OutStockApplyFor;
}
@@ -374,7 +374,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}
@@ -767,7 +767,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return isSuccessful;
}

View File

@@ -60,7 +60,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = PDACarryMoveIn;
}
@@ -163,7 +163,7 @@ namespace Tnb.WarehouseMgr
//}
//finally
//{
// await Publish(nameof(IWareHouseService.GenTaskExecute));
// await InvokeGenPretaskExcute();
//}
//return Task.FromResult(true);
#endregion
@@ -276,7 +276,7 @@ namespace Tnb.WarehouseMgr
finally
{
//向队列写入消息
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);

View File

@@ -57,7 +57,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = PDACarryMoveOut;
}
@@ -161,7 +161,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -62,7 +62,7 @@ namespace Tnb.WarehouseMgr
_billRullService = billRullService;
_wareHouseService = wareHouseService;
_userManager = userManager;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = Create;
}
/// <summary>
@@ -193,7 +193,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return await Task.FromResult(true);
}

View File

@@ -57,7 +57,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = PDAWmsEmptyIn;
}
@@ -170,7 +170,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -59,7 +59,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = PDAWmsEmptyOut;
}
@@ -212,7 +212,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -65,7 +65,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = ScanCodeInStock;
}
@@ -282,7 +282,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -60,7 +60,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = Inbale;
}
@@ -174,7 +174,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -58,7 +58,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher= eventPublisher;
OverideFuncs.CreateAsync = PDAOutBale;
}
@@ -162,7 +162,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -56,7 +56,7 @@ namespace Tnb.WarehouseMgr
_billRullService = billRullService;
_wareHouseService = wareHouseService;
_prdInstockService = prdInstockService;
EventPublisher = eventPublisher;
OverideFuncs.CreateAsync = ScanInStock;
}
public async Task<dynamic> ScanInStock(VisualDevModelDataCrInput input)

View File

@@ -61,7 +61,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = publisher;
OverideFuncs.CreateAsync = CarryTransfer;
}
@@ -157,7 +157,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
return Task.FromResult(true);
}

View File

@@ -55,7 +55,7 @@ namespace Tnb.WarehouseMgr
_warehouseService = warehouseService;
_billRullService = billRullService;
_wmsKittingInStkService = wmsKittingInStkService;
EventPublisher = publisher;
}
/// <summary>
/// 机器人完成任务后回调接口
@@ -92,6 +92,11 @@ namespace Tnb.WarehouseMgr
var kittingout = await _db.Queryable<WmsKittingoutH>().FirstAsync(it => it.collocation_scheme_id == carry.collocation_scheme_id && it.status == WmsWareHouseConst.BILLSTATUS_CALLED_ID);
if (kittingout != null)
{
await Publish(nameof(IWmskittingOutService.KittingOutByAdd));
await Publish(nameof(IWmskittingOutService.KittingOutByIsToBeShipped));
visualDevModelCrInput.data = new Dictionary<string, object>();
visualDevModelCrInput.data[nameof(InStockStrategyQuery.warehouse_id)] = kittingout.warehouse_id;
visualDevModelCrInput.data[nameof(WmsKittingInstock.carry_id)] = input.carry_id;
@@ -147,7 +152,8 @@ namespace Tnb.WarehouseMgr
genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList();
genPreTaskAfterUpInput.LocationIds = new List<string> { carry.location_id! };
await _warehouseService.GenInStockTaskHandleAfter(genPreTaskAfterUpInput, it => new WmsCarryH { is_lock = 1 }, it => new BasLocation { is_lock = 1 });
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
}
else

View File

@@ -70,7 +70,7 @@ namespace Tnb.WarehouseMgr
_cacheManager = cacheManager;
_runService = runService;
_visualDevService = visualDevService;
EventPublisher = publisher;
//OverideFuncs.CreateAsync = Create;
}
@@ -99,10 +99,11 @@ namespace Tnb.WarehouseMgr
[HttpPost, Timed(Name = nameof(PackSortingByAdd))]
public async Task PackSortingByAdd(CancellationToken? ct = default)
{
//if (UserManager.AsscessToken.IsNullOrWhiteSpace()) return;
//var curUser = await GetUserIdentity();
//Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId}\t Thread pool: {Thread.CurrentThread.IsThreadPoolThread}");
if (_userManager.User.IsNull())
{
var curUser = await GetUserIdentity();
await SetUserEntity(_userManager, curUser);
}
var curDb = _db.CopyNew();
@@ -284,7 +285,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
//await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();
}
}

View File

@@ -61,7 +61,7 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
EventPublisher = publisher;
OverideFuncs.CreateAsync = CarryTransfer;
}
@@ -161,7 +161,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
await Publish(nameof(IWareHouseService.GenTaskExecute));
await InvokeGenPretaskExcute();;
}
return Task.FromResult(true);
}

View File

@@ -72,13 +72,13 @@ namespace Tnb.WarehouseMgr
_billRullService = billRullService;
_carryService = carryService;
_cacheManager = cacheManager;
EventPublisher = eventPublisher;
}
/// <summary>
/// 齐套出库(新增状态)
/// </summary>
/// <returns></returns>
[HttpPost, Timed(Name = nameof(KittingOutByAdd))]
[HttpPost]
public async Task KittingOutByAdd(CancellationToken? ct = default)
{
//if (ct?.IsCancellationRequested ?? false)
@@ -121,7 +121,7 @@ namespace Tnb.WarehouseMgr
ko.carry_id = firstCarry?.id;
ko.carry_code = firstCarry?.carry_code;
await _db.Updateable(ko).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync();
//await KittingOutByIsToBeShipped();
_ = KittingOutByIsToBeShipped();
if (firstCarry != null)
{
firstCarry.source_id = ko.source_id;
@@ -188,7 +188,7 @@ namespace Tnb.WarehouseMgr
/// 齐套出库,(待配送状态)
/// </summary>
/// <returns></returns>
[HttpPost, Timed(Name = nameof(KittingOutByIsToBeShipped))]
[HttpPost]
public async Task KittingOutByIsToBeShipped(CancellationToken? ct = default)
{
//if (UserManager.AsscessToken.IsNullOrWhiteSpace()) return;
@@ -296,7 +296,7 @@ namespace Tnb.WarehouseMgr
}
finally
{
//await Publish(nameof(IWareHouseService.GenTaskExecute));
//await InvokeGenPretaskExcute();
}
}

View File

@@ -1,4 +1,5 @@
using IGeekFan.AspNetCore.Knife4jUI;
using System.Reflection;
using IGeekFan.AspNetCore.Knife4jUI;
using JNPF.API.Entry.Handlers;
using JNPF.Common.Cache;
using JNPF.Common.Core;
@@ -62,15 +63,14 @@ public class Startup : AppStartup
.AddSenparcWeixinServices(App.Configuration); // Senparc.Weixin 注册如果使用Senparc.Weixin SDK则添加
services.AddOverideVisualDev();
//注册任务消息通知 added by ly on 20230814
//services.AddTaskMessageNotify();
SnowflakeIdHelper.InitYitIdWorker();
//定时任务
//services.AddHostedService<TimedTaskBackgroundService>();
services.AddHostedService<TimedTaskBackgroundService>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
{
// 添加状态码拦截中间件
@@ -115,7 +115,7 @@ public class Startup : AppStartup
endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
});
//SnowflakeIdHelper.InitYitIdWorker();
SnowflakeIdHelper.InitYitIdWorker();
bool isStartTimeJob = App.GetConfig<bool>("IsStartTimeJob");
if (isStartTimeJob)

View File

@@ -1,29 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="$(SolutionDir)\common.props" />
<Import Project="$(SolutionDir)\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<SatelliteResourceLanguages>none</SatelliteResourceLanguages>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<SatelliteResourceLanguages>none</SatelliteResourceLanguages>
</PropertyGroup>
<ItemGroup>
<Compile Remove="logs\**" />
<Content Remove="logs\**" />
<EmbeddedResource Remove="logs\**" />
<None Remove="logs\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="logs\**" />
<Content Remove="logs\**" />
<EmbeddedResource Remove="logs\**" />
<None Remove="logs\**" />
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\Template\VengineSqlSugar\AppService.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityDto.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityDtoAcmen.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityInfo.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityInfoAcmen.cshtml" />
</ItemGroup>
<!--<ItemGroup>
<ItemGroup>
<None Include="wwwroot\Template\VengineSqlSugar\AppService.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityDto.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityDtoAcmen.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityInfo.cshtml" />
<None Include="wwwroot\Template\VengineSqlSugar\EntityInfoAcmen.cshtml" />
</ItemGroup>
<!--<ItemGroup>
<None Remove="lib\regworkerid_lib_v1.3.1\yitidgengo.dll" />
<None Remove="lib\regworkerid_lib_v1.3.1\yitidgengo.so" />
<None Remove="sensitive-words.txt" />
@@ -35,38 +35,38 @@
<EmbeddedResource Include="sensitive-words.txt" />
</ItemGroup>-->
<ItemGroup>
<PackageReference Include="IGeekFan.AspNetCore.Knife4jUI" Version="0.0.13" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="IGeekFan.AspNetCore.Knife4jUI" Version="0.0.13" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\app\Tnb.Apps\Tnb.Apps.csproj" />
<ProjectReference Include="..\..\BasicData\Tnb.BasicData\Tnb.BasicData.csproj" />
<ProjectReference Include="..\..\EquipMgr\Tnb.EquipMgr\Tnb.EquipMgr.csproj" />
<ProjectReference Include="..\..\message\Tnb.Message\Tnb.Message.csproj" />
<ProjectReference Include="..\..\PerMgr\Tnb.PerMgr\Tnb.PerMgr.csproj" />
<ProjectReference Include="..\..\ProductionMgr\Tnb.ProductionMgr\Tnb.ProductionMgr.csproj" />
<ProjectReference Include="..\..\QcMgr\Tnb.QcMgr\Tnb.QcMgr.csproj" />
<ProjectReference Include="..\..\system\Tnb.OAuth\Tnb.OAuth.csproj" />
<ProjectReference Include="..\..\system\Tnb.Systems\Tnb.Systems.csproj" />
<ProjectReference Include="..\..\taskschedule\Tnb.TaskScheduler\Tnb.TaskScheduler.csproj" />
<ProjectReference Include="..\..\visualdev\Tnb.Vengine\Tnb.Vengine.csproj" />
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev\Tnb.VisualDev.csproj" />
<ProjectReference Include="..\..\WarehouseMgr\Tnb.WarehouseMgr\Tnb.WarehouseMgr.csproj" />
<ProjectReference Include="..\..\workflow\Tnb.WorkFlow\Tnb.WorkFlow.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\app\Tnb.Apps\Tnb.Apps.csproj" />
<ProjectReference Include="..\..\BasicData\Tnb.BasicData\Tnb.BasicData.csproj" />
<ProjectReference Include="..\..\EquipMgr\Tnb.EquipMgr\Tnb.EquipMgr.csproj" />
<ProjectReference Include="..\..\message\Tnb.Message\Tnb.Message.csproj" />
<ProjectReference Include="..\..\PerMgr\Tnb.PerMgr\Tnb.PerMgr.csproj" />
<ProjectReference Include="..\..\ProductionMgr\Tnb.ProductionMgr\Tnb.ProductionMgr.csproj" />
<ProjectReference Include="..\..\QcMgr\Tnb.QcMgr\Tnb.QcMgr.csproj" />
<ProjectReference Include="..\..\system\Tnb.OAuth\Tnb.OAuth.csproj" />
<ProjectReference Include="..\..\system\Tnb.Systems\Tnb.Systems.csproj" />
<ProjectReference Include="..\..\taskschedule\Tnb.TaskScheduler\Tnb.TaskScheduler.csproj" />
<ProjectReference Include="..\..\visualdev\Tnb.Vengine\Tnb.Vengine.csproj" />
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev\Tnb.VisualDev.csproj" />
<ProjectReference Include="..\..\WarehouseMgr\Tnb.WarehouseMgr\Tnb.WarehouseMgr.csproj" />
<ProjectReference Include="..\..\workflow\Tnb.WorkFlow\Tnb.WorkFlow.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\Template\*.vm">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\Template\*.vm">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Update="_install.bat">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None Update="_install.bat">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@@ -25,6 +25,21 @@ namespace Tnb.Common.Extension
return tcs.Task;
}
public static async Task<T> Retry<T>(Func<Task<T>> task, int retries,
TimeSpan delay, CancellationToken cts = default) =>
await task().ContinueWith(async innerTask =>
{
cts.ThrowIfCancellationRequested();
if (innerTask.Status != TaskStatus.Faulted)
return innerTask.Result;
if (retries == 0)
throw innerTask.Exception ?? throw new Exception();
await Task.Delay(delay, cts);
return await Retry(task, retries - 1, delay, cts);
}).Unwrap();
public static async Task Catch(this Task task, Func<Exception,Task> exceptionHandler)
{
try

View File

@@ -24,7 +24,7 @@ namespace Tnb.TaskScheduler.Listener
/// <summary>
/// 生成质检任务
/// </summary>
public class QcTaskTimeWorker : ISpareTimeWorker
public class QcTaskTimeWorker //u: ISpareTimeWorker
{
private ISqlSugarRepository<QcCheckPlanH> repository => App.GetService<ISqlSugarRepository<QcCheckPlanH>>();
private ITimeTaskService timeTaskService => App.GetService<ITimeTaskService>();