diff --git a/NewLife.Cube/Areas/Cube/Controllers/CronJobController.cs b/NewLife.Cube/Areas/Cube/Controllers/CronJobController.cs
index 2e0c3a67..ee2c453f 100644
--- a/NewLife.Cube/Areas/Cube/Controllers/CronJobController.cs
+++ b/NewLife.Cube/Areas/Cube/Controllers/CronJobController.cs
@@ -50,11 +50,18 @@ protected override Boolean Valid(CronJob entity, DataObjectMethodType type, Bool
{
if (post)
{
- var cron = new Cron();
- if (!cron.Parse(entity.Cron)) throw new ArgumentException("Cron表达式有误!", nameof(entity.Cron));
+ var next = DateTime.MinValue;
+ foreach (var item in entity.Cron.Split(";"))
+ {
+ var cron = new Cron();
+ if (!cron.Parse(item)) throw new ArgumentException("Cron表达式有误!", nameof(entity.Cron));
+
+ var dt = cron.GetNext(DateTime.Now);
+ if (next == DateTime.MinValue || dt < next) next = dt;
+ }
// 重算下一次的时间
- if (entity is IEntity e && !e.Dirtys[nameof(entity.Name)]) entity.NextTime = cron.GetNext(DateTime.Now);
+ if (entity is IEntity e && !e.Dirtys[nameof(entity.Name)]) entity.NextTime = next;
JobService.Wake();
}
diff --git a/NewLife.CubeNC/Areas/Cube/Controllers/CronJobController.cs b/NewLife.CubeNC/Areas/Cube/Controllers/CronJobController.cs
index 34a81560..f03775e0 100644
--- a/NewLife.CubeNC/Areas/Cube/Controllers/CronJobController.cs
+++ b/NewLife.CubeNC/Areas/Cube/Controllers/CronJobController.cs
@@ -1,5 +1,6 @@
using System.Collections;
using System.ComponentModel;
+using System.Linq.Expressions;
using System.Reflection;
using Microsoft.AspNetCore.Mvc;
using NewLife.Cube.Entity;
@@ -64,11 +65,18 @@ protected override Boolean Valid(CronJob entity, DataObjectMethodType type, Bool
{
if (post)
{
- var cron = new Cron();
- if (!cron.Parse(entity.Cron)) throw new ArgumentException("Cron表达式有误!", nameof(entity.Cron));
+ var next = DateTime.MinValue;
+ foreach (var item in entity.Cron.Split(";"))
+ {
+ var cron = new Cron();
+ if (!cron.Parse(item)) throw new ArgumentException("Cron表达式有误!", nameof(entity.Cron));
+
+ var dt = cron.GetNext(DateTime.Now);
+ if (next == DateTime.MinValue || dt < next) next = dt;
+ }
// 重算下一次的时间
- if (entity is IEntity e && !e.Dirtys[nameof(entity.Name)]) entity.NextTime = cron.GetNext(DateTime.Now);
+ if (entity is IEntity e && !e.Dirtys[nameof(entity.Name)]) entity.NextTime = next;
JobService.Wake();
}
diff --git a/NewLife.CubeNC/Common/EntityController.cs b/NewLife.CubeNC/Common/EntityController.cs
index 5e7f535a..23e5f92f 100644
--- a/NewLife.CubeNC/Common/EntityController.cs
+++ b/NewLife.CubeNC/Common/EntityController.cs
@@ -720,18 +720,21 @@ public virtual ActionResult DeleteAll()
///
protected virtual Int32 OnUpdate(TEntity entity)
{
- // 遍历表单字段,部分字段可能有扩展
- foreach (var item in EditFormFields)
+ if (Request.HasFormContentType)
{
- if (item is FormField ef && ef.GetExpand != null)
+ // 遍历表单字段,部分字段可能有扩展
+ foreach (var item in EditFormFields)
{
- // 获取参数对象,展开参数,从表单字段接收参数
- var p = ef.GetExpand(entity);
- if (p != null && p is not String && !(entity as IEntity).Dirtys[ef.Name])
+ if (item is FormField ef && ef.GetExpand != null)
{
- // 保存参数对象
- if (FieldCollection.ReadForm(p, Request.Form, ef.Name + "_"))
- entity.SetItem(ef.Name, p.ToJson(true));
+ // 获取参数对象,展开参数,从表单字段接收参数
+ var p = ef.GetExpand(entity);
+ if (p != null && p is not String && !(entity as IEntity).Dirtys[ef.Name])
+ {
+ // 保存参数对象
+ if (FieldCollection.ReadForm(p, Request.Form, ef.Name + "_"))
+ entity.SetItem(ef.Name, p.ToJson(true));
+ }
}
}
}
diff --git a/NewLife.CubeNC/Services/JobService.cs b/NewLife.CubeNC/Services/JobService.cs
index 74234973..8b2f750f 100644
--- a/NewLife.CubeNC/Services/JobService.cs
+++ b/NewLife.CubeNC/Services/JobService.cs
@@ -208,8 +208,11 @@ public void Start()
var id = $"{expession}@{cmd}@{job.Argument}";
if (id == _id && _timer != null) return;
- var cron = new Cron();
- if (!cron.Parse(expession)) throw new InvalidOperationException($"无效表达式 {expession}");
+ foreach (var item in expession.Split(";"))
+ {
+ var cron = new Cron();
+ if (!cron.Parse(item)) throw new InvalidOperationException($"无效表达式 {item}");
+ }
// 找到类和方法
_type = cmd.GetTypeEx();
@@ -339,7 +342,17 @@ private async void DoJobWork(Object state)
job.WriteLog(job.Name, success, message);
- job.NextTime = _timer.Cron.GetNext(_timer.NextTime);
+ //job.NextTime = _timer.Cron.GetNext(_timer.NextTime);
+ // 本次任务未完成,timer.NextTime不变
+ //job.NextTime = _timer.NextTime;
+ var next = DateTime.MinValue;
+ foreach (var cron in _timer.Crons)
+ {
+ var dt = cron.GetNext(_timer.NextTime);
+ if (next == DateTime.MinValue || dt < next) next = dt;
+ }
+ job.NextTime = next;
+
job.Update();
}
}
\ No newline at end of file
diff --git a/NewLife.CubeNC/ViewModels/FormField.cs b/NewLife.CubeNC/ViewModels/FormField.cs
index 66ed9e5e..df36b74f 100644
--- a/NewLife.CubeNC/ViewModels/FormField.cs
+++ b/NewLife.CubeNC/ViewModels/FormField.cs
@@ -1,6 +1,6 @@
namespace NewLife.Cube.ViewModels;
-///
+/// 获取扩展字段委托
///
///
public delegate Object GetExpandDelegate(Object entity);